無料の環境でx86 CPUのプロテクト・モードプログラミングの基本が理解できる ―― 『作りながら学ぶOSカーネル』
無料の環境でx86 CPUのプロテクト・モード・プログラミングの基本が理解できる
『作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践』
金凡峻著
秀和システム
ISBN-10: 4798022543
ISBN-13: 978-4798022543
411ページ
2,800円(税別)
2009年4月25日
Amazonで購入
コンピュータにおいて,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が必要になるでしょう.プロダクトによってプロテクト・モードとか,特権モードとか,いろいろな呼称がありますが,全部同じ概念だと考えても差し支えは無いでしょう.
さて,プロテクト・モードを十分に活用し,意味のあるものにするためには,最低限でも以下の機能が実装されていないと話になりません.
- 割り込み管理
- タスク・スイッチング
- メモリやI/Oのプロテクト
- メモリ管理
何だか,難しそうですね.
でも,煎じ詰めると,「ハードウェアの知識が必要になる仮想マシンの設計」という一言に集約されます.
まあ,一概に仮想マシンとは言っても,VMWareやXenなどに代表される「実はハードウェアにもちょっかいを出している」というレベルから,JavaVMのように言語レベルでの実装までいろいろとあって複雑です.
というわけで,仮想環境の実装は,それはそれでかなり高度な技術が必要になるのですが,OSの設計では必要とされる知識のジャンルがちょっと違うとので,もうちょっと難しいかもしれないというレベルです.なにしろ,ハードウェアを理解していることは必須ですし,アセンブラを使う必要があるので,難しいことには変わりありません.
とはいえ,本書に興味をもつ読者は,たいていの場合,ファームウェア・レベルなら大丈夫というスキルを持った人だと思うので,レベル的には「わかりやすい」と思います.
本書は,「作りながら学ぶ」と題されていますが,この題名に偽りはありません.Windows上でx86アーキテクチャを想定し,オープン・ソース・ソフトウェアであるNASM(アセンブラ)とDJGPP(DOS用に移植されたGCC)を使用して,無料でOSの基本が理解できるようになっています.そして動作の確認もBochsというオープン・ソース・ソフトウェアのPC/AT互換機エミュレータを使ってできるので,実際にマシンを1台用意する必要もありません.何から何まで至れり尽くせりという感じですね.
さすがに,WindowsやLinuxレベルのものではなく,タイニーなものですが,基本は変わりません.
「買うよりも作った方が早い」という用途も確かにあるでしょうし,本書を理解することによって,x86上で動いているOSのカーネル部分を解析して改造するという用途にも役立つと思います.
OSというと大がかりなものだという印象をもってしまうかもしれませんが,基本は意外と簡単だと知っておくだけでも役立つでしょう.
大野典宏
Project NR
norihiro.oono@gmail.com