« Team U/Ox | Main | 京ぽん購入 »

June 20, 2005

演習3: 石川研

演習3が終わるたびにまとめをするのが流行っているようなので、第2期のまとめ。

第2期の石川研では、Linuxにおけるプロセスのマイグレーションに取り組んだ。プロセスマイグレーションとは、あるマシンで実行中のプロセスを一時中断して別のマシンに持って行き、中断したところから実行を再開する機能である。実は第1期の米澤研でも、プロセスマイグレーションという話のはずがいつの間にかsnapshot機能の実装になっていたという経緯がある。2期続けて同じテーマになったのは、まあ偶然であるが。

最初の1週間はBerkeley Lab's Checkpoint/Restart(BLCR)というcheckpointライブラリの調査をした。大変よくできたライブラリで、これを使えば俺は何もコードを書かずにプロセスマイグレーションを実現できそうに思えたが、カーネル2.4では完璧に動くものの、まだカーネル2.6へはまともに対応していない状況であった。blcrのカーネル2.6対応作業はいずれ本家が行うだろうし、どうせだから何か別のことをしようということで、blcrとはちょっと違った切り口でプロセスマイグレーションを実装してみることにした。

なにしろLinuxカーネルを本格的にいじるなどこれまでやったことがないので、関連するソースを読むことに大半の時間を費やした。実装を開始したのは最終発表3日前というきわめて泥沼的状況で、案の定最終発表までにはきちんと動作させることはできなかった。第3期の開始までにはまだ時間があったので、その後デバッグを進めていき、今日ついにプロセスのマイグレーションに成功したのである。何はともあれ、動いてよかった。

カーネルソースをいじっていて思ったのは、「OSの安定性は超人的努力によって支えられている」ということ。例えば、様々なリソースはカーネル内で構造体として表現されている。それらのメンバを操作する際にはセマフォをロックし、操作が終了したらアンロックする。もう、ちょっと間違っただけですぐにデッドロックや競合条件の嵐に見舞われそうである。カーネルソースをいじり慣れている人にとってはまた違って見えるのかも知れないが、少なくとも俺にはカーネルの安全性がきわめて脆いバランスの上に成り立っているように思えた。個人的には、あのような複雑なプログラムにこそC++を使うべきではないかと思う。例えば重要なデータ構造をクラス内に隠蔽して、インターフェースを通してのみアクセスさせ、それによってロック/アンロックを保証するとか。

さらに進んだ取り組み、例えば型安全な高級言語やアセンブリでOSを書けるようにするという試みや、様々な検証技術は決して未来の技術ではなく、今まさに必要とされている技術といえる。

|

« Team U/Ox | Main | 京ぽん購入 »

Comments

むしろ、スレッドレベルでの安全性とかは言語がもっと積極的にサポートするべきだと思っているんだがどうだろうか。というか、どうすれば保証できるのかわからない。なので、SPINを使ってみるわけだ。

Posted by: unno | June 20, 2005 at 10:52 PM

それは言えてる。Javaみたいに、メソッドまるごと、とか変数単位とかで自動的にロックがかかるようになるだけでも大分違う気はする。

Posted by: fujita.h | June 21, 2005 at 10:25 PM

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/39126/4639044

Listed below are links to weblogs that reference 演習3: 石川研:

« Team U/Ox | Main | 京ぽん購入 »