コンピューター技術書の温故知新
第十三回
大野典宏
●OSだって作ってみれば理解できる
OSと言うとPC用のWindowsやMacOS、Linuxを思い浮かべるかもしれない。それは仕方がない。しかし、アップル社のプロダクトや、ソニーとか任天堂のゲーム機がOSの目的外利用を強く制限しているだけで、他のOSは組み込み製品や大規模コンピューターでも使用可能になっている。
PCのシェアと言えば、すでにメーカーごとのハードウェア出荷数ではなく、PC用OSの占有率のみで語られることも多い。スマートフォンで言えば、事実上はAndroidかiPhoneOSのどちらかという驚異的な寡占市場の話になってしまっている。
なんでこのようなことが起こるのだろうか?
答えは簡単で、「アプリケーション開発者が多ければ技術情報や開発ツールが増えてアプリケーション開発が楽になるし販売も見込める」ためである。独占禁止法という概念で過去何回か引っかけられかけてはいるが、そこに不当な競争はあるのだろうか?
開発ツールや技術サポート、情報が多いから使いたいという理由が置き去りにされている。かつて工場の生産ラインを制御する機器を開発する会社に勤めていた親族の一人がこう言った。「うちの会社は貧乏なのでWindowsを使っています」。実際にそうなのである。Windowsは購入しなければならないが、他の高級な専用OSを購入しても、それを使いこなすスキルを持ったエンジニアが必要になるし、ツール類も揃えなければならないのである。
今やWindowsって、そんなに滅多なことで落ちない強固なOSだし、オープンソースのOSや時前のOSを作っている暇などないからだ。
で、そのOSなのだが、実際にはやることが多くて、それなりに複雑な代物になってしまっているが、目的や用途に合わせて採用するOSを選択する余地は大いに残されている。組み込み用途でリアルタイムOSなどが百花繚乱なのを見ればわかる。
でも、これはCPUと同じで、実際のところ、もともとはすごく単純なものから進化してきたのである。その本質さえ理解すれば、それなりの知識とスキルがあれば作ってしまうことも可能なのである。
ここで取り上げた書籍は「プロテクト・モード」に限られているが、実際に手を動かしてみれば、プロテクトモードの必要性や使い方はわかる。ただ、それを使いこなすのは別の話であって、「後は頑張ってください」というしか無いのだが。
————————————————–
書評 2009年5月15日
無料の環境でx86 CPUのプロテクト・モードプログラミングの基本が理解できる
『作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践』
金凡峻著
秀和システム
ISBN-10: 4798022543
ISBN-13: 978-4798022543
411ページ
2,800円(税別)
2009年4月25日
コンピュータにおいて,OSが要求される最大の理由は,「ユーザからハードウェアを隠蔽すること」です.ハードウェアのアーキテクチャが違おうとも,共通のAPI(Application Program Interface)を提供することで,ユーザ・アプリケーションの作成を楽にし,しかもエンド・ユーザもハードウェアの違いを気にする必要がなくなります.
例えば,最も極端なのはWindowsでしょう.PC向けやサーバ向けのWindowsはインテル・アーキテクチャ向けです.一方,小型デバイス向けのWindows CEやWindows MobileはARMで使われている例が多いようです.
しかし,機能は少し違うものの,PCでもスマートフォンでも同じIEやOutlook,Wordが使えます.
まあ,その他にもマルチユーザの管理,プロセスやタスク処理の管理,メモリ管理,ファイル・システムによるプログラム管理など,重要な目的はありますが,それは「OSというソフトウェアに管理を任せることで,エンド・ユーザの負担を軽くする」という「隠蔽」という目的から外れていないのは確かでしょう.
逆に,ローエンドのシステムではかえってOSが邪魔になるので,すべてのコンピュータに必要というわけではないのですが,あらゆる状況でソフトウェアが使われている以上,OSそいう存在が最も重要なソフトウェアであることに変わりはないでしょう.
さて,現在のOSは,多くの場合では,プロテクションに代表される「隠蔽機能」を採用しています.これは,案外と歴史が古く,1960年代にIBMがVMM(Virtual Machine Monitor)という仮想マシン,そしてUNIXの元になったMulticsが採用したリング・プロテクションで実現されています.Multicsのプロテクション機能は,今でもLinuxや*BSDといった互換OSでも受け継がれています.
しかし,プロテクションという概念を広めるに至った最大の出来事は,PCでは独占的だったインテルが,80286でプロテクト・モードを採用したことでしょう.
現在のCPUは,ミドルエンド以上だとたいていは32ビットRISC(Reduced Instruction Set Computer) なので,使おうとするとOSが必要になるでしょう.プロダクトによってプロテクト・モードとか,特権モードとか,いろいろな呼称がありますが,全部同じ概念だと考えても差し支えは無いでしょう.
さて,プロテクト・モードを十分に活用し,意味のあるものにするためには,最低限でも以下の機能が実装されていないと話になりません.
1.割り込み管理
2.タスク・スイッチング
3.メモリやI/Oのプロテクト
4.メモリ管理
何だか,難しそうですね.
でも,煎じ詰めると,「ハードウェアの知識が必要になる仮想マシンの設計」という一言に集約されます.
まあ,一概に仮想マシンとは言っても,VMWareやXenなどに代表される「実はハードウェアにもちょっかいを出している」というレベルから,JavaVMのように言語レベルでの実装までいろいろとあって複雑です.
というわけで,仮想環境の実装は,それはそれでかなり高度な技術が必要になるのですが,OSの設計では必要とされる知識のジャンルがちょっと違うとので,もうちょっと難しいかもしれないというレベルです.なにしろ,ハードウェアを理解していることは必須ですし,アセンブラを使う必要があるので,難しいことには変わりありません.
とはいえ,本書に興味をもつ読者は,たいていの場合,ファームウェア・レベルなら大丈夫というスキルを持った人だと思うので,レベル的には「わかりやすい」と思います.
本書は,「作りながら学ぶ」と題されていますが,この題名に偽りはありません.Windows上でx86アーキテクチャを想定し,オープン・ソース・ソフトウェアであるNASM(アセンブラ)とDJGPP(DOS用に移植されたGCC)を使用して,無料でOSの基本が理解できるようになっています.そして動作の確認もBochsというオープン・ソース・ソフトウェアのPC/AT互換機エミュレータを使ってできるので,実際にマシンを1台用意する必要もありません.何から何まで至れり尽くせりという感じですね.
さすがに,WindowsやLinuxレベルのものではなく,タイニーなものですが,基本は変わりません.
「買うよりも作った方が早い」という用途も確かにあるでしょうし,本書を理解することによって,x86上で動いているOSのカーネル部分を解析して改造するという用途にも役立つと思います.
OSというと大がかりなものだという印象をもってしまうかもしれませんが,基本は意外と簡単だと知っておくだけでも役立つでしょう.