stringtranslate.com

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

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

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

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

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

Прерывание совместного использования

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

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

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

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

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

Резидентный метод завершения и пребывания используется большинством 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 TSR и драйверы устройств также работают в реальном режиме, и поэтому каждый раз, когда кто-то получает управление, расширитель DOS должен переключиться обратно в реальный режим до тех пор, пока он не откажется от управления, что приведет к штрафу по времени (если только они не используют такие методы, как DPMS или CLOAKING ).

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

С появлением во второй половине 1980-х годов плат расширенной памяти и особенно процессоров Intel 80386 стало возможным использовать память объемом более 640 КБ для загрузки TSR. Это потребовало сложных программных решений, названных менеджерами расширенной памяти . Некоторые менеджеры памяти — это QRAM и QEMM от Quarterdeck , 386 MAX от Qualitas, CEMM от Compaq и позднее EMM386 от Microsoft . Области памяти, используемые для загрузки TSR размером более 640 КБ, называются « верхними блоками памяти » (UMB), а загрузка программ в них называется высокой загрузкой . Позже менеджеры памяти начали включать такие программы, как Optimize от Quarterdeck или MEMMAKER от Microsoft , которые пытаются максимизировать доступное пространство в первых 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. ^ Мэйбери, Рик (1998). «Победим ошибку — компьютерные вирусы». Лучшие советы по ПК . Архивировано из оригинала 28 сентября 2009 года . Проверено 9 февраля 2012 г.{{cite web}}: CS1 maint: unfit URL (link)
  2. ^ [1] Ссылка на HelpPC: INT 21,0 – Завершение программы.
  3. ^ «список библиотек TSR». Архивировано из оригинала 17 августа 2007 г.также известные как фреймворки.
  4. ^ "интервал 2D". Архивировано из оригинала 1 декабря 2017 г. Проверено 14 ноября 2019 г.
  5. ^ "Библиотеки TSR". 19.06.2016. Архивировано из оригинала 19 июня 2016 г. Проверено 14 ноября 2019 г.

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