stringtranslate.com

Программа прекращения и проживания

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

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

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

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

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

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

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

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

Прерывание обмена

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

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

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

Хотя они очень полезны или даже необходимы для преодоления ограничений DOS , TSR имеют репутацию возмутителей спокойствия. Многие из них захватывают операционную систему различными документированными или недокументированными способами, часто вызывая сбой системы при их активации или деактивации при использовании с определенными приложениями или другими TSR.

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

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

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

В конце 1980-х и начале 1990-х годов многие видеоигры на платформе ПК упирались в этот предел и оставляли все меньше и меньше места для TSR — даже таких необходимых, как драйверы CD-ROM — и организовать все так, чтобы было достаточно свободной оперативной памяти для запуска игр, сохраняя при этом необходимые TSR, стало очень сложно. У многих геймеров было несколько загрузочных дисков с разными конфигурациями для разных игр. В более поздних версиях MS-DOS скрипты «загрузочного меню» позволяли выбирать различные конфигурации с помощью одного пункта меню. В середине и конце 1990-х годов, когда многие игры все еще писались для DOS, ограничение в 640 КБ в конечном итоге было преодолено путем помещения частей данных игры выше первых 1 МБ памяти и использования кода ниже 640 КБ для доступа к расширенной памяти с использованием расширенной памяти (EMS) путем использования техники наложения . Альтернативным более поздним подходом было переключение ЦП в защищенный режим с помощью расширителей DOS и запуск программы в защищенном режиме. Последнее позволяло иметь код и данные в расширенной области памяти. [ необходима цитата ]

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

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

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

Отклонить

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

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

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

Ссылки

  1. ^ Maybury, Rick (1998). "Beat the Bug—Computer Viruses". PC Top Tips . Архивировано из оригинала 28 сентября 2009 года . Получено 2012-02-09 .{{cite web}}: CS1 maint: unfit URL (link)
  2. ^ [1] Ссылка HelpPC: INT 21,0 – Завершение программы
  3. ^ "список библиотек TSR". Архивировано из оригинала 2007-08-17.также известные как фреймворки.
  4. ^ "int 2D". Архивировано из оригинала 2017-12-01 . Получено 2019-11-14 .
  5. ^ "TSR Libraries". 2016-06-19. Архивировано из оригинала 2016-06-19 . Получено 2019-11-14 .

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