[b-free: 249] about memory manager (2)

内藤 隆一 (GGC00661@niftyserve.or.jp)
Tue, 18 Apr 1995 00:54:00 +0900

隆一です。

B-Free メイリングリストの皆さん、こんにちは。
メモリマネージャについてのお話の続編です。

メモリマネージャについて (2)

〜ページアウトについて〜

ここでは、ページアウト処理を設計するにあたって考慮すべき事柄を
箇条書にしてみます。

実際のところページアウト処理については、かなり文献類に詳しく紹介されて
います。研究分野としては、研究されつくしているものといえます。
なお、各項目には、註釈として既存の OS についてもどのような方法を使って
いるかを簡単に書いておきました(これを見ると、Windows NT が VMS に似て
いるというのがよくわかります)。

・いつページアウトするのか
(1) ページインを行うとき、空いている物理メモリがなかったとき
(2) メモリが一定の閾値以下になったとき

# 既存の OS では、(1) は、Macintosh,Windows 3.1、(2) が UNIX,Windows/NT
# などになっています。
# 仮想記憶をきちんとサポートした OS では、(2) の方法をとることが多い
# ようです。

・何をページアウトするのか(ページアウトのポリシー)
ページアウトする物理メモリページを選択するときには、大きく分けて2つ
の方式があります。

(1) システム全体の物理メモリをチェック
プロセスに関係なく、システム全体での一番使いそうにない物理メモリ
ページをページアウトする。
(2) 各プロセスの物理メモリをチェック
各プロセスごとの一番使いそうにない物理メモリページをページアウト
する。各プロセスには、スラッシングが発生しない最低限の使用量
(ワーキングセット)がある。ワーキングセットを越えない程度に物理メ
モリを残しておき、ページアウトする。

(1),(2) のどちらの方法をとるかは、プロセスのワーキングセットをどう測
定するかによります。(1) ではワーキングセットを考えず、単にシステム全体
で使われないであろう物理メモリページを選択します。(2) では、プロセスの
ワーキングセットを考慮し、ワーキングセット以下の物理メモリとならないよ
うに調整します。ワーキングセットのサイズはあらかじめ決めておくのではな
く、動的に決めることもできます(Windows NT など)。

# 既存の OS では、(1) が UNIX, (2) が VMS, Windows/NT となっています。
# (2) による方法では、ワーキングセットの最適値を各プロセスごとに決める
# 必要があります(スタッシングが発生しそうになったら、ワーキングセッ
# トを増やすなど)。

・ページアウトする物理メモリページの選択方法

ページアウトする物理メモリページは、一番最後に参照されるものを選ぶのが
最良です。しかし、これは大抵の場合不可能なので、一番参照されないであろう
物理メモリページを選択する必要があります。選択には次に示すようないくつ
かの方法があります(見て分かるように、いくつかのアルゴリズムは互いに正反
対の方法になっています!)。

(1) 一番長く使用されていない物理メモリページ(LRU)
(2) 一番長く使用されていない*であろう*物理メモリページ(LRUの近似)
(限られた参照カウントにより参照頻度を測定する方法)
(3) 一番参照回数が少ない物理メモリページ(LFU)
(4) 一番参照回数が多い物理メモリページ(MFU)
(5) 一番最初にページインした物理メモリページ(FIFO)

文献 (*1, *2) によると、(1) のLRU による選択方法が成績がいいようです。
ただし、80386 のアーキテクチャでは、アクセスされたという情報は参照ビット
と変更ビットしかないので、参照回数の測定はソフトウェアによって行う必要
があります。(2) の方法では参照カウンタを使用せず、すべての物理メモリペー
ジの参照カウンタをクリアしたあと、一定時間後に参照カウンタを調べること
によって、使用されていない物理メモリページを決定します。
なお、第8回で配布した「メモリ管理マネージャ仕様書/1」に記述した方法は、
この (2) の方法を使っています。

(3),(4) は、文献 (*1) によると「予想できるように MFU、LFU はあまり普及
していない。このアルゴリズムにはかなり経費がかかってしまう」とあります。
(5) の方法は、物理メモリページの中で古い順にページアウトするという方法
です。この方法についてはについては、「理解しやすいし、プログラムしやす
い。しかし、その効率については常によいというわけではない」(*1) とあり
ます。また、文献 *2 にも同様に「FIFO 方式は、ページフレーム群を巡回す
るポインタによりつなぐことで、実現するのが非常に易しい。しかし残念なこ
とに、FIFO の性能は LRU に劣る」とあります。

# 既存の OS では、UNIX (特に BSD) では、(2) の方法を使っています(*3)。
# Windows/NT では、(5) の方法を使っているようです(*4)。
# VMS でも Windows/NT と同様に (5) の方法をつかっています(*5)。

今回、参照した文献

*1 「オペレーティングシステムの概念」 培風館
*2 「オペレーティングシステムの先進的概念」 丸善
*3 「UNIX 4.3 BSD の設計と構築」 丸善
*4 「INSIDE WINDOWS NT」 アスキー
*5 「Open VMS」 共立出版

-- 
内藤隆一 (ggc00661@niftyserve.or.jp)