Hatena::ブログ(Diary)

ひら このページをアンテナに追加 RSSフィード

2007-10-31

Minixカーネルソースコードを読む方法

Linuxの誕生の経緯からなのかOSを学ぶにはMinixから入ったほうが良いという話を

昔から耳にする。これは正しいと思う。ただ、僕はMinix本(オペレーティングシス

テム―設計と理論およびMINIXによる実装 ISBN: 4894710471)を読んでいない。

いきなりLinux2.4.18を読み始めた。


なぜMinix本を読まなかったかというと、びびって読めなかったからだ。どっかの

Minix本の書評に「5年は楽しめる本」というセリフがあり真に受けてしまった。

”えぇ〜5年もかかるのかよぉ” と思うと気分が重くなった。確かに5年くらいかか

りそうな本の厚さだと思った。


そんなわけで、Minix本を手に取るたびに鬱な気持ちになった。強がりを言うと、今

だと3ヶ月で読みきる自信はある。Minixの理解するのはスゲー簡単だと思う。でも、

当時(高校時代)はびびってMinix本を読む前に、あれやってこれやって、と上りき

ることが出来ない階段を作ってしまった。


Minix本など、この手の本を読むにはコツがある。最初から最後に向かって読むと時

間がかかるし、しんどい。解説を読んでからソースを読むのもしんどい。一番楽に

読む方法は、簡単なOSの解説書と並べてカテゴリ単位に横断的に読む方法だ。


http://d.hatena.ne.jp/hira_sosuke/20070307/1173274346


カーネルはスケジューラから読むのが一番、楽だと僕は思ってる。動作が特徴的で小

さくまとまっているから。ブートシーケンスやファイルシステムはやめておいた方が

良いと思う。複雑で退屈だから。まぁ、どこから読めば楽か?という議論はいろいろ

あるのだが、僕としてはスケジューラがお勧めである。


例えばスケジューラを読むことを前提に話をすすめる。

簡単なOSの解説書を買ってきて、いきなりスケジューラの章を読む。物足りないな、と

思ったらもう少し詳しい解説書を買ってきてスケジューラの章を読む。さらに物足りな

いな、と思っても次の新しい解説書を買う必要は無い。次々新しい解説書を買ってしま

うと、上りきる事が出来ない階段へと歩んでしまうからだ。2冊も読めば十分だ。


この段階で学ぶのは詳細な知識ではなく概念である。概念さえわかればソースコード

読める。で、Minix本のスケジューラのソースコードを眺める。スケジューラのコードが

どれであるか、というのは(Minix本の)解説のページに書いてあるのだが、この段階で

解説を読まないほうが良い。解説を読むのは目がソースコードに慣れてからだ。


ソースコードというのは不思議なもので、眺めていると段々と構造が浮き上がって見え

てくる。雲を眺めていると、段々と何かの形に見えてくるのと同じようなものだ。大し

て重要じゃないコードが見えなくなる。人の脳は優秀なので、ソースコード上のノイズ

をカットして本質的な部分だけが目に入るようになるのだ。


この段階で変数や関数の意味などに疑問が沸くと思う。そこではじめて(Minux本の)解説

を読む。ただし該当部分を索引で探し、あくまで数行読むだけである。章の最初から読もう

などと考えない方が良い。


最初にするべきは概念を頭の中に作ることである。しっかり読むべきなのは解説ではな

ソースコードである。

namunamu 2007/11/06 23:38
>Minix本を読む前に、あれやってこれやって、と上りきることが出来ない階段を作ってしまった。

Linux カーネルを読む前に作った階段が、Minix だったりします。
さらに Minix を読む前に・・・orz

>しっかり読むべきなのは解説ではなくソースコードである。

その通りですね。完全に目的と手段をはき違えていました。

ひらひら 2007/11/07 01:06
>Linux カーネルを読む前に作った階段が、Minix だったりします。
>さらに Minix を読む前に・・・orz

一番注意しなければならないのは、Linuxを学ぶ最短コースを探して悩んで
あれこれ中途半端に手をつけてしまうことです。
Minixに絞って没頭して学ぶことが結局、Linuxを学ぶ最短になると、そんな
気がします(^-^)

ybitboyybitboy 2008/08/26 13:20 はじめまして
OSについて学びたいと思い、調べているうちにここにきました
学びたいというよりは造りたいというのが本音です

いつもはjavaでweb開発をしているのですが、
初めてLinuxに触れ、CUIに触れたとき新鮮さを覚え
OSというものに興味がわきました
1文字画面に出力するのも、興奮もので
web開発では体感することがない魅力があります

しかしOSを作ってみたいけど、どうすればいいっと悩んでいて、
本屋に行っても分厚い本ばかりで、どれもとっつきにくいものでした
ですが、ひらさんの記事を見て、linuxのコードの読み方を勉強させてもらいました
まずは概要を掴めるような本を購入してみます
勉強になりました
また遊びにきます、ありがとうございました

ひらひら 2008/08/26 13:59
はじめまして>ybitboyさん

>OSについて学びたいと思い、調べているうちにここにきました
>学びたいというよりは造りたいというのが本音です

僕も同じです。
OS(カーネル)を作るのが俺の人生だ、くらいの勢いです(笑)

>本屋に行っても分厚い本ばかりで、どれもとっつきにくいものでした
>ですが、ひらさんの記事を見て、linuxのコードの読み方を勉強させてもらいました
>まずは概要を掴めるような本を購入してみます。

”OSの道”は長く険しいです。
ただ、ソフトウェアエンジニアリングの粋が集められた
世界であり、世界トップレベルの技術者のコードが読め
る(考え方を知ることが出来る)世界でもあります。

>しかしOSを作ってみたいけど、どうすればいいっと悩んでいて、

同じく、僕も悩んでいます(^-^)

答えは出ていないのですが、でもこうして悩んでいると
いつか何かヒントがひらめくと思います。

Linuxカーネルのソースコードをどうやって読めばよいか?
という事は10年近く悩み続けました。そうしてある日突然、
ヒントが閃いたわけです。そこから手法化するのに半年かか
りました。>ひらメソッド

「悩んでいるときが一番、成長している」という言葉も
あるように、今後も”悩み”を続けたいと思います。
悩むことが技術者としての自分を実感させてくれます。

共に頑張りましょう(^-^)b

yamasushiyamasushi 2010/01/15 07:14 山本@赤穂
悩んでいるときばかりです。orz

ひらひら 2010/01/16 19:35
>悩んでいるときばかりです。orz

悩みの先に、何かがあるから悩めるんですよ。
世の中、そうなってるんですよ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証