1000行で作るOS - OSの全体像

  1. はじめに
  2. 開発環境
  3. RISC-V入門
  4. OSの全体像
  5. ブート
  6. Hello World!
  7. C標準ライブラリ
  8. カーネルパニック
  9. 例外処理
  10. メモリ割り当て
  11. プロセス
  12. ページテーブル
  13. アプリケーション
  14. ユーザーモード
  15. システムコール
  16. ディスク読み書き
  17. ファイルシステム
  18. おわりに

OSを作り始める前に、どんな機能を作るのか、どのようなソースコードの構成になるのかをざっくりと把握しておきましょう。

本書で実装する機能

本書で作るOSは、大きく分けて次の機能を持ちます。

本書で実装しない機能

逆に何が欠けているのかというと、主に次のような主要機能が省かれています。

もちろん、これらの機能は後から実装可能です。本書の実装を済ませた後に、HinaOSなどを参考にしながら実装してみると良いでしょう。

ソースコードの構成

ゼロからゆっくり作っていきますが、最終的には次のようなファイル構成になります。

├── disk/     - ファイルシステムの中身
├── common.c  - カーネル・ユーザー共通ライブラリ: printf関数やmemset関数など
├── common.h  - カーネル・ユーザー共通ライブラリ: 各種構造体・定数などの定義
├── kernel.c  - カーネル: プロセス管理、システムコール、デバイスドライバ、ファイルシステム
├── kernel.h  - カーネル: 各種構造体・定数などの定義
├── kernel.ld - カーネル: リンカスクリプト (メモリレイアウトの定義)
├── shell.c   - コマンドラインシェル
├── user.c    - ユーザー用ライブラリ: システムコールの呼び出し関数など
├── user.h    - ユーザー用ライブラリ: 各種構造体・定数などの定義
├── user.ld   - ユーザー: リンカスクリプト (メモリレイアウトの定義)
└── run.sh    - ビルドスクリプト

本書中では「ユーザーランド」を略して「ユーザー」と表記していることがあります。ざっくり「アプリケーション側」という意味で捉えると分かりやすいでしょう。