Интернет магазин китайских планшетных компьютеров



Компьютеры - IRQL

31 мая 2011





IRQL — букв. уровень запроса прерывания. Механизм программно-аппаратной приоретизации, применяемый для синхронизации в операционных системах семейства Windows NT.

IRQL является программным атрибутом процессора и указывает приоритет кода, исполняющегося на этом процессоре по отношению к прерываниям и другим асинхронным событиям. Для аппаратных прерываний, в большинстве случаев, IRQL реализуется аппаратно, однако код операционной системы сам может логически находиться на разных приоритетах, в таком случае дополнительные уровни IRQL реализуются программно. Например, приоритет планировщика потоков или DPC выше, чем приоритет пользовательских потоков. Если бы это было не так, тогда потоки могли бы вытеснить планировщик и тем самым «отключить» вытесняющую многозадачность, в свою очередь планировщик может быть сделан прерываемым аппаратными прерываниями. В Windows NT применяется 32 уровня IRQL:

  • High
  • Power fail
  • IPI
  • Clock
  • Profile
  • Диапазон аппаратных прерываний, называемых Devices IRQL/DIRQL
  • DPC/DISPATCH
  • APC
  • PASSIVE

Это означает, например, что планировщик может быть прерван аппаратными прерываниями, межпроцессорными прерываниями и т. д., но не может быть прерван асинхронными процедурами и обычными потоками, работающими на уровне PASSIVE. Межпроцессорные прерывания IPI могут быть прерваны сбоем электропитания, но не могут быть прерваны обычными аппаратными прерываниями от устройств и т. д.

Также IRQL помогает отслеживать и выявлять логические ошибки при проектировании ОС, легендарная ошибка с сообщением IRQL_NOT_LESS_OR_EQUAL означает следующую ситуацию: драйвер или другой привилегированный код с IRQL >= DPC/DISPATCH обратился к отсутствующей в памяти странице, требуется вызов подсистемы, подгружающей страницы с диска, однако эта подсистема в соответствии с архитектурой Windows NT имеет IRQL меньше, чем DPC/DISPATCH. Следовательно, она не имеет права прерывать тот код, который вызвал ошибку страницы. В то же время привилегированный код не может продолжить выполнение, пока страница не будет загружена. Возникает логический тупик, который, собственно, и приводит к краху ОС.

В Linux применяются сходные механизмы. К примеру код обработчика прерывания может быть разделен на две «половины»: top half и bottom half, «верхняя» часть эквивалентна собственно обработчику, «нижняя» — отложенной процедуре. Bottom-half-процедура может быть прервана Top-half-процедурой, но не наоборот. Таким образом, top-half и bottom-half логически эквивалентны уровням IRQL Device IRQL и DPC/DISPATCH соответственно.



Просмотров: 1021


<<< IOS XR
Live USB >>>