質問

私は私の頭の中で常に仮想メモリのアイデアを存在していたため、私は少し混乱しています。

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

セグメンテーションを備えた仮想メモリとの差は、おそらくRAMにはないセグメントがある可能性があります。

これは正しいですか?

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

役に立ちましたか?

解決

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

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

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

他のヒント

このレベルでメモリ管理を理解することが真剣にあれば、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top