ほとんどの OS は、仮想メモリにページングを使用します。どうしてこれなの?セグメンテーションを使用しないのはなぜですか? ハードウェアの問題だけですか?特定のケースでは、一方が他方よりも優れていますか? 基本的に、どちらかを選択する必要がある場合、どちらを使用しますか?またその理由は何ですか?
議論のためにx86だとしましょう。
ほとんどの OS は、仮想メモリにページングを使用します。どうしてこれなの?セグメンテーションを使用しないのはなぜですか? ハードウェアの問題だけですか?特定のケースでは、一方が他方よりも優れていますか? 基本的に、どちらかを選択する必要がある場合、どちらを使用しますか?またその理由は何ですか?
議論のためにx86だとしましょう。
から取得:ガルビンによるオペレーティングシステムの概念
問題の一つ..
セグメンテーションにより、プロセスの物理アドレス空間を不連続にすることができます。ページングは、この利点を提供するもう 1 つのメモリ管理スキームです。ただし、ページングは外部の断片化と圧縮の必要性を回避しますが、セグメンテーションは回避しません。
セグメンテーションの問題: この問題が発生するのは、メイン メモリに存在するコード フラグメントまたはデータをスワップ アウトする必要がある場合、バッキング ストアでスペースを見つける必要があるためです。バッキング ストアにも同様の断片化の問題がありますが、アクセスが非常に遅いため、圧縮は不可能です。
ページングは次の方法で解決します。
ページングを実装する基本的な方法では、物理メモリをフレームと呼ばれる固定サイズのブロックに分割し、論理メモリをページと呼ばれる同じサイズのブロックに分割します。バッキング ストアは、メモリ フレームまたはメモリと同じサイズの固定サイズのブロックに分割されます。複数のフレームのクラスター。
ページ-フレーム-バッキング ストアはすべて同じサイズに分割されるため、外部の断片化は発生しません。ただし、内部の断片化がある可能性があります。したがって、ページサイズを正しく選択する必要があります
Windows や Linux などの OS では、 と の両方segmentation
を組み合わせて使用しpaging
ます。プロセスの仮想メモリは最初にセグメントに分割され、次に各セグメントは多くのページで構成されます。OS は最初に特定のセグメントに移動し、そのセグメントで特定のページを見つけてアドレスにアクセスします。
シングルアドレス空間オペレーティングシステムは、プロセスを分離するためにセグメンテーションを使用する場合があることに注意してください。