Читайте также:
|
|
Мы рассмотрели статическую настройку на память программы, до ее выполнения. Кроме такой настройки существует динамическая загрузка других программ во время исполнения программы. К динамической загрузке относится загрузка частей этой же программы в режиме перекрытия (так называемые оверлейные программы), когда память одной части перекрывается другой частью программы. Способы реализации такого механизма специфичны для каждой из ОС. Мы рассмотрим реализацию оверлейных программ в MS DOS.
Части программ, загружаемые в ОП на одно и то же место и запускаемые на выполнение, называются оверлеями. При этом значительно экономится ОП.
Рассмотрим случай, когда различные части программы организованы в разных файлах. Как организовать оверлей из одного файла через объединение COMMON директивы SEGMENT, неизвестно. Задача заключается в помещении перекрывающихся частей в одно и то же место памяти. Это достигается выполнением функции EXEC, используемой для создания процессов, с подфункцией AL=3, а не AL=0. В данном случае управление загруженной программе не передается, т.е. процесс не возникает. Адрес размещения назначается головной программой.
Поскольку перекрываемая программа может быть загружена в любое место (с точностью до сегментного адреса), а этот адрес определяет разработчик, то для настройки сегментной части адресных ссылок типа far загрузчику надо сообщить необходимые данные. Для этого используется блок EPB для функции EXEC с AL=3 всего из 2 слов (табл.6.3).
Таблица 6.3
Смещение | Длина | Содержание |
Сегментный адрес ОП, куда считывать программу | ||
Фактор перемещения, на который необходимо откорректировать значения сегментов |
В DOS фактор перемещения равен сегментному адресу ОП, куда будет считываться программа.
Для перекрывающей программы PSP не создается и оверлей как самостоятельная программа не устанавливается. Он загружается без передачи ему управления. Этот режим требует наличия COMMAND.COM, который может быть уже перекрыт программой. Поэтому в окружении необходимо обеспечить указание правильного пути к COMMAND.COM в переменной CONSPEC.
Для загрузки оверлея необходимо:
освободить неиспользуемую память за программой;
выделить память под оверлей с помощью функции 48h int 21h;
создать EPB для AL=3, для чего в первое слово поместить адрес параграфа выделенной памяти предыдущим шагом; его же поместить и во второе слово;
загрузить оверлей с помощью функции 4Bh прерывания 21h; регистры ES:BX должны указывать на EPB, регистры DS:DX - на имя файла с программой, AL=3.
Вызов оверлея осуществляется командой call типа far обычно следующим образом:
Дата добавления: 2015-10-02; просмотров: 68 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Загрузка программ в ПЭВМ | | | Call dword ptr over_off |