Централизованная схема диспетчеризации прерываний на примере Windows NT

Некоторые процессоры (но не все) поддерживают обработку прерываний на аппаратном уровне. В таких процессорах есть внутренняя переменная – уровень прерываний процессора. Если ОС работает на таких процессорах, то она может пользоваться этой встроенной системой.

Но такие средства есть не у всех процессоров (их нет у Пентиум). И чтобы не зависеть от аппаратной платформы, в ОС вводится собственная программная система приоритетов прерываний.

· В Виндовс НТ есть диспетчер прерывываний (Trap Handler).

· Все, что генерирует прерывания – это источник прерывания, они делятся на несколько классов, каждому из которых присваивается свой уровень запроса прерывания Interrupt Request Query Level, IRQL. IRQL определяет приоритет прерываний данного класса.

· Также в ОС есть внутренняя переменная, IRQL выполняемого кода. Она может отображаться на аналогичную аппаратную переменную, а если ее нет, она ее эмулирует.

Схема обработки прерываний:

· Поступает запрос на прерывание

· Вызывается диспетчер прерываний

· Он анализирует IRQL поступившего прерывания.

· Если он ниже текущего – прерывание помещается в очередь запросов, диспетчер продолжает обрабатывать текущее прерывание

· Если он выше текущего – диспетчер текущее прерывание помещает в очередь и начинает обрабатывать вновь поступившее.

Данная схема централизованная, ОС имеет полный контроль за прерываниями.

Уровни приоритета прерываний в Виндовс НТ:

· Самый высокий – ошибки шины, тяжелые аппаратные сбои - 31

· Прерывания по сбою питания - 30

· Межпроцессорные прерывания - 29

· Системный таймер – 28

· Контроль производительности ядра - 28

· Прерывания от внешних устройств 26-3

· Диспетчерский (ДПС) – вызов отложенной процедуры - 2

· Асинхронный (АПС) – асинхронный вызов процедуры - 1

· Обычный код, нормальное выполнение потоков – 0;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: