IDTは割り込み記述子テーブルであり、抽象的な観点からこのようなものが含まれています。最初の18個の割り込みはプロセッサによって予約され、次の18個は将来チップのアーキテクチャを保証するためにIntelによって予約されます...
割り込みハンドラ
0divide_by_zero_handler
1 debug_handler
....。
13 general_exception_handler
14 page_fault_handler
....。
18 machine_check_handler
このコンテキストでは、ハンドラーはおもちゃのカーネルの一部であり、各ハンドラーは、ユーザーランドコードが読み込まれる前の起動時に設定されます。(BIOSはリアルモードコードとも呼ばれる16ビットコードです)、カーネルはハンドラーをセットアップし、32ビットプロテクトモードに切り替えます。割り込みのいずれかが発行されると、割り込み番号に応じて適切なハンドラーが実行されます。たとえば、割り込み14が生成された場合、カーネルはを実行しpage_fault_handler
、ページがダーティでディスク上にあるかどうかを確認してから、そのページをメモリにロードし、アドレスを修正してダーティビットをクリアし、IRET
割り込みリターン命令を実行して続行します、フラグをクリアする...
これは、IDTがどのように機能するかについての抽象的なビューです...バックグラウンドで行われているより複雑なことがあります...ページング/フラット/保護/仮想モードアドレス指定スキームなどのアーキテクチャとメモリ管理のタイプによって異なります...
インテルのプログラミングの優れた完全なビューを提供するインテルのドキュメントをここでご覧ください...
編集:
DOSの昔(16ビットコードであり、正確にメモリ保護されていませんでした)、割り込みハンドラーを独自のハンドラーに再ルーティングして、元のIDTをオーバーレイすることが可能でした(このような割り込みの例) 、getvect(...)
および呼び出しを使用したキーボード割り込み(このコンテキストではBIOS割り込み)である割り込み9、setvect(...)
一部(すべてのプロセッサ割り込みではなく、特にゼロで除算するためのIDT 0)を処理することもできます...これらのBIOS割り込みは外観はプロセッサ割り込みと非常に似ていて、共通の機能を共有していました。どちらも割り込みベクトルのテーブルを持っていました(当時は知られていました)。これが、BIOS割り込みがTSRのハンドラーに再ルーティングされた結果として、TSR(Terminate Stay Resident)プログラムがDOSで再入可能を維持できる方法でした...