---
type: article
title: OSを理解する手っ取り早い方法?
timestamp: 2006-07-25T00:00:00Z
profile: sorane-okf/0.1
noFontEmbedding: true
---

# OSを理解する手っ取り早い方法?

<p>日経ITProに『<a href="http://d.hatena.ne.jp/asin/4822234096/mkusunokhaten-22">自分で作るLinux OS (日経BPパソコンベストムック)</a>』という本の書評が出ていた．自社刊行物の宣伝とはいえ酷い書評である．恐らく評者がOSのことを理解せずに書いたのだろう．<a href="#f-170cc1ce" name="fn-170cc1ce" title="目次をみた限り，著者は本書でカーネルの構造を理解できるとは書いていない">*1</a>OSを勉強するなら下記の本の方がお勧めできる．<br />
<a href="http://d.hatena.ne.jp/asin/4839919844/mkusunokhaten-22" class="asin"><img src="/images/imported/aHR0cHM6Ly9pbWFn.jpg" alt="30日でできる! OS自作入門" title="30日でできる! OS自作入門" class="asin"></a> <a href="http://d.hatena.ne.jp/asin/4756146791/mkusunokhaten-22" class="asin"><img src="/images/imported/aHR0cHM6Ly9pbWFn.jpg" alt="BSDカーネルの設計と実装―FreeBSD詳解" title="BSDカーネルの設計と実装―FreeBSD詳解" class="asin"></a> <a href="http://d.hatena.ne.jp/asin/4891004738/mkusunokhaten-22" class="asin"><img src="/images/imported/aHR0cHM6Ly9pbWFn.jpg" alt="インサイド MS WINDOWS 第4版 上 (マイクロソフト公式解説書)" title="インサイド MS WINDOWS 第4版 上 (マイクロソフト公式解説書)" class="asin"></a> <a href="http://d.hatena.ne.jp/asin/4891004746/mkusunokhaten-22" class="asin"><img src="/images/imported/aHR0cHM6Ly9pbWFn.jpg" alt="インサイド MS WINDOWS 第4版 下 (マイクロソフト公式解説書)" title="インサイド MS WINDOWS 第4版 下 (マイクロソフト公式解説書)" class="asin"></a> <a href="http://d.hatena.ne.jp/asin/4894710471/mkusunokhaten-22" class="asin"><img src="/images/imported/aHR0cHM6Ly9pbWFn.jpg" alt="オペレーティングシステム―設計と理論およびMINIXによる実装" title="オペレーティングシステム―設計と理論およびMINIXによる実装" class="asin"></a> <a href="http://d.hatena.ne.jp/asin/4894712067/mkusunokhaten-22" class="asin"><img src="/images/imported/aHR0cHM6Ly9pbWFn.jpg" alt="OSの基礎と応用―設計から実装、DOSから分散OS Amoebaまで" title="OSの基礎と応用―設計から実装、DOSから分散OS Amoebaまで" class="asin"></a>

<br />
評者が混乱している背景にOSの定義が混乱していることもあるので，ここでは狭義のOSを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>と書き分けることにする．いうまでもなく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>からビルドして<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>ディストロの自作をしたところで，<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>自体を理解することはできない．<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>が起動しinitを実行した後の処理を撫でる<a href="#f-62953fa0" name="fn-62953fa0" title="実際のLinuxディストロの起動処理は設定情報の読み込みやRCスクリプトの再帰的な読み込みなど，自作ディストロの起動処理よりも非常に複雑なので，ディストロの起動処理を理解したことにさえならない">*2</a>程度のことだ．本書の目次をみた限り，<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>のビルド方法や簡単なユーザーランドの構築方法については記述していても，肝心の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>の構造について解説している気配はない．<br />
同じ<a class="okeyword" href="g:mohican:keyword:ソース">ソース</a>を使う限り<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>対策は必要で，<a class="okeyword" href="g:mohican:keyword:パッチ">パッチ</a>マネジメントに膨大なコストのかかる割に学べることの少ない自作ディストロは決してお勧めしない．手作り感を味わうだけなら<a class="keyword" href="http://d.hatena.ne.jp/keyword/Gentoo">Gentoo</a>とかMomongaを使う手もあるし，それ以上の労力をかける暇があったら既存のディストロに寄与したらいい．<a href="#f-152db1eb" name="fn-152db1eb" title="わたしは以前そういう動機でKondara Projectに寄与していた">*3</a><br />
確かに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>の構造を深く理解するにはOSを自作するのが一番である．しかし流行として引き合いに出すべきは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>ディストロ自作ではなく<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSASK">OSASK</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mona">Mona</a>といった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>も含めたOS自作であろう．これらは実用OSと比べて機能が限られている上，<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%BB%D8%B8%FE">オブジェクト指向</a>を意識してモジュール化されているので<a class="okeyword" href="g:mohican:keyword:ソース">ソース</a>は一般の実用OSよりも読みやすい．<br />
とはいえ実際にOSを自作するのは骨だし前提となる知識も膨大なので，勉強の手始めは概念を書籍で理解しながら既存OSのコードを追う方が現実的だ．コードを追う場合も，まずは本で勉強して基礎的な概念を理解し，データ構造を把握した上で，デバッガのステップ実行で実際の流れを追って，理解を深めたい部分を絞って実際のコードを追うという順番になるのだろう．昔は2台のPCを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%B9%A5%B1%A1%BC%A5%D6%A5%EB">クロスケーブル</a>で繋いだりSoftICEを使うとなると大仰だったが，最近は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%BE%C1%DB%A5%DE%A5%B7%A5%F3">仮想マシン</a>環境を簡単につくれるので非常に手軽になった．</p>
<blockquote cite="http://itpro.nikkeibp.co.jp/article/OPINION/20060721/243952/" title="OSを自作する時代がやってきた：ITpro"><p>単なるパーツの知識じゃなくてOSの仕組みをもっと知りたい。概念的には分かるが，いまいち内部に踏み込めない。この悩みを解決するのに手っ取り早い方法が，OSの自作だ。<br />
OSは，コンピュータで動くプログラムのベースとなるソフトウエアである。コンピュータを構成するメ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E2%A5%EA%A1%BC">モリー</a>やデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>などのハードウエアを上位のアプリケーション・プログラムから隠し，しかも，多数のプログラムがあたかも同時に動いているように時分割でハードウエア資源を割り当てる。ハードウエアを効率よく配分するという役割もある。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>はOSの内部を知らなくても、ライブラリやシステム・コールを使うことでハードウエアやOSの機能を簡単に利用できる。逆に言えば，OSを自作すれば，OSの仕組みだけではなく，ハードウエアの仕組みも深く理解できるようになる。<br />
(略)<br />
簡単なOSなら，がんばれば他人が書いた<a class="okeyword" href="g:mohican:keyword:ソース">ソース</a>を用いずにス<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%C3%A5%C1">クラッチ</a>から作ることもできるかもしれないが，それはあまりにも非現実的である。日常的に使えるOSにはなり得ない。そもそも，アプリケーション・プログラムまで自作する必要がある。<br />
そこでお勧めなのが<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>の<a class="okeyword" href="g:mohican:keyword:ソース">ソース</a>・コードを使うという方法である。ご存知の通り，<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>はOSの核となる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>の<a class="okeyword" href="g:mohican:keyword:ソース">ソース</a>・コードが公開されている。これをベースにして，自分なりのOSを作るのである。<a class="okeyword" href="g:mohican:keyword:もちろん">もちろん</a>，無償で入手できる。</p>
</blockquote><div class="footnote">
<p class="footnote"><a href="#fn-170cc1ce" name="f-170cc1ce" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">目次をみた限り，著者は本書で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>の構造を理解できるとは書いていない</span></p>
<p class="footnote"><a href="#fn-62953fa0" name="f-62953fa0" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text">実際の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>ディストロの起動処理は設定情報の読み込みやRC<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BA%C6%B5%A2">再帰</a>的な読み込みなど，自作ディストロの起動処理よりも非常に複雑なので，ディストロの起動処理を理解したことにさえならない</span></p>
<p class="footnote"><a href="#fn-152db1eb" name="f-152db1eb" class="footnote-number">*3</a><span class="footnote-delimiter">:</span><span class="footnote-text">わたしは以前そういう動機でKondara Projectに寄与していた</span></p>
</div>
