|
|
|
|
Загрузка программного оверлея (перекрытия) посредством MS-DOS (код функции 4Bh с AL = 3)
Возможность выполнения одной программы из другой является на самом деле огромным достижением, но при этом имеет место существенный недостаток,
заключающийся в том, что после выполнения вызываемой программы происходит ее завершение. Однако, во многих случаях разработчики программ хотят
вызывать другую программу для выполнения некоторых функций, но при этом дополнительно хотят иметь большую степень управления порожденной
программой, или большую степень связи с порожденной программой, или даже возможность неоднократного вызова порождаемой программы без ее повторной
перезагрузки. Для этих случаев для функции 4Bh MS-DOS предоставляет опцию Load Overlay (загрузка оверлея).
Одним из отличий функции загрузки оверлея от функции загрузки и выполнения программы является то, что при загрузке оверлейной программы порождающая
программа не предназначена для модификации параметров порождаемой программы. Это имеет место потому, что порождающая и порождаемая программы, на самом
деле, являются частями одной и той же программы. Все, что выполняет функция загрузки программного оверлея, это загрузка дополнительного программного
кода (и/или данных программы) в память.
Другим отличием загрузки оверлея от загрузки и выполнения является то, что загрузка оверлея не требует блок памяти его владельца. Загрузка оверлея
не передает блок среды или блок начального распределения, как функция загрузки и выполнения программы. Функция загрузки оверлея просто загружает
запрашиваемый файл в память, настраивая значения сегментов программы в соответствии с параметрами, обеспечиваемыми при вызове функции (как показано
на Рис.3-14). Полученный программный код может быть выполнен как подпрограмма, но не должен выполняться как отдельная программа.
Если оверлей завершается посредством одной из функций завер шения MS-DOS, то завершается и оверлей и порождающая программа. Если для выхода
используется функция 31h или функция 27h ("завершить и оставить резидентной"), то модифицируется блок начального распределения порождающей
подпрограммы, а порождающая программа остается в памяти. Порожденная программа останется резидентной только тогда, когда блок запрошенной памяти
является достаточно большим, вмещающим и порождающую и порожденную программы. Если выполняется одна из функций завершения программ, то обе программы
удаляются из памяти.
Рис.3-14 показывает, что фактор настройки, указываемый как часть функции загрузки оверлея, не воздействует на адрес загрузки оверлея. Вместо
фактора настройки используется модификация смещения ссылок внутри загружаемой программы. Если оверлей загружается в формате .COM, то фактор настройки
не воздействует на загружаемый оверлей и должен быть установлен в нулевое значение.
Для программных файлов типа .EXE фактор настройки добавляется к значениям ссылок сегментов, которые появились в файле загрузки. При загрузке
большинства оверлейных программ типа .EXE (которые обычно первоначально по умолчанию 0000:0000) фактор настройки должен быть установлен в то же
самое значение, что и адрес загрузки.
|
|