どのスレッドがデバイス割り込みを処理しているか知りたいです。ユーザー モード スレッドの実行中に割り込みが発生するとどうなりますか? また、システムが割り込みを処理しているときに、他のユーザー スレッドが実行される可能性はありますか?
ウィンドウによる割り込みの処理方法を説明した参考資料を教えてください。
デバイスの割り込み自体は、(通常)割り込みを受け取ったCPUを備えたスレッドによって処理されますが、リング0で異なる保護レベルになります。これにより、割り込みハンドラーが実行できるアクションの一部が制限されます。これは、ほとんどの場合、現在のスレッドは、割り込みが示しているイベントの発生を待機しているスレッドとは関係がないためです。
カーネル自体はクローズドソースであり、内部APIを介してのみ文書化されています。そのAPIは、デバイスドライバーの作成者に公開されており、ドライバー開発キットで説明されています。
始めるためのいくつかのリソース:
SolomonおよびRussinovichによるMicrosoftWindowsInternalsのすべてのエディション。現在は第4版のようですが、古い版でも役に立ちます。
Windows DDKは、WDKに名前が変更されました。そのドキュメントはオンラインでも入手できます。カーネルモード設計ガイドを必ずお読みください...
Sysinternalsには、カーネルの動作を調べて説明するためのツールと記事があります。これは、MicrosoftがMark Russinovichに飽きるまでは独立したサイトでしたが、カーネルがどのように機能するかについて、彼らよりもよく知っているようです。;-)
多くの一般的なデバイスドライバーのソースコードがサンプルのDDKに含まれていることに注意してください。製品版はほぼ確実に異なりますが、サンプルドライバーを読むと、ドライバーを自分で実装したくない場合でも、いくつかの質問に答えることができます。
他のオペレーティング システムと同様に、Windows はカーネル モードで割り込みを処理し、高い割り込み優先度レベルを使用します (彼らはそれらを IRPL と呼んでいると思いますが、「R」が何を表しているかはわかりません)。同じマシン上で実行されているすべてのユーザー スレッドまたは下位レベルのカーネル スレッドは、割り込み要求の処理中に中断され、割り込み処理が完了すると再開されます。
Windows でのデバイス割り込みについて詳しく知るには、デバイス ドライバーの開発について学習する必要があります。これはニッチなトピックです。Web には有用なリソースがあまりないと思います。本やトレーニング コースを探す必要があるかもしれません。
とにかく、Windows は割り込み要求レベル (IRQL) とDeferred procedure callsで割り込みを処理します。割り込みは、ユーザー モードよりも高い優先度で実行されるカーネル モードで処理されます。適切な割り込みハンドラは、非常に迅速に反応する必要があります。絶対に必要な操作のみを実行し、将来実行する遅延プロシージャ コールを登録します。これは、システムが割り込み要求レベルにあるときに発生します。