Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Контрольные вопросы. Задания. 11. Резидентные программы. 11. 1 структура резидентной программы




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

1. Как можно проверить наличие сопроцессора?

2. Какие числовые и нечисловые регистры содержит процессор?

3. Для чего служит регистр признаков?

4. Какие форматы чисел с плавающей точкой поддерживает сопроцессор?

5. Какие группы команд сопроцессора вы знаете?

6. Для чего перед каждой командой сопроцессора необходимо выполнить команду FWAIT?

7. Почему нельзя корректно вычислить значение выражения вида  с использованием только команд FYL2X и FSCALE?

8. Каким образом можно вычислить значение выражения вида ?

 

Задания

    Вычислите функцию на определенном отрезке, используя команды сопроцессора:

а)  на отрезке .

б)  на отрезке .

в)  на отрезке .

г)  на отрезке .

д)  на отрезке .

е)  на отрезке .

ж)  на отрезке .

з)  на отрезке .

 

11. РЕЗИДЕНТНЫЕ ПРОГРАММЫ

 

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

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

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

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

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

Как уже было сказано, резидентная программа состоит из двух частей – резидентной и нерезидентной. Резидентная часть, в свою очередь, состоит, по крайней мере, из одной процедуры обработки прерывания. Обычно резидентная часть помимо процедуры обработки прерывания включает в себя и ячейки памяти, в которых хранятся внутренние данные резидентной части или, например, старое значение вектора прерывания. На рис. 9 показана обобщенная структура резидентной программы для операционной системы MS-DOS.

Резидентная часть

переменные резидентной части стек резидентной части
процедура обработки прерывания 1

процедура выгрузки

резидентной части

процедура обработки прерывания 2
. . .
процедура обработки прерывания N

Нерезидентная часть

процедура проверки на повторную загрузку процедура обработки ключей командной строки
процедура передачи команд резидентной части процедура загрузки резидентной части
переменные нерезидентной части стек нерезидентной части

 

Рис. 9  Обобщенная структура резидентной программы

 

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

Реализация структуры резидентной программы во многом зависит от типа программы – COM или EXE. Например, для программ типа EXE стеки резидентной и нерезидентной частей можно оформить в виде отдельных программных сегментов, выровнянных по границе параграфа. Данные резидентной и нерезидентной частей также можно оформить в виде отдельных программных сегментов. Для программы типа COM все элементы обобщенной структуры резидентной программы должны находиться в одном программном сегменте. Это вызывает некоторые сложности при переключении стеков.

Далее будут подробно рассмотрены все элементы обобщенной структуры резидентной программы.

В стеке резидентной части обычно сохраняются значения используемых регистров при входе в процедуры обработки прерываний, а также промежуточные данные резидентной части. Если в стеке требуется сохранить только значения регистров то, в принципе, можно использовать и стек прерванной программы. Но для повышения надежности работы резидентной программы и для обеспечения ее независимости от других программ все же рекомендуется создать свой собственный стек и выполнить переключение на него. Рассмотрим, как можно выполнить переключение стека для программы типа COM. Вся резидентная программа должна располагаться в одном программном сегменте. Для переключения на стек в COM программе потребуется настроить регистр SS на сегмент кода, т. е. на регистр CS, а в регистр SP занести смещение последнего байта, отведенного под стек. Например:

CODE SEGMENT

. . .

MyProc PROC

MOV CS: OLD_AX, AX; сохранение AX

MOV CS: OLD_SS, SS  ; сохранение SS

MOV CS: OLD_SP, SP  ; сохранение SP

MOV AX, CS

MOV SS, AX                 ; переключение стека

MOV SP, OFFSET Stac + 128   

. . .

MOV AX, CS: OLD_SS

MOV SS, AX                 ; восстановление стека

MOV SP, CS: OLD_SP

MOV AX, CS: OLD_AX; восстановление AX

        IRET

MyProc ENDP

OLD_SS DW?

OLD_SP DW?

OLD_AX DW?

Stac DB 128 DUP (? )

. . .

CODE ENDS

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...