4

Intel x86 メモリ モデルには、セグメンテーションとページングがあります。システムが最大 64 テラバイトの仮想メモリに対応できるとはどういう意味ですか? 私の理解では、アドレス指定できるのは 4GB の仮想メモリのみです。ここのギャップは何ですか?これはすべて 32 ビット プロセッサのコンテキストにあります。

数学は次のとおりです。

2^13 (セグメントセレクター) * 2 (LDT または GDT) * 2^32 = 2^46 = 64 テラバイト。これは、文献では総仮想メモリと呼ばれています。彼らはそれを間違って仮想メモリと呼んでいますか? 私を混乱させているのは、プロセッサ自体に 32 ビットのアドレス行しかないことです。

それとも、これが (すべてのプロセスにわたって) 合計で割り当てることができる仮想メモリの合計であると言おうとしていますか?

4

3 に答える 3

2

1) セグメント記述子は、別のレジスタにあるセグメントセレクターによってこれらの 2^13*2=2^14 から選択されるため、32 アドレス行の制限をバイパスします。

2) セグメント記述子には、32 ビット値であるセグメントの 32 ビット アドレスが含まれます。それに 32 ビット オフセットを追加するのは単純な算術加算なので、最終的に 32 ビット アドレスになります。2^32=4GB のみ。

問題は、セグメントが重複する可能性があることです。あなたの計算の間違いは、現在のセグメント記述子 (14 ビット) のインデックスとオフセット (32 ビット) が連結されていないという事実にあります。それらは、32 ビットの線形アドレスを形成するために処理されます。

x86 メモリ セグメンテーションの詳細については、このページを参照してください。

于 2012-01-31T20:08:56.173 に答える
1

実際には使用可能です。メモリをディスクにスワップし、必要に応じて実際にその量の仮想メモリをアドレス指定できるため、数値は正しいはずであり、実際に仮想メモリと呼ぶことができます.

ただし、32 ビット モードの x86 プロセッサは、スワップなしで一度に 4 GB しかアドレス指定できません。また、32 ビット モードでこれほど多くのメモリを使用したシステムは聞いたことがなく、通常はあまり実用的ではありません。性能による。

于 2011-03-26T20:50:57.903 に答える
1

ここで言われていることは、x86 プロセッサはそれだけの量のメモリをアドレス指定できるということであり、実際にそうであるということではないと思います。これは、プログラムがセグメント化されたメモリ モデルを使用し、フル セグメントと GP レジスタの両方を使用し、CPU がそれらをそのように使用するように配線されている場合にのみ可能です。ただし、今日のプログラムは通常、フラット メモリ モデル (より少ないメモリをアドレス指定できる) を使用しており、オペレーティング システムはそれほど多くのメモリのアドレス指定をサポートしていません。

そして、マニュアル [1]の §3.3.1 から:

セグメント化されたメモリ モデル — [...] IA-32 プロセッサで実行されるプログラムは、さまざまなサイズとタイプの最大 16,383 [2 14 ] セグメントをアドレス指定でき、各セグメントは最大 2 32バイトです。

したがって、それらは 2 46 (64 TiB) バイトの (仮想および物理?) メモリをアドレス指定できるように配線されているようです、プログラムで使用されているメモリ モデルと、オペレーティング システムがそれをサポートしているかどうかに限定されます。

于 2011-03-26T21:06:57.503 に答える