[OSASK 4985] BOARD: OSASK へのコメントへのコメントへのコメント

このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい
http://www.imasy.org/~mone/osask/index.cgi?REFER=3d8375dc_3ce6

2002/09/15 02:46
匿名の臆病者

http://slashdot.jp/comments.pl?sid=42491&cid=161637
のコメントを書いた匿名の臆病者です。
これに対して川合様の以下のようなコメントhttp://www.imasy.org/~kawai/osask/comment.html#slashdot020906_1332227
を拝見しましたので、さらに補足コメントしたいと思います。

> OSASKでは統合の結果として「スワップファイル」がないという特徴があるのですが、
> これらのOSにはスワップファイルが無いんでしょうか?

「メモリを主体にし、メモリからあふれたらそれをハードディスクに書き出す」という意味での
「スワップファイル」は現行の多くの OS (SVR4系,BSD系,Linux,NT系も?) には存在しません。

現行の OS では、システムのメモリは基本的に
何らかの「オブジェクト」の「キャッシュ」でしかありません。
あくまでオブジェクトがメインです。

ここでいうオブジェクトとは、メモリにマップして操作できる
あらゆるものを表します。このようなオブジェクトの
代表的な存在として、「ファイル」があります。
(他に一部の「ハードウェアデバイス」をオブジェクトとして扱ったりします。)

オブジェクトのキャッシュ(つまりメモリ)が不足してくると、
OS のメモリ管理システムは、キャッシュを解放して
キャッシュ不足を解消しようとします。
このとき、キャッシュのデータが元のオブジェクトのデータから
変更されていて書き戻す必要があれば、
そのデータをオブジェクトに書き出します。
このように現行の OS には、スワップファイルというものは存在しません。
別の言い方をすれば、メモリ管理システムはスワップファイルの存在を仮定しません。
(この意味でのスワップファイルが存在する OS には
例えば古い MacOS などがあります。)

ただし、現行の OS には、上述のスワップファイルとは
意味が異なる、「スワップファイル」(もしくは「スワップファイルシステム」)
と呼ばれる特別なファイルオブジェクトが通常存在します。
これはメモリ管理システムから見れば
絶対に存在しなければならないものではなく、
システム全体として、「あったら便利だ」という意味で存在します。
例えば、プロセスのメモリヒープやメモリスタックは
スワップファイルオブジェクトのキャッシュとして存在します。

もちろん、これらのヒープやスタックを
いわゆる通常のファイル(のファイルオブジェクト)のキャッシュとして
扱うこともできます。
しかし、スワップファイルシステムはプロセスのヒープやスタックの処理などに
最適化されているので、スワップファイルシステムを用いたほうが、
通常のファイルシステムよりも、効率よくかつ安全に
ヒープやスタックを実現できます。
例えばスワップファイルシステムには通常のファイルシステムと比べ、

1. ファイルに名前を付けなくてよい
2. 複雑なディレクトリ構造がいらない
3. ファイルのセキュリティ(アクセス権がどうとか)を考えなくて良い
4. Transientなデータのみ保存されるので電源断などに対処しなくてよい

など多くの利点があります。
このため、現行の OS はスワップファイルを利用しています。

大幅に話を簡略化していますが、以上の説明からお分かり頂けるように、
残念ですがOSASK のメモリ管理のやり方に特に新規性はありません。
より詳しい説明は
"The Design and Implementation of the 4.4 BSD Operating System"
"UNIX Internals: The New Frontiers"
"Solaris Internals"
などの本をご覧ください。

で、ここからは個人的な感想ですが、
新規性がないことは、全く問題ではありません。
もちろんあるにこしたことはありませんが、
OS はもう何十年も研究されてきた分野なので、
はっきりいって新規なものを生み出すのは至難の技です。

そういう意味で、「機能を絞ったシンプルな OS を作る」という
方向性は間違っていないと思います。
例えば、高級言語 PL/1 で作られた、何万ドルもする計算機の上で実行される
超高機能で超複雑な OS "Multics" に反抗して、
Ken Thompson らがアセンブラガリガリで作った(後に C で書き直しましたが)、
安価な古い計算機の上で実行される
シンプルな OS が最初の "UNIX" だったわけです。

# もちろん単に「作りました」だけではダメなんですが…


ML番号でジャンプ
ML単語検索