2009/05/12

古くて新しいOS機能への回帰の動向

Firefoxの未来形ではタブ毎にプロセスを分ける設計を検討しているそうです。
Firefoxのタブも、Chromeに似たマルチプロセス化へ - @IT
もちろん、タブごとのマルチプロセス化による恩恵は、グーグルがChromeの発表時に広く宣伝したことで知られるようになったとともに、IE8ベータの影響も大きいようです。

これはある意味、新しくて古いOSの機能への回帰ですが、こういった流れはブラウザの他にもあるようです。

最近流行の(?)JavaVMやサーバ仮想化におけるVM(VMWare等)は、アプリケーションからしてみれば単なるOS層の再定義に過ぎません。しかしこの再定義は、JRockitのような一部の試みを除いて、HV、OS、JVMなどの言語VM、と階層が深くなる一方であり、そのオーバーヘッドも無視できなくなったようです。
これは先に述べたPCのブラウザ環境においてもそうですが、特にAndroidのようなハード制約が厳しいモバイル環境においてはなおさらです。

ここにおいて、Googleの解はOSへの回帰です。

Androidのアプリケーション開発環境は独自のJava環境ですが、その実行環境であるVMはJavaVMを用いずにDalvik仮想マシン, http://ja.wikipedia.org/w/index.php?title=Dalvik%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3&oldid=25752724 (last visited 5月 11, 2009).を用いています。

Dalvikの特徴の一つは、アプリケーション毎に異なるVM(Linuxのプロセス)を立ち上げることです。
これによって、OSのメモリ管理の恩恵にあずかれます。

OSのメモリ管理の利点の一つは、強力なアクセス保護機構ではないでしょうか。
これにより、バグやそれを悪用したマルウェアからの不正アクセスや以上終了から守られます。これはPCのブラウザ環境において、マルチプロセスをChrome、IE8が採用し、Firefoxが採用を検討している理由と一致します。

OSのメモリ管理の利点のもう一つは、OSのメモリ回収機構を利用できることでしょう。
これは一般にMMUのようなハードウェアのサポートを受けられることを意味しています(ARMの下位モデル等モバイル環境にはMMUがないケースもありますが)。
つまりJVMにおけるGCの厄介な問題をハード・OSに任せられることを意味します。

Dalvikは先に述べたようにアプリケーション毎にVMプロセスを分離しますので、少なくともアプリケーション終了のタイミングではOSのメモリ回収機構を活用できます。

さらには、アプリケーションプロセスのライフサイクル内におけるGCもDalvikでは特徴的です。
DakvikのGCはdlmallocというGoogle再実装libcにおけるメモリ割り当て機構(?大元はCreative Commons License)における領域サイズ毎に分けて管理されたfree関数そのもののようです。

これにより、シンプルかつ強力なメモリ管理が行われる、と言うことでしょうか。
これらこそ正に新しくて古いOS機能への回帰です。