新城です。こんにちは。

In article <m3sm9qr1d1.fsf@nospam.maedapc.cc.tsukuba.ac.jp>
        MAEDA Atusi <maeda-news@ialab.is.tsukuba.ac.jp> writes:
> Cでも、同じプロセスでページフォルトとかディスクI/Oとかが起きちゃったら、
> リアルタイム性はなくなっちゃいますよね。1つのプロセスにunboundな部分と
> boundな部分を混ぜて書くのは無理でしょう?

C 言語というか、OS の機能になりますが、1つのプロセスでペー
ジ・フォールト起さないようにすることは、できます。Unix 系で
は、mlock()。C では、malloc() して、その番地付近を mlock() 
するか、malloc() は使わないで /dev/zero を mmap() してとった
領域を mlock() するかでしょうか。

ディスクI/Oについても、ファイルのディスク・ブロックを並べ
替えたりするようなOSはあります。そうするとシーク時間とか回
転待ち時間まで計算すると上限がわかります。このあたり、言語の
問題ではないのですが。

C で、mlock() を使うに相当するのは、Lisp で cons する時に、
ページングされない領域にセルを取る、では足りないんですよね。

> じゃあ、なぜリアルタイムGCを持っている処理系がないんだと言うことになり
> ますが… それはUnixやWindowsでGCだけリアルタイムにしても無意味だから。
> リアルタイムGCの数%のオーバーヘッドの分だけ損してしまう。

実時間OSではないくせに、けっこう実時間のアプリケーション
(音楽とか動画の再生など)が、そこそこ走ってしまうという話も
あります。その「そこそこ」には涙ぐましい努力があるのでしょう。
本来ならOSがやるようなファイル入出力のバッファの管理を自分
でやるとか。

> # GCを止めたり、特別なアロケータを使ったりしないでOSを書いて見せればデ
> # モンストレーションになりますかね。

トータルのメモリが節約になるということも言えるかも。つまり、
静的に確保すると安全策でついつい多め、長めに確保して実は同時
には使わないという話も多いのかも。人間が考えて「ついつい」を
削除すればいいんですが、それは高度な話なので、自動化できれば
その方がいいでしょう。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\