пятница, 4 июня 2010 г.

Lazy IRQL

У меня есть эл.версия книги:
М. Руссиновича, Д. Соломона, "Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000", 4 изд.

Читаю сейчас про очень интересный механизм оптимизации называемый "Lazy IRQL" и описываемый на стр. 100 в самом последнем абзаце.

Приведу абзац здесь:
"Поскольку доступ к PIC - операция довольно медленная, в HAL, использующих PIC, реализован механизм оптимизации "Отложоенный IRQL"(LazyIRQL), который избегает обращений к PIC. Когда IRQL повышается, HAL - вместо того чтобы изменять маску прерывания - просто отмечает новый IRQL. Если вслед за этим возникает прерываание с более низким приоритетом, HAL устанавливает маску прерывания в соответствии с первым и откладывает обработку прерывания с более низким приоритетом до понижения IRQL. Таким образом, если при повышенном IRQL не повзникает прерываний с более низким проритетом, HAL не потребуется обращаться к PIC."

Мне даже с n-ой итерации вдумчивого чтения не совсем стало понятны слова авторов. Уж больно туманно как-то все написано. Поэтому обратившись к Four-F получил более понятное пояснение:

"Если только в общих чертах. Т.к. запись в PIC относительно медленная операция, то ядро пытается избежать её таким образом. Когда IRQL повышается, то все все прерывания с этим и более низким уровнем д.б. замаскированы и обработка их должна быть отложена до понижения IRQL. Для этого раньше тупо прописывали маску в PIC. Но если во время обработки первого прерывания больше не произойдет прерываний того же или более низкого уровня, получается что мы зря писали в PIC. Поэтому современное ядро поступает так. Оно запоминают на IRQL первого прерывания, но в PIC не пишут. Если во время обработки этого прерывания действительно происходит прерывание того же или более низкого уровня, то тогда уже ядро записывает в PIC маску, соответствующую текущему обрабатываемому прерыванию. Т.е. в этом случае работает старая схема. Ну а если другого прерывания не случается, то и вообще в PIC ничего писать не нужно. Примерно так эта хрень работает. Более детально я не знаю, ибо нафиг не нужно :)"

Казалось бы вроде, слово в слово, но мне почему-то со слов Four-F более понятно стало, что же происходит?! ;)

Комментариев нет: