Программа прекращения и пребывания резидента


Резидентная программа завершения и пребывания (обычно TSR ) — это компьютерная программа , работающая под DOS , которая использует системный вызов для возврата управления DOS, как если бы она была завершена, но остается в памяти компьютера , чтобы ее можно было повторно активировать позже. [1] Этот метод частично преодолел ограничение DOS на выполнение только одной программы или задачи за раз. TSR используются только в DOS, а не в Windows .

Некоторые TSR представляют собой служебные программы , которые пользователь компьютера может вызывать несколько раз в день, работая в другой программе, используя горячую клавишу . Borland Sidekick был ранним и популярным примером этого типа. Другие служат драйверами устройств для оборудования , которое операционная система не поддерживает напрямую.

Обычно DOS может одновременно запускать только одну программу. Когда программа завершается, она возвращает управление DOS с помощью системного вызова INT 21h/4Ch . [2] Используемая память и системные ресурсы помечаются как неиспользуемые. Это делает невозможным перезапуск части программы без перезагрузки всего. Однако, если программа заканчивается системным вызовом INT 27h или INT 21h/31h , операционная система не использует повторно определенную указанную часть своей памяти.

Исходный вызов INT 27h называется «завершить, но остаться резидентным», отсюда и название «TSR». Используя этот вызов, программа может сделать до 64 КБ резидентной памяти. В MS-DOS версии 2.0 появился улучшенный вызов INT 21h/31h («Сохранить процесс»), который снял это ограничение и позволил программе вернуть код выхода . Перед выполнением этого вызова программа может установить один или несколько обработчиков прерываний , указывающих на себя, чтобы ее можно было вызвать снова. Установка вектора аппаратного прерывания позволяет такой программе реагировать на аппаратные события. Установка вектора программного прерывания позволяет ему вызываться текущей программой. Установка обработчика прерывания по таймеру позволяет периодически запускать TSR (см .и программируемый интервальный таймер , особенно раздел « совместимый с IBM PC »).

Типичный метод использования вектора прерывания включает считывание его текущего значения (адреса), сохранение его в пространстве памяти TSR и замену его адресом в его собственном коде. Сохраненный адрес вызывается из TSR, фактически формируя односвязный список обработчиков прерываний , также называемых подпрограммами обслуживания прерываний или ISR. Эта процедура установки ISR называется цепочкой или перехватом прерывания или вектора прерывания.

Объединив векторы прерываний в цепочку, TSR может получить полный контроль над компьютером. TSR может иметь одно из двух режимов работы: