自作 OS で学ぶマイクロカーネルの設計と実装
ジサクオーエスデマナブマイクロカーネルノセッケイトジッソウ
マイクロカーネルの深淵を知り、骨太なスキルを身に付ける
- 著者:
- 怒田晟也(ヌタセイヤ)
- 出版社:
- 秀和システム
- 出版日:
- 2023年05月18日
- ISBN:
- 9784798068718
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
マイクロカーネル OS は、「美しい設計ではあるものの、遅い実装」というイメージを持たれることがありますが、それは過去の話です。現在では、目立たないところで実用的な OS として使われ、世界を支えています。
本書では、マイクロカーネル OS の概念からその実例まで、機能ごとに分けて説明しています。本書全体としては、基礎知識、マイクロカーネルの解説、その上で動くソフトウェア部分 (ユーザーランド) の解説、そして発展的内容の 4 つのパートから構成されており、それぞれのパート内の章は、概念の解説部分と、その概念をどのように実装しているかを解説した実装部分に分かれています。
各章の実装例として、本書のために筆者が開発したマイクロカーネル OS「HinaOS」を用いて、わかりやすく解説しています。HinaOS は、エミュレータ上で動かすことを想定した教育目的の OS ですが、OS の実装を学ぶのに必要となる最低限の機能を備え、ソースコードもシンプルにです。
また、HinaOS での実装例のほかに、MINIX3、seL4、GNU Hurd という 3 つの実用マイクロカーネル OS による実例も解説しています。複数の OS について紹介しているのは、それぞれに特徴があり、それを比較してほしいという理由からです。「マイクロカーネル OS とは、こういうものである」という固定観念を持たず、マイクロカーネルであるからこその柔軟さ、そして設計の自由さを味わってください。OS はコンピュータの使い方をガラッと変えられる、いわば新しいソフトウェアの世界を創れる土台なのです。
本書を読み終えたら、自分で OS を作ってみてください。OS の仕組みを理解していても、実装することで新たな発見があるものです。ゼロから OS を作るのではなく、HinaOS を拡張するのもよいでしょう。HinaOS には、実装が面倒な基本機能が既に備わっています。このように OS を拡張しやすいのもマイクロカーネルの特徴の 1 つです。
本来、OS はとても自由なソフトウェアです。特定の CPU にしかない変わった機能を活用した移植性ゼロの OS を作るもよし、極限まで小さくした OS を作るもよし、自由な発想で自分の世界を創り上げることができる最高の題材なのです。
本書を手に、マイクロカーネルの深淵をのぞき込んでみてください。その舞台裏を楽しんでいるうちに、OS やアーキテクチャにとらわれないコンピュータの深い技術も身に付いているはずです。
技書の森解説
OS のカーネルにどこまでの機能を置くかは、OS の設計で最初に決まる大きな分かれ目です。『自作 OS で学ぶマイクロカーネルの設計と実装』 (怒田 晟也 著、秀和システム、2023 年 5 月 18 日発売) は、カーネルの機能を絞り込むマイクロカーネルという方式を、著者が本書のために開発した教育用のマイクロカーネル OS である HinaOS と、実用 OS の MINIX3、seL4、GNU Hurd を例に、機能ごとに解説する本です。副題は「マイクロカーネルの深淵を知り、骨太なスキルを身に付ける」で、OS の仕組みを概念と実際のコードの両面から確かめたい人のための一冊です。
カーネルを小さくする設計と、メッセージのやり取りの重さ
Linux に代表されるモノリシックカーネルでは、アプリケーションが システムコール でカーネルに処理を頼むと、ファイルシステムやデバイスドライバー、ネットワークの処理までがカーネルの中で済みます。マイクロカーネルはカーネルに残す機能をスレッドとアドレス空間の管理、プロセス間の通信といった最小限にとどめ、残りをユーザー空間で動くサーバーに任せます。ドライバーの不具合がカーネル全体を巻き込みにくく、サーバーを差し替えて OS の性格を変えられる利点がある一方で、1 つの要求を処理するたびにメッセージの受け渡しと実行の切り替えが挟まるため、通信の速さが性能を大きく左右します。紹介文は、マイクロカーネル OS が「美しい設計ではあるものの、遅い実装」というイメージを持たれることがあるとしたうえで、それは過去の話だと述べています。目次でも、メッセージパッシングの章には高速化技術の節が置かれ、信頼性とセキュリティの章は、マイクロカーネルのほうがモノリシックカーネルより安全だという主張を題にした節から始まります。
Part 1 から Part 4 へ、基礎知識からブート処理までの 19 章
目次は Part 1 基礎知識、Part 2 カーネル、Part 3 ユーザーランド、Part 4 発展的話題の 4 部 19 章に、付録が続く構成です。Part 1 は本書について、マイクロカーネル入門、HinaOS 入門、RISC-V 入門の 4 章で、CPU の基本動作や特権命令、インラインアセンブリまでを先に押さえます。Part 2 はプロセスとスレッド、メモリ管理、割り込み / 例外、メッセージパッシング、システムコールの 5 章、Part 3 はユーザーランド、API、デバイスドライバー、ファイルシステム、ネットワーク (TCP/IP) の 5 章です。Part 4 ではマルチプロセッサー対応、仮想化とエミュレーション、信頼性とセキュリティ、ソフトウェアによるプロセス隔離、ブート処理を扱います。付録には、Ubuntu、macOS、Windows での HinaOS 開発環境の構築、逆アセンブルや QEMU モニター、パケットキャプチャを使った HinaOS のデバッグ、参考文献が収められています。
HinaOS の実装例と、MINIX3 や seL4 の実例を読み比べる
紹介文によれば、各パートの章は概念を解説する部分と、その概念をどう実装しているかを解説する部分に分かれています。目次を見ると、Part 2 の第 5 章から第 9 章には MINIX3、seL4、Mach の実例の節が並び、Part 3 の第 10 章、第 12 章〜第 14 章では Hurd の実例が加わります。紹介文は、複数の OS を紹介するのはそれぞれに特徴があり、比較してほしいからだと説明しています。HinaOS はエミュレータ上で動かすことを想定した教育目的の OS で、OS の実装を学ぶのに必要な最低限の機能を備えると紹介されています。第 13 章では HinaFS というファイルシステムの設計と実装が、第 18 章では HinaVM がソフトウェアによるプロセス隔離の実装例として取り上げられています。
ソースコードを動かして学ぶ前提と、向かない目的
第 2 章にソースコードを読むための節、第 3 章にソースコードの入手の節が置かれ、付録では HinaOS のビルドと実行の手順まで案内しているので、読みながら手元でコードを動かして確かめる使い方に合っています。目次の Part 2 には、プロセスとスレッド、メモリ管理、割り込み処理、IPC、システムコールの各章に、それぞれの実例の節が並びます。一方で、Linux カーネルの内部構造を追いたい人には目的がずれます。目次に並ぶ実例は HinaOS、MINIX3、seL4、Mach、Hurd で、Linux を題材にした節は見当たりません。
マイクロカーネルの設計を、教科書の図だけでなく動くコードと複数の実用 OS の比較で理解したい人にとって、本書は手元で HinaOS を起動し、そこから自分で拡張していくための足場になります。紹介文も、読み終えた後に HinaOS を拡張してみることを勧めています。低レイヤーの本を広く見比べてから選びたい場合は、OS / 低レイヤー本ガイド も参考になります。
言及した記事 (4 件)
この本に興味がある方におすすめ
関連する本
関連記事
技術書の知識を定着させる間隔反復法 - 読んだのに忘れる問題を解決する
技術書を読んでも内容を忘れてしまう原因を認知科学の観点から分析し、間隔反復法を使って知識を長期記憶に定着させる具体的な方法を紹介します。
技術書を読む順番の戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで、1 冊では届かない理解の深さと広さに達する方法を解説します。
Linux 本ガイド - コマンドライン / しくみ / 性能の 3 層で選ぶ技術書
Linux を学ぶ技術書の選び方を 3 層 (コマンドラインの操作 → カーネルのしくみ → 性能と運用) で整理。新しい Linux の教科書や [試して理解] Linux のしくみなどの定番書の使い分けと、学ぶ順番を解説します。
関連用語
Linux
オープンソースで開発される OS。サーバーや組み込み機器で広く使われる
システムコール
ユーザー空間のプログラムが OS カーネルの機能を呼び出すインターフェース
マイクロサービス
1 つの大きなアプリケーションを複数の小さなサービスに分割し、それぞれが独立してデプロイ / スケール可能な状態で協調動作するアーキテクチャパターン
RaspberryPi
手のひらサイズの小型コンピューター。学習から電子工作 / IoT まで幅広く使える
Ubuntu
扱いやすさで人気の Linux ディストリビューション。サーバーから個人利用まで幅広い
Namespace と cgroup
Linux コンテナの基盤技術で、プロセスの隔離とリソース制限を実現するカーネル機能