OSに関する理解を深めるためにカーネルを学んでみようとするのは、ごく普通のアプローチではないかと思います。Linuxであろうと、FreeBSDやNetBSDなどであろうと、カーネルのソースコード自体は公開されていますから、それらを素材としてカーネルを学ぶことは「理論上」としては可能です。しかし「現実問題」としては、困難でしょう。例えるなら、普段からウォーキングをしているからと言って、なんの準備もなく、いきなりエベレスト登山に挑戦できるかと言えば、無理でしょう。
書籍として『私はどのようにしてLinuxカーネルを学んだかゆたかさんの技術書』のようなものがいろいろと出版されていますから、Linuxを素材としたいと考えている人は、少なくないのでしょう。2024年時点でLinuxカーネルは3600万行もあるようで、カーネルを初めて勉強しようとする人が取り組むようなものではないと思います。
これに対して、古典的なUNIXのカーネルを素材として学ぼうとするアプローチもあります。有名なところでは『Lions’Commentary onUNIX』がありますし、『はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ』もあります。これはごく初期のUNIXなので、TCP/IPネットワーク機能は入っていません。しかもCPUはPDP-11/40なので、x86系CPUとはアーキテクチャが異なります。今日のLinuxやBSDと比べると、全然違う訳ではないのですが、基本的な機能しか実装されていないので、戸惑うところがないわけではありません。
UNIX V6以外も、V1だろうと2BSDだろうと、インターネット上ではソースコードが公開されています。それらを独力で解析していくことも可能ですが、できれば参考書がある方が、ひとりで頑張るよりも望ましいと思います。これらを勘案し、Lions本を参照して、SIMHでUNIX V6環境を使用して、カーネルの理解を進めていきたいと思います。
昔々ネットニューズが一般的だった頃、fj.os.bsd.freebsdに「Re: How to read FreeBSD2.1.0 source」という記事が流れました。この記事には次のような事が書かれています。
大学院生のソース読み輪講につきあったことがあるのですが、彼らも同じような非効率なアプローチを取りました。システムコールが呼ばれた時の制御の流れや、コンテキストスイッチとは CPU の何をどうすることかなど、超基本的な知識を咀嚼できてない状態で「生の OS」のソースコードに手を出すのは難がある(ひどく遠回りをするという意味)ように思います。
この記事の教えを踏まえて、OSカーネルの勉強をしてみたいと思います。
0 件のコメント:
コメントを投稿