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

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

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

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

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

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

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

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

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

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

TSR могут быть загружены в любое время; либо во время загрузки DOS (например, из AUTOEXEC.BAT ), либо по запросу пользователя (например, Borland с Приятель и Turbo Debugger, Quicken's QuickPay или Персональный календарь FunStuff Software). Некоторые части самой DOS используют эту технику, особенно в версиях DOS 5.0 и новее. Например, ДОСКИ редактор командной строки и различные другие утилиты устанавливаются путем их запуска из командной строки (вручную или из AUTOEXEC.BAT или через УСТАНОВИТЬ из CONFIG.SYS ), а не загружать их как драйверы устройств через УСТРОЙСТВО операторы в CONFIG.SYS.

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

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

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

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

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

Хотя это очень полезно или даже необходимо для преодоления ДОС Из-за ограничений, TSR имеют репутацию нарушителей спокойствия. Многие захватывают операционную систему различными задокументированными или недокументированными способами, часто вызывая сбои системы при их активации или деактивации при использовании с определенными приложениями или другими 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 или же ЗАКРЫТИЕ ).

Возвращаться

С приходом расширенная память доски и особенно Intel 80386 Во второй половине 1980-х годов стало возможным использовать память размером более 640 КБ для загрузки TSR. Это потребовало сложных программных решений, названных расширенные менеджеры памяти. Некоторые менеджеры памяти QRAM и QEMM к Quarterdeck, 386МАКСИМУМ к Qualitas, CEMM к Compaq и позже EMM386 к Microsoft. Области памяти, используемые для загрузки TSR размером более 640 КБ, называются "блоки старшей памяти "(UMB) и загрузка в них программ называется загрузка высокая. Позже менеджеры памяти начали включать такие программы, как Quarterdeck's Optimize или Microsoft. MEMMAKER которые пытаются максимизировать доступное пространство в первых 640 КБ, определяя, как лучше всего распределить TSR между нижней и верхней памятью.

Отклонить

При разработке игр с использованием Расширители DOS (ранний пример был Рок ), который преодолел барьер в 640 КБ, многие проблемы, связанные с TSR, исчезли, а с широким распространением Майкрософт Виндоус и особенно Windows 95 (с последующим Windows 98 ), Что сделало большинство TSR ненужными, а некоторые TSR несовместимыми - TSR устарело, хотя Win16 приложения могут выполнять трюки, подобные TSR, например исправлять таблица дескрипторов прерываний (IDT), потому что Windows это позволяет. В настоящее время TSR почти исчезли, так как многозадачные операционные системы, такие как Виндоус виста, Windows 7, Mac OS X, и Linux предоставить возможности для одновременного запуска нескольких программ и драйверов устройств без необходимости использования специальных приемов программирования и современного понятия защищенная память делает ядро и его модули, отвечающие исключительно за изменение таблицы прерываний.

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

Рекомендации

  1. ^ Мэйбери, Рик (1998). «Избавьтесь от ошибок - компьютерные вирусы». Лучшие советы для ПК. Получено 2012-02-09.
  2. ^ [1] Справка HelpPC: INT 21,0 - Завершение программы
  3. ^ список библиотек TSR В архиве 2007-08-17 на Wayback Machine также известны как фреймворки.
  4. ^ "int 2D". Архивировано из оригинал на 2017-12-01. Получено 2019-11-14.
  5. ^ «Библиотеки ТСР». 2016-06-19. Архивировано из оригинал на 2016-06-19. Получено 2019-11-14.

внешняя ссылка