0

単一の割り込みソース (タイマー、キーボードなど) は、そのソースからの前の割り込みの処理が「完了」したことをプロセッサが示すまで、新しい割り込みをプロセッサに通知しないことに注意してください。割り込み許可フラグがオンです。

現在の割り込みが終了したことを PIC に通知するのは誰ですか? また、「システム全体の割り込み有効化フラグ」とは何を意味しますか?

4

1 に答える 1

1

それは他の質問の私のコメントでカバーされています。:)

わかりました...もう少し詳細...

PIC とその通常の操作 (BIOS や DOS など) について話している場合、16 の IRQ ラインがあります。これらは (PIC で) 割り込みベクトル8 ~ 0Fh ( IRQ0 ~ IRQ7 ) および70h ~ 77h ( IRQ8 ~ IRQ15 ) にマップされます。

PIC を再プログラミングすることで、この割り当てを変更できます (PIC ( 8259チップ) のドキュメントを参照してください)。さまざまな重要な例外が0から約1Fhまでのベクターに割り込むようにハードワイヤードされているため、この割り当てを変更することは、多くの場合、保護モードで望ましいというだけではありません(たとえば、一般保護例外 (AKA #GP ) はベクター0Dhにあり、このデフォルトの割り当てではIRQ5です)。 .

IRQ0は定期的なタイマー (別名PIT )
IRQ1はキーボードです
IRQ2は2 番目の PIC をチェーンするために使用されます (すべての PIC は最大で 8 つの IRQ を処理するため、16 の IRQ に対して 2 つあり、IRQ8 から 15 までは、実際にはこの IRQ2 を介して配信されます)
IRQ3IRQ4は、 COM1とCOM2のシリアル ポートに使用されます
IRQ6はFDDに使用されます-タイム クロック (別名RTC ) IRQ12は、通常、PS/2 マウスIRQ14 および IRQ15に使用されます。



HDD/CDROMに使用

他の IRQ はあまり固定されていません。

PIC 自体は、I/O ポート 20h と 21h (PIC1) および 0A0h と 0A1h (PIC2) で CPU に接続されています。

EOICPUは、この IRQ の送信元である対応する PIC にコマンドを送信することによって、IRQ 処理の完了を知らせます。

したがって、IRQ0 から IRQ7の場合、ISR は通常、次のコードで終了します。

...
mov al, 20h
out 20h, al ; send EOI to PIC1
; restore al using pop or mov
iret

IRQ8 から IRQ15の場合、同じことが次のようになります。

mov al, 20h
out 0a0h, al ; send EOI to PIC2
out 20h, al ; send EOI to PIC1
; restore al using pop or mov
iret

この後者の場合、すべての PIC が EOI を取得します。前述したように、PIC2 は IRQ を CPU に直接配信するのではなく、PIC1 を介して (PIC1 の IRQ2 で。これにより、IRQ の数が事実上 15 に制限されます)、したがって、両方のPICが参加しています。また、PIC2 は、たとえばキーボードと同様に、PIC1 への割り込みソースです。つまり、2 EOI です。

さらに、一部のデバイスには、独自のEOI. たとえば、XT キーボードは、キーボードの割り込み処理が完了したことを示すために、レジスタの 1 つでビット パルス (1 から 0) を待ちました。このような場合EOIs、デバイスと PIC に送信します。

編集:おそらく、あなたが参照しているテキストFLAGS.IFは、「システム全体の割り込み有効化フラグ」を意味します。

于 2012-05-07T04:06:10.707 に答える