数式が読み込まれない場合は1回再読み込みしてみてください。まとめシリーズこんにちは、ももやまです。今回は仮想記憶やページングについて、具体的には仮想記憶とはどんなものなのか仮想アドレス空間(仮想メモリの空間)と物理アドレス空間(物理メモリの空間)の違い4GBの壁の正体ページング・ページフォルトについてについてをまとめています。ち状態)や、スケジューリングアルゴリズムについての記事なのでもしよかったらご覧ください!www.momoyama-usagi.com1.仮想記憶(仮想メモリ)とはコンピュータ上に入っている物理上のメモリだけでは、容量が足りないことがあります。そこで、物理上のメモリ(RAM)だけでなく、ハードディスクなどの補助記憶装置を組み合わせることで、見かけ上でより多くのメモリ領域を使えるようにしたのが仮想記憶となります。仮想記憶を用いるもう1つのメリットとして、メモリ領域の保護があります。プログラムが直接物理上のメモリにアクセスすると、他のプロセスで使うメモリ領域を勝手に書き換えてしまうなどの予期せぬ動作をする可能性があります。そこで、直接物理上のメモリにアクセスするのではなく、仮想記憶を用いてアクセスを行うことで、OS側がメモリを管理するため、メモリの領域を保護することができます。そのため、現在のプログラムのほとんどは直接物理上のメモリにアクセスするのではなく、仮想記憶を用いてアクセスを行っています。仮想アドレスが振られたアドレス空間を仮想アドレス空間と呼びます。プログラムに割り当てられるアドレス空間です。仮想アドレス空間の容量また、仮想アドレス空間の容量は、物理メモリの容量とは関係なく、常に一定です。64bit版OSという単語を聞いたことがある人は結構いるかと思います。OSのbit数は、仮想アドレス空間の大きさを表しているのです!例えば32bitOSであれば仮想アドレス空間の大きさは4GB、最近のパソコンで主流の64bitOS仮想アドレス空間の大きさは、なんと16EB(約16,000PB、1,600万TB)になります!仮想アドレス空間の容量計算方法32bitOSの仮想アドレス空間がなぜ4GBになるのかを説明していきます。2進数における桁数を表します。32bit(つまり32桁)のときに表現できる数の総数を考えてみましょう。通りの場所を管理することができますね。メモリは、データの場所を1バイト単位で管理しています。データの場所1箇所につき、1バイトの領域を使っていると言えます。バイトのメモリ場所を管理できますね。よって、32bit版のOSでの仮想アドレス空間の大きさは4GBであることがわかりますね。物理アドレスが振られたアドレス空間を物理アドレス空間と呼びます。メインメモリに割り振られているアドレス空間だと思ってください。コンピュータに入っているメインメモリ(RAM)の量がそのまま物理アドレス空間の容量となります。どんなに物理アドレス空間(つまり物理メモリ)の容量が大きくてもOSは仮想アドレス空間(つまり仮想メモリ)の容量以上を使うことができません*1。物理メモリ容量がどんなに大きくても仮想メモリ容量以上に使うことはできません。32bitOSの仮想メモリの大きさは4GBでしたね。そのため、32bitOSには4GBを超えるメモリを積んでも4GB以上の領域は無駄になります。これを「4GBの壁」と呼びます。4GBと言っても、物理メモリの一部(4GBの場合は1GB程度)は、他のデバイスによって独占されてしまうので実際に32bitOSが使えるのは3GB程度です。そのため、32bitのOSに4GBを超えるメモリを搭載しても、3GBまでしか認識せず意味をなしません。これが「4GBの壁」の正体です!ちなみに64bitOSの場合、最大で1,600万TBの仮想記憶があるため、8GB以上の物理メモリを搭載してもちゃんと認識します。1,600万TBの物理メモリは理論上のお話で、実際にはハードウェア上による制限などがかかるので、1,600万TBまでの物理メモリが認識できるわけではありません。Proの64bit版であれば512GBの物理メモリが搭載できます。ページングとは仮想記憶の実装方法の1つにページングと呼ばれるものがあります。ページングでは、仮想アドレス空間、物理アドレス空間をページという単位に分割し、仮想アドレス空間と物理アドレス空間を対応付けて管理します。仮想アドレス空間、物理アドレス空間の対応付けにはページテーブルという表が用いられます。ページテーブルには、それぞれの仮想ページ番号にあるデータが物理アドレス空間(メインメモリ)に存在するかどうか(存在ビットで管理。あれば1、なければ0を表している)存在するのであれば、どの物理アドレス番号にあるかなどの情報が入っており、主に上の2つの情報から仮想アドレス空間と物理アドレス空間を対応付けます。仮想アドレス空間上のページ番号1にある「A」が物理アドレス空間ではどこにあるのかを探してみましょう。ページ番号1のページテーブルをみてみると、存在ビットが1になっていますね。物理アドレス空間にデータ「A」が存在していることがわかりますね。次に、ページテーブルにかかれている対応付けを確認すると、2と書かれていますね。物理アドレス空間のページ番号2に「A」があることがわかりますね。アドレス変換(仮想アドレス→物理アドレス)アドレスは、ページ番号ページ内アドレス(変位)の2つで構成されており、アドレスの上位部分がページ番号、下位部分がページ内のアドレスを表します。Unit)により物理ページ番号に変換されますが、ページ内変位は変化しません。ここで1問例題をはさみましょう。仮想アドレスが32ビット(つまり32ビットOS)で、ページサイズが4KB、ページテーブルのエントリが4バイトの仮想記憶を考える。ページテーブルの大きさを求めなさい。