matsumoto-lab’s diary

慶應義塾大学物理情報工学科松本研究室の日々の活動について

30日自作OS本を読み終わった話

研究内容とは別ですが、低レイヤ的な勉強も個人的にしているのでそれについても書いてみます。

30日自作OS本とは

OSを作ろう!系の本はいくつかあると思いますが、その中でも一番?有名と言って過言でない本です。

30日でできる! OS自作入門 | 川合 秀実 | 工学 | Kindleストア | Amazon

基本的な構成としては、1日毎にテーマがあり著者の方が書いたコードを実際に見ながら、やりたい操作とコードを紐づけて説明を進める形です。
使用する主な言語としては、C言語ですが最近流行りのRustとかで書き直している方とかも多く見かけます。

qiita.com

最終的な機能としては、こんなことが学べる・できるようになっています。

  • ブートローダアセンブラ(30日のうち、最初の10日間はOSを作るうえでの知識についてです、何も知らない自分からすると知らないことばかりでなんだかんだで一番楽しいところでした)
  • 割り込み(キーボードとかマウスの入力がちゃんと自作OSでも認識してくれるの感動しました)
  • メモリ管理・保護(mallocとかも後半のほうで扱います。あとは、この本ではセグメンテーション方式で管理します)
  • マルチタスク(コンソールをたくさん立ち上げて、いろいろなアプリを同時に走らせたりできます)
  • いろいろなアプリ(インベーダーゲームとか、jpg表示とか、テキスト表示とかいろいろ作っては改善したりします)
  • C言語の基本的な部分(ポインタとかは割と丁寧だった印象です)

逆にこの本だけでは足りない部分も当然あって、

  • UEFIやページング方式などの新しめなOS周りの機能
  • CPU周りの機能のはなし(当然と言えば当然ですね、CPUの創り方とか読めば解決!)
  • 他の環境での動かし方など(本では、windows を念頭に書かれています)

30日目では、こんな感じになります。(全部のアプリを起動してないので、ほかにも機能はあります) f:id:tsuchiya-hayato:20201104043259p:plain

読み方・進め方

読み方については、人それぞれ好きに進めればいいと思いますが、個人的な反省を忘れないために書いておきます。

関数の機能について忘れがちになる

これは、完全に僕が悪いのですが巻末に本で出てくるキーワードの索引はあるのですが、コードで出てくるたくさんの関数については31日目の9節 -付録-でどの節で説明しているかの一覧に気づかないという重大なミスをしていました。(素直に31日目の最後を読んでいるときに気づくという、、、)
そのため、毎度忘れてしまった関数の機能についてわずかな記憶を頼りに探していた時間がもったいないので、ぜひ31日目の付録を見つけてください、、、

30日で終わらない前提で読む

自分が読む前に、読んでみた!系の記事をたくさん目を通していたのですが、やはり30日で読み終わっている人はほとんどいませんでした。「30日×24時間」という想定で書かれているというamazonのレビューはその通りかなと思います。
あと、10日目くらいまでは、「毎日、1日分を読み進める」を目標にして達成してましたが、ある日突然「あとこれ20日も読むのか、、」という果てしない未来を想像した途端にモチベーションがガクッと落ちてしまいました。そこから本に手を伸ばすのが億劫になってしまいましたが、実際にまた手を伸ばして読むと意外に楽しく読めるので、「毎日、1節読む」くらいの余裕でしょ!と思えるハードルでいたほうが良かったかもしれません。

環境構築とか

自分は、windows10 64bit home のPCで読み進めていたので、何も環境構築が必要ありませんでした。なのでwindows PCの人はすぐに付属のCDからファイルを移植するなりダウンロードサイトからダウンロードすれば実際に動くか確認することができます。
一方、MacLinux系の人たちは少し苦労している記事も見かけています。そういった方はこういった記事を参考にするといいと思います。

hikalium.com

『30日でできる!OS自作入門』を macOS Catalina で実行する - Qiita

また、途中でBEEP音を鳴らすという項目が出てくるのですが、使用しているQEMUではAudioボードを認識していないため、音を確認することができません。しかし、「QEMU Audio」でググるといけそうな記事がちらほらあるので、実践してみようと思っています。(そのうち記事にします!)

その他の低レイヤ的なこと

今回の自作OS本を読むにあたり、やっていたこと・始めたこと、についても書いておこうと思います。

www.sigbus.info

オンラインブックで、これを無料で読めるのすげえっていう気持ちで読みつつコード読んだり書いたりしてました。正直、これと自作OS本のおかげでセキュキャン受かったといっても良いくらいたくさんの知識がつきました。だんだんと内容が重たくなってきますが、そういうときはのんびり分からなくてもいいやくらいの気持ちでいいと思います。

  • Free OSについて詳しくなる

自分は、OSってwindowsMacLinux系(UbuntuかCent OS)くらいしか知らなかったのですが、Free BSDとかArch LinuxなどのOSがあることを最近知りました。その他にもHaiku OSなど趣味全開なOSもあったりといろいろと楽しめそうな分野だなと感じています。QEMUとか、VMとかで簡単に(?)動かせそうなのも良いポイントだと思います。

  • FPGAで簡単なCPUの実装

Intel社から、FPGAボードを購入してきて等差数列を実際にVHDLで書いて実装してみました。割と物情のB3でやった論理回路の実験と似ているような感じです。
f:id:tsuchiya-hayato:20201104051846j:plain

  • xkcd をパラパラと見てみる セキュキャンのチューターさんにおすすめされた、コンピューターサイエンス系の話を漫画風に描いているサイトです。

www.explainxkcd.com 何を言っているのかわからない場合は、どうやらそれの解説をしているサイトもあるようなのでそれも併せて読んでみるといいかもしれません。

かなり雑記ですが、こんな感じで終わりにしようかなと思います。