「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日以上,というか半年以上かかってしまったのですが,完走できて良かったなと思います.

GitHub

Share