オペレーティングシステム (環境情報学科3年次後期配当 火曜日3限)


■9.プログラムの実行制御(その4) メモリの制御、仮想記憶

【目的】メモリ管理の方法,特にOSが行う仮想記憶のメカニズムを理解するのが目的。

●テキストでの対応部分
 2.4 メモリの制御


 コンピュータで処理される情報(データ)やプログラムは,メインメモリに記憶されている。しかし,メモリはハードディスクなどの外部記憶装置に比べて高価なため,コンピュータに搭載しているメモリの容量が,必要とされる量より少ない場合が多い。
 メモリが不足すると,プログラムの実行もできなくなる。そういった問題を解決するのが,仮想記憶(virtual memory)という仕組みである。仮想記憶は,『十分な容量を持つ仮想的なメモリ』を想定する。プログラムは,この『仮想的なメモリ(仮想メモリ)』を使う。実際には,この仮想メモリは,
   ・本当のメモリ
      と
   ・ハードディスク
からなっている。『本当のメモリ』の容量を使い切ると,『本当のメモリ』の使用されていない部分をハーディスクに保存し,『本当のメモリ』に未使用領域を作るのである。以下に,その仕組みを具体的に説明する。

 まず,仮想メモリは下図のように,ブロックに分割されている。各ブロックは,本当のメモリ(実メモリ)上か,ハードディスク上にある。その対応付けを行うのが,マッピングテーブル(マッピング表)である。
 マッピング表には,各ブロックごとに
   ・そのブロックがハードディスク上にあるか,メモリ上にあるかを区別するフラグビット
   ・実際のブロックの場所(ハードディスク上ならハードディスク上の位置,実メモリ上なら実メモリ上のアドレス)が記録されている。このマッピング表を見ることによって,仮想メモリ空間のブロックが実際にはどこにあるかがわかる。



 仮想メモリ空間上のメモリアドレスが,実際のアドレスに変換される仕組みを下図に示す。下図の例では,32ビットの仮想アドレス空間(4ギガバイト)の例である。32ビットのうち,先頭の20ビットをブロック番号とし,のこり12ビットをブロック内での位置とする。20ビットでは,
  220=1048576
なので,1048576個のブロックを利用できる。また,12ビットでは
  212=4096
なので,各ブロックの大きさは,4096バイトということになる。

 上図の仮想アドレスの例では,
  仮想アドレス(00000000000000001010111000001110)
は,第10ブロックの先頭から3598バイト目の位置を表していることになる。マッピング表からこのアドレスは,メモリ上のeブロックの先頭から3598バイト目の位置を指していることがわかる。

 上図の例では,実メモリ上にあるアドレスを指していたが,目的のブロックがハードディスク上にある場合は,どうするのであろうか(下図)。


 実は,目的のブロックがハードディスク上にあるときは,
  (1)実メモリ上に未使用ブロックがある場合
    ・ハードディスク上の目的のブロックをその未使用ブロックに読み込む(それにあわせて
     マッピングテーブルも書き換える)。これをスワップイン(swap in)と言う。
  (2)実メモリ上に未使用ブロックが無い場合
    ・現在アクセスする必要のない実メモリ上のブロックをハードディスク上に書き出す(そ
     れにあわせてマッピングテーブルも書き換える)。
     これをスワップアウト(swap out)と呼ぶ。スワップアウトによって,空いた実メモリ
     領域に,目的のブロックをスワップインする。
 ※効率の良いスワップイン・スワップアウトの方法が色々考案されている。(配布プリント参照)
   (1) LRU (Least Recently Used) 方式:
     最後の使用から最も長い時間が経っているブロックをページアウトする
   (2) FIFO (First-In First-Out) 方式:
     ページインしてから最も長い時間が経っているブロックをページアウトする
 ※なお,ブロックを「プログラムにとって意味のあるまとまり」とする場合,ブロックの長さは不定長
  (つまり,ブロックの長さはブロックごとに異なる)となり,セグメントと呼ばれる。これをセグメント
  方式
と呼ぶ。
 ※それに対し,固定長のブロックをページ(page)と呼び,ページを使った方式をページング方式と呼ぶ。
  またこのページング方式では,スワップインのことをページイン(page in),スワップアウトのことを
  ページアウト(page out)と呼ぶ。
 ※セグメントとページは,「本」を例に取ると分かりやすい。セグメントは「章」,ページは文字通り
  「頁」にあたる。「章」は不定長であり,「頁」は固定長である。

■ハードウェアの支援
 ●MMU (Memory Management Unit):
  マッピングテーブルを使った,「仮想アドレス→実アドレス」の変換を行う専用のハードウェア
 ●TLB (Translation Look-aside Buffer):
  高速化のため,マッピングテーブルを格納するMMUの内部にあるキャッシュ

■多段マッピング
 ※マッピングテーブル自体が大きくなるのを防ぐため,マッピングを多段化する。マッピングを多段化
  すると,実際に使用していない領域のエントリ分を省略することが可能となり,マッピングテーブル
  の大きさが小さくてすむ。



戻る