ページングについては、スライド #6 で説明しています。
http://www.cs.ucc.ie/~grigoras/CS2506/Lecture_6.pdf
私の講義ノートにはありますが、私の人生ではそれを理解することはできません。仮想アドレスを物理アドレスに変換する方法であることは知っています。したがって、ディスク上の仮想アドレスは 2^k のチャンクに分割されます。この後、私は本当に混乱しています。誰か簡単な言葉で説明してくれませんか?
ページングについては、スライド #6 で説明しています。
http://www.cs.ucc.ie/~grigoras/CS2506/Lecture_6.pdf
私の講義ノートにはありますが、私の人生ではそれを理解することはできません。仮想アドレスを物理アドレスに変換する方法であることは知っています。したがって、ディスク上の仮想アドレスは 2^k のチャンクに分割されます。この後、私は本当に混乱しています。誰か簡単な言葉で説明してくれませんか?
お気づきのように、ページングは一種の仮想メモリです。@John Curtsy によって提起された質問に答えるには:ページングは現在 (はるかに) 最も一般的ですが、他の種類の仮想メモリがあるため、一般的に仮想メモリとは別にカバーされています。
ページ仮想メモリは非常に単純です。すべての物理メモリをほとんど同じサイズのブロックに分割します (ただし、実際には 2 つまたは 3 つのサイズを選択するのが一般的です)。ブロックを同じサイズにすることで、交換可能になります。
次に、アドレス指定があります。各アドレスを 2 つの部分に分割することから始めます。1 つはページ内のオフセットです。通常、その部分には最下位ビットを使用します。(たとえば) 4K ページを使用する場合、オフセットに 12 ビットが必要です。(たとえば) 32 ビットのアドレス空間では、さらに 20 ビットが残ります。
そこから、物事は最初に思われるよりもはるかに単純になります。基本的に、メモリの各ページを記述する小さな「記述子」を作成します。これには、リニア アドレス (クライアント アプリケーションがそのメモリをアドレス指定するために使用するアドレス)、メモリの物理アドレス、および Present ビットが含まれます。(少なくとも通常は) そのページのデータを読み取り、書き込み、実行できるかどうかを示すアクセス許可など、他にもいくつかあります。
次に、クライアント コードがアドレスを使用するとき、CPU は残りのアドレスからページ オフセットを分割することから始めます。次に、残りの線形アドレスを取得し、ページ記述子を調べて、その線形アドレスに対応する物理アドレスを見つけます。次に、物理メモリをアドレス指定するために、物理アドレスの上位 20 ビットと線形アドレスの下位 12 ビットを使用し、それらを合わせて実際の物理アドレスを形成し、プロセッサ ピンに出力してメモリ チップからデータを取得します。 .
ここで、「真の」仮想メモリを取得する部分に到達します。プログラムが実際に使用できるよりも多くのメモリを使用している場合、OS はそれらの記述子の一部のデータを取得し、ディスク ドライブに書き込みます。次に、メモリのそのページの「Present」ビットをクリアします。メモリの物理ページは、他の目的のために解放されます。
クライアント プログラムがそのメモリを参照しようとすると、CPU は Present ビットが設定されていることを確認します。そうでない場合、CPU は例外を発生させます。これが発生すると、CPU は上記のように物理メモリのブロックを解放し、現在のページのデータをディスクから読み込んで、現在配置されている物理ページのアドレスをページ記述子に入力します。それがすべて完了すると、例外から戻り、CPU は例外の開始の原因となった命令の実行を再開します。ただし、Present ビットが設定されているため、メモリの使用が機能します。
おそらく知っておく必要があるもう 1 つの詳細があります。通常、ページ記述子はページ テーブルに配置され、(重要な部分) 通常、システム内のプロセスごとに個別のページ テーブルのセット (および OS カーネル用に別のセット) があります。自体)。プロセスごとに個別のページ テーブルを持つということは、各プロセスが同じ線形アドレスのセットを使用できることを意味しますが、それらは必要に応じて異なる物理アドレスのセットにマップされます。同じ物理アドレスを含む 2 つの個別のページ記述子 (プロセスごとに 1 つ) を作成するだけで、同じ物理メモリを複数のプロセスにマップすることもできます。ほとんどの OS はこれを使用するため、たとえば、同じプログラムのコピーが 2 つまたは 3 つ実行されている場合、実際には1 つしかありません。メモリ内のそのプログラムの実行可能コードのコピー - ただし、同じコードを指すページ記述子の2つまたは3つのセットがあるため、それぞれに個別のコピーを作成することなく、すべてのページ記述子が使用できます。
もちろん、ここではかなり単純化しています。仮想メモリについては、かなりの数の完全な (そして多くの場合、かなり大きな) 本が書かれています。また、さまざまな装飾が追加されたり、パラメーターがわずかに変更されたり (たとえば、ページが 4K か 8K か) など、マシンによってかなりのばらつきがあります。それにもかかわらず、これは少なくとも何が起こるかの核心に関する一般的な考え方です (そして、ARM、x86、MIPS、SPARC などにほぼ等しく適用できるほど十分に高いレベルにあります) 。
簡単に言えば、アドレス空間が通常許可するよりもはるかに多くのデータを保持する方法です。つまり、32 ビットのアドレス空間と 4 ビットの仮想アドレスがある場合、(2^32)^(2^4) アドレス (32 ビットのアドレス空間よりもはるかに多い) を保持できます。