Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по архитектуре ЭВМ.doc
Скачиваний:
46
Добавлен:
02.05.2014
Размер:
238.59 Кб
Скачать

20. Структура резидентных программ. Загрузка и выгрузка резидентной программы.

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

Когда происходит прерывание, то любые другие прерывания запрещаются. Программа обработки прерывания должна завершиться командой IRET/ Когда TSR программа выполняется, ни DOS, ни процессор не знает, что программа станет резидентной, пока программа не завершается используемой TSR функцией. Существует две разновидности TSR программ: программа обслуживания и резидентные утилиты.

1). Программа обслуживания прерывания ISR. Обслуживает прерывание генерируемым аппаратным устройством и обычно существуют для поддержки аппаратного устройства ISR, соответствующего системному прерыванию называется mouse com. Обрабатываются также программные прерывания когда прикладные программы определяют позицию мыши и состояние ее кнопок.

2). Резидентные утилиты могут включать несколько таких же ISR программ.

Резидентные утилиты – это ISR, которое обычно не обслуживают специальной аппаратурой, а соответствует определенной назначенной клавишей и запускают свои процессы по запуску пользователя. Утилиты сохраняются состояние компьютера на момент прерывания и восстанавливают предыдущее состояние по завершению.

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

Требования к резидентным программам.

1). Размеры программы:

Если программы не может быть скомпилирована и связан с моделью очень малой памяти (tiny) 64 кБ кодов и стека, то она вероятна не должна быть TSR.

2). Ресурсы, необходимые программе:

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

Построение резидентной программы.

Чтобы стать резидентной TSR программа должна объявить себе резиденты, т.е. когда программа выполнилась, связалась со своими векторами прерывания и сделала все, что требовалось сделать для резидентной программы, она должна вызвать одну из двух TSR функций: int 31h, int 27h. Эти функции не могут оставлять резидентные программы размером не больше 64 кБ, поскольку резидентные программы уменьшают объем основной памяти. Их всегда пишут на Ассемблере и оптимизируют для достижения минимального размера.

Никогда не известно по каким ????? оказываются загруженные в разное время резидентные программы, поэтому единтсвенным несложным способом получения управления является механизм прерывания.

Принято разделять резидентные программы на активные и пассивные, в зависимости от того перехватывают ли они прерывания от внешнего устройства или получают управление. Только если программа специально вызовет команду IRET с нужным номером прерывания и параметром.

Общий план TSR программ.

Все TSR программы обычно строятся из 2 разделов: 1). Для инициализации TSR программы и возврата управления в DOS путем использования целенаправленного системного вызова. Эта часть не выполняется до тех пор, пока не возникает необходимость перезагрузки программ. При этом производится запись адреса точки входа TSR программы и соответствующее место таблицы векторов.

2). Занимается формированием изображений. При этом почти всегда используются окна и программы управления окнами. При этом изображение на экране восстанавливается после завершения работы прикладной части

У большинства TSR программ прикладные части представляют собой утилиты формирования изображений (F.E. калькулятор). Они восстанавливают изображения на экране в том же виде, каким оно было перед запуском этих программ.

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

Чтобы выгрузить необходимо сделать 3 действия:

1). Закрыть открытые программой файлы и устройства.

2). Восстановить все перехваченные векторы прерываний.

3). Освободить всю занятую программой память.

Трудность может вызвать 2 шаг:

Загрузка резидента, после него может быть загружены другие программы, перехватившие те же прерывания.

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

Таким образом, если хоть 1 вектор прерывания не указывает на ваш обработчик, выгрузить резидентную программы невозможно.

Последний шаг можно сделать вручную, вызывая функцию DOS 49h на каждый блок памяти, который программа выделила через функцию 48h. Другой способ. Вызов функции 4ch (выгрузка программы автоматически) и объявив резидента текущим процессом.