「30日でできる! OS自作入門」を完走しましたというメモ
2022-08-22
はじめに
昨年,30 日でできる!OS 自作入門 | 川合秀実(以下,30 日本)をやっていたのですが,感想というかやり切ったという旨の記事を書いていないことを思い出して急いで書いています.世の中の流れ的には,OS 自作といえばゼロからの OS 自作入門 | 内田公太か,もしくは,作って理解する OS x86 系コンピュータを動かす理論と実装 | 林高勲 著,川合秀実 監修などが最近の本として割と読まれている印象ですが,実はこれらの本についても積読として本棚に積んでおり,いつかは読もう読もうとページを開いては閉じてを繰り返しています.
それはそれとして,30 日本も積んでおり,そろそろ消化したいと思っていたことと,30 日でできるのであれば一気に片づけてしまおうと思ってやってみた次第です.まあ,30 日でできたかどうかおいておいて,内容が難しくて結構な時間を要することとなりました.
ただ,実際にコードを書いて,動かして,なんでそうなっているのかをコードを書きながら見てみるのは結構面白かったので良かったかなと思います.
1 日目
- バイナリエディタで「Hello, World!」の出力
- アセンブラで出力
2 日目
- アセンブラについて詳しく学習
- Makefile の導入
3 日目
- OS 本体の書き始めと動作確認
- C 言語で HLT 命令を呼び出す
4 日目
- C 言語でメモリに書き込み
- 画面上に色のついた縞々模様を出力
- 画面上に色のついた四角形を出力
5 日目
- 構造体の利用
- 文字の出力
- マウスカーソルの描画
- GDT と IDT を初期化
6 日目
- PIC 初期化
- 割り込みハンドラの作成
7 日目
- キーコードの取得
- FIFO バッファの作成
- マウスからのデータ受信
8 日目
- マウス制御
9 日目
- メモリ容量のチェック
- メモリ管理
10 日目
- 重ね合わせ処理
11 日目
- 簡単なウィンドウの出力
- カウンタの作成
12 日目
- タイマーの作成
- タイムアウト機能
- 割り込み処理の改善
13 日目
- 文字列表示の改善
- FIFO バッファの改善
14 日目
- 高解像度の設定
- キー入力
15 日目
- タスクスイッチ
- 簡単なマルチタスク
16 日目
- タスク管理の自動化
- タスクのスリープ
- ウィンドウを増やす
- タスクの優先度
17 日目
- アイドルタスク
- コンソールの作成
- コンソールの文字列入力
18 日目
- カーソル点滅制御
- mem コマンド
- cls コマンド
- dir コマンド
19 日目
- type コマンド
- FAT 対応
- HLT アプリケーション
20 日目
- 一文字表示 API
- アプリケーションの終了
21 日目
- OS のセキュリティ対策
- 例外サポート
22 日目
- OS のセキュリティ対策
- C 言語で文字列表示
- ウィンドウの表示
- ウィンドウ内に描画
23 日目
- malloc の作成
- 点や線の描画
- キー入力
24 日目
- ウィンドウの切り替え
- ウィンドウの移動
- ウィンドウの操作
25 日目
- 出力する色を増やす
- コンソールを増やす
26 日目
- ウィンドウ移動の改善
- コンソールの終了
27 日目
- アプリ実行中にコンソールの終了
- アプリケーションのセキュリティ
- アプリケーションのサイズ改善
28 日目
- 素数表示
- ファイルのオープンとクローズなどのファイル API
- コマンドラインの取得などのコマンドライン API
- 日本語表示
29 日目
- 簡単なアプリケーション
- 非矩形ウィンドウ
- 直線を用いた綺麗な円模様
- インベーダーゲーム
30 日目
- 高度なアプリケーション
- コマンドライン計算機
- テキストビューア
- 画像ビューア
- 完成
感想など
完走した感想ですが,30 日で OS を自作するのは結構大変だったなという印象を受けました.そもそも C 言語について分かっていない部分をそのままに放置してコードを写経するだけでは,本当に OS 自作をするうえでシステムを理解できているのかどうかが不安だなという気持ちがどんどん湧いてきていました.
この本は写経するだけで OS 自作について理解できるかといわれると,僕みたいなあまり賢くない人間からすると難しいなという感想を持ってしまうのですが,写経して実際に動かしてみることで,どんなことが起きているのかということや,OS を動かしてみるうえでどんなことが裏で処理されているのかという大枠を理解する上ではとてもいい本だなと思いました.
しかし,この本を写経するだけしてみるっていう意味ではとても意味のない,時間の無駄な作業になってしまうのでそうならないようにはしようという気持ちでやっていました.
30 日以上,というか半年以上かかってしまったのですが,完走できて良かったなと思います.