初めてのOS source code reading(UNIX 6th source code readingのススメ)

このエントリはhttp://d.hatena.ne.jp/takahirox/20120131/1328006885を和訳したものです。

はじめに

最近UNIX 6thのソースコードの読書メモを書き終えました。

みさなんにもUNIX 6thのソースコードを読むことをオススメします。

その理由をこのエントリで書いていきます。

まとめ

UNIX 6thは初めてOSのソースコードを読む人にうってつけ! 今すぐ読み始めましょう!

UNIX 6thのソースコードはこちらなどで読むことができます。

UNIX 6thのソースコードを読むことをオススメする理由

たったの10,000行

最近のLinuxカーネルソースコードは100万行を超えています。全てを理解するのは至難の業です。

一方、UNIX 6thのカーネルは、デバイスドライバを含んでも約10,000行です。それぞれのデバイスドライバも100行やそこらで書かれていて、ロジックもシンプルです。容易に理解できるでしょう。

基本的なOSのアイデアが詰まっている

UNIX 6thにはOSの基本的なアイデアが詰まっています。

ファイルシステム、プロセス、プロセススイッチ(コンテクストスイッチ)、システムコール、トラップ、パイプ、デバイスドライバなどなど。シンプルなロジックで実装されています。

最近のOSのソースコードは改善・修正が積み重なって複雑化されたものなので、ぱっと見で何をしているのか理解するのは難しいでしょう。

UNIX 6thのソースコードを読んでOSの基本的なアイデアを理解すれば、最近のOSのソースコードでもそれらが何をしているか容易に推測できるでしょう。

ご存知の通りUNIX 6thは何十年も前に書かれたものなので、最新の技術は含まれていません。ネットワーク、スレッド、マルチプロセッサ用のロジック、などなど。ご注意ください。

ガイドブックの存在

UNIX 6thにはガイドブックが存在しています。"Lions' Commentary on UNIX"という本で、Lions本とも呼ばれています。

Lions’ Commentary on UNIX (Ascii books)

Lions’ Commentary on UNIX (Ascii books)

もし本を買うお金がなくても、原著のテキストが公開されているので無料で入手することができます。そのWebサイトは後で紹介します。

私はLions本の読書会にも参加しています。興味があれば参加してみてはいかがでしょうか。


もちろん、私が書いたUNIX 6thのソースコード読書メモも理解の助けになると思います。

充実した資料

Web上でUNIX 6thとPDP11の資料を入手することができます。資料を入手できるサイトを後で紹介します。

さらに、UNIX 6thとPDP11のエミュレータが存在します。ソースコードを読みつつ、実際にOSの動作を確認することができます。エミュレータの情報は以下のページを参考にしてください。

仕事の助けにもなる

ご存知の通り、OSはコンピュータシステムの中核です。OSの理解はハードがどのように使われているかの理解につながります。また、プログラムがどのように処理されているかの理解にもつながります。

OSの理解はシステム全体を理解する助けになります。システム中のボトルネックに焦点を当てることが可能になるでしょう。


諸問題

もちろん、いくつかの壁も存在します。

まず、pre K&R C. 多くのcode readerが混乱させられています。いくつかの例をここでお見せします。

struct {
  char high ;
  char low ;
} ;

hogehoge( arg ) {
  int hoge ;
  hoge = arg ;
  return hoge->low ;
}

「なぜhogehoge( )の返り値と引数の型が宣言されていないんだ!?」「なぜint型のhogehoge->lowという使い方ができるんだ!?」と思われた人もいるでしょう。これがpre K&R Cなのです。

次の問題は、いくつかのコードはアセンブリコードで書かれていることです。人によってはとても深刻な問題になるでしょう。それらのうちいくつかは何とか読み解いたので、読書メモ中に解説を書きました。参考にしてみてください。

三番目の問題は、いくつかのコードがそれほど洗練されていないことです。

最後の問題は、Lions本がそれほど読みやすいものではないということです。もし理解できない場合は私の読書メモを参考にしてみてください。深刻に悩みすぎないことが読み解くコツです。

読書メモ&記事リスト

基本的にLions本に沿ってメモを書いていきました。メモ中の数字はLions本で使用されているソースコードの行数に対応しています。


追記:ブログの記事を元に本を執筆しました。ブログ執筆時は理解が追いついていないままメモを取っていったので、誤りや誤解を招きそうな記述も多いです。それらは本の執筆時に修正したので、がっつり勉強したい人は本の方を参照することをおすすめします。

http://d.hatena.ne.jp/takahirox/20121214/1355490840


このメモは海外展開したいと考えており、英訳を始めました。


次のリストはLions本読書会の参加メモです。


次のリストはLions本読書会の皆様と行った合宿に関連した記事です。


UNIX 6thに関連したソフトウェア(ツール)を作ったり、実験をしたりもしています。

参考リンク

  • OSの基礎と応用(OSの基礎の理解ができます)

OSの基礎と応用―設計から実装、DOSから分散OS Amoebaまで

OSの基礎と応用―設計から実装、DOSから分散OS Amoebaまで

  • 作者: A.S.タネンバウム,Andrew S. Tanenbaum,引地信之,引地美恵子
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/04
  • メディア: 単行本
  • 購入: 4人 クリック: 151回
  • この商品を含むブログ (13件) を見る

UNIXカーネルの設計

UNIXカーネルの設計

終わりに

このエントリによって、UNIX 6thのソースコードを読んでみたい! と思ってもらえたら嬉しいです。


追記:思わぬ反響で驚いています。読書メモの内容などに誤りがありましたらどんどん突っ込んでいただけると助かります。

追記2: