計算機システム II ・第 13 回

計算機システム II ・第 13 回
2015 年 12 月 17 日
今回の内容
13.1 メモリ管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13 – 1
13.2 仮想記憶システム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13 – 2
13.1
メモリ管理
計算機システム上でプロセス (プログラム) が実行されるときに必要となるもっとも重要な資源は
CPU とメモリ (主記憶装置) です。この二つ無しでプロセスを実行することはできません。プロ
セスは、CPU がメモリ (主記憶装置) 中に記憶された機械語命令を読み取っていくことで実行され
ます。また、CPU にデータ転送命令を実行させることで、メモリ中に記憶された特定のデータに
アクセスすることができます。第 8 回で説明したように、一つのプロセスがデータの記憶に使用す
ることのできる記憶領域全体をそのプロセスのメモリ空間と呼び、そのメモリ空間中の特定の記
憶場所を指定するのに使用されるアドレス (番地) の取り得る範囲をアドレス空間と呼びます。ア
ドレス空間には、実際には使用できない (記憶装置内の記憶領域と対応していない) アドレスも含
まれていますが、このことを無視して「メモリ空間」という言葉を「アドレス空間」と同じ意味で用
いることもあります。このメモリ空間とアドレス空間の管理を行うのが OS のメモリ管理機能で
す。 OS のメモリ管理の役割と機能は、大きく分けると、アドレス空間の多重化、メモリ空間の拡
大、データの保護という 3 つの側面を持っています。
アドレス空間の多重化
PC やスマートフォンなどに使われる OS では、複数のプロセスが同時に実行されますが、このと
き各プロセスが使用するメモリの記憶場所が重ならないようにする必要があります。このため、こ
のような OS は、CPU のアドレス変換機構を利用して、各プロセスが使用する仮想アドレスをメ
モリモジュール中の物理的な記憶場所を指定するための物理アドレスに変換することで、異なるプ
ロセスが使用する記憶場所を分離します。
仮想アドレス空間はプロセス毎に用意され、プロセスが違えば、同じ仮想アドレスでも異なる物
理アドレスに対応するようになります。これによってアドレス空間の多重化が実現できます。OS
がプロセスを「実行中の状態」にする際には、その都度、そのプロセス固有のアドレス変換が行われ
るように CPU のアドレス変換機構を設定します。
メモリ空間の拡大
PC などの OS は、ハードディスクなどの補助記憶装置を利用して、メモリ (主記憶装置) の実際の
記憶容量以上のメモリ空間をプロセスに提供する働きも持っています。第 5 回に説明したように、
通常のプログラムによるメモリアクセスは、時間的局所性や空間的局所性という性質を持っていま
す。短い時間だけをとって見ると、メモリ空間全体が均等にアクセスされていることは稀で、一部
の範囲のアドレスにしかアクセスされていないのが普通です。この性質を利用して、そのプロセ
スが最近頻繁にアクセスしている部分にだけ主記憶装置 (メモリ) を割り当てておき、あまりアク
セスされていない部分のデータはハードディスクなどの補助記憶装置を使って記憶しておくよう
13 – 1
にします。ハードディスクの方に記憶されている部分のアドレスに対するアクセスが起こると、主
記憶装置 (メモリ) の一部分をその部分に割り当て直してから、ハードディスクに退避してあった
データを主記憶装置 (メモリ) 上に戻し、それから CPU によるメモリへのアクセスを続行します。
主記憶装置 (メモリ) は CPU から高速にアクセスすることはできますが、その容量は限られて
います。計算機システムで多くのプロセスが並行して動作していると、各プロセスが利用できるメ
モリの容量は限られたものになってしまいがちですが、機械語プログラムの実行にさしあたり関係
のない部分のデータを、主記憶装置から、より低速ではあるが容量に余裕のある補助記憶装置に移
動することで、主記憶装置の実際の記憶容量以上のメモリ空間を各プロセスに提供することができ
るわけです。
データの保護
OS のメモリ管理のもう一つの側面は、メモリ中のデータの保護です。CPU のアドレス変換機能に
付属するアクセス制限機能を利用して、実行中のユーザープロセスが、カーネルや異なるユーザー
プロセスが記憶しているデータを正当な権限なく覗き見たり、書き換えたりすることができない
ようにします。また、自分自身のプロセスのメモリ空間であっても、特定のアドレス領域のデータ
に書き込みできないようにしたり、(機械語プログラムとして) 実行できないようにすることもでき
ます。
13.2
仮想記憶システム
前節の「アドレス空間の多重化」や「メモリ空間の拡大」を実現する仕組みを仮想記憶システムと呼
びます。仮想記憶システムの実現方法にはいくつかありますが、ここでは最も一般的なページング
方式1 と呼ばれている仮想記憶システムについて解説します。Windows や Linux など PC 向けの
オペレーティングシステムカーネルの多くで、ぺージング方式の仮想記憶システムが採用されてい
ます。
ページ
ページング方式の仮想記憶システムでは、メモリ空間を、数 KiB から数 MiB 程度 (たと
えば 4 KiB) の大きさのページと呼ばれる単位に分割して管理します (図 1)。通常、ページの大き
さは 2 の冪乗となるようにしますので、アドレスの上位のビット列を調べるだけで、どのページに
属するアドレスなのかがすぐに判別できます。たとえば、48 bit の仮想アドレスを使用していて、
1 ページの大きさが 4 KiB の場合、4096 = 212 ですから、仮想アドレスの上位 36 bit をページを
識別するための番号としてそのまま使うことができます。
短い時間だけをとって見ると、各プロセスは、いくつかの特定のページ (に属するアドレス) にし
かアクセスしていないので、そのプロセスが最近頻繁にアクセスしている (いくつかの) ページだ
けに主記憶装置 (メモリ) のページを割り当てておき、あまりアクセスされていないページの内容
は、ハードディスクなどの補助記憶装置に退避しておきます2 。
1
デマンドページング方式とも呼ばれます。
2
補助記憶装置に退避されるページの選択には、第 5 回の「キャッシュラインの入れ替え」の節で説明した LRU (Least
Recently Used) などの方式がよく用いられます。
13 – 2
CPU による
アドレス変換 物理メモリ空間
プロセス A の
仮想メモリ空間
仮想
アドレス
主記憶装置の
物理アドレス
ページ 0
ページ 1
ページ 2
ページ 3
ページ 4
ページ 5
ページ 6
主記憶装置
(メモリ)
..
.
..
.
プロセス B の
仮想メモリ空間
仮想
アドレス
ページ 0
ページ 1
ページ 2
ページ 3
ページ 4
ページ 5
ページ 6
補助記憶装置
(ハードディスク)
の一部
..
.
カーネルによる
対応関係の保持
図 1: ページング方式による仮想記憶の仕組み
ページフォルトとページイン、ページアウト
物理的なメモリが割り当てられていない仮想アド
レスに CPU がアクセスすると、CPU のアドレス変換機構がそれを検知し、例外を発生させます。
これをページフォルトと呼びます。ページフォルトが発生すると、そのメモリアクセスはとりあえ
ず棚上げされて、その時点の実行コンテクストが保存され、CPU は特権モードに移行して、カーネ
ルプログラムによる例外処理が行われます。カーネルは、ページフォルトが発生したページアド
レスを調べて、ハードディスクに退避してあるそのページのデータを主記憶装置 (メモリ) の空き
ページにコピーし、その (物理) ページをページフォルトが発生した (仮想) ページに割り当てます。
もし主記憶装置に空きページがない場合は、最近アクセスしていないページをハードディスクに退
避して空きページを作ってから同じことを行います。このようにして、ページフォルトが発生した
(仮想) ページに無事主記憶装置の (物理) ページが割り当てられると、カーネルは、保存しておいた
実行コンテクストを復帰して、棚上げにしておいたメモリアクセスを続行させます。
ハードディスクなどの補助記憶装置に退避されていたページが主記憶装置のページに復帰する
ことをページイン、逆に、主記憶装置に割り当てられていたページがハードディスクなどの補助記
憶装置に退避されることをページアウトと呼びます3 。
3
それぞれ、スワップイン、スワップアウトと呼ぶこともあります。
13 – 3
スワップファイルとスワップ領域
ページアウトしたデータはハードディスクなどの補助記憶装
置へ退避されますが、この際、補助記憶装置上に構成されたファイルシステム中の特定のファイル
が使用されることもあれば、補助記憶装置中の (ファイルシステムなどの用途には使用されていな
い) 専用の領域が使用されることもあります。前者をスワップファイル (swap file)、後者をスワッ
プ領域 (swap area) と呼びます4 。
スラッシング
ページインやページアウトが起こると、ハードディスクなどの補助記憶装置へのア
クセスが発生します。ハードディスクは主記憶装置 (メモリ) に比べると非常に低速ですから、ペー
ジインやページアウトの処理には非常に時間が掛かってしまい、その間、ページフォルトを起した
プロセスの実行は中断されてしまいます。その計算機に搭載されている主記憶装置 (メモリ) の容
量に対して、実行中のプロセスが必要としているメモリの容量が大きければ大きい程、また、各プ
ロセスがアクセスするアドレスのばらつき具合が大きければ大きい程、ページインやページアウト
の頻度が高まり、計算機システムが行わなければならない余計な仕事が増えて、その分、各プロセ
スが本来やるべき仕事が滞ることになります。ひどい場合は、計算機はページインやページアウト
に伴うハードディスクの読み書きの処理に掛かり切りになり、本来の仕事はほとんど進行しないと
いった状態になります。このような状態はスラッシング (thrashing) と呼ばれます。
計算機システム II ・第 13 回・終わり
4
Windows では通常、スワップファイルが、Linux ではスワップ領域が使用されます。
13 – 4