「[作って学ぶ]OSのしくみⅠ」を読んだ

技術評論社から恵贈いただいた「OSのしくみ」の読書感想文です。

amzn.to

以前に読書感想文を書いた「[作って学ぶ] ブラウザのしくみ」の姉妹書です。

satoru-takeuchi.hatenablog.com

本書を一言でいうなら「RustでOSを書く方法を隣の席にいる先輩(筆者)に教えてもらうような本」です。本書を読み終えたとき手元にはRustについてのある程度の知識と、デバイスをいくつか操作できるOSが得られます。Rustの知識は他の本でもある程度得られますが、RustでOSを書く知識は私が知る限り日本語ではこの本でしか得られません。ここに魅力を感じる人にとっては読む価値は大いにあると思います。

想定読者

想定読者は本書冒頭に次のように書かれています。

  • プログラミングは少しかじったことがある
  • 少なくとも1つのプログラミング言語をある程度使える
  • Rustというプログラミング言語の名前は聞いたことがあるが書いたことはない
  • OSという言葉は耳にしたことがある
  • しかしOSとは何かと問われると詰まってしまう
  • OSとアプリケーションの差が何なのかよくわからない
  • だけどOSとは何か知りたい

私見ではOSについて教科書レベルの知識があるほうがいいと思いました。また、「少なくとも1つのプログラミング言語」はRustが好ましいと思いました。理由は後述します。

とにかくアツい

本書の一番の特徴は著者のOSに対する愛がほとばしっていることです。「一番の特徴がそこ!??」と思われるかもしれませんが、そこです。それ以外の特長についてはちゃんと後で書きます。

本書は著者独特の語り掛けるような文体で書かれています。わたしは目の前で筆者が熱弁をふるっているという錯覚を何度も覚えました。技術書でこんな本は初めて見ました。OSの実装は落とし穴だらけなのですが、適宜「こういう落とし穴があって、それはこのように避けます」とかいうことが書かれています。土地勘のない分野のプログラムを先輩に励まされながら、ときには活を入れられながら進めるというという感覚を味わえます。

けっこう好みが分かれると思うので、読む前に一度出版社の公式サイトの中のサンプルページを見てノリが合うかを確認すると良いと思います。

コンテンツについて

さて本題(?)です。本書が扱う範囲は結構広いです。まずはコンピュータ本体のファームウェアといえるUEFI BIOSの上でプログラム(UEFIアプリ)を動かすところからはじまります。それを次第にOSと呼べるものまで置き換えていき、最終的にはUSBのデバイスを使えるようにする、という流れです。早い段階で画面に文字や画像を出すようにするなど、よく工夫されていると感じました。

工夫という点では書籍にソースコードを掲載する方法もよいと感じました。本書に掲載されているコードは最初の章ではイチから書きますが、その後は基本的に既に作ったものを変更していくというスタイルです。こういうスタイルの場合、一般的な書籍では毎回変更後のコードを全部書くか、あるいは変更部分だけ書くのですが、本書はそうではありません。変更後のソースを書きつつ変更前のものも取り消し線を引いて薄字で残しています。これは全体の流れを理解しつつ差分もわかるので、非常に読みやすかったです。

本書は章が進むにつれ「メモリ管理」「マルチタスク」「ハードウェア制御」のようにOSのサブシステムを1つづつ実装していきますが、各章の中に入ってみると「OSとは何ぞや」「OSはこう実装する」「実装するためのRustの知識はこう」という3種類の情報に分かれています。それぞれの情報について私がどう思ったのかを書きます。

1つ目と2つ目の「OSとは何ぞや」と「OSはこう実装する」については、ハードウェアに依存しない部分のコードはしっかり説明されている、あるいは説明しなくても理解できそうと感じました。その一方で、「なぜこう実装しなければいけないのか、なぜならハードウェアがこうなっているから」について、ときたま説明の抜け漏れがあったように思います。代表的な例を挙げると、CPUの個々のレジスタについてはほとんど説明しないままコンテキストスイッチを実装しているが、最後までコードの意図の説明は無いというところでした。このため、"OSについて教科書レベルの知識があるほうがいい"と思いました。

3つ目のRustについての説明がけっこう多いので、Rustを知っている人であれば「こうすればRustでOSが書けるのか」「unsafeってこういうことなのか」「こんな技があるのか」などという情報が得られて嬉しいのではないかと思いました。その一方でRustを全く知らない人は迷子になってしまって読むのに苦労しそうだなと思いました。というわけで上述の通り"「少なくとも1つのプログラミング言語」はRustが好ましい"と思いました。

本書のP10に書かれているように「まだしっくりこないけれど、そういうもんなんだなあ」という心構えを大事にして、細かいことを気にせずコードを打ち込んで先に進むというスタイルで読める人はこの本が合うと思います。前述の通り、最後まで読んでも説明されないこともけっこうあるので、そういう場合は別の書籍なりAIチャットなりで知識を補完する必要があるでしょう。おそらくどういうワードで検索すればよいかは本書を読めばわかるはずです。

おまけ

「このような本がもっと読みたい!」とか「ついていけなかったけどテンションは好き!もっとライトなのを読みたい!」というかたは著者が書いた「OSGirls」という別の本をお勧めしておきます。

techbookfest.org