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

2.3 Оверлеи (перекрытия)

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

Резидентное ядро

оверлей 1

(загружен)


Оверлей 3

Оверлей 2

Оверлей 4


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

3. Сборка программ

3.1 Понятие сборки модулей

Способ создания загружаемого модуля различен в различных ОС.

В некоторых современных языках программирования программа состоит из слабо связанных модулей. Как правило, каждому такому модулю соответствует отдельный файл исходного текста. Эти файлы независимо обрабатываются языковым процессором (компилятором), и для каждого из них генерируется отдельный файл, называемый объектным модулем. Затем запускается программа, называемаяредактором связей, компоновщиком илилинкером (linker – тот, кто связывает), которая формирует из заданных объектных модулей цельную программу.

Объектный модуль отчасти похож на перемещаемый загрузочный модуль: сборку программы из нескольких модулей можно уподобить загрузке в память нескольких программ. При этом возникает та же задача перенастройки адресных ссылок, что и при загрузке относительного загрузочного файла . Поэтому объектный модуль должен в той или иной форме содержать таблицу перемещений. Кроме ссылок на собственные метки, объектный модуль имеет право ссылаться на символы, определенные в других модулях. Типичный пример такой ссылки – обращение к функции, которая определена в другом файле исходного текста .

Для разрешения внешних ссылок необходимо создать две таблицы: в одной перечислены внешние объекты, на которые ссылается модуль, в другой – объекты, определенные внутри модуля, на которые можно ссылаться извне. Кроме того, в объектных файлах может содержаться отладочная информация, формат которой может быть очень сложным. Следовательно, объявленный файл представляет собой довольно сложную структуру.

Типичный объектный модуль содержит следующие структуры данных.

  • Таблицу перемещений, т. е. таблицу ссылок на перемещаемые объекты внутри модуля.

  • Таблицу ссылок на внешние объекты. Иногда это называется таблицей или списком импорта.

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

  • Отладочную информацию

  • Собственно код и данные модуля