エンジニアリングマネージャー見習いの個人開発備忘録

ゼロからのOS自作入門を読み終わった話

やったこと

  • ゼロからの OS 自作入門をようやく読み切った!!
    • https://amzn.asia/d/gRGFy2i
    • きちんと差分のコードを読みながら手を動かしてやってたのでとてもかかった
  • ちゃんとやり始めたのは去年の 8 月くらい、買ったのは 2021 年 4 月くらいにあった DMM の電子書籍セール
    • ちゃんと積読を消化できた稀有な例

意識したこと

  • 無理をしない
    • 他の趣味でもなんでもそうだけど、自分にとっての適切な距離というものがある
    • 時間を少しでも確保していれば遅くても進んでいくというのは 1 つ自信になった
      • my ルール的には 1 ポモドーロ(自分は 20 分でやってる)を土日で 1 回こなせば ok ということにしていた
      • 継続こそ最大の力
  • 分からないときに立ち止まる
    • 業務でも何回も体験したことだが、背景の概念から知らないときは理解に時間かかるのが当然というのを思い出した
    • C++や C を読むのは久々だったが特に C++の文法が懐かしかった
    • とはいえモチベ下がっても嫌なので立ち止まりすぎず、とりあえず次に進むこともあった
      • 「ここは細かいアドレスを計算したり変換してるだけだな」ということが分かったら、いったん細かい挙動を追うより先に進んでいいということにした
  • 自分の言葉でメモを取る
    • 理解できてないときは概して自分の言葉で説明できていない
    • 前の章とか時にはめっちゃ前の章をちゃんと理解してないと意味わからないみたいな部分が特にこういう本は頻出する
      • システムコールが分からないとそもそもアプリを動かせなかったり
      • ファイルシステムが分からないと読み込み・書き込みの処理を作れなかったり
      • まあ最悪再度出てきたときに振り返って思い出せればいい気はするけどね

学んだこと・懐かしかったこと

  • C++のゲーム制作
    • 実は中高生の時に DirectX とか Siv3D とかでゲームを作っていたのを思い出した
    • 左上と大きさ指定して四角形を描画するみたいなのが懐かしすぎて涙が出た
      • ウィンドウの描画処理とかはその辺の経験まんまだったのですっと読めた
    • C++自体も懐かしくて、この本の作者が「なんでここでラムダ関数を使うのか?」みたいなこともコラムで書いてくれるタイプだったのでそのあたりの理解も深まった
  • 過去の OS 自作入門
    • まず文字を表示するだけのを簡単に作って、徐々にできることを増やしていく感じが懐かしかった
    • あの時は完走できなかったはずなので、リベンジを果たした
  • アセンブリ
    • パタヘネを読んでいたので、C 言語の中ではアセンブリ経由で呼び出さなきゃいけない関数とかも何となくのイメージがついていた
    • 細かいなんとかレジスタみたいなのは忘れていたので調べて思い出した
      • ここはまあ仕事とかで使うわけではないので、忘れていることを分かっている状態であれば及第点だと思っている
    • 結局 CPU はレジスタの値を読み込んで 1 行ずつ機械語を実行してるだけなんだよな、みたいなあたりの感覚を久々に思い出した
  • PCI デバイスの入力
    • 自作 PC をしたときに、「PCIe はどうする?」みたいな話が上がったときに全くついていけなかった
      • 今は規格の名前だとわかっている
      • スロットの種類とか数が選択肢だった記憶
    • 実際にそれを使う側のコードを今回の本で触ったので、ハードウェアとソフトウェアの知識・経験がつながった瞬間だった
  • OS っぽさとは何かを考えた
    • アプリケーションの上でアプリケーションが動いていたら OS?
      • これはランチャーっぽい
      • ここでいうランチャーは文化祭でゲームを動かすためのゲーム(アプリケーション)みたいなもの
    • ターミナルが描画できれば OS?
      • OS っぽくはなってると思う
    • 画像やテキストビューワが使えたら OS?
      • これは実用性の観点
      • 複数アプリが動くのもそれっぽい
    • テセウスの船みたいな思考実験を思い出した
  • 人生で比較的時間とお金を割いて、手を動かしたり理解してきた部分の伏線回収という感じがすごかった
    • 知識がつながるのって楽しいね

展望など

  • とはいえ 0 から OS を作れるかというと全然作れる気はしない
    • 自分なりになぞっただけ
    • でも趣味だしそれでいいかなーという気もする
  • きっとこの経験も未来のどこかでつながるでしょ!くらいの軽い気持ちで次の技術書や作りたいものに手を出していきたいと思う