ISBN 9784839975869

ゼロからのOS自作入門

ゼロからのOS自作入門
著者
内田公太
出版社
マイナビ出版
刊行
2021-03

概要

UEFI時代のOSをC++でゼロから実装し仕組みを内側から理解する

想定読者

C++の基本文法を習得済みで、OSカーネルの動作原理を実装を通じて体得したいエンジニア・学生

こんな人には向いていない

  • 理論・概念でOSを理解したい人(実装よりも設計原理の整理が目的なら別書が適している)
  • x86-64/UEFI以外のアーキテクチャ(ARMやRISC-V等)でOSを書きたい人
  • ポインタやビット演算に初めて触れる段階の読者(数百行のC/C++経験が前提となっている)

この本で身につくこと

  • UEFI BIOSによるブートローダの実装とOSカーネルへの制御移譲の流れを説明できる
  • x86-64のページング機構を使った仮想アドレス空間とメモリ管理を実装できる
  • タイマ割り込みを利用したプリエンプティブマルチタスクのコンテキストスイッチを書ける
  • PCI/USB3.0ドライバの初期化シーケンスとデバイスとのやり取りをコードで実装できる
  • FAT相当のファイルシステム読み書き処理をOSに組み込める
  • システムコールインターフェースを設計し、ユーザーランドアプリとカーネルを明確に分離できる

ハイライト(外部からの言及)

パソコンの電源を入れOS本体を呼び出すところから様々なアプリを動かせるようになるまで、OSづくりを一通り体験します。読み進めるにつれ、いままでブラックボックスだと思っていたパソコンの中身「OS」の仕組みが分かってくることでしょう。 — 出典

本書の学習体験の本質を最も端的に示している箇所。「ブラックボックスが開く」という価値を購入前に確認できる

MikanOSはUEFI BIOSにより起動してIntel 64モードで動作、ページングを用いてメモリ管理を行い、USB3.0ドライバを搭載。ウィンドウシステム、プリエンプティブマルチタスク、ファイルシステムを持つOSです。 — 出典

到達地点が具体的に列挙されており、読後に何が動くかを購入前に判断できる

UEFIだし、丁寧に説明されてるしで自作OSを勉強したいって人は決定版のような気がする。作者さんは、下記の動画も見れるようにしてくれてるしもう買うしかねえって感じ。 — 出典

複数の自作OS学習リソースを横断的に紹介する記事の筆者が本書を「決定版」と位置付けた箇所。他書との比較視点と著者提供の補助動画という付加価値を同時に伝えており、既存2件(学習体験・機能一覧)とは異なる「市場における立ち位置」の角度を補完する

読了後にできること

Before(読む前): OSをブラックボックスとして扱い、カーネル・システムコール・メモリ管理の連携が実装レベルでイメージできない

After(読み終えた後): UEFI起動からアプリケーション実行までの一連のフローをコードで追えるようになり、OS関連のドキュメントや仕様書の記述が具体的な実装と結びついて読めるようになる

章立て

OSって個人で作れるの?

概念整理と動機付け。実装開始前のウォームアップとして軽く通読する程度でよい

第1章 PCの仕組みとハローワールド

UEFI BIOSがOSを起動する流れをコードで体験する最初の一歩。ここで開発環境が正常に動作することを確認しておくと、以降の実装に集中できる

第2章 EDK II入門とメモリマップ

ブートローダがメモリマップをカーネルに渡す仕組みを習得する章。第8章のメモリ管理の前提となるため、理解が曖昧なまま進むと後半で詰まりやすい

第7章 割り込みとFIFO

ドライバ・入力処理全体の土台。ここを丁寧に通過すると第12章以降のデバッグコストが下がる

第8章 メモリ管理

ページフレームアロケータの実装。第19章のページングや第20章のシステムコールの土台であり、ここを丁寧に実装しないと後半のデバッグが困難になる

第13章 マルチタスク(1)

前半の山場。コンテキストスイッチは何度か読み返す価値がある

第14章 マルチタスク(2)

前章で実装したコンテキストスイッチをより堅牢にする章。第13章で疑問が残った箇所はここと合わせて読み返すと理解が補完されやすい

第19章 ページング

後半の最重要章。仮想アドレス空間の設計がここで確立する

第20章 システムコール

カーネル/ユーザーランド分離の実装完成。OSの骨格が揃う節目

第31章 これからの道

ネットワーク・POSIX準拠など本書完了後の発展方向が整理されている

関連記事 / 参考情報

学習のヒント

  • 環境構築は最初の関門。Linux環境が最もスムーズで、Macユーザーは公式のDockerセットアップを先に完成させてから第1章に入ると、実装への集中力が維持できる
  • 第7章(割り込みとFIFO)と第8章(メモリ管理)は後半の全章の土台になる。動作確認を丁寧にやり直しながら通過すると、第13章以降のデバッグコストが大幅に減る
  • 第13〜14章(マルチタスク)と第19〜20章(ページング・システムコール)は後半の山場。詰まったときはQiitaのMikanOS発展記事(NICドライバ・シャットダウン実装等)で同じ機構が別角度から解説されており、理解の補助になる
  • 付録「C++のテンプレート」は中盤以降に頻出するコードパターンの解説。C++テンプレートに不慣れな場合は第5章前後に先読みしておくと後半の読み飛ばしが減る

前提知識

  • C/C++の基本文法(クラス・ポインタ・参照・ビット演算)の読み書き経験(数百行規模が目安)
  • コマンドライン操作とMakefile/ビルドツールの基礎
  • CPUとメモリの関係・割り込みといったコンピュータアーキテクチャの初歩(概念レベルで可)

次に読む本

Operating Systems: Three Easy Pieces (OSTEP)

本書でプロセス・メモリ・ファイルシステムの実装を終えた後、OSTEPで各機構の設計根拠(スケジューリング戦略・ページ置換ポリシー等)を理論側から補完すると、実装の「なぜ」が言語化できる。Web上で無料公開されており入手コストゼロ

TCP/IPプロトコルスタック自作入門

本書のMikanOSはネットワーク機能を持たないため、TCP/IPスタック自作は自然な次テーマ。同じ「ゼロから実装して理解する」アプローチを維持しながら、OSとネットワーク層の接続部(ソケットAPIの下層まで)を実装で追うことができる

Writing an OS in Rust (phil-opp.com)

本書と同じx86-64対象でRustを使い再実装する演習として広く参照される。UEFI起動・ページング・割り込み処理の知識が直接流用でき、言語の違い(所有権・メモリ安全性)を意識しながら本書の学習内容の定着を確認できる。無料Web公開

出版社による内容紹介

[OSを手づくりするワクワクを体験!] "知識ゼロ"からはじめて、本書オリジナルOS「MikanOS」を手づくりする本です。 パソコンの電源を入れOS本体を呼び出すところから様々なアプリを動かせるようになるまで、OSづくりを一通り体験します。読み進めるにつれ、いままでブラックボックスだと思っていたパソコンの中身「OS」の仕組みが分かってくることでしょう。 MikanOSはUEFI BIOSにより起動してIntel 64モードで動作、ページングを用いてメモリ管理を行い、USB3.0ドライバを搭載。ウィンドウシステム、プリエンプティブマルチタスク、ファイルシステムを持つOSです。これらの専門用語の意味もOSを作りながら解説します。MikanOSは C++ で記述します。数百行程度のプログラミング経験があれば無理なく読み進められるはずです。 本書は『30日でできる!OS自作入門』の流れを汲み「小さく作ってすぐ動かす」ステップバイステップ方式をとっていますので、無理なくマスター可能です!エンジニアなら誰もが一度は夢見る「OSづくり」を本書で学ぼう。 第0章 OSって個人で作れるの? 第1章 PCの仕組みとハローワールド 第2章 EDK II入門とメモリマップ 第3章 画面表示の練習とブートローダ 第4章 ピクセル描画とmake入門 第5章 文字表示とコンソールクラス 第6章 マウス入力とPCI 第7章 割り込みとFIFO 第8章 メモリ管理 第9章 重ね合わせ処理 第10章 ウィンドウ 第11章 タイマとACPI 第12章 キー入力 第13章 マルチタスク(1) 第14章 マルチタスク(2) 第15章 ターミナル 第16章 コマンド 第17章 ファイルシステム 第18章 アプリケーション 第19章 ページング 第20章 システムコール 第21章 アプリからウィンドウ 第22章 グラフィックとイベント(1) 第23章 グラフィックとイベント(2) 第24章 複数のターミナル 第25章 アプリでファイル読み込み 第26章 アプリでファイル書き込み 第27章 アプリのメモリ管理 第28章 日本語表示とリダイレクト 第29章 アプリ間通信 第30章 おまけアプリ 第31章 これからの道 付録:開発環境のインストール / MikanOSの入手 / EDK IIのファイル説明 / C++のテンプレート / iPXE / ASCIIコード表

この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。

質問に答えるだけで、
あなたに合う専門書が見つかる

IT・デザイン・士業・医療・経理・教育・研究 ほか、あらゆる分野の専門書と 「読む順序」(学習ロードマップ)を収録。何を選べばいいか分からなくても、 いくつかの質問に答えるだけでたどり着けます。