Системное программное обеспечение персональных ЭВМ

Проблемы разработки резидентных программ


15.1. Проблемы разработки резидентных программ

Резидентными называются программы, постоянно находящиеся в оперативной памяти ЭВМ. В специальной литературе за ними закрепилось также название TSR-программы - по наименованию функции DOS "Завершить и оставить резидентной" (Terminate and Stay Resident). Находясь постоянно в оперативной памяти, TSR-программа, однако, большую часть времени является неактивной, компьютер выполняет другие - системные и пользовательские - программы. Активизация TSR-программы происходит по прерыванию (аппаратному или программному), и после выполнения TSR-программой требуемых от нее действий управление вновь возвращается к прерванной (фоновой) программе, а резидентная становится неактивной до следующего ее вызова. Очень часто активизация TSR-программы иницируется нажатием закрепленной за ней ("горячей") клавиши или комбинации клавиш, примером таких программ могут быть программы копирования экрана или резидентные словари и справочники. Из всего класса TSR-программ иногда выделяют подкласс, называемый резидентными обработчиками прерываний (ISR - Interrupt Service Resident) - программы, применяющиеся обычно для обслуживания внешних устройств и активизирующиеся по программному прерыванию подобно программам BIOS (например, драйвер мыши MOUSE. COM). ISR-программы, как правило, проще программ "горячей клавиши", так как моменты обращения к ним более предсказуемы.

Наш подход к рассмотрению TSR-программ будет несколько отличаться от принятого в большинстве справочных и учебных пособий. Поскольку TSR-программа постоянно находится в памяти, она должна занимать в ней как можно меньше места, поэтому средством ее реализации бывает, как правило, язык Ассемблера, и всегда значительное внимание уделяется вопросам минимизации объема. Нас же TSR-программы будут интересовать в несколько ином аспекте. Известно, что MS DOS - система однопрограммная. Но возможность функционирования в системе резидентных программ уже является шагом к организации работы DOS в многопрограммном режиме: в памяти одновременно сосуществуют фоновая программа и TSR-программа, которые активизируются поочередно. Нас будут интересовать в первую очередь проблемы корректного взаимодействия TSR-программы с фоновой программой и с DOS. Большинство TSR-программ, приводимых в литературе, "паразитируют" на фоновой программе, используя в той или иной степени ее ресурсы. В этом нет ничего предосудительного, особенно, если в каждом таком случае использование ресурса фоновой программы обосновано и гарантируется его сохранность. Мы же рассмотрим самый общий случай, когда фоновая и TSR-программа имеют раздельные ресурсы. При таком подходе проблемы построения TSR-программы можно разбить на следующие группы:

  • инициализация программы;
  • условия активизации и обработка прерываний;
  • переключения контекстов;
  • программные коммуникации;
  • выгрузка программы из памяти (завершение).

Решение всех этих проблем иллюстрируется программным примером 15.1.



Содержание раздела