
- •2. Функции ос
- •Понятие ресурса. Управление ресурсами в вычислительной системе
- •Процессы и потоки
- •4. Водопадная (каскадная, последовательная) модель
- •Итерационная модель
- •Спиральная модель
- •5. Архитектуры осрв
- •Классификации информационных систем [править] Классификация по архитектуре
- •Типовые задачи администрирования
- •9, Диспетчер объектов
- •Особенности
- •35, Уровни запросов программных прерываний
- •37, Программные прерывания
- •Суть dpc
- •Управление dpc
- •Примечания
- •43, Синхронизация
- •44, Спин-блокировки
- •Спин-блокировки с очередями
- •45, Синхронизация при низком irql
- •47, События с ключом и критические секции
- •48, Быстрые и защищенные мьютексы
- •Ресурсы исполнительной системы
- •52, Трассировка событий ядра
35, Уровни запросов программных прерываний
Хотя контроллеры прерываний различают уровни приоритетов прерываний, Windows использует свою схему приоритетов прерываний, известную под названием уровни запросов прерываний (interrupt request levels, IRQL). Внутри ядра IRQL представляются в виде номеров 0-31 в системах х86 и 0-15 в системах хб4 и IA64, причем больший номер соответствует прерыванию с более высоким приоритетом. Ядро определяет стандартный набор IRQL для программных прерываний, a HAL увязывает IRQL с номерами аппаратных прерываний.
Прерывания обслуживаются в порядке их приоритета, и прерывания с более высоким приоритетом вытесняют обработку прерываний с меньшим приоритетом. При возникновении прерывания с высоким приоритетом процессор сохраняет информацию о состоянии прерванного потока и активизирует сопоставленный сданным прерыванием диспетчер ловушки. Последний повышает IRQL и вызывает процедуру обслуживания прерывания (ISR). После выполнения ISR диспетчер прерывания понижает IRQL процессора до исходного уровня и загружает сохраненные ранее данные о состоянии машины. Прерванный поток возобновляется стой точки, где он был прерван.
Уровни приоритетов IRQL имеют совершенно иной смысл, чем приоритеты в схеме планирования потоков. Приоритет в этой схеме является атрибутом потока, тогда как IRQL — атрибутом источника прерывания, например клавиатуры или мыши. Кроме того, IRQL каждого процессора меняется во время выполнения команд операционной системы.
Значение IRQL определяет, какие прерывания может получать данный процессор. IRQL также используется для синхронизации доступа к структурам данных режима ядра. При выполнении поток режима ядра повышает или понижает IRQL процессора либо напрямую, либо — что бывает гораздо чаще — опосредованно (через функции, которые обращаются к синхронизирующим объектам ядра). Прерывания от источника с IRQL, превышающим текущий уровень, прерывают работу процессора, а прерывания от источников, IRQL которых меньше или равен текущему уровню, маскируются до тех пор, пока выполняемый поток не понизит IRQL.
Поток режима ядра повышает и понижает IRQL процессора, на котором он выполняется, в зависимости от того, что именно делает этот поток. Например, обработчик ловушки (или сам процессор) при прерывании повышает IRQL процессора до IRQL источника прерывания. В результате все прерывания с более низким или равным IRQL маскируются (только на этом процессоре), что не дает прерыванию с таким же или более низким IRQL помешать процессору обработать текущее прерывание. Замаскированные прерывания либо обрабатываются другим процессором, либо откладываются до понижения IRQL. Поэтому все системные компоненты, в том числе ядро и драйверы устройств, пытаются удерживать IRQL на уровне passive («пассивный»), иногда называемом низким уровнем. Если бы IRQL долго оставался неоправданно высоким, драйверы устройств не смогли бы оперативно реагировать на аппаратные прерывания.
37, Программные прерывания
Этот вид прерываний служит для решения многих задач, в том числе:
инициации диспетчеризации потоков;
обработки прерываний, не критичных по времени;
обработки событий таймеров;
асинхронного выполнения какой-либо процедуры в контексте конкретного потока;
поддержки асинхронного ввода-вывода.
Хотя большинство прерываний генерируется аппаратно, ядро Windows тоже может генерировать прерывания — только они являются программными.
38, DPC (отложенный вызов процедуры) — специфический механизм вызова процедур в архитектуре Windows.