На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 3 / Специальный случай: библиотеки исполняющей системы (RTL) с неполным временем работы Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Специальный случай: библиотеки исполняющей системы (RTL) с неполным временем работы

Одной из многих возможностей, которые могут быть реализованы с представленными функциями, является неполное время работы библиотеки исполняющей системы (RTL). Программы неполного времени работы RTL являются резидентными только тогда, когда это необходимо, а остальное время располагаются на диске. Эта возможность реализуется путем установки части заголовков RTL точно также, как описывалось в этой главе. Однако, эти заголовки не содержат программных кодов для выполнения функций библиотеки; т.е. они не содержат подпрограммы своей библиотеки, которые остались на диске в другом файле. Последовательность событий, происходящих при выполнении программ неполного времени работы RTL, показана в блок-схеме 3-1.


                   ____________________
                  |      Загрузка      |
                  |     заголовков     |
                  |____________________|
                             |
            .--------------->|<---------------------------.
            |      __________V_________                   |
            |     |                    |                  |
            |     |    Прием запроса   |                  |
            |     |____________________|                  |
            |                |                            |
            |                |                            |
            |               / \                           |
            |              /Ко-\                          |
            |             /манда\               __________|__________
            |            /освобо-\  ДА         | Освобождение распре-|
            |           | ждения  |----------->|   деленной памяти   |
            |            \памяти /             |_____________________|
            |             \RTL ?/
            |              \   /
            |               \ /
            |            НЕТ |
            |                V
            |               / \
            |              /   \
            |             /     \                ____________________
            |            /  RTL  \  НЕТ         |Распределение памяти|
            |           |установ- |------------>|  для загрузки RTL  |
            |            \ лена ?/              |____________________|
            |             \     /                          |
            |              \   /                           |
            |               \ /                            |
            |                |                             |
            |             ДА |<----------------------------
            |      __________V_________
            |     |                    |
             -----| Функция выполнения |
                  |____________________|

            Блок-схема 3-1. Последовательность загрузки RTL с неполным
                                  временем работы

Когда одна из подпрограмм библиотеки доступна (через прерывание), то часть заголовков подпрограмм загружает файл библиотеки в память, используя функцию 4Bh (AL=3) "Загрузить оверлей" и "запирает" его в своей собственной памяти. Затем вызывается требуемая подпрограмма библиотеки для выполнения запрашиваемой функции. Либо часть заголовков, либо конкретные подпрограммы библиотеки могут содержать инструкцию IRET для возврата в вызывающую программу. С этого момента библиотеке доступен вызов всей последовательности без ожидания времени на загрузку, поскольку RTL осталась резидентной в памяти.


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


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz