2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
プロセス間のコラボレーションが必要です。 たとえば、学校内のすべての管理レベルは相互に関連しており、垂直的に管理することはできません。コラボレーションの前提条件は、プロセスが通信する必要があるためです。一部のデータは通知可能なデータであり、一部のデータは制御関連のデータです。
事実: プロセスは独立しています。プロセス = カーネル データ構造、プロセスのコードとデータ
プロセス通信の目的:
プロセス間の通信コストは若干高くなる可能性があります。プロセスは独立しており、あるプロセスによって開かれたリソースは別のプロセスには表示されません。先ほど親子プロセスの話をしましたが、これは親プロセスのデータが子プロセスに引き継がれるわけではありません。そして常に情報を発信できること。
プロセス間通信の前提: まず、異なるプロセスが同じ (オペレーティング システム) リソース (「メモリの一部」) を参照できるようにします。 2 つのプロセスは独立しています。通信を行うには、2 つのプロセスが同じメモリを持てるようにするためのツール、つまりオペレーティング システムが必要です。オペレーティング システムがこれを行う理由はユーザーが決定します。
オペレーティング システムにリソースを作成するように指示する方法:
パイプラインは基本的に、ディスクにフラッシュする必要のないメモリ レベルのファイルです。
まず、親プロセスは読み取りおよび書き込みモードでファイルを 2 回開きます。ファイルを 2 回開く理由は、2 つの構造体ファイル オブジェクトを取得して、ファイルに対して 2 つの読み取りおよび書き込みポインターが存在し、読み取りおよび書き込み操作が行われるようにするためです。このようにして、読み取りと書き込みは相互に影響を与えません。読み取り/書き込みポインタは、現在のファイルの読み取りまたは書き込み位置を記録します。struct file
ファイル内に読み取り/書き込みポインタは 1 つだけあり、ファイルに書き込み (または読み取り) を行うと、読み取り/書き込みポインタが移動し、再度読み取り (書き込み) が行われます。この時点では、読み取り/書き込みポインタは存在しません。元の位置にあるため、書き込まれた内容を読み取ることができないため、同じファイルを別の方法で 2 回開く必要があります。次に、子プロセスを作成します。子プロセスは、親プロセスで開かれたファイルを継承します。つまり、親プロセスと子プロセスは、同じファイル リソースを共有します。プロセスはファイルに書き込む際に、ファイル記述子3番を介してファイルを読み込むことができます。このとき、親プロセスと子プロセスはデータの送信、つまり通信を実現します。 。親プロセスと子プロセスは同じメモリ バッファーを参照します。ここではこれをパイプ ファイルと呼びます。パイプは単純であるため、一方向の通信のみを許可します。
親子プロセスが同じモニター端末にデータを出力するのはなぜですか?
対応する子プロセスは、親プロセスに対応するファイル記述子テーブルを継承し、同じファイルを指すため、つまり、親プロセスがファイルを入力し、子プロセスもファイルを入力することになります。同じものがバッファに書き込まれ、オペレーティング システムは同じモニタにフラッシュします。
このプロセスでは、デフォルトで 3 つの標準入力と標準出力が開きます: 0、1、2... デフォルトで 0、1、2 を開くにはどうすればよいですか?
すべてのコマンドは、bash
子プロセス (次の限り)bash
これをオンにすると、すべての子プロセスがデフォルトでオンになります。
親プロセスによるモニター ファイルの継続的な使用に影響を与えずに、子プロセスがアクティブに終了 (0/1/2) するのはなぜですか?
メモリレベルの参照カウント--
、メモリ レベルの参照カウントが 0 まで減少すると、ファイル リソースが解放されます。
親子プロセスは不要なファイル記述子を閉じますが、なぜ以前に開く必要があったのでしょうか?
子プロセスに継承を許可するため。閉じる必要はありませんが、誤って書き込みを防ぐために閉じることをお勧めします。
なぜパイプは一方向通信なのでしょうか?
この方法はシンプルで、開発コストが削減され、一方向の通信のみが可能です。ファイルはバッファに更新され、その後、データがファイルに更新されます。このプロセス自体は一方向です。
私たちが日常的に目にする単純なパイプは、水道管のようにすべて一方通行であり、パイプラインの特性に従って入口と出口が 1 つずつあります。
使えるpipe
名前のないパイプを作成する場合、パラメータにはファイル パスとファイル名は必要ありません。
int pipe(int pipefd[2]);