Systems(しかも初版)を最近になって読みました。後半の分散OSのところはどこまで生き残ってる話かわからなかったので、RPCやNFS以外は流し読みでしたけど。CommentaryのPDF版。おぉ、まずはこれを読もう!ということで、ちびちびと読み始めてます。Kernel部分は1万行程度だったりするので、仕事でレビューさせられてる大量のコードに比べるとかわいいもんです。やる気が出てきました。現在のところ、initを起動するところまでの流れを見渡して、プロセス管理を深く見直すあたりまでいってますが、とりあえず感想とか少しずつ書いてみようかと。最初に面食らうのはCの文法。K&R前の代物で、型チェックがまったくないとか、構造体が無名でグローバルに参照可能とか。構造体の要素にp_とかプレフィックス付けてるのは、名前空間が存在しないがゆえか。型に関係なくいきなりfoo->intvalみたいな形でポインタの読み替えをしてくるので油断できません。最初に見るのがメモリ管理。いってもページ管理みたいな大層なものではなく、ほんとにナイーブなmalloc/freeの実装。いうか、アドレス順に並んでるのにリストですらない!!途中の要素を取り出すと、後ろの要素を全部1つずつ前に詰めるという・・・。Clubに助けられました(笑。Cの世界に入るmain呼び出しの直前にMMUの設定がありますが、ここでまだジェネレーションギャップというか。MMUとは言っても最大8KBページが8エントリまでしかないんですね。論理アドレス空間は64KB。CPUじゃそうだよな。CPU(例えばMC68000)でもメモリ空間だけは24bitだったりしてたので、これはちょっと焦りました。・・・初期のUNIXは64KBで動けたんだ・・・。この8エントリのうち6エントリまでがKernelが使ってまして7エントリ目にユーザプロセス空間、8ページ目にI/O空間がマップされます。確かにこういうところからスタートしてると、スワップとかページ単位じゃなくてプロセス単位にもなりますね。いう事で、歴史を堪能しております。