ホームページ  >  記事  >  運用・保守  >  Linuxのプロセス間通信にはどのような方法があるのでしょうか?

Linuxのプロセス間通信にはどのような方法があるのでしょうか?

王林
王林オリジナル
2020-06-29 13:16:397062ブラウズ

Linux プロセス間通信メソッドには、1. パイプ (匿名パイプと名前付きパイプを含む)、2. シグナル、3. メッセージ キュー、4. 共有メモリ、5. セマフォ、6. ソケットが含まれます。パイプの本質はカーネル バッファであり、プロセスはパイプを使用して情報を転送します。

Linuxのプロセス間通信にはどのような方法があるのでしょうか?

Linux プロセス間通信方法:

(推奨学習: linux チュートリアル)

Linux プロセス間の基本的な通信方法には、主にパイプ (匿名パイプと名前付きパイプを含む)、シグナル、メッセージ キュー、共有メモリ、セマフォ、ソケットが含まれます。

1. パイプライン

パイプの本質はカーネルバッファです。示唆するように、通信する必要がある 2 つのプロセスはパイプの両端にあり、プロセスは情報の転送にパイプを使用します。パイプの両端のプロセスにとって、パイプはファイルですが、このファイルは特別で、ファイルシステムには属さず、メモリ上にのみ存在します。

2. シグナル

シグナルはソフトウェア レベルでの割り込みメカニズムのシミュレーションであり、非同期通信方式であり、プロセスは待機する必要がありません。任意の操作を通じて信号が到着します。シグナルはユーザー空間プロセスとカーネルの間で直接対話でき、カーネルはシグナルを使用して、どのようなシステム イベントが発生したかをユーザー空間プロセスに通知できます。

3. メッセージ キュー

メッセージ キューは、特定の形式でメモリに保存され、メッセージ キュー識別子によって識別されるメッセージのリンクされたリストであり、 1 つまたは複数のプロセスがメッセージを書き込み、読み取ります。

4. 共有メモリ

複数のプロセスが他の通信用の同じメモリ空間を直接読み書きできるようにします。メカニズムは非効率的に動作するように設計されています。

複数のプロセス間で情報を交換するために、カーネルはメモリ領域を特別に確保します。このメモリ領域は、アクセスする必要があるプロセスによって独自のプライベート アドレス空間にマップされます。プロセスはデータをコピーせずにこのメモリを直接読み書きできるため、効率が大幅に向上します。

注: 共有メモリには同期メカニズムがありません。1 つのプロセスが共有メモリへの書き込みを完了する前に、別の 2 つのプロセスが共有メモリの読み取りを開始するのを防ぐ自動メカニズムはありません。したがって、通常は他のメカニズムを使用して共有メモリへのアクセスを同期する必要があります。

5. セマフォ

セマフォは基本的に、利用可能なリソースの数を識別するカウンターであり、その値は常に負ではない整数です。 0 と 1 の 2 つの値のみを持つセマフォはバイナリ セマフォ (またはバイナリ セマフォ) と呼ばれ、特定のリソースが利用可能かどうかを識別するために使用できます。

6. ソケット

ソケットは、より基本的なプロセス間通信メカニズムです。他のメソッドとは異なり、ソケットはさまざまなマシン上で使用できます。

ソケットには、ファイルベースとネットワーク指向の 2 種類があります。

(1) Unix ソケットはファイルベースであり、アドレス ファミリ UNIX を表す「ファミリ名」 - AF_UNIX を持ちます。

(2) 2 番目のタイプのソケットはネットワークに基づいており、アドレス ファミリ (アドレス ファミリ) を表す独自のファミリ名 AF_INET も持っています。 1 つは使用されるアドレス ファミリで、すべてに 2 つの異なるタイプのソケット接続 (コネクション指向とコネクションレス) があります。

(1) コネクション指向ソケット (SOCK_STREAM)

通信の前に接続を確立する必要があります。コネクション指向通信は、シリアル化された信頼性の高い重複のないデータ配信を提供します。レコード境界はありません。 。

これは、各情報を複数のフラグメントに分割でき、各フラグメントが宛先に到達することが保証され、その後、情報が宛先で結合されることを意味します。

この接続タイプを実装する主なプロトコルは、伝送制御プロトコル (TCP) です。

(2) コネクションレスソケット(SOCK_DGRAM)

通信開始前にコネクションを確立する必要がなく、データ送信中の順序や信頼性、信頼性は保証されません。

ただし、データグラムはレコード境界を保持します。つまり、メッセージは最初にフラグメントに分割されるのではなく、全体として送信されます。

接続指向ソケットによって提供される保証のため、仮想回線接続のセットアップと保守には多大なオーバーヘッドが必要です。ただし、データグラムはこのオーバーヘッドを必要としません。つまり、データグラムはより「安価」です。

この接続タイプを実装する主なプロトコルは、ユーザー データグラム プロトコル (UDP) です。

以上がLinuxのプロセス間通信にはどのような方法があるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。