1

プログラムまたはプロシージャの実行環境を構成するコード、データ、およびスタックセグメントに加えて、アーキテクチャは、タスク状態セグメント(TSS)とLDTの2つのシステムセグメントを定義します。

GDTは、セグメントセレクタおよびセグメント記述子によってアクセスされないため、セグメントとは見なされません。TSSとLDTには、セグメント記述子が定義されています。

--Intel 64およびIA32アーキテクチャソフトウェアマニュアル3A、2.1.2

GDTがセグメントと見なされない理由については少し混乱しています。

誰かが詳細な説明をすることができますか?

4

1 に答える 1

4

すべてを検索する最初のポイントであるGDTは、鶏が先か卵が先かという状況になるため、セレクターを介してアクセスすることはできません。

GDT自体には、さまざまなTSSおよびLDTメモリブロックの記述子があるため、それらセグメントと見なされ、セグメントセレクターを介してアクセスできます。さらに、個々のLDTには他のメモリ領域のセレクターがあるため、それらの領域もセグメントになります。

しかし、GDTが選択プロセスへの最初のエントリポイントである場合、GDTを見つけるために、どのテーブルで記述子を検索するかを自問する必要がありますか?

実際には、GDTのアドレスを(LGDT命令を使用して)ロードすると、セレクターではなく、使用している線形アドレスになります。x86開発者ガイドから:

LGDTおよびLIDT命令は、オペレーティングシステムソフトウェアでのみ使用されます。アプリケーションプログラムでは使用されません。これらは、線形アドレス(つまり、セグメント相対アドレスではない)と保護モードでの制限を直接ロードする唯一の命令です。これらは通常、リアルアドレスモードで実行され、プロテクトモードに切り替える前にプロセッサを初期化できるようにします。

そのため、GDTはセグメントとは見なされないと彼らは言います。

于 2012-11-11T03:44:25.723 に答える