Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К_Глава 4_Загрузка программ.doc
Скачиваний:
32
Добавлен:
19.05.2015
Размер:
131.07 Кб
Скачать

2. Загрузка программ

Рассмотрим процедуру загрузки программы в оперативную память компьютера. Предположим, что программа была заранее собрана в некий единый самодостаточный объект, называемый загрузочным илизагружаемым модулем. В ряде ОС программа собирается в момент загрузки из большого числа отдельных модулей, содержащих ссылки друг на друга. Результат загрузки программы в память называетсяпроцессом или, если нам надо отличать загруженную программу от процесса её исполнения,образом процесса. К образу процесса иногда причисляют не только код и данные процесса (подвергнутые преобразованию, как в процессе загрузки, так и в процессе работы программы), но и системные структуры данных, связанные с этим процессом. В системах с виртуальной памятью каждому процессу обычно выделяется свое адресное пространство. Впрочем, во многих системах значительная часть адресных пространств разных процессов перекрывается – это используется для реализации разделяемого кода и данных.

В рамках одного процесса может исполняться один или несколько потоковилинитей управления.

Некоторые системы предоставляют и более крупные структурные единицы, чем процесс. Например, в системах семейства Unixсуществуют группы процессов, которые используются для реализации логического объединения процессов взадания (job).Ряд систем имеют также понятиесессии - совокупности всех заданий, который пользователь запустил в рамках одного сеанса работы. Впрочем, соответствующие концепции часто плохо определены, а их смысл сильно меняется от одной ОС к другой.

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

Первый, самый простой, вариант загрузки состоит в том, что программ загружается с одного и того же адреса. Это возможно в следующих случаях.

  • Система может предоставить каждому процессу своё адресное пространство. Это возможно только на процессорах, осуществляющих трансляцию виртуального адреса в физический.

  • Система может исполнять в каждый момент времени только один процесс. Загрузочный файл, используемый при таком способе загрузки, называется абсолютным загрузочным модулем.

Начальное содержимое образа процесса формируется путем простого копирования модуля в память.

Разделы памяти. Одним из способов обойти невозможность загружать более одной программы при абсолютной загрузке являютсяразделы памяти. В наше время этот метод практически не применяется, но в машинах второго поколения использовался относительно широко и часто описывается в старой литературе.

Идея метода состоит в том, что мы задаем несколько допустимых стартовых адресов для абсолютной загрузки. Каждый такой адрес определяет раздел памяти (рис. 1). Процесс может размещаться в одном разделе, или, если это необходимо – т. е. если образ процесса слишком велик – в нескольких. Это позволяет загружать несколько процессов одновременно, сохраняя при этом преимущества абсолютной загрузки.

Задача 1

Задача 2 (занимает два раздела)

1 раздел 2 раздел 3 раздел

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

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

Относительный способ загрузки состоит в том, что программа загружается каждый раз с нового адреса. При этом необходимо настроить ее на новые адреса.

Ассемблер при каждой ссылке на символ, соответствующий адресу, генерирует не только “заготовку” адреса в коде, но и запись в таблице перемещений (relocation table). Эта запись хранит место ссылки на такой символ в коде или данных. В качестве “заготовки” адреса обычно используется смещение адресуемого объекта от начала программы. При настройке программы на реальный адрес загрузки нам, таким образом, необходимо пройти по всем объектам, перечисленным в таблице перемещений, и переместить каждую из ссылок – сформировать из заготовки адрес.

Файл, содержащий таблицу перемещений, гораздо сложнее абсолютного загружаемого модуля и носит название относительного или перемещаемого загрузочного модуля. Именно такой формат имеют exe– файлы в системеMSDOS.

Базовая адресация. Объявляем один или несколько регистров процессора базовым (несколько регистров могут использоваться для адресации различных сегментов программы, один – для кода, другой – для статических данных, третий – для стека) и договариваемся, что значения этих регистров программист (компилятор) принимает как данность и никогда сам не модифицирует, зато все адреса в программе он вычисляет на основе значений этих регистров.

В этом случае для перемещения программы нам нужно только изменить значения базовых регистров, и программа даже не узнает, что загружена с другого адреса. Именно так происходит загрузка com– файлов в системеMS–DOS. Система выделяет свободную память, настраивает для программы базовые регистрыDSиCS, которые называются сегментными, и передает управление на стартовый адрес. Ничего больше делать не надо.

Позиционно – независимый код. Третий способ формирования адреса в программе - это относительная адресация, когда адрес получается сложением адресного поля команды и адреса самой этой команды – значения счетчика команд. Код, в котором используется только такая адресация, можно загружать с любого адреса без всякой перенастройки. Такой код называетсяпозиционно – независимый (positionindependent)

Позиционно – независимые программы очень удобны для загрузки, но, к сожалению, при их написании следует соблюдать довольно жесткие ограничения, накладываемые на используемые методы адресации.. Возникают сложности при сборке программы из нескольких модулей. К тому же, на многих процессорах, например, на Intel8080/8085 или многих современныхRISC– процессорах, описанная выше реализация позиционно – независимого кода вообще невозможна, так как эти процессоры не поддерживают соответствующий режим адресации для данных. Поэтому такой стиль программирования используют только в особых случаях. Например, многие вирусы дляMS–DOSи драйверы дляRT– 11 написаны именно таким образом.