Прекратить и остаться резидентом программы - Terminate and stay resident program

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

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

Использовать

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

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

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

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

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

Метод завершения работы с постоянным резидентством используется большинством вирусов DOS и других вредоносных программ, которые могут либо взять под контроль ПК, либо оставаться в фоновом режиме. Эта вредоносная программа будет реагировать на дисковый ввод-вывод или события выполнения, заражая исполняемые (.EXE или .COM) файлы при запуске и файлы данных при их открытии.

TSR могут быть загружены в любое время; либо во время загрузки DOS (например, из AUTOEXEC.BAT ), либо по запросу пользователя (например, Borland 's Sidekick и Turbo Debugger, Quicken's QuickPay или Personal Calendar FunStuff Software). Некоторые части самой DOS используют эту технику, особенно в версиях DOS 5.0 и новее. Например, редактор командной строки DOSKEY и различные другие утилиты устанавливаются путем их запуска из командной строки (вручную, из AUTOEXEC.BAT или INSTALLиз CONFIG.SYS ) вместо их загрузки как драйверов устройств с помощью DEVICEоператоров в CONFIG. SYS.

У некоторых TSR нет возможности выгрузить себя, поэтому они останутся в памяти до перезагрузки. Однако выгрузка возможна извне с использованием таких утилит, как комбо MARK.EXE / RELEASE.EXE от TurboPower Software или TSR с мягкой перезагрузкой, которые перехватывают определенную комбинацию клавиш и освобождают все загруженные после них TSR. Поскольку цепочка ISR является односвязной, и TSR может хранить ссылку на своего предшественника в любом месте по своему выбору, у TSR нет общего способа удалить себя из цепочки. Поэтому обычно при выгрузке TSR в памяти необходимо оставлять заглушку, что вызывает фрагментацию памяти. Эта проблема привела к созданию рамок сотрудничества TSR, таких как TesSeRact и AMIS.

Совместное прерывание

Для решения проблем с множеством TSR, использующих одно и то же прерывание, Ральф Д. Браун предложил метод, называемый спецификацией альтернативных мультиплексных прерываний (AMIS), в качестве усовершенствования по сравнению с ранее использовавшимися услугами, предлагаемыми через INT 2Fh. AMIS предоставляет способы контролируемого совместного использования программных прерываний . Он смоделирован на основе протокола IBM Interrupt Sharing Protocol , первоначально изобретенного для разделения аппаратных прерываний процессора x86. Услуги AMIS доступны через Int 2Dh.

В то время это предложение не получило широкого распространения среди программистов. Он существовал вместе с несколькими другими конкурирующими спецификациями различной сложности.

Неисправности

Хотя TSR очень полезны или даже необходимы для преодоления ограничений DOS , они имеют репутацию нарушителей спокойствия. Многие захватывают операционную систему различными задокументированными или недокументированными способами, часто вызывая сбои систем при их активации или деактивации при использовании с определенными приложениями или другими TSR. Как объяснялось выше, некоторые вирусы и другое вредоносное ПО были закодированы как TSR и преднамеренно доставляют проблемы. Кроме того, в DOS все программы, даже с большими объемами физической ОЗУ , должны быть загружены в первые 640  КБ ОЗУ ( обычная память ). TSR не являются исключением и берут фрагменты из этих 640 КБ, которые, таким образом, недоступны для других приложений. Это означало, что написание TSR было сложной задачей, заключающейся в достижении минимально возможного размера для него и проверке его на совместимость с множеством программных продуктов от разных поставщиков - часто очень утомительной задачей.

В конце 1980-х - начале 1990-х годов многие видеоигры на платформе ПК вышли за этот предел и оставляли все меньше и меньше места для TSR - даже таких важных, как драйверы CD-ROM - и упорядочивали вещи так, чтобы было достаточно свободной оперативной памяти для работы. игры, в которых присутствовали необходимые TSR, стали черным искусством. У многих геймеров было несколько загрузочных дисков с разной конфигурацией для разных игр. В более поздних версиях MS-DOS сценарии «загрузочного меню» позволяли выбирать различные конфигурации с одного «загрузочного диска». В середине и конце 1990-х, когда многие игры все еще писались для DOS, ограничение в 640 КБ было в конечном итоге преодолено путем помещения частей данных или кода игры выше первого 1 МБ памяти и использования кода ниже 640 КБ для доступа к расширенная память (с использованием методов расширения DOS ), при этом код заменяется на нижний 1 МБ ОЗУ в качестве наложений . Поскольку программирование с множеством наложений само по себе является проблемой, когда программа была слишком большой, чтобы полностью уместиться примерно в 512 КБ, использование расширенной памяти почти всегда выполнялось с помощью стороннего расширителя DOS, реализующего VCPI или DPMI , потому что это становится слишком большим. намного проще и быстрее получить доступ к памяти выше границы 1 МБ, и можно запускать код в этой области, когда процессор x86 переключается из реального режима в защищенный режим . Однако, поскольку DOS и большинство программ DOS работают в реальном режиме (VCPI или DPMI делают программу защищенного режима похожей на программу реального режима для DOS и остальной системы путем переключения между двумя режимами), TSR DOS и устройство драйверы также работают в реальном режиме, и поэтому каждый раз, когда кто-то получает управление, расширитель DOS должен переключаться обратно в реальный режим, пока он не откажется от управления, что приведет к сокращению времени (если они не используют такие методы, как DPMS или CLOAKING ).

Возвращение

С появлением плат с расширенной памятью и особенно процессоров Intel 80386 во второй половине 1980-х стало возможным использовать память размером более 640 КБ для загрузки TSR. Это потребовало сложных программных решений, получивших название менеджеров расширенной памяти . Некоторые диспетчеры памяти КОР и QEMM по Quarterdeck , 386 MAX на QUALITAS , CEMM от Compaq , а затем EMM386 от Microsoft . Области памяти, используемые для загрузки TSR размером более 640 КБ, называются « блоками старшей памяти » (UMB), а загрузка в них программ называется высокой загрузкой . Позже менеджеры памяти начали включать такие программы, как Quarterdeck Optimize или Microsoft MEMMAKER, которые пытаются максимизировать доступное пространство в первых 640 КБ, определяя, как лучше всего распределить TSR между низкой и высокой памятью.

Отклонить

С разработкой игр с использованием расширителей DOS (ранним примером был Doom ), который обошел барьер в 640 КБ, многие проблемы, связанные с TSR, исчезли, а с широким распространением Microsoft Windows и особенно Windows 95 (за которым последовала Windows 98 ) - из-за чего большинство TSR стало ненужным, а некоторые TSR несовместимы - TSR стал устаревшим, хотя приложения Win16 могут выполнять трюки, подобные TSR, такие как исправление таблицы дескрипторов прерываний (IDT), потому что Windows это позволяла.

Windows Me и Windows NT (последняя включает в себя потребительские операционные системы начиная с Windows XP ) постоянно работают в защищенном или долгом режиме , что не позволяет переключаться в реальный режим, который необходим для работы TSR. Вместо этого в этих операционных системах используются современные драйверы и инфраструктуры служб с защитой памяти и вытесняющей многозадачностью , позволяющие одновременно запускать несколько программ и драйверов устройств без необходимости использования специальных приемов программирования; на ядро и его модули возложена исключительная ответственность за изменение таблицы прерываний.

Смотрите также

использованная литература

внешние ссылки