「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回
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の仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ