5

どちらのテーブルにも、ベース アドレス、タイプ、長さ、アクセス権など、各セグメントのアクセスの詳細を提供するセグメント記述子が含まれていることを理解しています。

このブログを見ると、次のように違いが説明されています。
1. GDT はシステム内に 1 つのコピーしかないのに対し、LDT は複数のコピーを持つことができます
2. GDT は実行中に変更されない場合がありますが、タスクの切り替え時に LDT が変更されることがよくあります
3. LDT のエントリは GDT に保存されます。GDT と LDT のエントリの構造は同じです。

システムは、実際のプログラムでこれらの構造をどのように異なる方法で使用しますか?

4

1 に答える 1

6

GDT は、割り込み/例外ハンドラーなどのスーパーバイザー コードを含むメモリ ブロックと、カーネル自体によって使用されるブロックを格納するために使用されるため、それらはシステム全体で使用されます。

OTOH、マルチタスク OS は、特定のタスクを構成するメモリ ブロックがメモリ内のどこにあるかを格納する必要があります。そのために、タスクごとに個別の LDT を使用できます。切り替えプロセスには、異なる LDT を LDTR レジスタにロードすることが含まれます。

各タスクは、記述子が現在の LDT または GDT で参照されているメモリ ブロックを確認できます。ユーザー モードのメモリ アクセスでは、ローカル記述子が使用されます。システムコールの場合、INT 命令など、さまざまな手法を使用できます。この命令は、GDT から記述子に常駐するコードに効果的にジャンプします。コール ゲートが GDT 固有のものなのか、LDT でも使用できるのか思い出せません。

于 2015-12-12T22:44:04.120 に答える