プロセス(コンピューティング)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピューティングでは、プロセスは1つまたは複数のスレッドによって実行されているコンピュータプログラムのインスタンスですプログラムコードとそのアクティビティが含まれています。オペレーティングシステム(OS)によっては、プロセスは、命令を同時に実行する複数の実行スレッドで構成されている場合があります[1] [2]

コンピュータプログラムは通常ディスク上のファイルに保存されている命令の受動的なコレクションですが、プロセスはディスクからメモリにロードされた後のそれらの命令の実行です。複数のプロセスが同じプログラムに関連付けられている場合があります。たとえば、同じプログラムの複数のインスタンスを開くと、多くの場合、複数のプロセスが実行されます。

マルチタスクは、複数のプロセスがプロセッサ(CPU)やその他のシステムリソースを共有できるようにする方法です。各CPU(コア)は、一度に1つのタスクを実行します。ただし、マルチタスクを使用すると、各プロセッサは、各タスクが終了するのを待たずに、実行中のタスクを切り替えることができます(プリエンプション)。オペレーティングシステムの実装によっては、タスクが入出力操作を開始して完了するのを待つとき、タスクが自発的にCPUを譲るとき、ハードウェア割り込み、およびオペレーティングシステムスケジューラがプロセスの期限が切れたと判断したときに、切り替えを実行できます。 CPU時間のシェア(たとえば、完全に公平なスケジューラによる)Linuxカーネル)。

マルチタスクの一般的な形式は、ユーザーのプロセスとスレッドの実行、さらには独立したカーネルタスクの実行をインターリーブする方法であるCPUのタイムシェアリングによって提供されますが、後者の機能はLinuxなどのプリエンプティブカーネルでのみ実行可能です。プリエンプションは、CPUにバインドされたプロセスよりも優先度が高い対話型プロセスにとって重要な副作用があるため、ユーザーはキーを押すかマウスを動かすだけですぐにコンピューティングリソースを割り当てられます。さらに、ビデオや音楽の再生などのアプリケーションには、ある種のリアルタイムの優先順位が与えられ、他の優先順位の低いプロセスよりも優先されます。タイムシェアリングシステムでは、コンテキストスイッチは高速に実行されるため、同じプロセッサ上で複数のプロセスが同時に実行されているように見えます。この複数のプロセスの同時実行は、並行性と呼ばれます。

セキュリティと信頼性のために、最新のオペレーティングシステムのほとんどは、独立したプロセス間の直接通信を防ぎ、厳密に仲介および制御されたプロセス間通信機能を提供します。

表現

htopによって表示されるプロセスのリスト
KDE SystemGuardによって表示されるプロセステーブル
KDE SystemGuardによって表示されるプロセステーブル

一般に、コンピュータシステムプロセスは、次のリソース で構成されています(または所有していると言われています)。

オペレーティングシステムは、プロセス制御ブロックと呼ばれるデータ構造内のアクティブなプロセスに関するこの情報のほとんどを保持しますリソースのサブセット(通常は少なくともプロセッサの状態)は、スレッドまたは子プロセスをサポートするオペレーティングシステムの各プロセスのスレッドに関連付けることができます。

オペレーティングシステムは、プロセスを分離し、必要なリソースを割り当てるため、プロセスが相互に干渉してシステム障害(デッドロックスラッシングなど)を引き起こす可能性が低くなります。オペレーティングシステムは、プロセスが安全で予測可能な方法で相互作用できるようにするため のプロセス間通信のメカニズムも提供する場合があります。

マルチタスクとプロセス管理

マルチタスク オペレーティングシステムは、プロセスを切り替えるだけで、同時に(つまり、並列に)実行されている多くのプロセスの外観を与えることができますが、実際には、単一のCPUで一度に実行できるプロセスは1つだけです(CPUに複数のコアがない場合)。 、その後、マルチスレッドまたは他の同様のテクノロジーを使用できます)。[a]

通常、単一のプロセスをメインプログラムに関連付け、子プロセスを、非同期サブルーチンのように動作するスピンオフの並列プロセスに関連付けます。プロセスはリソースを所有していると言われ、そのプログラムのイメージ(メモリ内)はそのようなリソースの1つです。ただし、マルチプロセッシングシステムでは、多くのプロセスがメモリ内の同じ場所にある同じ再入可能プログラムから実行または共有される場合がありますが、各プロセスはプログラムの独自のイメージを所有していると言われます。

プロセスは、組み込みオペレーティングシステムでは「タスク」と呼ばれることがよくあります。「プロセス」(またはタスク)の意味は、「スペースをとる何か」である「メモリ」とは対照的に、「時間をとる何か」です。[b]

上記の説明は、オペレーティングシステムによって管理されるプロセスと、プロセス計算によって定義されるプロセスの両方に適用されます。

プロセスが待機しなければならない何かを要求した場合、そのプロセスはブロックされます。プロセスがブロック状態の場合、ディスクへのスワップに適格ですが、これは仮想メモリシステムでは透過的です。仮想メモリシステムでは、プロセスのメモリの領域が実際にはディスク上にあり、メインメモリにはない場合があります。アクティブなプロセス/タスク(プログラムの実行)の一部でさえ、その部分が最近使用されていない場合は、ディスクにスワップする資格があることに注意してください。関連するプロセスをアクティブにするには、実行中のプログラムのすべての部分とそのデータが物理メモリにある必要はありません。

プロセス状態

状態図に表示されるさまざまなプロセス状態。矢印は、状態間の可能な遷移を示します。

マルチタスクを可能にするオペレーティングシステムカーネルは、プロセスが特定の状態を持つ必要があります。これらの州の名前は標準化されていませんが、同様の機能を備えています。[1]

  • まず、プロセスは、セカンダリストレージデバイス(ハードディスクドライブCD-ROMなど)からメインメモリにロードされることによって「作成」されます。その後、プロセススケジューラはそれに「待機中」の状態を割り当てます。
  • プロセスが「待機中」の間、スケジューラがいわゆるコンテキストスイッチを実行するのを待機します。コンテキストスイッチはプロセスをプロセッサにロードし、状態を「実行中」に変更しますが、以前の「実行中」のプロセスは「待機中」の状態で保存されます。
  • 「実行中」状態のプロセスがリソースを待機する必要がある場合(たとえば、ユーザー入力またはファイルが開くのを待機する場合)、「ブロック」状態が割り当てられます。プロセスが(ブロックされた状態で)待機する必要がなくなると、プロセスの状態は「待機中」に戻ります。
  • プロセスが実行を終了するか、オペレーティングシステムによって終了されると、プロセスは不要になります。プロセスは即座に削除されるか、「終了」状態に移行します。削除されると、メインメモリから削除されるのを待つだけです。[1] [3]

プロセス間通信

プロセスが相互に通信する必要がある場合、プロセスはアドレススペースの一部を共有するか、他の形式のプロセス間通信(IPC)を使用する必要があります。たとえば、シェルパイプラインでは、最初のプロセスの出力を2番目のプロセスに渡す必要があります。別の例は、一度に実行できる協調的であるが部分的に独立したプロセスに分解できるタスクです(つまり、同時実行または真の並列処理を使用します-後者のモデルは同時実行の特定のケースであり、十分なCPUコアが利用可能な場合はいつでも実行可能です実行する準備ができているすべてのプロセス)。

2つ以上のプロセスが異なるオペレーティングシステム(OS)を実行する可能性のある異なるマシンで実行される可能性もあるため、通信と同期のためのいくつかのメカニズム(分散コンピューティングの通信プロトコルと呼ばれる)が必要です(たとえば、Message Passing Interface、多くの場合、単にMPIと呼ばれます)。

歴史

1960年代初頭までに、コンピューター制御ソフトウェアは、モニター制御ソフトウェアIBSYSなど)からエグゼクティブ制御ソフトウェアに進化しました。時間の経過とともに、コンピューターの速度は速くなりましたが、コンピューターの時間はまだ安くも十分に活用されていませんでした。このような環境により、マルチプログラミングが可能になり、必要になりました。マルチプログラミングとは、複数のプログラムが同時に実行されることを意味します。基盤となるユニプロセッサコンピュータアーキテクチャの結果として、最初は複数のプログラムが単一のプロセッサで実行され、それらは希少で限られたハードウェアリソースを共有していました。その結果、並行性は連続的な性質のものでした。後のシステムでは複数のプロセッサ、複数のプログラムが同時に並行して実行される場合があります

プログラムは、プロセッサ用の一連の命令で構成されています。1つのプロセッサで一度に実行できる命令は1つだけです。同時に、より多くのプログラムを実行することはできません。プログラムは、大きな遅延がある入力デバイスなどのリソースを必要とする場合があります。または、プログラムは、出力をプリンタに送信するなど、低速の動作を開始する場合があります。これにより、プロセッサが「アイドル」(未使用)になります。プロセッサを常にビジー状態に保つために、そのようなプログラムの実行は停止され、オペレーティングシステムはプロセッサを切り替えて別のプログラムを実行します。ユーザーには、プログラムが同時に実行されているように見えます(したがって「並列」という用語が使用されます)。

その後まもなく、「プログラム」の概念は「実行プログラムとそのコンテキスト」の概念に拡張されました。プロセスの概念が生まれました。これは、リエントラントコードの発明によっても必要になりました。スレッドはやや遅れて来ました。しかし、タイムシェアリングコンピュータネットワーク、マルチCPU共有メモリコンピュータなどの概念の出現により、古い「マルチプログラミング」は、真のマルチタスク、マルチプロセッシング、そして後にマルチスレッドに取って代わられました。

も参照してください

メモ

  1. ^ 最近のCPUの中には、マルチコア構成で2つ以上の独立したプロセッサを組み合わせており、複数のプロセスを同時に実行できるものがあります。同時マルチスレッディング Intelハイパースレッディングテクノロジーで使用)と呼ばれる別の手法では、複数のプロセスまたはスレッドの同時実行をシミュレートできます。
  2. ^ タスクとプロセスは、基本的に同じエンティティを参照します。また、用語の歴史は多少異なりますが、同義語として使用されるようになりました。今日、「マルチタスク」という代替用語はマルチプロセッサ(2つ以上のCPUを搭載したコンピュータ)と混同しやすいため、「マルチタスク」を指す場合を除いて、プロセスという用語は一般にタスクよりも好まれます。

参考文献

  1. ^ a b c d シルバーシャッツ、アブラハム; カーニュ、グレッグ; ガルビン、ピーターベア(2004)。「第4章プロセス」。Javaを使用したオペレーティングシステムの概念(第6版)。John Wiley&SonsISBN 0-471-48905-0
  2. ^ Vahalia、Uresh(1996)。「第2章プロセスとカーネル」。UNIX内部:新しいフロンティアPrentice-Hall Inc. ISBN 0-13-101908-2
  3. ^ Stallings、William(2005)。オペレーティングシステム:内部および設計原則(第5版)。プレンティスホール。ISBN 0-13-127837-1 (特に、第3章、セクション3.2、「プロセス状態」、図3.9「サスペンド状態を伴うプロセス状態遷移」を含む)

さらに読む

外部リンク