このページの本文へ

基礎から覚える 最新OSのアーキテクチャー 第8回

意味の違いがわかる? タスクとプロセスとスレッド

2011年12月01日 18時29分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

プロセスとタスクの違いとは?

Windows 7の「タスクスケジューラ」

 一方で、「プロセス」とは別に「タスク」という用語もある。例えばWindowsで画面下に表示されるプログラムが並ぶバーは、「タスクバー」と呼ばれている。またWindowsの付属ツールには、指定した日時にプログラムを起動する「タスクスケジューラ」がある。そのほかにも、実行中のプログラムの一覧を表示させるコマンドは「tasklist.exe」だ。これらの用語を見ると、Windowsでは実行する、あるいは実行されているプログラムのことを「タスク」と呼んでいるように見える。

 しかし、Win32 APIセットにはタスクという用語はなく、すべて「プロセス」となっている。例えばプログラムを起動する際には、「CreateProcess」というAPIを利用する。ならばWindowsのプログラム実行単位は、プロセスと呼ぶべきだと考えられる。プロセスをユーザー側から見た場合に限って、「タスク」という用語を使っているのだろうか?

 用語としても、「タスク」なら一般的な単語として(英語圏の人には)理解できるが、プロセスは難解だ。もしWindowsが「プロセスバー」や「プロセススケジューラ」といった名称を使っていたら、なんのことだかわからない。そのためWindowsでは、単なる「作業」という意味で「タスク」を使っているのだと考えられる。なおコンピューター関連では、タスクは広い意味で使われることが多く、日本語の「作業」や「処理」という意味で使われることもある。明確な定義がなく、文脈で判断するしかない単語でもある。

 ちなみにWindowsには、「ジョブ」という概念もある。複数のプロセスをグループとして扱う場合には「Job Object」を作り、これにプロセスを登録してグループ化することで、ジョブの状態やジョブに属するすべてのプロセスの終了などを可能にする。また、印刷処理を「印刷ジョブ」と呼ぶ用語もある。

ひとつのプロセス内で並列処理をする
「スレッド」という仕組み

 話をプロセスに戻そう。プロセスからは、さらにプロセスを起動できる。あるプロセスから起動されたプロセスは「子プロセス」と呼び、起動した側を「親プロセス」と呼ぶ。プロセスにはこのような親子関係があり、セキュリティーの設定や管理などに利用されている。しかし親子関係のあるプロセス同士の場合でも、お互いに別の仮想メモリー空間を使う。また、実行のタイミングもそれぞれ違っている。

 関連する処理を同時に進行させることを「並列処理」と呼ぶ。CPUの処理速度から見ると、HDD上のファイルのアクセスには長い時間が必要となるので、その間にほかの作業を行なえば、見かけ上の処理時間を短縮できる。また計算処理などでも、無関係の部分(依存性がない部分とも言う)を並列に処理することで、高速な処理が可能になることがある。

 ゲームを例に考えよう。プレイヤーが操作する飛行機が上下左右に自由に動き、そこに敵のミサイルなどが飛んでくるようなゲームを作る場合、操作に応じて飛行機を動かす処理と、敵やミサイルなどを動かす処理は、衝突のとき以外は無関係なので別々の処理にしたほうが、プログラムがすっきりとわかりやすくなる。

 ひとつのプログラム内で並列処理を行なうための仕組みに、「スレッド」がある。スレッドはプロセス内に作られるが、その実行管理(スケジューリングと呼ぶ)はOS側で行なう。だが、OSがスレッドごとに個別の環境やメモリー割り当てをするわけではなく、基本的にはスレッドを起動するプロセス自身のメモリーなどの資源を使うほか、必要なら親となるプロセスがスレッドの環境を準備する。

 プロセスも実はスレッドの一種だ。Windowsのようにスレッドに対応したOSでは、プロセスを準備したあとで、スレッドとしてプログラムを起動しているのだ。そのためスレッドを起動する親となるプロセスを、「親スレッド」と呼ぶこともある。ちなみにスレッド(Thread)には、「(話など)脈絡、筋道」という意味がある。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン