0

ここにあるトレーニング機関の 1 つからの Linux ノートを調べています。そのため、プロセスが作成されるたびに、リージョンがそれに割り当てられます。リージョンには、プロセスのすべてのセグメントが含まれます。

また、リージョンは region-table によって指定されます。リージョン テーブルには、次のエントリが含まれます。 --
仮想アドレスから - 物理アドレス ポインタ + ディスク ブロック ディスクリプタ

ディスク ブロック記述子は、ディスク上のスワップ ファイルまたは exe ファイルを指します。

私が持っている2つのダウト:-----

1> グローバルおよびローカル記述子の役割はどこにありますか。

http://www.google.co.in/imgres?um=1&hl=en&sa=N&tbo=d&biw=1366&bih=677&tbm=isch&tbnid=GSUGxm8x4QWQ1M:&imgrefurl=http://iakovlev.org/index.html%3Fp%3D945&docid= 8Y36SIxwT17J6M&imgurl=http://iakovlev.org/images/intel/31.jpg&w=1534&h=1074&ei=oBX8UKuwBoHsrAer8YHQAw&zoom=1&iact=hc&vpx=79&vpy=377&dur=609&hovh=188&hovw=268&tx=150&ty=107&sig=103468883298920883665&page=1&tbnh=155&tbnw=221&start= 0&ndsp=27&ved=1t:429,r:14,s:0,i:124

2> 各プロセスには独自のグローバル記述子テーブルがありますか? そうでなければ、2 つのプロセスの仮想アドレスが同じ物理アドレスを指します。

提案してください

4

1 に答える 1

0

1) グローバル記述子テーブルは、線形アドレスのベースアドレスを提供します。それはほぼ常にゼロであり、「制限」も「すべて1」に設定されています(つまり、すべてのアドレス可能なメモリ)。実際には、セグメント セレクターは実際には使用されません。アーキテクチャでは、それらが存在してロードされている必要がありますが、それらが「使用できる」という実際の効果は Linux では使用されていません。

ローカル記述子テーブルは、プロセスごとに LDT があることを除いて、まったく同じように機能します。通常、タスクのスタック セグメントを保持します。ベース アドレスはゼロのままです。プロセスは LDT を変更できますが、GDT を変更することはできません。

セグメントが GDT か LDT かを判断するには、ビット 3 (8 に相当するもの) を見てください。たとえば、私のシステムでssは値0x2bが であるため、ビット 3 が設定されています。cs一方、 は33であるため、ビット 3 が設定されていないため、GDT から出てきます。

2) いいえ。GDT は 1 つ (正確には CPU コアごと) です。それが「グローバル」と呼ばれる理由です。プロセスごとに 1 つあるため、これがスタック セグメントが LDT にある理由でもあります。

于 2013-01-20T16:45:04.053 に答える