Обработка прерываний в Windows
Я хочу знать, какие потоки обрабатывает прерывания устройства. Что происходит при прерывании потока в режиме пользователя? Также получают ли другие пользовательские потоки возможность работать, когда система обрабатывает прерывание?
Пожалуйста, предложите мне некоторый справочный материал, описывающий, как прерывания обрабатываются окнами.
3 ответа
Сами прерывания устройства (как правило) обрабатываются любым потоком, в котором ЦП принял прерывание, но в кольце 0 и с другим уровнем защиты. Это ограничивает некоторые действия, которые может выполнять обработчик прерываний, потому что большую часть времени текущий поток не будет связан с потоком, который ожидает события, которое указывает прерывание.
Само ядро является закрытым исходным кодом и документируется только через его внутренний API. Этот API доступен авторам драйверов устройств и описан в комплектах разработки драйверов.
Некоторые ресурсы, с которых можно начать:
Любая редакция Microsoft Windows Internals от Соломона и Руссиновича. Нынешнее, кажется, 4-е издание, но даже старое издание поможет.
Windows DDK, теперь переименованный в WDK. Его документация также доступна онлайн. Обязательно прочтите Руководство по проектированию режима ядра...
У Sysinternals есть инструменты и статьи для изучения и объяснения поведения ядра. Раньше это был независимый сайт, пока Microsoft не устала от того, что Марк Руссинович, похоже, знает больше о том, как работает ядро, чем они.;-)
Обратите внимание, что исходный код для многих распространенных драйверов устройств включен в DDK в примерах. Хотя рабочие версии почти наверняка отличаются, чтение примеров драйверов может ответить на некоторые вопросы, даже если вы не хотите реализовывать драйвер самостоятельно.
Как и любая другая операционная система, Windows обрабатывает прерывания в режиме ядра с повышенным уровнем приоритета прерываний (я думаю, что они называют их IRPL, но я не знаю, что означает "R"). Любой пользовательский поток или поток ядра нижнего уровня, работающий на той же машине, будет прерван во время обработки запроса на прерывание и будет возобновлен после завершения обработки без прерываний.
Чтобы узнать больше о прерываниях устройства в Windows, вам нужно изучить разработку драйвера устройства. Это нишевая тема, я не думаю, что вы можете найти много полезных ресурсов в Интернете, и вам, возможно, придется поискать книгу или учебный курс.
В любом случае, Windows обрабатывает прерывания с помощью уровней запросов прерываний (IRQL) и отложенных вызовов процедур. Прерывание обрабатывается в режиме ядра, который работает с более высоким приоритетом, чем режим пользователя. Правильный обработчик прерываний должен реагировать очень быстро. Он только выполняет абсолютно необходимые операции и регистрирует отложенный вызов процедуры для запуска в будущем. Это произойдет, когда система находится на уровне запроса прерывания.