「はじめてのOSコードリーディング」という本を出版します

はじめに

「はじめてのOSコードリーディング 〜UNIX V6で学ぶカーネルのしくみ〜」という本を2013年1月8日に技術評論社から出版します。

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

このエントリでは、その本の紹介を行います。もし興味を持ったならば、書店などで手に取っていただけると幸いです。

追記

追記 2013/08/17

PDP11エミュレータJavaScriptで実装しました。WebBrowser(Crhome)上でUNIX V6の動作確認を行うことができます。デバッグ機能もありますので、読者の方はコードリーディングのお供に使ってみてください。UNIX V6がどのようなOSか知りたいというかたも試してみてください。

http://d.hatena.ne.jp/takahirox/20130801/1375334305

何の本?

UNIX V6のカーネルソースコードの解説本です。以前にブログで書いていた、(Lions本を基礎とした)UNIX V6のカーネルソースコードリーディングメモが基になっています。

http://d.hatena.ne.jp/takahirox/20120212/1329049014

このエントリを見ていただければ、本の中で書かれている内容が、だいたいどのようなものか想像がつくのではないかと思います。このエントリが面白い、もしくは、面白そうだと思った人にはきっと本書も気に入っていただけるでしょう。

本書は、ブログの内容が基になっていますが、そのまま流用しているわけではありません。章構成、文章、図など、全てを一から作り直しました。

UNIX V6を題材とする理由

UNIX V6は古いOSではありますが、カーネルのコード量が少なく、ロジックがシンプルなため、OS初学者の人が初めて読むカーネルソースコードとしてはうってつけだと思います。カーネルはコンピュータシステムの中核を成すものだと言え、カーネルを理解すれば、コンピュータに対する造詣が深まり、技術力の意欲向上にもつながるでしょう。

私もUNIX V6のカーネルを読んでから、コンピュータに対する理解が深まり、世界が広がった感覚を味わっています。そのような感覚をぜひ読者の皆様にも味わっていただきたく、本書を執筆しました。

Lions' Commentary on UNIXとの違いは?

UNIX V6のカーネルソースコードの解説と聞いて、Lions' Commentary on UNIX(通称Lions本)を思い浮かべた人も多いかと思います。

Lions’ Commentary on UNIX (Ascii books)

Lions’ Commentary on UNIX (Ascii books)

本書とLions本の一番の違いは、「本書の方がわかりやすい」ことだと思っています。

Lions本はUNIX V6の解説書として有名ですが、その敷居の高さも有名だと思います。私もLions本にはかなり苦しめられました。本書には、「Lions本の内容がこんな感じだったら、もっと読みやすかったんだろうな」というアイデアをたくさん詰めました。具体的には、以下の工夫を行っています。

図を多く

Lions本はほとんどが文章で書かれており、図や表が少なく、処理の内容のイメージが掴みにくかったです。そこで本書では、図や表をできるだけ多くして、直感的に理解ができるように心がけました。

抽象度の高い説明

本書の各章は、以下の流れになるようにしました。

  1. プロセスやファイルシステムなど、機能モジュールの解説
  2. 関数がどのような処理を行っているかの解説
  3. コードレベルの解説


このように、抽象度が高い方から低い方へと流れるように解説を行い、読者の理解が捗るようにしました。

流れるような章構成

カーネルの中でも、特に興味を持たれそうな部分をできるだけ前半の章に置いています。また、ある章を読むときに、必要な情報がそれ以前の章に載っているように心がけました。

Lions本の方が優れている点

もちろん、Lions本の方が優れている点もあります。

本書では、ページ数が限られているため、カーネルの通常動作に焦点を絞って解説しています。そのため、エラーが起きた時の動作の解説や、V6の設計では問題が起こりうるであろうケースの考察などについては弱いです。

また、同様にページ数を削減するため、UNIX V6カーネルで使用されているCやアセンブラの仕様については「仕様書を参考のこと」で片づけています。

Lions本では、これらに対する言及も含まれています。本書とLions本はそれぞれ強み弱みがあるので、本書を読むときに、時折Lions本も参照していただくと、理解が早くなるのではないかと思います。

必要なスキルは?

本書はカーネルソースコードの解説書ですので、事前に入門書などでOSの基礎知識を学んでおくことが望ましいです。本書に限らず、ソースコードの解説書は、知識ゼロでいきなり読むものではないと思っています。

また、カーネルのほとんどがCで書かれているので、Cの知識を持っていることも望ましいです。特別な書き方をしているわけではないので、基礎レベルのCの知識で充分読むことができると思います(私がそうでした)。

ただし、UNIX V6で採用されているCはPre K&Rと呼ばれるもので、現在のCとは仕様が異なる部分もあります。Cをマスターしている人ほど、読みづらいかもしれません。

一部は(PDP-11用の)アセンブリ言語で書かれていますが、それらのうち特に重要なものしか本書では扱っていません。コード量が少ないので、アセンブリコードなんで読んだことないという人でもなんとかなると思います(私がそうでした)。

その他

その他2

終わりに

というわけで、告知でした。ご興味があれば是非読んでみてください。

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)