|
TSR должна
проверить флажки критической ошибки и критической секции, и убе-
диться в том, что не выполняются непрерываемые операции. Если
дальнейшее продолжение выполнения безопасно, TSR должна сохранить
текущие значения регистров, переключиться на свой собственный
стек, установить свои собственные подпрограммы критической ошибки
и break, записать информацию, сохраненную в различных глобальных
переменных DOS и, наконец, установить свою собственную среду,
включающую адреса текущих PSP и DTA. Заметим, что очень важен по-
рядок выполнения этих операций!
Кроме этих, могут потребоваться и другие операции. Так, если
необходимо использовать изображения, TSR должна сохранять в памя-
ти содержимое экрана. Программа PRINT.COM проверяет сводный ре-
гистр прерывания в контроллере 8259. Если активны какие-либо пре-
рывания, отличные от прерываний ISR, которые пробуждают ее, она
игнорирует запрос повторной активации. Вероятно, PRINT.COM делает
эту проверку, чтобы избежать потери символов последовательного
порта и других устройств отображения.
После завершения своей работы, TSR должна произвести откат
выполненных шагов и быстро перейти в фоновый раздел, ожидая снова
получения запроса повторной активации. TSR должна восстановить
значения регистров PSP, DTA, стека и других регистров прерванной
программы. После того, как TSR завершит эти шаги, она может безо-
пасно восстановить драйверы обработки критической ошибки и break
и осуществить возврат в прерванную программу.
Определение безопасности повторной активации
Невозможно предсказать, когда произойдет запрос на повторную
активацию TSR. Секции DOS не являются повторно входимыми, поэтому
и TSR не всегда может повторно активироваться при выдаче запроса
повторной активации.
|