コンピュータ性能の合成の誤謬

今後のOSに望むこと」というエントリに以下のような希望が書かれているが、まず叶いそうにないない。

Java VMや.NET CLRを、カーネルに入れてほしい。もちろん、インタプリタでは話にならない。動的コンパイルされたコードが、カーネルモードで動かせるようになってほしい。

OSの進化の方向と逆だからだ。
理由の一つには人間の能力の制限によるものがある。

なぜそうなったのか?電脳の進化の速度に、人脳の進化は追いつきようがないからだ。自ずと各人脳が担当できるソフトウェアの、電脳環境全体に占める割合は年を追うごとに低下し、その代わりそれに関わる人脳が増える。そして人脳の増加を最小限に抑えるためには、階層化と階層境界の堅牢化が最も確実な手段である。

安定した性能という観点から見ても「階層化と階層境界の堅牢化」が求められる。

Java VMや.NET CLRを、カーネルに入れると、カーネルモードとユーザモードとの切り替えが無くなって性能が向上するかのように思える。だが、実際には逆になってしまう。

ユーザモードで異常終了したり、無限ループしたりしても、被害はそのプロセスだけですむ。だが、カーネルモードでそうのようになれば、被害は全てのプロセスに及ぶ。ある程度以上のOSの安定性が確保できないと性能も発揮できない。カーネルモードで異常終了したり、無限ループしたりするリスクを増大させることは、よほど大きなメリットがないとリスクの増大に引き合わない。
プロセスがたった一つだけしか動いていないならば、安定性の低下と引き換えに、カーネルモードとユーザモードとの切り替えの減少による性能の向上が確かに期待できる。だが、いくつものプロセスが同時に動いている現在のOSでは、安定性の低下は他のプロセスのまきぞえになるリスクを大幅に増大させる。一つのプロセスだけを見ると性能の向上になるように思えても、安定性の低下は、システム全体を見ると性能の低下ということになってしまう。

Java VMや.NET CLRを、カーネルに入れることは、カーネルモードで異常終了したり、無限ループしたりするリスクを大幅に増大させるため、多少のメリットでは全く引き合わない。