xv6

twitterでなぜだかUNIX V6ネタが盛り上がっていたのだが、たまたまググっていて見つけたのが、xv6。KMC Staff Blogでも取り上げられているので後追い(「UNIX v6 を x86 マルチプロセッサシステムに移植した xv6」)。

xv6(x86 version 6)は、MITのOperating Systems Engineering (6.828)という大学院生向け講義の教材として使うために、UNIX V6をANSI Cに書換え、x86に移植したOS。(reading listにはPlan9やrcが入っているねぇ。)Lions' Commentaryをpre K&RPDP-11という時点で挫折した人は読んでみるとよい。やっぱりx86は嫌だとの強情な人は、2238クラブを要チェック。

公開されているコードは、1万行弱。仮想記憶を実装したり、スケジューラを改造したり、ARMに移植したりしている人もいる。ユーザランド分も含まれているが、テスト用のおまけのようなもの。UNIX V6のコードも公開されていることだし、ライブラリやユーザランドコマンドを移植してみるのも一興かもしれない。pre K&RANSI Cに変換するには、protoizeとか使うのかな。まぁ、さすがに完全は無理だろうけど。

あぁ、でもV6のportable C libraryは今のlibcとはずいぶん違うので、V7の方がよいかもなぁ。V6のportable C libraryはiolibとも呼ばれていて、copenとかccloseのように「c」がprefixされていた。libcはCからアセンブリのsys命令を呼ぶラッパ関数にすぎなかった。つまり、copen関数 -> open関数 -> openシステムコールとなる。

あと、動かすときの注意点でコンパイルx86用のgccを使うこと。x86_64だとNG。

さて、この日記で取り上げるからに、xv6のどこかにPlan9と関係があると気づいた人はするどい。この授業のTAに、Russ Coxが関わっていて、xv6の開発にも関わっていたのだ。ブートやマルチプロセッサ、local APICあたりのコードにはPlan9のものが使われている。

そういえば、Russ Coxも今はGoogleなんだよなぁ。

(追記:2009-08-25)ひらさん行動早っ>xv6詳説