Структура резидентной программы

Пример 6

.

 

 

Вычисление объем тел с помощью тройного интеграла.

Объем пространственной области : .

Найти объем тела, ограниченного цилиндрами и и плоскостями и .

Решение:

1) Найдем точки пересечения цилиндров по оси :

.

Резидентная программа (или TSR-программа, от англ. Terminate and Stay Resident - "завершиться и остаться резидентной") - в ОС MS-DOS программа, вернувшая управление оболочке операционной системы (command.com), либо надстройке над операционной системой (Norton Commander и т. п.), но оставшаяся в оперативной памяти персонального компьютера. Резидентная программа активизируется каждый раз при возникновении прерывания, вектор которого эта программа изменила на адрес одной из своих процедур.

В эпоху многозадачных ОС резидентными иногда называют программы, загруженные постоянно и работающие в фоновом режиме. Но применение этого термина некорректно по отношению к многозадачным ОС.

Резидентные программы могут переключать на себя обработку прерываний, например, связанных с выводом на печать или с обращением к клавиатуре и т. д.

Можно встретить множество резидентных программ, предназначенных для загрузки русских шрифтов в память видеоконтроллера, для печати текста, содержащего символы кириллицы, на принтере в графическом режиме, для русификации клавиатуры и т. п. Все эти программы обычно запускаются один раз при загрузке компьютера через файл autoexec.bat .

Другой пример использования резидентных программ: резидентные калькуляторы, справочные базы данных или интегрированные системы, наподобие Borland SideKick. Такие программы тоже обычно запускаются через файл autoexec.bat или при необходимости. Они перехватывают прерывания, предназначенные для работы с клавиатурой. Как только пользователь нажимает заранее определенную комбинацию клавиш, резидентная программа активизируется. Поверх имеющегося на экране изображения выводится диалоговое окно резидентной программы.

Иногда резидентные программы используют вместо загружаемых драйверов для обслуживания нестандартной аппаратуры. В этом случае резидентная программа может встроить свой обработчик, через который все прикладные программы смогут обращаться к аппаратуре.

Аналогично работают резидентные модули некоторых систем управления базами данных (СУБД). Прикладная программа посылает запросы к базе данных через прерывание, устанавливаемое при запуске такой СУБД.

Для обслуживания нестандартной аппаратуры больше подходят загружаемые драйверы. На резидентные программы накладываются многочисленные ограничения, затрудняющие работу программиста. Например, резидентным программам не разрешается использовать прерывания MS-DOS, когда вздумается. Это связано с тем, что MS-DOS с самого начала проектировалась как однозадачная операционная система, поэтому функции прерываний MS-DOS не обладают свойством реентерабельности (повторной входимости).

Способ построения резидентных программ - TSR (Terminate and Stay Resident) позволяет использовать область PSP (Program Segment Prefix) для размещения резидентного кода программы. При разработке TSR - программ стандартными средствами DOS в памяти после завершения программы остается PSP размером 256 байт или, по крайней мере, его часть, если программа использует область FCB (File Control Block) и параметров для собственных нужд.

Рассмотрим способ, позволяющий полностью использовать область PSP в интересах резидентной программы и приведем пример такой программы. Данный способ был разработан авторами в начале 1989 года, когда потребовалось загрузить много крохотных TSR - программ, размер которых не превышал PSP.

У программы есть две возможности остаться резидентной в памяти - использовать прерывание INT 27h или функцию 31h прерывания INT 21h .

Для использования прерывания INT 27h сегментный регистр CS должен указывать на PSP программы. При этом в регистр DX следует записать смещение последнего байта программы плюс один байт.

Нетрудно заметить, что этот способ больше всего подходит для com-программ, так как с помощью прерывания INT 27hневозможно оставить в памяти резидентной программу длиннее 64 Кбайт.

Другой, более удобный, способ заключается в вызове функции 31h прерывания INT 21h . В регистре AL можно указать код завершения программы, регистр DX должен содержать длину резидентной части программы в параграфах. Здесь уже нет указанного выше ограничения на размер программы.

Для того чтобы оставить резидентной в памяти программу, размер которой превышает 64 Кбайт, можно использовать только последний метод. Но не стоит увлекаться большими резидентными программами, так как занимаемая ими память нужна другим программам.

 

Контрольные вопросы

 

  1. Дать характеристику резидентной программе.
  2. Опишите способ ее построения.