|
|
|
|
Загрузка резидентных программ
Резидентные подпрограммы и библиотека исполняющей системы RTL для установки из другой программы лучше загружаются посредством функции загрузки и
выполнения программы, так что новая подпрограмма имеет свой собственный блок памяти. В этих случаях вызывающая (порождающая) программа получает
управление после того, как инициализированная ею секция резидентной программы выполнит запрос "завершить и оставить резидентной".
Если была загружена автономная резидентная подпрограмма, то порождающая программа завершается, оставляя резидентную подпрограмму на месте в
памяти. Это приводит к разбиению свободной памяти на "куски", но операционная система MS-DOS не рискует загружать последующие подпрограммы на
резидентную подпрограмму. Если была бы загружена RTL, то порождающая программа была бы готова к вызову RTL, когда это необходимо. При завершении
порождающая подпрограмма имеет возможность оставить RTL в памяти для последующего использования или удалить ее путем сброса ее вектора прерывания в
исходное состояние и освобождения ее блока памяти.
Так как функция загрузки и выполнения программы не информирует вызывающую подпрограмму об адресе загрузки резидентной подпрограммы и в связи с
тем, что этот адрес не может быть передан обратно в порождающую программу в единственном байте, резервируемом для кода выхода программы (смотри функцию
с кодом 31h "завершить и оставить резидентной"), то для определения ячейки удаляемого блока памяти порождающая подпрограмма должна обратиться к
тактике, обсужденной в предшествующем тексте.
|
|