искания Нива софтуер за прекъсване (IRQL)
Въпреки, че прекъсват контролер определя приоритета на прекъсването, Windows инсталира своя собствена прекъсват приоритет схема, известна като прекъсват нива поискване (IRQL). В ядрото IRQL нива са представени като номера от 0 до 31 x86 системи и под формата на числа от 0 до 15 на x64 системи и IA64, където по-високи номера съответстват на прекъсване с по-висок приоритет.
Въпреки че ядрото определя за софтуер прекъсва IRQL настроени нива, HAL хардуер прекъсне показва номера IRQL-на нива. Фигурата показва IRQL-нива за x86 архитектура, както е показано на следващата фигура IRQL-нива за x64 архитектури и IA64.
Нива на заявките за прекъсване (IRQL) x86 архитектура
Нива на заявките за прекъсване (IRQL) за x64 и IA64 архитектури.
Прекъсването се обслужват по реда на приоритета и прекъсване с по-висок приоритет се предимството на услугата. В случай на по-високо ниво прекъсне процесор съхранява състоянието на прекъснат нишката и започва да прекъсват контролер, свързан с капан. Това, от своя страна, повишава IRQL и причинява програмата за прекъсване на услуги.
След извършване на тази процедура за прекъсване контролер понижава IRQL ниво процесор на ценностите, върху които е било преди прекъсването и след това заредете запазеното състояние на машината.
Прекъснат нишка продължава изпълнението на мястото, където е била прекъсната. Когато ядрото намалява IRQL, може да реализира прекъсването на по-ниско ниво на приоритет, който е бил скрит. Ако това се случи, ядрото се повтаря процеса за обработка на нови прекъсвания.
IRQL приоритетни нива имат напълно различно значение от приоритетите, използвани при планирането на потоци. Приоритетна график е атрибут на потока, и източник на прекъсване атрибут IRQL, като клавиатура или мишка. В допълнение, всеки процесор има настройка за IRQL, която се променя при изпълнение на кода на операционната система.
Инсталиране IRQL всеки процесор определя кои да прекъсне процесора може да получи. IRQL нива се използват и за синхронизиране на достъп до структурата на данните в режима на ядрото. След като предизвика поток режима на ядрото, тя издига и сваля IRQL процесора или директно чрез обаждане KeRaiseIrql KeLowerIrql и функции. или, по-често, косвено, чрез функцията призовава това искане обекти ядрото, използвани за синхронизация. Както е показано на фигурата, за прекъсване идва от източник IRQL, толкова по-голям, отколкото сегашното ниво, прекъсване на процесора и да се прекъсне, идващи от източници IRQL нива, равни на или под сегашното ниво, са маскирани, докато изпълняващата конец е не по-ниска IRQL.
Тъй като препратката към PIC е сравнително бавен операция, Хал-механизми, които изискват достъп до автобуса IO да променят IRQL нива (например PIC 32-битов интерфейс усъвършенствани системи за контрол на конфигуриране и захранване - Advanced за енергийно потребление, ACPI) , прилагане на оптимизацията на работата, която се нарича "мързеливи IRQL» (мързелив IRQL) и избягва препратки към мира.
С увеличаване IRQL HAL отбелязва за нов IRQL, без да се променя маската прекъсване. Ако след това прекъсване с по-ниско ниво, наборите от HAL прекъсват маска с настройките, съответстващи на първото прекъсване, и прекъсват замръзва по-ниско ниво (тя държи по този начин в състояние на изчакване), докато IRQL няма да бъде понижена.
По този начин, ако настъпи прекъсване с по-ниско ниво с увеличение IRQL са необходими PIC HAL модифицирани механизми.
ЗАБЕЛЕЖКА. Изключения от правилото блокиране прекъсва или равна на по-ниско ниво с нарастваща загриженост прекъсва IRQL APC ниво. Ако се увеличава потока на нивото на APC IRQL и след това нейното изпълнение е обект на разсрочване прекъсва поради изпращане / DPC-високо ниво, системата може да предава на APC ниво повторно планирано прекъсване на потока. По този начин, може да се счита нива APC IRQL, местно поток, а не за целия процесор.
режима на ядрото поток издига и сваля IRQL на процесора по която се движи в зависимост от това за какво се опитвате да направите. Например, когато настъпи прекъсване, капани процесор (или евентуално процесора) процесор увеличава IRQL да IRQL, определен за източника на прекъсване. Това увеличение маски всички прекъсва същото и по-ниско IRQL (само по този процесор), като се гарантира, че един процесор, който служи за прекъсване, за прекъсване не е заловен при същата или по-ниско ниво.
Маскирани прекъсне или се обработват от друг процесор, или да се придържат към, толкова дълго, колкото IRQL пада. Ето защо, всички компоненти на системата, включително и водачите на ядрото и на устройства, се опитват да пазят IRQL на пасивната (понякога се нарича ниско ниво). Това се прави, за навременно реагиране на драйвери на устройства за хардуерни прекъсвания, при условие че не се провежда IRQL ненужно високи за продължителни периоди от време.
Debugger спаси IRQL за процесор 0x0 - 0 (LOW_LEVEL)
Имайте предвид, че стойността на IRQL се съхраняват на две места. Първото място, където е представено текущото IRQL, - контрол област процесор (контролна област процесор, PCR), а вторият - на неговото продължение, блок за управление на процесора домейн (processorregioncontrolblock, PRCB), който съдържа съхранява поле IRQL DebuggerSaveIrql. PCR и PRCB съдържа информация за състоянието на всеки процесор в системата, включително IRQL ток, указател към хардуер IDT-таблицата, информацията за тях ток и следващата, изберете да пускате потока.
Ядрото и HAL използваме тази информация, за извършване на действия, насочени към специфична архитектура и конкретна машина. Части на PCR и PRCB структури открито Ntddk.h определени в заглавните файлове, свързани с инструменти за Windows Kit Driver (WDK).
KPCR за процесор 0 при fffff80001bfad00:
Голямо Малко 1 1