Path: coconuts.jaist!wnoc-tyo-news!aist-nara!nisimura From: nisimura@itc.aist-nara.ac.jp (Toru Nishimura) Newsgroups: fj.os.bsd.freebsd Subject: Re: How to read FreeBSD2.1.0 source Date: 30 Oct 1996 02:55:02 GMT Organization: NARA Institute of Science and Technology Lines: 82 Message-ID: <556g26$5o4@fse3.aist-nara.ac.jp> References: NNTP-Posting-Host: decpc59.aist-nara.ac.jp X-Newsreader: mnews [version 1.19PL2] 1996-01/26(Fri) In article eliot@cs.kyoto-su.ac.jp (Komatu Takuya) wrote > 先日、研究室のDOS/V マシーンに FreeBSD2.1.0 を入れ、各種の設定も終わり、 > 今、友人と二人で FreeBSD2.1.0 のソースを読み始めています。 > > そこで質問なんですが、効率のいいソースの読み方はないものでしょうか。 > > OSのソースを読むのは初めてで、取りあえず /sys/kern/init_main.c から読 > み始め、順に出てくる関数、変数が定義されている所をソース全体から(grep > * 等で)探していこうと考えたのですが、探すのが一苦労です。 大学院生のソース読み輪講につきあったことがあるのですが、彼らも同じような 非効率なアプローチを取りました。システムコールが呼ばれた時の制御の流れや、 コンテキストスイッチとは CPU の何をどうすることかなど、超基本的な知識を 咀嚼できてない状態で「生の OS」のソースコードに手を出すのは難がある(ひ どく遠回りをするという意味)ように思います。 とりあえず、相互参照を効率良く行なうという目的には ctags(1) を使うのが古 典的です。{4.3-late, 4.4} BSD にはカーネル全体の tags ファイルを作 成するような Makefile エントリが含まれていたのですが、現在広まっている派 生品においてちゃんと動作するように make tags がメンテナンスされているか どうかはよくわかりません。とにかく手作業ででもタグファイルは作れます。 > 「4.3BSDの設計と実装」という本が出ているらしくこれを読みながらソースを > 追いかけてみてはどうかと言われたのですが、この本の他に参考になる資料は > あるでしょうか。 他の方も指摘されていますが、改訂版もでています。私は旧版新版どちらもお 奨めしません。なぜなら、よく誤解されているようですが、入門書でないから です。以前 comp.os.* なしがしだったかで、これらを評して「too dry」だと の発言を見たことがあります。私もまったくその通りだと思います。これらの 本に書いてあることを理解するには、まずソースコードを読んでおくことが先 決です。「UNIX カーネルの全体像を得る」などという目的でこれらの本に取 り組むとおそらく自滅するでしょう。それらは前提知識の範疇に含まれるよう に思います。 私は「Design and Implementation」本は「復習書」だと思います。 > 「私はこんな本を参考に、○○しながら(○○して)読み進めていった」という > 情報が頂けたら幸いです。 学部 4 年生に適切なアドバイスをするのは難しいですね。間違ったアプロー チを提示したりすると、悪いからなぁ。苦労しろよ、なんて言えないもんなあ。 まず最初はこんなんではどうでしょう。 ◇ もし主要な UNIX system call とその使い方を空で人に説明することができない ような知識レベルならば、まず自分でそのような資料を作る。system call は目的 別におおざっぱにグループ分けできるはずで、そのよう資料をまとめることによっ てなにが主要でなにが枝葉なのかを把握することにもなる ◇ ユーザプログラムが system call を読んでから、それがカーネルに処理されて 結果がユーザプログラムに戻って来る過程を調査する。OS のソースを読むのは初 めてだとこれを 100% 理解することはまず不可能でしょうけど、「このコードはそ ういう意味だったのか〜っ」と後で分かるような日がいずれ来るでしょうから、努 力の値打ちはあります。 ◇ まず構造体ありき。 /usr/include/sys にある .h ファイルを読んで、カーネル内部で使われている 重要な構造体の相互参照関係を図解する資料を作成する。この作業はすばらい 効果があります。各種構造体の目的と使われ方、相互依存関係を把握できてし まえば、処理の実装法の詳細は枝葉と言い切ってよいと思います。 「MINIX」本は UNIX system call インタフェースや filesystem というもの を勉強するのには役に立ちます。ですが、UNIX カーネルを理解する目的には まったく使えません。「XINU」本は整い過ぎていて(D. Commer の語り口がう ま過ぎる。つまり教師として超一流なんだろう)、得た知識を一般化する(応 用が効くよう咀嚼するという意味)にはそれなりの努力が必要なように思いま す。「Bach」本は悪くない。ひょっとすると入門者には実はこれがよいのかも 知れない。ついでに言うと「Stevensもの」は内容に抑制が効いていないきらい があってちょっとなぁ。洋書を羅列する形になっちまったけど、もちろん原書 を読まなくてはだめですよ。 以上は努力を惜しまない学生さん向けのコメントでした。「おれはてっとり早 く達人になりたいんだ。どこの本屋でも売ってるハウツー本をすぐ紹介してく れ」という向きにはお役に立てませんです。 奈良先端科学技術大学院大学 情報科学センター 西村 亨