ゼロからのOS自作入門を読んで OS を実装してみた
- OS Kernel
概要
- こんにちは!今年の 8 月中旬からゼロからのOS自作入門を読んで紹介されている OS を一通り写経して作り上げてみました。そこで、今回はこの本を読むまでに何をしていたかを振り返りつつ、読もうと思ったきっかけや感想などを残したいと思います。
きっかけ
今年度で学生生活が最後で時間に余裕がある内に、コンピュータや OS について詳しくなりたいと思っていました。自分は普段から Ubuntu 18.04 を使っているのですが、低レイヤや Linux に詳しくありません。そのため、まず初めの取っ掛かりとして低レイヤ周りの本や資料を少しずつ読んだりしていました。例えば以下が挙げられます。
このように Linux や低レイヤに興味がありつつ、大学の先輩が Linux Kernel にコントリビュートし楽しそうにしている様子を見たり、研究室の隣の同期がこの本を読み切ったりしていて、今始めることがチャンスだと思い、思い切って初めてみました。
感想
OS を一から作り上げる行為は、低レイヤの総合格闘技感があり、非常に楽しかったです。この本を通して個人的に特に面白かった箇所を抜粋して挙げていきます。
- 一番初めの
Hello World
を出力できた時 - C++ で実装できないロジックをアセンブリ言語で実装した時
- 割り込みを実装し、メッセージを送受信できた時
- コンテキストスイッチの実装を知った時
- Priority Queue を使ってタスクに優先度を付け、タスクを Sleep/Running できるように実装した時
- 初めてシステムコールを実装した時
- ファイルの書き込みファイルディスクリプタで抽象化した時
- ページフォルトを活用してデマンドページングを実装した時
- 実装のバグを調査するために
printk
やLog
でデバッグをたくさんした時 - この本を読んだ研究室の同期と OS の機能に関する実装に関する議論ができたこと
- 一番初めの
また、細かい日記に関しては以下に記述しました。全く書いていない箇所もあればデバッグが辛かった様子を書いたりしていて、内容に関してはまちまちです。
最後に
- 大学の講義や本を通して OS の理論を漠然と理論は知っていたものの、プログラムレベルまでの実装がイメージできなかったことがかなりクリアになりました。かなり多くのことを学べてかなり楽しかったです。この本を通して得た OS 周りの知識をさらに深めたいとは思っているのですが、これから具体的にどんなアクションを取るかは決めていません。ですが、ひとまずこの素晴らしい記事 (Linux カーネルを QEMU 上で起動する ) を参考に Linux Kernel をビルドし、起動はしてみたので、それを使って何か遊んでみつつ、機能を絞って Linux Kernel のコードを読んでみたいと思います🤞