4


3

プログラマーの「Invisible」レジスタはどうですか?

これらは* "Programmer Visible" * x86-64レジスタです。

目に見えないレジスタはどうですか? たった今、MMUレジスタ、割り込み記述子テーブル(IDT)がこれらの不可視のレジスタを使用することを学びました。 私はこれらのことを難しい方法で学んでいます。 すぐに全体像を把握できるリソース(書籍/ドキュメント/など)はありますか?

私はプログラマーが目に見えるレジスターを知っており、それらを使ったプログラミングに慣れています。 目に見えないレジスタとその機能について知りたいだけです。 完全な画像を取得したい。 この情報はどこで入手できますか?

編集:

_ 完全な画像を取得したい。 この情報はどこで入手できますか? _

これらは、これらすべての低レベルの詳細を理解するのに役立つ2冊の本です。

  1. *Fundamentals コンピュータの組織と設計の〜Sivarama P. ダンダムディ-1エディション(2003 *)

  2. https://rads.stackoverflow.com/amzn/click/com/0123744938 [コンピューター 組織と設計:ハードウェア/ソフトウェアインターフェイス、第4版、〜David A. パターソン、ジョンL ヘネシー]

2 Answer


3


IDTは、抽象的な観点からこのようなものを含む割り込み記述子テーブルです。最初の18の割り込みはプロセッサによって予約され、次の18の割り込みはチップのアーキテクチャを将来保証するためにインテルによって予約されています…​

Interrupt    Handler
   0         divide_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」を実行します`フラグをクリアしながら続行するには、Return Return命令を中断します。

これは、IDTの動作の抽象的なビューです…​ページ/フラット/保護/仮想モードアドレス指定スキームなどのメモリ管理のアーキテクチャとタイプに応じて、舞台裏でさらに複雑なことが行われています…​

Intelのドキュメントをご覧ください。Intelプログラミングの優れた完全なビューを提供しています…​

編集: DOSの昔(16ビットコードであり、メモリが正確に保護されていませんでした)、独自のハンドラーに割り込みハンドラーを再ルーティングして、元のIDTをオーバーレイすることができました。割り込み、 `getvect(…​)`および `setvect(…​)`呼び出しを使用したキーボード割り込み(このコンテキストではBIOS割り込み)である割り込み9、一部(すべてではないプロセッサ)を処理することもできます割り込み、特に、0で除算するためのIDT 0)…​これらのBIOS割り込みは、プロセッサの割り込みと外観が非常に似ていましたが、共通の機能を共有していましたが、両方とも割り込みベクトルのテーブルがありました(当時知られていました) 。 TSR(Terminate Stay Resident)プログラムは、TSRのハンドラーに再ルーティングされたBIOS割り込みの結果としてDOSで再入可能に保つことができました。


2


興味のある特定のプロセッサのプロセッサリファレンスマニュアルを調べる必要があります。 Itanium Processor Reference Manualをご覧ください。