ページング (メモリ管理スキーム) に関する本を読みました。
私が理解しているように、各仮想メモリは物理メモリに変換されます。
しかし、私は2つの本当に基本的なことを理解していません:
プロセス A とプロセス B がある場合、それらの線形アドレスが同じ物理アドレスに変換されないことをどのように確認できますか?
現在物理メモリにあるページが 2 つのプロセスに属していないことをどのように確認できますか?
ページング (メモリ管理スキーム) に関する本を読みました。
私が理解しているように、各仮想メモリは物理メモリに変換されます。
しかし、私は2つの本当に基本的なことを理解していません:
プロセス A とプロセス B がある場合、それらの線形アドレスが同じ物理アドレスに変換されないことをどのように確認できますか?
現在物理メモリにあるページが 2 つのプロセスに属していないことをどのように確認できますか?
プロセスがアドレスにアクセスする場合、プロセスは仮想アドレスを使用しています。そのアドレスは、プロセッサによって物理アドレスに変換されます。これを行う方法は、ページ テーブルを使用することです。各プロセスには、仮想アドレスを物理アドレスに変換するページ テーブルが関連付けられています。各プロセスには異なるページ テーブルがあるため、OS は、異なるプロセスからの 2 つの仮想アドレス (たとえ等しい場合でも) が同じ物理アドレスにマップされないようにすることができます。
さらに、現在のほとんどのプロセッサには、Translation Lookaside Buffer (TLB)と呼ばれる構造が含まれています。その構造は、前述のページ テーブルのキャッシュです。ページ テーブルへのアクセスはコストのかかる操作であり、TLB を使用するとその操作が高速になります。
セグメンテーションなど、プロセスのアドレス空間間の分離を強制する他の可能性があります。一般的な仮想メモリの詳細については、こちらを参照してください。
質問1と2に関しては、複数の仮想アドレスを同じ物理ページにマッピングすることが、特にコードセクションの場合に望ましい動作になることがあります。たとえば、共有ライブラリは多くの独立したプロセスによって使用されている可能性があります。同じライブラリの冗長コピーがRAMを消費するのではなく、OSはライブラリを1回だけロードし、同じ物理ページを各プロセスの仮想アドレス空間にマップできます。データページの読み取り/書き込みの場合、一部のプロセス間通信方式では共有物理メモリを使用します。