4

Win32 では、プロセッサの定義を超えてどの程度割り込みがサポートされていますか? たとえば、x86 マシンは、ブレークポイント トラップ (INT 3) などのトラップを含め、少なくとも 18 の割り込みを定義します。他の 19 ~ 255 の割り込みは、Intel によってソフトウェア定義の割り込みとして開かれたままになっています。これらのいずれかが Windows/WinAPI で使用されていますか、それともアプリケーションが好きなように使用できるように開いていて無料ですか? Windows がそれらを使用している場合、関連するドキュメントはどこにありますか? MSDN を調べましたが、何も見つかりませんでした。

(ところで、私はコンパイラ、デバッガ、その他のシステムレベルのプログラミングを行っているので、そもそも割り込みを使用することの妥当性についてのあなたの意見を私に教えないでください。)

4

1 に答える 1

4

Win32アプリでは、おそらく一般的に使用される割り込みは1つだけint 2Ehです。これは、システムコールのエントリポイントとして使用されます。int 21hこれはDOSの場合と似ています。残りの割り込みはアプリでは使用されません。

ただし、アプリは、構造化例外処理(SEH)/ベクトル化例外処理()を介して、一部のCPU例外(およびデバッグブレーク)を処理できVEHます。Windowsは、アプリで発生したCPU例外をキャッチし、可能な場合はアプリに反映します(WindowsはCPU例外モデルの模倣に完全ではありません)。

Windowsは内部でデバイス割り込みを使用し、アプリがそれらを混乱させないようにします。x86 CPUは、カーネルが実行される最も特権的なモードで割り込みを処理します。

現在、多くのデバイス割り込みは固定割り込みベクトルに関連付けられておらず、構成可能であり、設定を照会または変更するには、PCIなどのさまざまなものを操作する必要があります。

デバイスと割り込みを直接操作する場合は、Windows用のカーネルモードドライバーを作成する必要があります。デバイスドライバーキット(DDK)とそのような本がありWindows Internalsます。

それでも、デバイスXYZとその割り込みプログラミングの詳細を探している場合は、ハードウェア固有の情報が必要になるため、MSDNやDDKですべてまたは多くを見つけることはできません。これはMicrosoftの制御の及ばないものです。カーネルは、I / Oを実行し、割り込みを処理するために必要な機能を提供しますが、最終的には、デバイスドライバーがそれらをいずれかの方法で使用する必要があります。

于 2013-02-19T22:28:08.250 に答える