OSのプロセス間通信(IPC)
⚡ スマートサマリー
プロセス間通信(IPC)とは、オペレーティングシステムのメカニズムの集合体であり、単一のコンピュータ上で実行される場合でも、ネットワークで接続された複数のマシン間で実行される場合でも、プロセスやスレッドがデータを交換し、活動を調整し、動作を同期できるようにするものです。

プロセス間通信とは
プロセス間通信 (IPC) IPCは、1つまたは複数のプロセスやプログラム内の複数のスレッド間でデータを交換するために使用されます。これらのプロセスは、単一のコンピュータ上で実行されている場合もあれば、ネットワークで接続された複数のコンピュータ上で実行されている場合もあります。IPCの正式名称はプロセス間通信(inter-process communication)です。
これは、プログラマがオペレーティングシステム上で並行して実行できる様々なプログラムプロセス間の活動を調整できるようにする一連のプログラミングインターフェースです。これにより、単一のプログラムが多数のユーザー要求を同時に処理することが可能になります。
ユーザーからのリクエストごとにオペレーティングシステム上で複数のプロセスが実行される可能性があるため、これらのプロセスは相互に通信する必要が生じる場合があります。各プロセス間通信(IPC)方式にはそれぞれ長所と短所があるため、1つのプログラムで複数のIPC方式が使用されることは珍しくありません。
プロセス間通信のアプローチ
プロセス間通信のための重要な方法をいくつか紹介します。
プロセス間通信アプローチ
パイプ
パイプは、関連する2つのプロセス間の通信に広く用いられています。これは半二重通信方式であり、最初のプロセスが2番目のプロセスと通信します。しかし、全二重通信を実現するには、もう1つのパイプが必要です。
メッセージパッシング
これは、プロセス間の通信と同期のための仕組みです。メッセージパッシングを用いることで、プロセスは共有変数に頼ることなく相互に通信できます。
IPCメカニズムは2つの操作を提供します。
- 送信(メッセージ)—メッセージサイズは固定または可変です
- (メッセージ)を受信する
メッセージキュー
メッセージ キューは、メッセージ キュー内に保存されているメッセージのリンクされたリストです。 kernelメッセージ キュー識別子によって識別されます。この方法では、全二重機能を持つ単一または複数のプロセス間の通信が提供されます。
直接対話
このタイプのプロセス間通信では、プロセス同士が明示的に名前を指定する必要があります。この方式では、通信するプロセス間のペアごとにリンクが確立され、各ペア間には1つのリンクのみが存在します。
間接的なコミュニケーション
間接通信は、プロセスが共通のメールボックスを共有している場合にのみ確立されます。各プロセスペアは複数の通信リンクを共有でき、1つのリンクで複数のプロセスと通信できます。リンクは双方向または単方向の場合があります。
共有メモリ
共有メモリとは、2つ以上のプロセス間で共有されるメモリ領域のことです。このメモリは、それを使用するプロセスを同期させることで、同時アクセスから保護する必要があります。
FIFO
FIFOは、互いに関連性のない2つのプロセス間の通信に使用されます。これは全二重方式であり、最初のプロセスが2番目のプロセスと通信できるだけでなく、その逆も可能です。
なぜIPCなのか?
プロセス間通信プロトコルを情報共有に利用する理由は以下のとおりです。
- モジュール化を促進するのに役立ちます。
- 計算速度の向上。
- 特権の分離。
- コンビニ。
- これは、プロセスとオペレーティングシステムが通信し、動作を同期させるのに役立ちます。
IPC で使用される用語
IPC で使用される重要な用語をいくつか次に示します。
Semaphores: セマフォはシグナル伝達機構の一種です。このOS方式は、設定方法に応じてリソースへのアクセスを許可または拒否します。
Signals: シグナルとは、信号伝達によって複数のプロセス間で通信を行う方法である。送信元プロセスは番号で識別されるシグナルを送信し、受信側プロセスはそれを処理する。
読書の提案: 何ですか Semaphore? バイナリ、カウント型と例
FIFOS と似ているもの、FIFOS とは異なるもの
以下の表は、同じ種類のFIFOと異なる種類のFIFOを比較したものです。
| FIFOのような | FIFOとは異なります |
|---|---|
| 先入れ先出し(FIFO)方式を採用しています。 | これは、特定の緊急メッセージが最前線に届く前に、それらを抜き出す方法を採用しています。 |
| FIFOは、送信プロセスと受信プロセスの両方とは独立して存在する。 | 常に準備万端なので、開閉する必要はありません。 |
| 無関係なプロセス間でのデータ転送を可能にします。 | 開閉時の同期に問題はありません。 |

