ページング方式
[Wikipedia|▼Menu]


ページの読み込みが最小限なのでディスク負荷が少ない。

ページは更新されるまで複数のプログラムから共有され、コピーオンライトによってさらにリソースを節約できる。

実装メモリ量よりも巨大なプログラムを実行できる。オーバーレイという古い技術よりも優れている。

本来のページング方式が必要とする以上のハードウェア機構を必要としない。

欠点:

プログラムが任意の仮想ページに初めてアクセスする際、遅延が発生する。そこでプリページングという技法で以前に動作したときに使用していたページを覚えておき、スケジューリングによって実行される際にそれらのページを予め物理メモリにロードしておいて性能向上を図ることもある。また、特にアクセスしていたページを覚えておかなくとも、プログラムカウンタとスタックポインタの指している仮想ページだけでも予めロードしておけばある程度の性能向上は図れる。

ページ置換アルゴリズムに関わるメモリ管理は複雑化しつつある。

LinuxのようなUNIX系システムでは、mmap() システムコールもデマンドページングによって実装されている。それは新たなプログラムを実行する際にも適用される。OSは実行ファイル(とそれが依存するライブラリ群)をマッピングするが、そのときにファイルの中身を物理メモリ上に実際にロードすることはない。マッピングがリードオンリーで共有可能であれば、物理メモリに残っている内容をそのまま使って実行することもある。これをページキャッシュと呼ぶ。

使われていない物理ページには、スワップ領域以外のファイルに対応するページキャッシュと何とも対応していない完全な未使用ページがある。一般にページング方式では、新たに必要となったページがページキャッシュにあればそれを再利用し、なければ完全に未使用のページを使用する。使い終わったページは、その内容がスワップ領域以外に対応していればページキャッシュとしてそのまま内容が保持され、スワップ領域に対応していた匿名 (Anonymous) ページは完全な未使用ページに戻される。もちろん、完全な未使用ページを使い切った上でさらにメモリを使用しなければならないときにはページキャッシュが他の用途に利用される。このようにして、現に使用中でない物理メモリを有効活用してなるべくディスクアクセスを減らすように工夫している。ちなみに、ページキャッシュとして存在する領域をmmap() でマッピングするとページキャッシュがそのまま使われるが、read() システムコールで読む場合にはユーザーバッファへのコピーが発生する。
プリページング

スワップ・プリフェッチとも呼ばれる技法で、(参照の局所性を利用して)近い将来参照されると予測したページを事前にロードしておく。プロセスが経験するページフォールト回数を減らす試みである。例えば、ある参照でページフォールトが発生したとき、連続する数ページにもすぐに参照するだろうと予測してまとめてロードしておく、といった戦略がある。また、ある大きなプログラムが終了して多くのメモリを解放したとき、ページアウトされていた他のプログラムがメモリを必要とするだろうと予測して、事前にページインしておくといった戦略もある。
フリーページのキュー

フリーページのキューは、ページフォールト時に使用可能なページフレームのリストである。一部のオペレーティングシステム[注 1]はページの再利用をサポートしている。すなわち、かつて奪われたが他に再割当てされていないページに対してページフォールトが発生した場合、ページイン処理をせずにフリーとなっている当該ページフレームをそのまま再利用するものである。
ページの事前解放

一部のオペレーティングシステムは、定期的に最近使われていないページを探し、それらをフリーページのキューに追加し、当該ページが更新されていたら(ダーティな場合)、ページアウト処理を行っておく。すると、ページフォールト時に空のページフレームがないということがなく、ページアウトを行う必要がなくなる。
事前クリーニング

UNIXでは、sync(英語版) を使って定期的に全ダーティページを書き戻してクリーンな状態にする。Windowsでは、"modified page writer" というスレッドが同じことを行っている。

事前クリーニングにより、プログラムの起動や新たなファイルのオープンが高速化される。
スラッシング詳細は「スラッシング」を参照

多くのプログラムは、ある程度動作すると参照の局所性によって命令フェッチでもデータアクセスでもページフォールトが発生しない安定状態になる。この安定状態で使用しているメモリ量は、そのプログラムが必要とする全メモリ量よりも少ないのが一般的である。この安定状態をワーキングセットなどと呼び、そのプログラムが最も頻繁にアクセスするメモリページ群を意味する。

仮想記憶システムは、物理メモリの総ページ数に対してワーキングセットとして必要とされるページ数が小さいほど効率的であり、ページフォールト処理にかかる時間は性能の支配的要因ではなくなる。非常に巨大なデータ構造を必要とするプログラムはワーキングセットも巨大となる傾向にあり、ページフォールトがコンスタントに発生するためシステム性能が劇的に低下することがある。そのような状況をスラッシングという。

スラッシングの興味深い特性として、ワーキングセットが大きくなってもページフォールト回数はある臨界点まではあまり増えない。その臨界点を越えるとページフォールト回数が劇的に増え、システム性能がそれに支配されるようになる。

その種の極端な例として、IBMSystem/360 Model 67 と System/370 で、データ転送命令の機械語がページ境界をまたぎ、データ転送元もページ境界をまたぎ、データ転送先もページ境界をまたいだ場合がある。そのとき、その命令を実行するには8ページがメモリ上になければならない。したがって、最大8回のページフォールトが連続的に発生する可能性があり、スラッシングが発生するといつまでたっても8ページが揃わないという状態になる。

スラッシングを解決する手段として、次のような対策が考えられる。

RAMを増設する(長期的解決策)

同時に実行するプログラムの数を減らす。

ページカラーリングページカラーリングの概念図

キャッシュメモリでのスラッシングを防ぐ、あるいは積極的にキャッシュヒット率を向上させようとする物理ページ管理手法をページカラーリングと呼ぶ。ページカラーリングはまた、仮想インデックスキャッシュのエイリアス問題への回避策としても使われた。

キャッシュは年々巨大化しているが、ページサイズは4Kバイトが一般的でこれはページング方式が一般化してから変わっていない。物理アドレスをインデックスとするキャッシュでは、物理ページと仮想ページのマッピングによってはキャッシュ上で現に使用中のページの対応する位置が衝突してしまい、巨大なキャッシュを生かしきれない事態が発生することがある。例えば、キャッシュサイズが16Kバイトでページサイズが4Kバイトであれば、ページはそのアドレスによってキャッシュ上で4種類の位置に対応することが考えられる。この場合、ページのカラー(色)が4種類存在すると称する。

物理インデックスキャッシュでは同時にアクセスする物理ページ群のカラーがばらばらであればスラッシングが発生せず、キャッシュヒット率が向上する。ページカラーリングの実装上の問題は、仮想ページと物理ページのマッピングは一度なされると変更されることがなく、マッピング時点でどのようなメモリアクセスパターンとなるかを予測できない点にある。一般的には仮想ページのカラーと物理ページのカラーが一致するようにマッピングを行う。こうすることで、仮想空間上連続な領域へのアクセスでスラッシングが発生するのを防ぐ。

ただし、そのような実装をした場合に新たな問題が発生する。実行ファイルのテキストとデータの領域は仮想空間上きりのよいアドレスに配置されることが多い。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:54 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef