ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

はじめてのOSコードリーディング

 はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ読みました。
全体の半分程度読んだ時点での感想です。期待していたよりもずいぶんと固い内容で驚きました。表紙の色合いとは裏腹に、大手メーカさんのデータシートを読んでいるようなそんな感じを受けました。じっくりと歴史的な意味も押さえながらOSの勉強をしたい人向けの本です。最初の読者ターゲットにも書いてありますが、C言語だけでなく、ある程度OSの概要が分かっている必要があります。例えば、プロセス、システムコール、仮想記憶などは、ある程度イメージを持っていないと、本を読んでいくには辛いと思います。

本の内容

 UNIX V6 という古のUNIXソースコードをおいながら、UNIXの動きを勉強していく本です。V6のソースコードに対して、淡々と説明がしてあります。章の最初に用語や概念の説明があり、機能に対応した構造体や関数の説明、必要に応じてメモリの状態(特にスタック)の説明があります。全体の流れは一般的な説明の順番になっていて、メモリとプロセスから入り、割り込み/システムコール、入出力と続きます。プロセスの所が一番わかりやすく、そこを読んでみてちんぷんかんぷんだったら、他の書籍で勉強することをおすすめします。他に読む本としてタネンバウム先生の本が紹介されていますが、まずは情報処理検定の教科書が良いと思います。注意点としては、この本は一冊で内容が閉じているわけでないです。必要に応じて、PDP-11のマニュアルを読んだり、現行のUNIXシステムコールと比較したり、この本以外にもいろんな所を追わないとしっかりとは理解できない内容になっています。一回読んだだけでは良くわからないって事も多いですが、そういう本だと思ってどっしり構えて読みましょう。図表も少しわかりにくい所があるので、別の教科書の同じ説明を見てみると理解できる場合もあると思います。

MINIX本との違い

 僕が比較対象にできるほど、ちゃんと読んだOS本はタネンバウム先生のオペレーティングシステム―設計と理論およびMINIXによる実装MINIX本)しかないので、その本と比較します。
 この本は、実際に動いているOSで使われているアルゴリズムと実装について説明があります。一方、MINIX本は、OSで使われる可能性のあるアルゴリズムについてざっくり説明したあと、MINIXでの実装があります。方向としてはお互い逆方向から入っています。実績のあるOSで学びたい人はこの本、もうちょっと引いた目でOSを見た上で実装を学ぶにはMINIX本という事になります。
 MINIXに関しては、x86エミュレータで動くので、実際に手を動かしてみるという点ではMINIXの方が入りやすいと思います。MINIXでOSを勉強する利点は他にもいっぱいあります。CがANSI準拠でコメントもわかりやすい、マイクロカーネルといった実験的な機能がある、TCP/IPやXも動く、今でもほどほどにユーザーがいる、等、流石教育用OSです。ただし、MINIXの実装自体は恐ろしくpoorです。例えば、リソースのデッドロックを避けるためのアルゴリズムがいくつか説明がありますが、実装は何にもしていません。教育用OSなので、実践的な機能は自分たちで追加するんだというスタンスです。
 まとめると、教育用のおもちゃでも良いので楽しく勉強したい人はMINIX、古くても一時代を築いた古のソースから学びたい人はV6から入れば良いと思います。あとはロマンとか。

楽しいところは自分で見つける

 繰り返しになりますが、この本はとても内容が固い本です。データシートのように、最初から最後までテンションが一定です。本の表紙から受け取った感じですと、もうちょっと軽い感じで「ここは一見おかしく見えるけど、こういうシチューエーションの時に効いてくるんだ。なるほど。」「これは当時のCPU事情でこうなっているけど、今では考えられな。ふむふむほむほむ」のような事が書いてあると思ってました。勉強会がベースになっていると聞いたので、そこででた雑談なども入っているんだろうなと、勝手に期待してました。実際にはそういう所はいっさいなくて、淡々とソースコードの説明がしてあります。
 では、すごいって所が無いかというと全然そんなことはなくて、読んでいくと新しい発見があるところがいくつかありました。私の場合ですと、今まで他のプロセスにSIGNALを送った時、SIGNALを送った時点でコンテキストスイッチが発生すると思っていたのですが、この本を読んで確認したところSIGANLを送った時点ではコンテキストスイッチ発生しないんですね。一つ勉強になりました。他にも驚く所はありましたが、そこは自分で読んで見つけた方が楽しいと思います。MINIX本だと食事をする哲学者問題とかこれ面白いだろどう?みたいな振りがいくつもあるのですが、この本はそういう所が一切無くここも対照的だなと感じました。あくまでソースの説明だけをしっかりと書いてあります。

まとめ

 最初の一冊にはおすすめできないですが、実際に動いていたOSの歴史的な点も含めて勉強したい人にお勧めします。本の内容が分からなくても、自分でPDP-11のデータシート読んだり、Webで公開されているV6のマニュアル読んだり、別の本で勉強し直してみたり、そういうのを楽しめる人にはとても良い本だと思います。