2

私の頭の中には常に仮想メモリのアイデアが存在していたため、純粋なセグメンテーションについて少し混乱しています。

しかし、私が理解しているように、純粋なセグメンテーションは、すべてRAMにロードされたセグメントに分割された仮想アドレス空間も想像しています。

セグメンテーションを使用した仮想メモリとの違いは、RAM にないセグメントが存在する可能性があることです。

これは正しいです?

質問を追加します: ページングと組み合わせたセグメンテーションと 2 レベルのページングの間に実際的な違いはありますか? セグメント メソッドの「制限」保護を除いて同じです。それとも別の違いがありますか?

4

2 に答える 2

2

いいえ、それは正しくありません。たとえば、x86 では、セグメンテーションは、セグメント セレクタ (DS などのセグメント レジスタにロードされる) とセグメントへのオフセットの 2 つの部分で構成される "far" ポインタを使用します。セグメント オフセットは常に 0 から始まります。CPU はセグメント セレクタを使用して、セグメントの LINEAR ベース アドレス、長さ、およびアクセス権を含むセグメント記述子を見つけます。すべてのアクセスは長さチェックされます。セグメント制限外または無効なアクセス (読み取り専用セグメントへの書き込みなど) でメモリにアクセスしようとすると、CPU は一般保護違反を生成します。

セグメント アドレスは常にゼロから始まり、セグメント ベースはセグメント セレクターで暗黙的に指定されるため、OS は、そのデータを使用するプログラムに影響を与えることなく、セグメントを移動してメモリを最適化できます。(これを、一部のデータを移動する場合、それを指すすべてのポインターも更新する必要がある「フラット」メモリ モデルと比較してください。)

現在、ページングが無効になっている場合、LINEAR セグメントのベース アドレスはその物理メモリ アドレスです。ページングが有効な場合、セグメント データへのすべてのアクセスは通常どおり MMU によって変換されます。

于 2010-07-16T06:25:58.650 に答える
0

このレベルでのメモリ管理の理解に真剣に取り組んでいる場合は、Silberschatz、Galvin、およびGagneによるオペレーティングシステムの概念を読んで、優れた説明を見つけることができます。安価な古い版を見つけることができるはずです。

于 2010-07-16T06:31:32.000 に答える