「OS」こと「オペレーティングシステム」は、コンピューターのソフトウェアの1種で、「基本ソフトウェア」とも呼ばれる。簡単にいうと「アプリケーションソフトウェアを動かすためのソフト」のことだ。アプリケーションという「ソフトウェア」を動かすのに、OSという「ソフトウェア」が必要とはなんだか言葉遊びのようだが、ここがコンピューターのコンピューターたる所以でもある。
本連載では私たちに馴染みの深いOSであるWindowsやAndroidを題材に、身近なOSの内部構造について説明していきたい。特にWindowsに関しては、Windows XP時代以前とWindows 7/Vista以降で大きく様変わりしているので、「OSの話なんて、もう聞き飽きたよ」という方にもお楽しみいただけるかと思う。
OSの仕事はアプリを動かすための
リソース管理にあり
OSの役割は、「アプリケーションソフトウェアを動かす」という説明の「動かす」にある。OSはアプリケーションをメモリーに読み込んで、実行を開始する。しかし、例えばウェブブラウザーではインターネット接続が必要だし、表計算ソフトではグラフを表示するなどのグラフィックス機能が、ゲームに至ってはGPUを制御して画面を描画するといった機能が必要になる。
こうした機能を、すべてアプリケーション内に抱え込んで実現することはできない。それだけでプログラムが膨大になってしまう。動作するパソコンにどのようなハードウェアがあるかを事前に特定できないので、考えられるすべてのハードウェアに対応しなければならなくなるからだ。
そうは言っても、アプリケーションがハードウェアを直接操作するのは、MS-DOSの時代には頻繁に行なわれていた。そのためアプリケーションにバグがあったり設定を間違ったりすると、容易くパソコンがフリーズするといったことが珍しくなかった。WindowsのようなモダンなOSが開発されたのは、グラフィックスやサウンドなどのハードウェアを、アプリケーションが管理しなくていいようにするためだった。
OSはユーザーがコンピューターで実行するプログラムを、効率的に動かすためのソフトウェアとして作られた。まっさらなコンピューターにプログラムをどう実行させて、次のプログラムにどう切り替えるかといった処理を、手作業ではなくコンピューター自身に管理させるのがOSの発想である。
コンピューターは機械なので、壊れないかぎりずっと動き続ける。だが、毎回人間が「次はこのプログラム」と面倒をみていたのでは大変だ。そこで、「コンピューターが次に何をやらせるか」を指示できるように、コンピューターの面倒はコンピューター自身ができるようなプログラムを作ればいい。それを実現するためには、実行するアプリケーションプログラムにも、「仕事が終わったときにどうするのか」や「エラーならどうすべきか」といったルールを定義しなければならない。
アプリケーションが必要とする一般的な機能は、OSが管理してアプリケーションに機能を提供する。これを「資源(リソース)の管理」という。リソースとは、各種I/OデバイスからCPUの処理時間、HDD上の記憶領域など、「コンピューター自体をプログラムから扱えるもの」として考えたものをいう。逆に言えば、ハードウェアの一部であってもプログラムから扱えないものは、リソースにはならない。例えばノートパソコンの画面やキーボードはリソースとして扱えるが、筐体そのものやディスプレーのヒンジなどは、リソースにはならない。
一定のルールに従ったアプリケーションプログラムであれば、OSはメモリーに読み込んで実行させる。アプリケーションが要求するなら、他のプログラムに影響が出ないようにリソースを割り当てるわけだ。

この連載の記事
- 第13回 ARM版Windows 8実現の布石となったWindows 7の「MinWin」
- 第12回 アプリがWindowsの機能を使うには? APIとDLLの仕組み
- 第11回 マルチコアCPUの消費電力はスケジューリングで変わる?
- 第10回 AMD FX向けにパッチで修正 スケジューラーが抱える難題
- 第9回 マルチコアCPUを賢く使いこなす スケジューリングの秘密
- 第8回 意味の違いがわかる? タスクとプロセスとスレッド
- 第7回 Windowsのメモリー管理をx86の仕組みから読み解く
- 第6回 メモリー不足を根本的に解決する64bit OSの仕組み
- 第5回 Windows 8でMetro Styleアプリを動かす「WinRT」
- 第4回 Windowsを動かすデバイスドライバーの仕組み 前編
- 第3回 OSの仕事はハードウェアをアプリから「隠す」こと?
- この連載の一覧へ