3

プロテクトモードで動作する小さなOSを書いています。カスタム割り込み記述子テーブルをロードしたいところですが、どこから始めればよいかわかりません。OS Dev wikiでいくつかのことを読みましたが、回答が必要な質問がいくつかあります。

OS Dev wiki ではthe first 32 (0-31) interrupts are reserved and used by the CPU, as exceptions, so don't use those for APIs or IRQs.、カスタム割り込みテーブルをロードしている場合、それらすべての割り込みにエントリを提供する必要はないということです。

また、ウィキには、BIOS が IRQ0-7 を割り込み 8-15 にマップすると記載されています。この場合、IRQ 割り込みは予約された割り込みと競合しませんか?

私が得ていないものはありますか?割り込み 0 ~ 31 は別のテーブルか何かにありますか? 誰かが私を正しい方向に向けて、物事を片付けてください。

4

2 に答える 2

2

と表示されている場合don't use those [interrupts 0-31] for APIs or IRQsは、予約されている例外以外の機能に使用してはならないことを意味します。これらの割り込みのハンドラーを定義して、例外が発生したときに例外を処理できるようにする必要があります。割り込み番号と説明を含む例外のリストについては、OSDev の例外ページを参照してください。

プロセッサが起動すると、リアル モードになります。このモードでは、例外が少ないため、それらを処理するために予約される割り込みが少なくなります。プロセッサがリアル モードである限り、IRQ に割り込み 8 ~ 15 を使用しても安全です。プロテクト モードで割り込みを有効にする前に、IRQ を別の割り込みに再マップする必要があります。これを行う方法については、 OSDev の PIC (プログラマブル割り込みコントローラー) ページの初期化セクションを参照してください。

于 2011-07-25T23:24:16.797 に答える
0

最初の 32 (0-31) の割り込みは予約されており、例外として CPU によって使用されるため、API や IRQ には使用しないでください。

これは、誰が割り込みを発行できるかについてです。0 ~ 31 は CPU 自体のイベント (内部、ページ フォールト、ゼロ除算など) 用で、その他は外部イベント (ハードウェア起動、キーボード プレス、PCI 割り込みなど) 用です。これは IDT に関するものではありません。テーブル内のすべての割り込みを提供する必要があります。

于 2011-07-25T23:25:03.490 に答える