1. 序章

最近のほとんどのコンピューターシステムは、いつでも複数のタスクを実行できるプロセスの概念を使用しています。 また、複数のプロセスが同時に実行されるため、さまざまな理由で相互に通信する必要があることがよくあります。

このチュートリアルでは、オペレーティングシステムのプロセス、その種類、プロセス間通信(IPC)、およびさまざまなモードについて説明します。

2. プロセスの概要

IPCについて説明する前に、オペレーティングシステムプロセスの概念とそれに関連する詳細を理解しましょう。

2.1. プロセスとは何ですか?

指定されたタスクを実行するコンピュータプログラムを作成します。 実行中のプログラムはプロセスです。 ただし、プログラムはプログラムのソースコード以上のものです。 プロセスは、プログラムのソースコード以外のさまざまな追加コンポーネントを含むアクティブなエンティティです。 プロセスには、関数パラメータ、ローカル変数などの一時データを格納するプロセススタック、グローバル変数を格納するデータセクション、実行時に動的に割り当てられるヒープメモリが含まれます。

2.2. プロセス制御ブロック

プロセス制御ブロックは、オペレーティングシステムのプロセスを表します。 プロセス制御ブロックには、プロセス状態、プログラムカウンター、CPUレジスタの詳細、メモリ管理情報など、プロセスに関連するさまざまな情報が含まれています。 これは、プロセスに属するすべての詳細を含むリポジトリとして機能します。

2.3. プロセス状態

プロセスが実行されると、実行の段階に基づいて状態が変更されます。

上の図は、プロセスの状態遷移図を示しています。

  • 新規:最初は、プロセスが作成されると、新しい状態になります
  • 準備完了:プロセッサで実行する準備ができると、プロセスは準備完了状態に移行します
  • 実行中:プロセスがプロセッサで実行されると、実行中の状態になります。 プロセッサで実行状態になることができるプロセスは、常に1つだけです。 割り込みが発生すると、プロセスは準備完了状態に移行します
  • 待機中:プロセスが入出力アクセスなどの追加イベントを実行する必要がある場合、実行中に、状態の待機に移行します。 イベントが完了すると、プロセスは準備完了状態に移行します
  • 終了:プロセスの実行が完了すると、プロセスは終了します

3. プロセスの種類

コンピュータシステムで同時に実行されるプロセスは、の2つのタイプ、つまり独立したプロセスまたは協調的なプロセスです。

プロセスは、コンピュータシステムで実行されている他のプロセスに影響を与えたり、影響を受けたりすることができない場合、独立しています。 さらに、他のプロセスとデータを共有しないプロセスも、独立したプロセスです。

コンピュータシステムで実行されている他のプロセスに影響を与える可能性がある場合、または影響を受ける可能性がある場合、プロセスは協力しています。 したがって、他のプロセスとデータを共有するプロセスはすべて、協調プロセスです。

4. プロセス間通信(IPC)

4.1. IPCとは何ですか?

協力するプロセスは、データと情報を交換するために相互に通信する必要があります。 プロセス間通信は、プロセス間の通信のメカニズムです。

4.2. IPCの必要性

ここで、プロセスが他のプロセスとデータを通信または共有する必要があるいくつかの理由について説明します。 以下にいくつかの理由があります。

  • 情報共有:複数のユーザーが同じ情報(共有ファイルなど)にアクセスする必要がある場合があります。 したがって、共有情報に同時にアクセスするための環境が必要です。
  • 計算の高速化:多くの場合、タスクは実行を高速化するためにいくつかのサブタスクに分割されます。 これには、タスクに関連する情報を交換するための関連プロセスも必要です
  • モジュール性:ほとんどの場合、アプリケーションはモジュール方式で構築され、個別のプロセスに分割されます。 たとえば、Google Chrome Webブラウザーは、新しいタブごとに個別のプロセスを生成します

5. プロセス間通信のモード

プロセスが相互に通信できるモードには、共有メモリとメッセージパッシングの2つがあります。 名前が示すように、共有メモリ領域はプロセス間で共有メモリを共有します。 一方、メッセージパッシングでは、プロセスはメッセージを介して情報を交換できます。 これらについては、以降のセクションで詳しく説明します。

5.1. 共有メモリ

共有メモリモデルを介したプロセス間通信では、共有メモリ領域を確立するために通信プロセスが必要です。 一般に、通信するプロセスは、独自のアドレス空間に共有メモリ領域を作成します。 このプロセスと通信したい他のプロセスは、アドレス空間をこの共有メモリセグメントに接続する必要があります。

上の図は、IPCの共有メモリモデルを示しています。 プロセスAとプロセスBは、共有メモリセグメントを確立し、共有メモリ領域を介して情報を交換します。

デフォルトでは、オペレーティングシステムは、プロセスが他のプロセスメモリにアクセスできないようにします。 共有メモリモデルでは、プロセスがこの制限を削除することに同意する必要があります。 さらに、共有メモリはプロセス間の合意に基づいて確立されるため、プロセスは、両方のプロセスが同時に同じ場所に書き込みを行わないように同期を確保する責任もあります。

5.2. メッセージパッシング

共有メモリモデルはプロセス通信に役立ちますが、常に適切で達成可能であるとは限りません。 たとえば、分散コンピューティング環境では、データを交換するプロセスが異なるコンピュータシステムに存在する場合があります。 したがって、通信用の共有メモリ領域を確立することは簡単ではありません。

メッセージパッシングメカニズムは、通信のための代替手段プロセスを提供します。 このモードでは、プロセスは、基盤となるオペレーティングシステムの支援を受けてメッセージを介して相互に対話します。

上の図では、2つのプロセスAとBがメッセージパッシングを介して相互に通信しています。 プロセスAは、メッセージMをオペレーティングシステム(カーネル)に送信します。 次に、このメッセージはプロセスBによって読み取られます。

メッセージを正常に交換するには、プロセス間に通信リンクが必要です。 これらの通信リンクを確立するためのいくつかの手法があります。 以下は、これらのメカニズムの花嫁の概要です。

  • 直接通信:このモードでは、各プロセスが受信者または送信者を明示的に指定します。 たとえば、プロセスAがプロセスBにメッセージを送信する必要がある場合、プリミティブを使用できます。
  • 間接通信:このモードでは、プロセスはメールボックスを介してメッセージを交換できます。 メールボックスは、メッセージを保持するコンテナです。 たとえば、Xがメールボックスの場合、プロセスAはプリミティブを使用してメールボックスにメッセージを送信できます。
  • 同期:これは、同期の追加オプションを使用した直接および間接通信の拡張機能です。 必要に応じて。 プロセスは、メッセージの送信または受信中にブロックすることを選択できます。 また、ブロッキングなしで非同期通信も可能です
  • バッファリング:交換されたメッセージは一時キューにあります。 これらのキューは、容量がゼロ、制限付き、および制限なしにすることができます

IPCの古典的な例の1つは、生産者/消費者問題です。 プロデューサーは、データを生成するアプリケーション/プロセスです。 コンシューマーは、生成されたデータを消費するアプリケーション/プロセスです。 プロデューサープロセスとコンシューマープロセスは、相互に通信するために、前に説明したメカニズムのいずれかを決定できます。

6. 結論

この記事では、コンピュータシステムプロセスとそれらの間の通信のさまざまなメカニズムについて説明しました。

プロセス、PCB、およびプロセス状態の概念を導入しました。 次に、プロセス通信の2つの主要な手法である共有メモリとメッセージパッシングについて説明しました。

最後に、IPCの概念を使用するプロデューサー-コンシューマーの例を示しました。