Я хочу знать, какие потоки обрабатывают прерывания устройства. Что происходит, когда во время работы потока пользовательского режима происходит прерывание? Также получают ли другие пользовательские потоки возможность запускаться, когда система обрабатывает прерывание?

Пожалуйста, предложите мне несколько справочных материалов, описывающих, как прерывания обрабатываются окнами.

8
Canopus 3 Апр 2009 в 09:43

3 ответа

Лучший ответ

Сами прерывания устройства (обычно) обрабатываются любым потоком, имеющим процессор, который принял прерывание, но в кольце 0 и на другом уровне защиты. Это ограничивает некоторые действия, которые может предпринять обработчик прерывания, поскольку большую часть времени текущий поток не будет связан с потоком, ожидающим наступления события, на которое указывает прерывание.

Само ядро ​​имеет закрытый исходный код и документируется только через его внутренний API. Этот API предоставляется авторам драйверов устройств и описывается в наборах для разработки драйверов.

Некоторые ресурсы для начала:

Обратите внимание, что исходный код многих распространенных драйверов устройств включен в DDK в примерах. Хотя производственные версии почти наверняка различаются, чтение примеров драйверов может ответить на некоторые вопросы, даже если вы не хотите создавать драйвер самостоятельно.

3
RBerteig 3 Апр 2009 в 10:55

Как и любая другая операционная система, Windows обрабатывает прерывания в режиме ядра с повышенным уровнем приоритета прерывания (я думаю, они называют их IRPL, но я не знаю, что означает «R»). Любой пользовательский поток или поток ядра нижнего уровня, работающий на том же компьютере, будет прерван на время обработки запроса прерывания и возобновится после завершения обработки прерывания.

1
John Saunders 3 Апр 2009 в 10:11
Фактически это IRQL (Interrupt ReQuest Level). Всего их 32. Код режима пользователя работает на ПАССИВНОМ (0) уровне. Устройства IRQL / DIRQL выше уровня DISPATCH (2).
 – 
dragonfly
3 Апр 2009 в 10:21
Вы, наверное, помните, что внутреннее представление системного вызова, которое доставляется драйверу устройства, называется IRP (пакетом запроса ввода-вывода) ...
 – 
RBerteig
3 Апр 2009 в 10:29
Я не должен отвечать на вопросы так поздно ночью. Я вспомнил из операционной системы VMS, где они называются IPL - Interrupt Priority Levels. Возвращаясь к своему техническому детству.
 – 
John Saunders
3 Апр 2009 в 16:10

Чтобы узнать больше о прерываниях устройств в Windows, вам необходимо изучить разработку драйверов устройств. Это нишевая тема, я не думаю, что вы можете найти много полезных ресурсов в Интернете, и вам, возможно, придется искать книгу или учебный курс.

В любом случае Windows обрабатывает прерывания с помощью уровней запроса прерывания (IRQL) и отложенных вызовов процедур. Прерывание обрабатывается в режиме ядра, который работает с более высоким приоритетом, чем пользовательский режим. Правильный обработчик прерывания должен реагировать очень быстро. Он выполняет только абсолютно необходимые операции и регистрирует отложенный вызов процедуры для запуска в будущем. Это произойдет, когда система находится на уровне запроса прерывания.

0
kgiannakakis 3 Апр 2009 в 10:34
Привет @kgiannakakis, у меня есть одна проблема с драйвером Windows, и я думаю, что вы единственный, кто может мне помочь. позвольте мне объяснить вкратце. Я работаю над драйвером последовательного порта. Прерывание создается для дочернего элемента в драйвере шины. И я должен использовать его в драйвере порта. Теперь получаю прерывание H / W и регистр чтения, но драйвер шины не получает подтверждения, что прерывание обслуживается Я искал в Интернете, но не нашел правильного ответа. пожалуйста, помогите мне решить эту проблему, если сможете. & Извините за размещение моего запроса здесь. размещено-stackoverflow
 – 
Akatsuki
12 Ноя 2014 в 15:18