プログラミングインタフェース

プロセス間通信

この節では、リアルタイム処理と関連する、SunOS インタフェースについて説明します。また、シグナル、パイプ、FIFO、メッセージ待ち行列、共有メモリー、ファイルマッピング、およびセマフォーについても説明します。プロセス間通信に役立つライブラリ、インタフェース、およびルーチンについては、第 7 章プロセス間通信を参照してください。

シグナルの処理

次のように、送信側は sigqueue(3RT) を使用して、少量の情報とともにシグナルをターゲットプロセスに送信します。

以降に発生する保留状態のシグナルも待ち行列に入るので、ターゲットプロセスは指定されたシグナルの SA_SIGINFO ビットを設定する必要があります。詳細は、sigaction(2) のマニュアルページを参照してください。

ターゲットプロセスは通常、シグナルを非同期的に受信します。シグナルを同期的に受信するには、シグナルをブロックして、sigwaitinfo(3RT) または sigtimedwait(3RT) を呼び出します。詳細は、sigprocmask(2) のマニュアルページを参照してください。この手順によって、シグナルは同期的に受信されるようになります。このとき、sigqueue(3RT) の呼び出し側が送信した値は siginfo_t 引数の si_value メンバーに格納されます。シグナルのブロックを解除しておくと、シグナルは siginfo_t 引数の si_value に格納された値とともに、sigaction(2) によって指定されたシグナルハンドラに配信されます。

あるプロセスが送信できるシグナルの数は関連する値で指定されており、残りは送信されないままになります。sigqueue(3RT) を最初に呼び出したとき、{SIGQUEUE_MAX} 個のシグナルが入る記憶情報域が割り当てられます。次に、sigqueue(3RT) を呼び出すと、ターゲットプロセスの待ち行列にシグナルが正常に入るか、制限時間内で失敗します。

パイプ、名前付きパイプ、およびメッセージ待ち行列

パイプ、名前付きパイプ、およびメッセージ待ち行列は、文字入出力デバイスと同様に動作します。ただし、これらのインタフェースは接続には異なる方法を使用します。パイプについての詳細は、「プロセス間のパイプ」を参照してください。名前付きパイプについての詳細は、「名前付きパイプ」を参照してください。メッセージ待ち行列についての詳細は、「System V メッセージ」および 「POSIX メッセージ」を参照してください。

セマフォーの使用法

セマフォーも System V と POSIX の両方のスタイルで提供されます。詳細は、「System V セマフォー」および 「POSIX セマフォー」を参照してください。

この章で前述した手法によって優先順位の逆転を明示的に回避しない限り、セマフォーを使用すると、優先順位の逆転が発生する場合があるので注意してください。

共有メモリー

プロセスがもっとも高速に通信する方法は、メモリーの共有セグメントを直接使用する方法です。3 つ以上のプロセスが同時に共有メモリーに読み書きしようとすると、メモリーの内容が正確でなくなる可能性があります。これは、共有メモリーを使用する場合のもっとも大きな問題です。