私が気にする100の事象

気にしなければ始まらない。

12021-09-17

昨日(12021年9月17日)の日記です。 この日は11時に起き、28時に寝ました。 そういう日もあります。

Linuxカーネルを見る

そういえば夏休みが始まる直前に色々と面白そうな本を借りてきました。 そのうちの一つに、 「Linuxカーネル2.6解読室」という本があります。 まあ文字通りLinuxカーネルを解説する本で、 どういう構造になっているかを細かく説明していて、 さらに時折ソースコードを抜粋して解説しています。

Linuxをまともに触ったことがない上に、 まだパラパラめくっただけなので、 私にはさっぱりなのですが、 今回気まぐれでソースコードを落としてみて、 最初の部分を読みながら、 ソースコードを突き合わせて、 見比べてみました。

落としてきたバージョンは5.14.5です。 本で扱っているバージョンは2.6.15ですが、 やっぱりどうせ見るなら最新バージョン(stable)がいいなと思って、 執筆時の最新バージョンを落としました。 ここから落とすことができます。 約118MBととても軽いですが、 解凍すると約1019MBに膨れ上がります。 なお、GitHubにもリポジトリがあります。

さてその後、 「Linuxカーネル2.6解読室」に書かれているソースコードを探してみましたが、 これが結構大変でした。 この本が書かれているバージョンと3も離れているからか、 やはり色々と変わっていました。

ところで、 驚くべきことにLinuxカーネル2.6解読室の一部は ここ で公開されています。 過去の内容とはいえ、 貴重な日本語資料なので、 気になる方はここを覗いてみるといいです。

本には

Linuxカーネルのコードは、500万行以上にも及ぶ非常に大きなものです。

と書かれていましたが、 現在のバージョンでは3000万行を上回っています。 恐ろしいですね。

Linuxカーネルのコードのうち、約半分がdrivers以下のデバイスドライバ用コードですが、Linuxカーネルの動きを理解するためには、代表的な一部のドライバの動きを理解するだけで大丈夫です。

これは現在のバージョンでもそうでした。 全てのサイズが1019MBで、 そのうちdriversが689MBも占めており 全体の60%以上を占めていました。

本には、 Linuxカーネルのソースツリーが示されていましたが、 これは現在のバージョンでも変わりないようです。

ディレクト 種類 概要
arch 本体 CPUアーキテクチャに依存している部分
block 本体 ブロック型デバイス制御に関すること
certs 本体 証明書の保存やキャッシュに関すること*1
crypto 本体 暗号処理に関すること
Documentation 文書 ドキュメント
drivers 本体 バイスを制御するためのドライバに関すること
fs 本体 ファイルシステムに関すること
include 本体 コンパイル時に参照するヘッダーファイル
init 本体 カーネル起動時に呼び出される初期化処理の本体
ipc 本体 IPCに関すること
kernel 本体 基本的な機能に関すること
lib 本体 カーネルのライブラリ本体群
LICENSES 文書 ライセンス
mm 本体 メモリ管理に関すること
net 本体 ネットワークプロトコルに関すること
samples 付属 カーネルモジュールの例*2
scripts 付属 カーネルの構成時に使用されるスクリプト*3
security 本体 セキュリティに関すること*4
sound 本体 サウンドドライバに関すること
tools 付属 付属ツール(perfなど)*5*6
usr ? ?
virt 本体 仮想化に関すること

「?」になっているところは、 本には表には載っておらず、 調べたけど情報が出てこなかったものです。 本に書かれていないのはバージョンの違いなのか、 単に重要ではないから省かれているのかは分かりません。 (追記:調べました。答えはどっちもです。その頃のバージョンにはなかったディレクトリもあれば、その頃にはすでにあるディレクトリもありました。) (さらに追記:色々調べたら、色々なサイトを見つけました。参考文献として最後に記しておきます。usr のところだけわかりませんでした)

今日はまあそんなところですかね。

龍が如く

友達がやっていました。 課金すると強くなるらしいです。

言語

久しぶりにSCJに顔を出しました。 Hsjoihsさんがよく話す日でした。