2009-04-03 3 views
7

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

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

ответ

3

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

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

Некоторые ресурсы, чтобы вы начали:

  • Любое издание Microsoft Windows Internals Соломона и Руссиновичем. Похоже, что это четвертое издание, но даже старое издание поможет.

  • Windows DDK, теперь переименованный в WDK. Его документация - available online. Обязательно прочтите Kernel Mode Design Guide ...

  • Sysinternals содержит инструменты и статьи, чтобы исследовать поведение ядра и объяснить его. Раньше это был независимый сайт, пока Microsoft не устала от Марка Руссиновича, похоже, больше узнать о том, как работает ядро, чем они. ;-)

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

1

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

+0

На самом деле это IRQL (уровень повторного прерывания). Их 32. Код режима пользователя работает в режиме PASSIVE (0). Устройства IRQL/DIRQL выше уровня DISPATCH (2). – dragonfly

+0

Возможно, вы помнили, что внутреннее представление системного вызова, которое доставляется драйверу устройства, называется IRP (пакет запроса ввода-вывода) ... – RBerteig

+0

Я не должен отвечать на такие вопросы так поздно ночью.Я помню из операционной системы VMS, где они называются IPL - Уровни приоритета прерывания. Возвращение к моему техническому детству. –

0

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

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

+0

hi @kgiannakakis, У меня есть одна проблема с драйвером Windows, и я думаю, что вы тот, кто может помочь мне. Позвольте мне объяснить кратко. Я работаю над драйвером последовательного порта. Для пользователя в драйвере шины создан встроенный проигрыватель. И я должен использовать его в драйвере порта. Теперь получение регистра прерываний и чтения H/W, но драйвер шины не получает подтверждения, что прерывание Я искал в Интернете, но не нашел правильного ответа. пожалуйста, помогите мне решить эту проблему, если сможете. & Извините, что разместил мой запрос здесь. [Разм-StackOverflow] (http://stackoverflow.com/questions/26713360/serial-port-driver-got-stuck-in-serialisr-routine) – Akatsuki

Смежные вопросы