Некоторые процессоры (но не все) поддерживают обработку прерываний на аппаратном уровне. В таких процессорах есть внутренняя переменная – уровень прерываний процессора. Если ОС работает на таких процессорах, то она может пользоваться этой встроенной системой.
Но такие средства есть не у всех процессоров (их нет у Пентиум). И чтобы не зависеть от аппаратной платформы, в ОС вводится собственная программная система приоритетов прерываний.
· В Виндовс НТ есть диспетчер прерывываний (Trap Handler).
· Все, что генерирует прерывания – это источник прерывания, они делятся на несколько классов, каждому из которых присваивается свой уровень запроса прерывания Interrupt Request Query Level, IRQL. IRQL определяет приоритет прерываний данного класса.
· Также в ОС есть внутренняя переменная, IRQL выполняемого кода. Она может отображаться на аналогичную аппаратную переменную, а если ее нет, она ее эмулирует.
Схема обработки прерываний:
· Поступает запрос на прерывание
· Вызывается диспетчер прерываний
|
|
· Он анализирует IRQL поступившего прерывания.
· Если он ниже текущего – прерывание помещается в очередь запросов, диспетчер продолжает обрабатывать текущее прерывание
· Если он выше текущего – диспетчер текущее прерывание помещает в очередь и начинает обрабатывать вновь поступившее.
Данная схема централизованная, ОС имеет полный контроль за прерываниями.
Уровни приоритета прерываний в Виндовс НТ:
· Самый высокий – ошибки шины, тяжелые аппаратные сбои - 31
· Прерывания по сбою питания - 30
· Межпроцессорные прерывания - 29
· Системный таймер – 28
· Контроль производительности ядра - 28
· Прерывания от внешних устройств 26-3
· Диспетчерский (ДПС) – вызов отложенной процедуры - 2
· Асинхронный (АПС) – асинхронный вызов процедуры - 1
· Обычный код, нормальное выполнение потоков – 0;