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


15.3. Условия активизации и обработка прерываний - часть 4


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

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




- Начало -  - Назад -  - Вперед -