Linuxカーネルを読む前にやったこと

カーネルのコードがよくわからない。Linuxカーネルに関する本を読んでもいまいちしっくりこない。」 から、「読めば理解できそう..!」 になるまでにやったことのまとめ。

はじめに

低レイヤの話がわかるようになりたかった。 カーネルの中身が知りたかった。 とりあえず本を読もうと思い詳解 Linuxカーネル 第3版を読んだが知識がなさ過ぎてよくわからない。 知らない用語だらけで都度調べればなんとなくはわかる気もするが、いまいち頭に入ってこない。 今思うとそもそもCPUの話なのかカーネルの話なのかさえよくわからない状態で読んでいたような気がする。

そんな状態を克服するためにやったことをまとめておく。

学習前

学習前の自分の知識はこんな感じだった。

知っていた

よく知らなかった

補足:

  • 大学は情報学部ではなく工学部卒。OSのことはほとんど学んでいなかった。
  • 仕事はWebアプリケーション開発がメイン

何をやったか

ここからがメイン。何をしたか、どのような効果があったか。

1. CPUの基礎の学習

学習内容

  • CPUの創りかたを読んだ。高校理科程度の知識から簡単なCPUを作れるようになる本。

効果

  • 本当に簡単なCPUなら作れるのでは、という気持になった。
  • CPUのイメージができるようになりレジスタアセンブリ周りの話が理解しやすくなった気がする。
  • FPGAにも手を出したくなった…が、時間の制約で保留とした

2. コンパイラの作成

学習内容

効果

  • アセンブリに慣れた。
  • スタックの使い方に慣れた。
  • Calling Conventionを知った。(後のOS開発の役に立った)

3. OSの学習(1)

学習内容

効果

  • GDT、システムコール、割り込み…などの用語がOSから見た意味でわかるようになった。
  • CPUの機能を知った。

4. OSの学習(2)

学習内容

  • MITのOSの授業を進めた。 内容はメモリ管理、ページテーブル、システムコール、ネットワークドライバなどのコードを自分で書いていってOSを作っていくというもの。ほぼ機能のないOSが最終的にはhttpサーバが動くようになる。課題の答えはないがテストコードがあり、それで自分のコードを確認できる。 scheduleに沿ってすすめると、次の課題までにこれを読め、など適切なテキストも与えてくれる。もちろん全部英語。
  • 進めたときのログはこちら

効果

まとめ

CPUの本を読んでコンパイラ作ってOSを作ったら、低レイヤの話が以前よりもわかるようになり、詳解 Linuxカーネル 第3版を見ながらLinuxのコードも追えるようになった。

上の内容を全部やると結構時間がかかるので、強くおすすめするわけではありませんが、この辺りを学ぼうとしている人の参考になれば幸いです。

CPUの創りかた

CPUの創りかた

ふつうのコンパイラをつくろう

ふつうのコンパイラをつくろう

30日でできる! OS自作入門

30日でできる! OS自作入門

詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版