9vxのソースコード

暇を見つけて9vxのコードを読んでいこうと思う。最初にトップディレクトリのHACKINGファイルに目を通しておくとよい。
vx32-0.12/src/9vx以下が9vxのソースコードで、トップディレクトリに存在するファイルは9vxのために手で修正 or 新規作成されたコード。コアは以下の6つのファイルで、合計で2500行程度。

  • main.c
  • mmu.c
  • sched.c
  • time.c
  • trap.c
  • vx32.c

あとのdev*.cなどはネットワークやファイルシステムなどのデバイス周りのコードになる。例えば、/netに対する操作をホストOSのソケット操作に変換するとか。つまり、デバイスドライバがいらないということでもある。

残りのカーネルのコードはというと9vx/a以下に存在する。kenccとgccの違いとか、アドレス空間の違いとかあって、Plan9のコードをそのまま動かすことはできない。でも、定型的な変換処理で対応できるので、edスクリプトで変換している。オリジナルのコード4万行に対してedスクリプトは1000行。

sedじゃなくて、edなのね。Wikipediaでdiffについて調べていたら、こんなくだりを見つけた。

ed用の出力によって、ファイルに行った一連の変更をひとまとめにして、ファイル容量を節約するというアイデアが出てきた。Source Code Control System(SCCS)はそのようなアイデアを実装したものとして、1970年代後半に実装がなされた。