マルチタスクの実現が
OSによるリソース管理を生んだ
なぜOSが資源を管理する必要があるのか? それは現在のOSが、すべて「マルチタスク」、つまり複数のプログラムを同時に動かせるからだ。ひとつのプログラムがハードウェアを占有してしまうと、ほかのプログラムが処理を進められなくなってしまう。あるいは、2つのプログラムが同時にひとつのデバイスにアクセスすると、正しく動かなくなる。
OSは、これらの資源を管理しており、アプリケーションの要求に従って機能としてこれを提供するのである。機能を提供するとはどういうことかというと、ハードウェアなどを直接使わせないかわりに、OS自体が要求を聞いて仕事をすることだ。つまり、管理といっても貸し借りの管理をするのではなく、要求がきたら現在の状況を考えて、要求を満たすように処理するわけだ。
アプリケーションはOSに仕事を依頼する。その手続きを決めたものが「API」(Application Program Interface)だ。アプリケーションはAPIを使い、OSに仕事を頼むのである。
ここまで読むと、あたかも「アプリケーション」と「OS」という2つの異なる状態があるように読める。だが実際には同じCPUが、あるときはアプリケーションを動かし、あるときはOSを動かしているだけだ。APIには「ABI」(Application Binary Interface)というものが定義されていて、CPUがここを通ることで、アプリケーションからOSに生まれ変わるのである。
「生まれ変わる」と言うのは、ABIを通った瞬間にCPUはアプリケーションのプログラムではなく、OS側のプログラムを実行し始めるからだ。「ピン芸人が店員と客の1人2役のコントを演じる」ようなものである。
ABIは同時に、アプリケーションを構成するプログラムが、どのような形でファイルの中にしまわれているかも定義する。この約束事に従った「1」と「0」からなるファイルだけを、OSはプログラムとして認識して実行する。ということは、ABIはプログラムを「どうやって作るのか」も決めているわけだ。あるOSで動くアプリケーションプログラムを作るには、このルールに従うしかない。
OSが提供する機能は複雑だが、基本的な原理は「プログラムをメモリーに読み込んで実行する」だけだ。OSはプログラムが大量にあって複雑なだけで、原理自体はそんなに難しいものでもない。プログラムはメモリーに入れないと実行できないし、CPUはメモリーにあるプログラムを、OSの指示に従ってひたすら実行しているだけである。OSの多くの部分はAPIという「決めごと」からできていて、それにしたがっているプログラムだけを実行できる。もちろん、この「決めごと」にはそれぞれちゃんとした存在理由がある。
プログラム自体はなんらかの「論理」(ロジック)に従うものだが、大小様々な多数のプログラムが集めて作られているOS全体は、なにか非常に複雑で雑多なもののように見える。建物は物理法則に従い建築の理論で造られるのに対して、建物が集まった「町」は雑多なものになるのに似ている、とも言えようか。
次回は、OSの中心部分にあたる「カーネル」について解説したい。
Windows XP以前とVista以降でのOS起動の違い
Windows XPまでの「Windows NT」を受け継いだOSは、OS起動の仕組みも引き継いでいる。XPでは「MBR」(Master Boot Record)と呼ばれる領域にある「ブートストラップローダー」が、「NTLDR」と呼ばれるOSローダーを起動する。そしてハードウェアのチェックなどを経て、NTのカーネルである「ntoskrnl.exe」を起動していた。
Vista以後はさらにもう一段階増えている。ブートストラップローダーが起動するのは、「Windows Boot manager」(bootmgr)というシステム起動を管理するプログラムで、ここで起動するOSなどを選択できるようになっている。Windows 7の場合は、「winload.exe」というシステム起動プログラムが起動される。ブートマネージャーが間に入ったのは、BIOSからの起動だけでなく、新しい世代の基本プログラムである「EFI」からの起動も可能にするためだ。またWindows側でも、Windows Server 2008 R2の仮想環境「HyperVisor」が起動するなど、起動が複雑になってきたからでもある。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ