Завершить и остаться резидентной программой

редактировать

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

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

Содержание
  • 1 Использование
    • 1.1 Распределение прерываний
  • 2 Ошибки
  • 3 Возврат
  • 4 Отклонение
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
Используйте

Обычно 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, которые ранее изменили тот же вектор прерывания.
  • Каскадирование с другими TSR, вызывая старый вектор прерывания. Это можно сделать до или после того, как они выполнили свой фактический код. Таким образом, TSR могут формировать цепочку, в которой каждый вызывает следующий.

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

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

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

Совместное использование прерываний

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

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

Ошибки

Хотя они очень полезны или даже необходимы для преодоления ограничений DOS, TSR имеют репутацию нарушителей спокойствия.. Многие захватывают операционную систему различными задокументированными или недокументированными способами, часто вызывая сбои системы при их активации или деактивации при использовании с определенными приложениями или другими TSR. Как объяснялось выше, некоторые вирусы и другое вредоносное ПО были закодированы как TSR и намеренно доставляют неприятности. Кроме того, в DOS все программы, даже с большими объемами физической RAM, должны быть загружены в первые 640 КБ RAM (обычная память ). 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 по, 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 это позволяла. В настоящее время TSR почти исчезли, поскольку многозадачные операционные системы, такие как Windows Vista, Windows 7, Mac OS X и Linux, предоставляют средства для одновременного запуска нескольких программ и драйверов устройств без необходимости в специальных приемах программирования, а современное понятие защищенной памяти делает ядро ​​ и его модули исключительной ответственностью за изменение таблицы прерываний.

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-10 14:04:18
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте