Информатика и технология программирования

       

Вложенные прерывания


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



-при входе в прерывание в процессоре устанавливается состояние запрещения прерывания, которое при отсутствии других действий будет сохраняться вплоть до завершения выхода из прерывания ;



-контроллер прерывания после выдачи номера вектора прерывания блокируется до тех пор, пока не будет выполнена команда outportb(0x20,0x20), разрешающую ему продолжить процесс обслуживания последующих запросов на прерывания;

Очевидно, что если в функции обработки прерываний разрешить процессору вход в прерывание функцией enable() , а также разрешить контроллеру обслуживать запросы, то вход в следующее прерывание может произойти раньше выхода из текущего, то есть произойдет вложенное прерывание. Очевидно также, что вложенное прерывание, как и вложенный вызов функции при наличии механизма стека и обеспечении прозрачности являются вполне допустимыми. Соответственно и вложенные прерывания от различных источников не таят в себе никакой опасности и служат обычно для расстановки приоритетов обработки прерываний различной " срочности" . Другое дело, что может произойти вложенное прерывание от того же самого источника, которое будет рекурсивным. Здесь уже возникают тонкости, связанные с возможностью " бесконечной" рекурсии при снижении скорости обслуживания прерываний и с особенностями самой рекурсии. Обычно уровень вложенности прерываний от одного источника контролируется и ограничивается в таких случаях програмно.



Содержание раздела