Составители:
Рис.3.4. Обработка прерывания при участии супервизоров ОС
Центральный процессор также имеет свой IRQL, который изменяется по мере ра-
боты системы. Изменение IRQL центрального процессора позволяет системе блокиро-
вать прерывания с более низким приоритетом. Приоритет процессора могут изменить
только системные сервисы, работающие на уровне ядра, например перехватчик. Потоки,
функционирующие на пользовательском уровне, не имеют таких привилегий. Заблоки-
рованным прерываниям внимание не уделяется до тех пор, пока какой-нибудь поток яв-
ным образом не понизит уровень прерывания центрального процессора. Если процессор
работает при самом низком значении IRQL, происходит нормальное выполнение потока
и разрешается обработка всех прерываний. Когда перехватчик вызывает процедуру об-
служивания прерывания (interrupt service routine, ISR), он сначала назначает централь-
ному процессору тот же IRQL, который имеет перехваченный сигнал. На время выпол-
нения ISR прерывания более низкого уровня, например сигналы от устройств ввода
данных, блокируются, чтобы не отвлекать систему от выполнения критических опера-
ций, таких как процедуры восстановления при отключении питания. При понижении
IRQL процессора заблокированные прерывания разблокируются и начинают поочередно
обрабатываться обычным образом. Время от времени центральный процессор переклю-
чается на самый низкий IRQL, чтобы возобновить выполнение прерванных потоков.
Прежде чем приступить к обработке прерывания, перехватчик должен найти в сис-
теме соответствующую подпрограмму. Он ищет такие подпрограммы в таблице рас-
пределения прерываний (interrupt dispatch table, IDT). Указанная таблица содержит 32
записи, по одной для каждого уровня запроса прерывания. Каждая из таких записей ука-
зывает на подпрограмму обработки прерывания или на последовательную цепочку таких
подпрограмм - в том случае, если несколько устройств используют один и тот же IRQL.
При загрузке в систему новый драйвер устройства записывает в IDT собственный
обработчик. Драйверы делают это путем создания и подключения объекта-прерывания,
т.е. структуры, содержащей всю информацию, необходимую ядру для дополнения IDT.
С помощью объекта-прерывания драйверы получают возможность зарегистрировать
свои обработчики прерываний, ничего не зная ни об аппаратном устройстве, ни о струк-
туре таблицы распределения прерываний.
84
Рис.3.4. Обработка прерывания при участии супервизоров ОС
Центральный процессор также имеет свой IRQL, который изменяется по мере ра-
боты системы. Изменение IRQL центрального процессора позволяет системе блокиро-
вать прерывания с более низким приоритетом. Приоритет процессора могут изменить
только системные сервисы, работающие на уровне ядра, например перехватчик. Потоки,
функционирующие на пользовательском уровне, не имеют таких привилегий. Заблоки-
рованным прерываниям внимание не уделяется до тех пор, пока какой-нибудь поток яв-
ным образом не понизит уровень прерывания центрального процессора. Если процессор
работает при самом низком значении IRQL, происходит нормальное выполнение потока
и разрешается обработка всех прерываний. Когда перехватчик вызывает процедуру об-
служивания прерывания (interrupt service routine, ISR), он сначала назначает централь-
ному процессору тот же IRQL, который имеет перехваченный сигнал. На время выпол-
нения ISR прерывания более низкого уровня, например сигналы от устройств ввода
данных, блокируются, чтобы не отвлекать систему от выполнения критических опера-
ций, таких как процедуры восстановления при отключении питания. При понижении
IRQL процессора заблокированные прерывания разблокируются и начинают поочередно
обрабатываться обычным образом. Время от времени центральный процессор переклю-
чается на самый низкий IRQL, чтобы возобновить выполнение прерванных потоков.
Прежде чем приступить к обработке прерывания, перехватчик должен найти в сис-
теме соответствующую подпрограмму. Он ищет такие подпрограммы в таблице рас-
пределения прерываний (interrupt dispatch table, IDT). Указанная таблица содержит 32
записи, по одной для каждого уровня запроса прерывания. Каждая из таких записей ука-
зывает на подпрограмму обработки прерывания или на последовательную цепочку таких
подпрограмм - в том случае, если несколько устройств используют один и тот же IRQL.
При загрузке в систему новый драйвер устройства записывает в IDT собственный
обработчик. Драйверы делают это путем создания и подключения объекта-прерывания,
т.е. структуры, содержащей всю информацию, необходимую ядру для дополнения IDT.
С помощью объекта-прерывания драйверы получают возможность зарегистрировать
свои обработчики прерываний, ничего не зная ни об аппаратном устройстве, ни о струк-
туре таблицы распределения прерываний.
84
Страницы
- « первая
- ‹ предыдущая
- …
- 80
- 81
- 82
- 83
- 84
- …
- следующая ›
- последняя »
