Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системное программное обеспечение

.pdf
Скачиваний:
114
Добавлен:
23.02.2016
Размер:
1.26 Mб
Скачать

Лекция 28 Настраивающий и динамический загрузчики.

План

1.Трансляция адресов.

2.Настраивающий загрузчик.

3.Динамические загрузчики.

4.Абсолютная загрузка.

Настраивающий Загрузчик является первым шагом в сторону усложнения от Абсолютного Загрузчика. Функции связывания и перемещения решаются в нем не самым эффективным, но простейшим способом. Проблема связывания в Настраивающем Загрузчике решается при помощи Вектора Переходов. Вектор Переходов включается в состав объектного модуля и содержит список всех внешних имен, к которым есть обращение в модуле с полем адреса для каждого имени. Вектор Переходов заполняется при обработке директив типа EXT (перечисления внешних имен). В команды программы, обращающиеся к внешним именам вставляется обращение к адресному полю соответствующего элемента Вектора Переходов с признаком косвенного обращение. (Косвенное обращение означает, что обращение идет не по адресу, который задан в команде, а по адресу, который записан в ячейке, адрес которой задан в команде.)

При загрузке в оперативную память Вектор Переходов загружается вместе с кодами программы и остается в памяти все время выполнения программы.

Когда Загрузчик компонует программу из нескольких объектных модулей, он "узнает" все фактические адреса входных точек и в Вектора Переходов тех модулей, которые обращаются к данной входной точке вставляет эти адреса. Обращение к внешней точке, таким образом, производится косвенное через Вектор Переходов.

Принятые в Настраивающих Загрузчиках методы позволяют легко реализовать настройку реальных адресов, заданных относительно начала программы. Сущность метода перемещения состоит в том, что с каждым словом кода программы (размер слова обычно равен размеру реального адреса) связывается "бит перемещения". Значение этого бита 0/1 является признаком неперемещаемого/перемещаемого слова. Если слово является неперемещаемым, оно оставляется Загрузчиком без изменений. Если слово является перемещаемым, то к значению в слове прибавляется стартовый адрес модуля в оперативной памяти. Биты перемещения могут упаковываться - например, описание 8 слов в одном байте.

Литература

Основная:

1.Молчанов А.Ю. Системное программное обеспечение. Учебник для вузов.

— СПб.: Питер, 2003. — 396 с.

2.Молчанов А.Ю. Системное программное обеспечение. Лабораторный практикум.- СПб.: Питер, 2005.- 284 с.

3.Юров В.И. Assembler. Учебник для вузов. 2-е издание - СПб.: Питер.- 2004.-

637с.

4.Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование: Основы построения трансляторов + FD.- М.: КОРОНА принт.- 2004.- 255 с.

5.Фельдман Ф.К. Системное программирование на персональном компьютере.- 2004.- 512

6.Ахо А.,Сети Р., Ульман Дж. Компиляторы: принципы, технологии и инструменты: Пер. с англ. — М.: Издательский дом «Вильямс», 2003. — 768 с.

7.Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. —

СПб.: Питер, 2002. — 734 с.

8.Олифер В.Г., Олифер Н.А. Сетевые операционные системы. СПб.: Питер, 2002. — 544

Дополнительная:

1.Малявко А.А. Теория формальных языков: Учеб. пособие: В 3 ч. – Новосибирск: Изд-во НГТУ, 2001. – Ч. 1. – 96 с.

2.Малявко А.А. Теория формальных языков: Учеб. пособие: В 3 ч. – Новосибирск: Изд-во НГТУ, 2002. – Ч. 2. – 96 с.

3.Ф.Льюис, Д. Розенкранц, Р.Стирнз. Теоретические основы проектирования компиляторов. М., Мир, 1979.

4.Л. Бек. Введение в системное программирование. М.,Мир, 1988.

5.В.Е.Котов, В.К.Сабельфельд. Теория схем программ. -М.: Наука, 1978

6.Автоматное управление асинхронными процессами в ЭВМ и дискретных системах /Под ред. В.И.Варшавского. -М.:Наука.

7.Питерсон Дж. Теория сетей Петри и моделирование систем.- М.: Наука. 1984.

8.Минский М. Вычисления и автоматы. - М.: Мир.- 1971.

9.Котов В.Е. Сети Петри. - М.: Наука. - 1984.-

10.Ахо А.,Хопкрофт Дж., Ульман Дж.Построение и анализ вычислительных алгоритмов. - М.: Мир. -1979.

11.Питерсон Дж. Теория сетей Петри и моделирование систем: Пер. с англ. –

М.: Мир, 1984. – 264 с.

Лекция 29 Подключение библиотек.

План

1.Относительная загрузка. Оверлейная загрузка.

2.Сборка программ, компоновщик. Назначение компоновщика.

3.Функции компоновщика. Библиотеки программ.

4.Подключение библиотек.

Относительный способ загрузки состоит в том, что мы загружаем программу каждый раз с нового адреса. При этом мы должны настроить ее на новые адреса, а для этого нам надо вспомнить материал предыдущей главы и понять, что же именно в программе привязано к адресу загрузки. Сложность здесь в том, что если абсолютные адресные поля можно найти анализом кодов команд (деассемблированием), то значение в адресный регистр может загружаться задолго до собственно адресации, причем, как мы видели в примерах кода для процессора SPARC, Формирование значения регистра может происходить и по частям. Без помощи программиста или компилятора (в этой главе мы не будем различать написанный на ассемблере или компилированный код, а того, кто генерировал код, будем называть программистом) решить вопрос о том, какая из команд загружает в регистр скалярное значение, а какая - будущий адрес или часть адреса, невозможно. Та же проблема возникает в случае, если мы используем в качестве указателя ячейку статически инициализованных данных.

Еще более интересный способ загрузки программы – это оверлейная загрузка (over-lay, лежащий сверху) или, как это называли в старой русскоязычной литературе, перекрытие. Смысл оверлея состоит в том, чтобы не загружать программу в память целиком, а разбить ее на несколько модулей и помещать их в память по мере необходимости.

Потребность в таком способе загрузки появляется, если у нас виртуальное адресное пространство мало, например 1 Мбайт или даже всего 64 Кбайт (на некоторых машинах с RT-11 бывало и по 48 Кбайт, и многие полезные программы нормально работали!), а программа относительно велика. На современных 32-разрядных системах виртуальное адресное пространство обычно измеряется гигабайтами, и большинству программ этого хватает, а проблемы с нехваткой можно решать совсем другими способами. Тем не менее, существуют различные системы, даже и 32-разрядные, в которых нет устройства управления памятью, и размер виртуальной памяти не может превышать объема микросхем ОЗУ, установленных на плате. Пример такой системы – упоминавшийся выше транспьютер. Важно подчеркнуть, что, несмотря на определенное сходство между задачами, решаемыми механизмом перекрытий и виртуальной адресацией, одно ни в коем случае не является

разновидностью другого. При виртуальной адресации мы решаем задачу отображения большого адресного пространства на ограниченную оперативную память. При использовании оверлея мы решаем задачу отображения большого количества объектов в ограниченное адресное пространство.

Основная проблема при оверлейной загрузке состоит в следующем: прежде чем ссылаться на оверлейный адрес, мы должны понять, какой из оверлейных модулей в данный момент там находится. Для ссылок на функции это просто: вместо точки входа функции мы вызываем некую процедуру, называемую менеджером перекрытий (overlay manager). Эта процедура знает, какой модуль куда загружен, и при необходимости "подкачивает" то, что загружено не было. Перед каждой ссылкой на оверлейные данные мы должны выполнять аналогичную процедуру, что намного увеличивает и замедляет программу. Иногда такие действия возлагаются на программиста (Win 16, Mac OS до версии 10 – подробнее управление памятью в этих системах описывается в разд. Управление памятью в MacOS и Win 16), иногда – на компилятор

(handle pointer в Zortech C/C++ для MS DOS), но чаще всего с оверлейными данными вообще предпочитают не иметь дела. В таком случае оверлейным является только код. В старых учебниках по программированию и руководствах по операционным системам уделялось много внимания тому, как распределять процедуры между оверлейными модулями. Действительно, загрузка модуля с диска представляет собой довольно длительный процесс, поэтому хотелось бы минимизировать ее. Для этого нужно, чтобы каждый оверлейный модуль был как можно более самодостаточным. Если это невозможно, стараются вынести процедуры, на которые ссылаются из нескольких оверлеев, в отдельный модуль, называемый резидентной частью или резидентным ядром. Это модуль, который всегда находится в памяти и не разделяет свои адреса ни с каким другим оверлеем. Естественно, оверлейный менеджер должен быть частью этого ядра.

Литература

Основная:

1.Молчанов А.Ю. Системное программное обеспечение. Учебник для вузов.

— СПб.: Питер, 2003. — 396 с.

2.Молчанов А.Ю. Системное программное обеспечение. Лабораторный практикум.- СПб.: Питер, 2005.- 284 с.

3.Юров В.И. Assembler. Учебник для вузов. 2-е издание - СПб.: Питер.- 2004.-

637с.

4.Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование: Основы построения трансляторов + FD.- М.: КОРОНА принт.- 2004.- 255 с.

5.Фельдман Ф.К. Системное программирование на персональном компьютере.- 2004.- 512

6.Ахо А.,Сети Р., Ульман Дж. Компиляторы: принципы, технологии и инструменты: Пер. с англ. — М.: Издательский дом «Вильямс», 2003. — 768 с.

7.Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. —

СПб.: Питер, 2002. — 734 с.

8.Олифер В.Г., Олифер Н.А. Сетевые операционные системы. СПб.: Питер, 2002. — 544

Дополнительная:

1.Малявко А.А. Теория формальных языков: Учеб. пособие: В 3 ч. – Новосибирск: Изд-во НГТУ, 2001. – Ч. 1. – 96 с.

2.Малявко А.А. Теория формальных языков: Учеб. пособие: В 3 ч. – Новосибирск: Изд-во НГТУ, 2002. – Ч. 2. – 96 с.

3.Ф.Льюис, Д. Розенкранц, Р.Стирнз. Теоретические основы проектирования компиляторов. М., Мир, 1979.

4.Л. Бек. Введение в системное программирование. М.,Мир, 1988.

5.В.Е.Котов, В.К.Сабельфельд. Теория схем программ. -М.: Наука, 1978

6.Автоматное управление асинхронными процессами в ЭВМ и дискретных системах /Под ред. В.И.Варшавского. -М.:Наука.

7.Питерсон Дж. Теория сетей Петри и моделирование систем.- М.: Наука. 1984.

8.Минский М. Вычисления и автоматы. - М.: Мир.- 1971.

9.Котов В.Е. Сети Петри. - М.: Наука. - 1984.-

10.Ахо А.,Хопкрофт Дж., Ульман Дж.Построение и анализ вычислительных алгоритмов. - М.: Мир. -1979.

11.Питерсон Дж. Теория сетей Петри и моделирование систем: Пер. с англ. –

М.: Мир, 1984. – 264 с.