[b-free: 197] About memory manager.

内藤 隆一 (GGC00661@niftyserve.or.jp)
Fri, 31 Mar 1995 23:45:00 +0900

隆一です。

B-Free メイリングリストの皆さん、こんにちは。

>> On Fri, 31 Mar 1995 01:04:00 +0900, 木元 さん said:

> In-Reply-To: Your message of "Wed, 29 Mar 1995 22:01:00 +0900"
>  内藤 隆一 さま

> |> ・スワップ領域はパーティションに分割するか
> |
> | この話は、スワップ領域を別パーティションにとった方が処理が簡単になる
> |のではないか、ということだったと思います。
> | このスワップというかページイン/ページアウトの処理ですが、考えてみる
> |と実行ファイルのコード部分はファイルにあるわけです。とすると、スワップ
> |領域が専用パーティションとしてあっても、ページインのときにファイルをア
> |クセスすることは(コード部分については)あるわけですね。

この部分ですが、考えてみるとコード部以外にも初期化データ(初期値が入っ
てデータ部)についても同様なことがいえます。

この発言の意図は、ページインのときにファイルをアクセスする必要がある、
ということを言いたかったのです。ファイルをアクセスしないでもいい方法は
ないかという(処理を簡単にするにはどうすればいいか) ということを言いた
かったわけではないのですが、ちょっと説明不足でしたね。

>  処理を簡単にするには、次の2つの方法が有効かと思います。

>  a.コードも、必ずロード時に「メモリに」読み込む(そのあとページアウ
>   トされることは構わない)
>  b.aの逆で、コードはまずスワップパーティションにコピーされたあとで、
>   メモリにマップされる

この a. と b. ですが、本質的には同じ処理ではないでしょうか?
a. についていえば、メモリに読み込むといっても実メモリ以上の実行コード
部を読もうとすると、スワップエリアにコピーする処理が発生します(もちろ
ん、空いている実メモリ以上のコード部は読み込めないという制限をつければ
いいですが、これでは何のための仮想メモリか分からなくなってしまいます)。

>  bの考え方をもっと拡張すると、メモリマップトディスク(Memory mapped
> disk)になります。例えば、256Mのスワップパーティションがあれば、256Mの
> 実メモリとして扱えるという仕掛です。

仮想メモリ機構というのは、元々スワップパーティションまでメモリサイズを
(擬似的に)増やすような仕掛けではないでしょうか?
ところで、メモリマップドディスクというのは、知識不足なもので、はじめて
聞いたのですがどのようなものでしょうか?
メモリマップドファイルとも違うみたいですし。。。

# [補足]
#
# メモリマップドファイルでは、ファイルの内容を(メモリ内の)配列のように
# 操作できるための仕掛けです。つまりファイルを、メモリ中に読み込むような
# 処理を省略できるわけです。メモリマップドファイルの場合は、ファイルとい
# う実体があることが前提となっています(つまりメモリマップドファイルで書
# きかえたファイルは、ファイルを陽にアクセスした時と同様に書きかわります)
# メモリマップドディスクの場合はスワップエリアをユーザプログラムがアクセ
# スできるわけではなく、プロセスが終了するとなくなってしまう(再利用され
# る)ので、メモリマップドファイルのような役目は果たせないことになります。
#
# 私の知っている例では、GNU の RCS プログラムがメモリマップドファイル
# を(OS によっては)使っていました。この場合には、RCS ファイルをメモリ
# マップドファイルとして書きかえているわけです。

PS.
a. については分散ファイルシステムで有効な方法かもしれません。
実行ファイルの内容をあらかじめ全部読み込むことによって、後でサーバ側で
実行ファイルを書きかえても大丈夫になります。サーバ側がクライアント側の
アクセスを把握していないような分散ファイルシステムでは、安全を追及する
ならば、この方法をとるべきでしょう。

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