OSは,ハードウエアを利用可能にする基本機能を提供するソフトだ。では,具体的にどのような機能を提供しているのだろうか。今回は,タスク制御,プロセス間通信,仮想記憶といったOSの基本的な機能について解説する。

 ITproの読者であれば「OS(Operating System)」が何であるかを知らない人はいないだろう。OSは,コンピュータのハードウエアを利用可能にしてくれるソフトウエアである。JISではOSのことを「プログラムの実行を制御するソフトウエアであって,資源割り振り,スケジューリング,入出力制御,データ管理などのサービスを提供するもの」と定義している。

 それでは,私たちITエンジニアは,OSとどう付き合うべきだろうか。私たちはOSを通してコンピュータを利用している。したがって,OSにできることが,コンピュータにできることのすべてだと言える。私たちはOSが持つ様々な機能(サービス)の種類と使い方を知り,それらを効果的に応用したコンピュータシステムを構築し,エンドユーザーに提供していかなければならない。

 今回は,改めてOSの主要な機能を見てみよう。なお,具体例を示すときは,パソコン用OSであるWindows(Windows 95以降)を使うことにする。

限られたハードを有効活用

 ソフトウエアの種類は,「OS」と「アプリケーション」に大別できる。OSがコンピュータのハードウエアを利用可能にしてくれた状態で,アプリケーションが動作する。このことから,OSのことを「基本ソフトウエア」と呼び,アプリケーションのことを「応用ソフトウエア」とも呼ぶ。アプリケーションがOSの持つ機能を応用しているというわけだ。

 アプリケーションとは,特定の用途に適用(apply)させたソフトウエアという意味である。OSが汎用的な実行環境を用意し,その上で特定の用途向けのアプリケーションが動作するのだ。OSは,エンドユーザーからの要求に応じて,任意のアプリケーションをメモリにロードして実行する。

 コンピュータが複数のアプリケーションを同時に実行できるのは,OSに「資源割り振り」や「スケジューリング」という機能があるからだ。OSが複数のアプリケーションにハードウエア資源(CPU,メモリ,I/O)を割り振り,実行の順序をスケジューリングするのである。

 キーボードやディスプレイ,ディスク装置などの周辺装置と入出力制御(I/O制御)を操作するのも,OSの役割だ。またファイルシステムやアクセス権限など,データ管理の仕組みも提供してくれる。

同時実行はCPUの空きを利用

 OSから見れば,CPUもアプリケーションに割り当てて使わせるハードウエア資源の1つに過ぎない。つまり,CPUはプログラムを解釈して実行する機能を持ったハードウエア資源なのだ。

 OSがCPUに割り当てて実行させるプログラムの単位を「タスク」と呼ぶ。タスクと似た概念の言葉として「プロセス」と「スレッド」がある。タスクとプロセスは,同義語だと考えてよい。CPUから見たプログラムの実行単位であり,メモリ空間(後で説明するプロセス空間)を割り当てる単位でもある。複数のプログラムが同時に動作することを「マルチタスク」あるいは「マルチプロセス」とも呼ぶ(「マルチプログラミング」とも呼ぶ)。

 スレッドは,1つのプロセスをさらに小さな単位に分けたものだ。複数のスレッドが同じメモリ空間を共有するため,高速に切り替えて実行 できるという特徴がある。

 1つのプロセスの中にある複数のスレッドを同時に実行することを「マルチスレッド」と呼ぶ。荒っぽく言えば,Windows上で「Word」と「Excel」を同時に実行することがマルチタスク(マルチプロセス)であり,Wordの文書ファイルを印刷中に,文書の編集を行うことがマルチスレッドである(図1)。

図1●タスク(プロセス)とスレッドの違い
図1●タスク(プロセス)とスレッドの違い
「タスク(プロセス)」はプログラムの実行単位であり,特定のメモリ空間が割り当てられる。一方,タスク(プロセス)をさらに細かい単位に分割した実行単位が「スレッド」。複数のスレッドは同じメモリ空間を共有できるため,高速に切り替えられる
[画像のクリックで拡大表示]

 では,タスク,プロセス,スレッドのいずれであれ,1つのCPUを使ってなぜ複数のプログラムを同時に実行させられるのか。ポイントは,プログラムは実行される際に常にCPUを必要としているわけではない,ということだ(図2)。

図2●複数のプログラムを同時に実行する仕組み
図2●複数のプログラムを同時に実行する仕組み
プログラムは「入力」,「演算」,「出力」という3つの基本的な処理から成るが,CPUを使うのは演算だけで,入力と出力はI/Oを使う。このため,プログラムがI/Oを使っている間はCPUが空き状態になり,この時間を使って別のプログラムを実行できる