Linuxのプロセス間通信

  

Linuxのプロセス間通信(IPC)にはいくつかの方法がありますが、以下で簡単に説明します。

1つ。 Pipe

Pipelineは、Linuxでサポートされている最初のIPCモードで、名前なしパイプ、名前付きパイプなどに分けられます。

(1)匿名パイプライン。これにはいくつかの特徴があります。

1)パイプラインは半二重で、一方向のデータフローしかサポートできず、2つのプロセス間の通信が必要な場合に確立する必要があります。 2本のパイプ;

2)無名のパイプはpipe()関数を使用して作成され、親プロセスと子プロセス、または兄弟プロセス間でのみ使用できます。

3)パイプは通信の両端に使用されます。言い換えれば、本質的にメモリ内にのみ存在する独立したファイルです。
4)データの読み書き操作:プロセスはパイプラインにデータを書き込み、書き込まれたデータはパイプラインバッファの最後に追加されます。別のプロセスがパイプライン内のバッファーの先頭にあるデータを読み取ります。

(2)有名なパイプライン

有名なパイプラインも半二重ですが、親族関係なくプロセス間の通信を可能にします。具体的には、周知のパイプラインはそれに関連するパス名を提供し、FIFO(先入れ先出し)の形でファイルシステム内に存在する。これにより、関連のないプロセスでも、すでに提供されているパスにアクセスできる限り、FIFOを介して互いに通信できます。

パイプラインに読み取り終了がある場合にのみ、パイプラインにデータを書き込むことが意味があることに注目する価値があります。そうでなければ、パイプにデータを書き込むプロセスはカーネルからのSIGPIPEシグナルを受け取ります;アプリケーションはシグナルハンドラをカスタマイズするか、単にシグナルを無視することができます。

Semaphore

セマフォは、プロセス間での複数のスレッドまたはプロセスによるリソースへの同時アクセスを制御するカウンタで、多くの場合ロックメカニズムとして実装されています。基本的に、セマフォは保護された変数であり、初期化と2つの標準アトミック操作(P /V)を通してのみアクセスできます。 (P、V操作は、wait(s)、signal(s)とも呼ばれます)

。シグナル

シグナルは、Unixシステムで使用されるプロセス間通信の最も古い方法の1つです。オペレーティングシステムは、特定のプロセスに対して、所定のイベントが発生したことを通知し、そのシグナルを受信したプロセスは、さまざまな方法でそのシグナルを処理することを選択できます。シグナル、およびシグナルをカスタマイズする処理機能は、対応するアクションを実行します。

カーネルはプロセスがさまざまなイベントに応答するためのシグナルを生成します。これがシグナルの発生源です。シグナルソースは、例外、他のプロセス、端末割り込み(Ctrl-C、Ctrl + \\など)、ジョブ制御(フロント、バックグラウンドプロセス管理など)、割り当て量(CPUタイムアウトまたはファイルが大きすぎるなど)、カーネル通知(I /O準備完了など)、アラーム(タイマー)

4メッセージキュー

メッセージキューとは、1つ以上のプロセスがメッセージを書き込み、1つ以上のプロセスがメッセージを読み取ることができるようにするメッセージのリンクリストです。 Linuxは、システム内のすべてのメッセージキューを表すメッセージキューベクタテーブル:msgqueを管理しています。

メッセージキューはシグナリング情報の欠如を克服し、パイプラインはフォーマットされていないバイトストリームとバッファ制限の欠点をサポートすることしかできません。

共有メモリ

共有メモリは、他のプロセスからアクセスできるメモリにマッピングされています。この共有メモリは1つのプロセスによって作成され、他のプロセスをこの共有メモリにマウントすることができます。共有メモリは最速のIPCメカニズムですが、Linux自体は同期制御を実装できず、同時アクセス制御のためにユーザープログラムを必要とするため、セマフォなどのプロセス間通信を実現するために他の通信メカニズムを組み合わせます。

ソケット

ソケットもプロセス間通信メカニズムですが、他の通信方法との主な違いは、異なるホスト間でプロセス通信を実装できることです。ソケットはプロセス間通信のエンドポイントと考えることができ、各ソケットの名前は一意であり、他のプロセスはデータにアクセスし、接続し、通信することができます。

Copyright © Windowsの知識 All Rights Reserved