今回は、仮想メモリの仕組みを詳しく解説していこう。仮想メモリの概要と、これを採用したシステムについて見てみたい。
国際会議「IEDM」のショートコースで英国ARM Reserch社のエンジニアRob Aitken氏が、「System Requirements for Memories(システムがメモリに要望する事柄)」と題して講演した内容を紹介するシリーズの第9回である。
本シリーズの第3回と第4回では、ピラミッド形のメモリ階層をご説明した。複数のメモリ階層の中で、主記憶(システム・メモリ、メイン・メモリ)の階層は、「物理記憶(物理メモリ)」、ハードディスク装置の階層は「仮想記憶(仮想メモリ)」とも呼称すると述べた。
物理メモリについてあらためて説明すると、「物理メモリ」とはCPUシステムが実際に装備している主記憶用半導体メモリ(DRAM)を指す。例えば搭載しているDRAMの総容量が3Gバイトであれば、物理メモリの総容量も3Gバイトになる。
物理メモリのアドレス空間(物理アドレス空間)は、実際のDRAM総容量に対応する。ある32ビットCPUシステムのDRAM総容量が3Gバイトであれば、物理アドレス空間の大きさは3Gバイトになる。マルチタスクOSやマルチコアCPUなどで複数のアプリケーション・プログラムが動作している場合は、プログラムの作業領域は物理アドレス空間の一部に割り当てられている。
ただし実際には、プログラムが物理アドレスを意識することはない。例えば32ビットのシステムだと、最大で4Gバイトのメモリとアドレス空間がプログラム(あるいはOS)ごとに割り当てられる。このメモリを「仮想メモリ」、アドレスを「仮想アドレス」と呼ぶ。仮想メモリの導入によってアプリケーション・プログラムの開発者は物理メモリの大きさ(主記憶容量の違い)を意識せずに済む。開発に伴う煩雑さを避けられる。
仮想メモリを導入すると、仮想アドレスを物理アドレスに変換する作業が必要になる。この作業用対照表を「ページ変換テーブル」「ページ・テーブル」などと呼ぶ。「ページ」と呼ぶデータの単位ごとに、仮想アドレスを物理アドレスにマッピングする。通常、ページサイズは4Kバイトである。
仮想アドレス空間が4Gバイト、物理アドレス空間が3Gバイトの場合を想定しよう。単純化するためにプログラムは単一とする。プログラムが3Gバイトを超える領域を使用すると、主記憶のDRAMだけでは領域が不足する。この場合は不足の領域がハード・ディスク装置に割り当てられる。
Copyright © ITmedia, Inc. All Rights Reserved.