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










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 4 / Загрузка и инициализация TSR Сделать домашней страницей Добавить в избранное Написать писмо

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

Загрузка и инициализация TSR

TSR может быть либо файлом .COM, либо файлом .EXE. DOS загружает все программы одним и тем же способом. Каждая программа имеет сегмент программного префикса (PSP), код программы и данные. Различие между TSR и стандартными прикладными программами состоит в том, что TSR выполняет несколько основных задач для подготовки самой себя к последующей повторной активации.


При инициализации TSR является программой переднего плана и ей полностью доступна вся система DOS. При выполнении TSR в качестве программы переднего плана ей доступна определенная информация. TSR должна записывать любую часть этой информации на одном из этапов ее инициализации. Во время инициализации TSR обычно выполняет следующие действия:


- проверяет версию используемой DOS;


- размещает важные структуры данных DOS;


- "захватывает" один или более векторов прерываний;


- проверяет типы имеющихся дисплейных адаптеров и периферийных устройств;


- выполняет некоторую дополнительно указанную прикладную обработку;


- вычисляет объем памяти, необходимый для размещения резидентной подпрограммы.


Процесс инициализации TSR завершается, когда программа вызывает функцию "завершить и оставить резидентной" (int 21h AH=31h). Важно подчеркнуть тот факт, что раз TSR завершается, то она больше не является программой переднего плана. Фоновые программы являются как бы неожиданными посетителями, следовательно, они должны быть очень аккуратными при выполнении своих функций. Начальным заданием программы инициализации должна быть запись состояния системы таким образом, чтобы TSR могла бы повторно активироваться без разрушения операционной системы.


Короче говоря, подпрограмма инициализации получает стартовавшую программу, гарантирует, что TSR сможет быть выполнена при последующем вызове, вычисляет требуемый размер памяти для резидентной подпрограммы, и, наконец, выдает запрос "завершить и оставить резидентной" (int 21h AH=31h) для возврата управления в DOS.


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

Hosted by uCoz