Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

InterSystems IRIS プロセス間通信

InterSystems IRIS プロセス間通信

インタジョブ・コミュニケーション (IJC) デバイスは、複数の InterSystems IRIS プロセス間で情報を送受信できる一連の特別なデバイス番号です。プロセスは、ジョブ起動型プロセスあるいは対話型プロセスのいずれかです。

IJC デバイスはペアで機能します。IJC デバイスは 256 ペアまで使用可能です。データの読み取りには、レシーバと呼ばれる偶数番号のデバイスを使用します。データの書き込みには、トランスミッタと呼ばれる奇数番号のデバイスを使用します。トランスミッタからの読み取り、またはレシーバへの書き込みを実行しようとすると、<NODEV> エラーを生じます。

他のデバイスと同様に、入出力コマンドを IJC デバイスに発行します。OPEN コマンドと USE コマンドをデバイスへ発行後、プロセスは以下のコマンドを発行できます。

  • レシーバ・デバイスへの READ コマンド

  • トランスミッタ・デバイスへの WRITE コマンド

デバイスを開くことができるのは、一度に 1 つのプロセスのみです。

デバイスのペアは、InterSystems IRIS デバイス・テーブルでマップされた相対順序に基づいています。この順序は、管理ポータルの構成オプションを使用して表示および編集できます。

デバイスの各ペアは、IJC メモリ・バッファに対応します。プロセスが、WRITE コマンドを奇数番号の IJC デバイスに発行すると、InterSystems IRIS は、デバイスとペアになっているバッファにデータを書き込みます。別のプロセスが、ペアになっている偶数番号のデバイスに READ コマンドを発行した場合、InterSystems IRIS は同じバッファからデータを読み取ります。

書き込まれたデータは、先入れ先出し法でメモリにバッファされます。デバイスが空の場合に READ を実行すると、他のプロセスが対応する WRITE を発行するまでプロセスは中断します。バッファが一杯の場合に WRITE を実行すると、他のプロセスがバッファを読み取るまで中断します。

バッファにメッセージを書き込んだ後、トランスミッタを終了した場合も、メッセージが読み取られるまではバッファに残されます。複数のユーザが、OPENUSEWRITE、および CLOSE の各コマンドを、一度に 1 つずつトランスミッタに発行できます。その後の READ コマンドにより、記述された順番ですべてのメッセージを取得します。

インタジョブ・コミュニケーション・デバイスへのメモリ・バッファの指定

システム管理者は、管理ポータルを使用して IJC バッファを構成できます。[システム管理][構成][追加設定][メモリ詳細] の順に選択します。以下の 2 つのパラメータを設定できます。

  • [ijcnum] : IJC デバイスの最大数。範囲は 0 ~ 256 です。既定値は 16 です。この設定を編集した場合、変更内容を適用するには、InterSystems IRIS を再起動する必要があります。

  • [ijcbuff] : 各 IJC バッファの最大サイズ (バイト単位)。範囲は 512 ~ 8192 です。既定のサイズは 512 バイトです。この設定を編集した場合、変更内容を適用するには、InterSystems IRIS を再起動する必要があります。

各 IJC デバイスは、[ijcbuff] で指定されたサイズを持つ 1 つの IJC バッファに対応しています。メッセージは、[ijcbuff] マイナス 1 の長さで書き込むことができます。

IJC バッファを無効にする

IJC デバイスを使用しない場合は、IJC デバイスの最大サイズ ([ijcnum]) を 0 に設定して、メモリの占有を避けることができます。

IJC デバイス番号

IJC デバイスは、InterSystems IRIS で自動的に番号付けされます。実際の識別番号は、システムで構成される IJC バッファの最大数に依存します。

以下のテーブルは、割り当てる IJC バッファ数に応じてシステムで設定可能な IJC デバイス番号の範囲を示しています。

例えば、8 つの IJC バッファを割り当てる場合、224 から 239 までのデバイス番号がシステムに定義されます (READ デバイスに偶数、WRITE デバイスには奇数が割り当てられます)。

また、94 個の IJC バッファを割り当てる場合、224 から 255、64 から 199、4 から 19、2048 から 2051 のデバイス番号の範囲が定義されます。任意の奇数/偶数番号のペアを、OPENUSEREADWRITE、および CLOSE の各コマンドで使用できます。

IJC デバイス番号
バッファの割り当て数 READ デバイス番号 WRITE デバイス番号
1 224 225
2 226 227
3 228 229
... ...  
15 252 253
16 254 255
17 64 65
18 66 67
... ... ...
83 196 197
84 198 199
85 4 5
86 6 7
87 8 9
88 10 11
89 12 13
90 14 15
91 16 17
92 18 19
93 2048 2049
94 2050 2051
95 2052 2053
... ... ...
254 2370 2371
255 2372 2373
256 2374 2375

IJC デバイスへの入出力コマンド

すべての標準入出力コマンド、OPENUSEREADWRITE、および CLOSE を IJC デバイスで使用できます。

OPEN コマンド

OPEN コマンドは、IJC デバイスの使用を確保します。

構文
OPEN device::timeout

各項目の内容は次のとおりです。

引数 説明
device 上記のテーブルのデバイス番号を記述します。偶数番号のデバイスを OPEN で開き、READ コマンドを発行します。奇数番号のデバイスを OPEN で開き、WRITE コマンドを発行します。2 つのプロセス間で通信するには、デバイスをペアで開く必要があります。
timeout オプション : InterSystems IRIS が OPEN の正常終了を待機する最大秒数で、正の整数です。0 を指定すると、OPEN は即座に制御をプロセスに戻します。

この例は、読み書き用のそれぞれのデバイスを開き、2 つのプロセス間で通信する方法を示しています。

Process A                          Process B 
OPEN 227 USE 227 WRITE "MSG_1"
WRITE "MSG_2"                       OPEN 226 USE 226 READ X
CLOSE 227                           CLOSE 226
OPEN 224 USE 224 READ X             WRITE X
CLOSE 224                           MSG_1
WRITE X                             .
MSG_3                               .
                                    .
                                    OPEN 225 USE 225 WRITE "MSG_3" 
                                    CLOSE 225

Process A は、デバイス 227 を開き、そこに MSG_1 を書き込んで開始します。InterSystems IRIS は、デバイス 226 と 227 で共有しているバッファにこのメッセージを書き込みます。その後、Process A は 2 番目のメッセージを同じバッファに書き込みます。新規の Process B が、対のデバイス 226 を開き、バッファから最初のメッセージ (MSG_1) を読み取ります。

現在の Process A は、メッセージを読み取るために、別のデバイス 224 を開く必要があります。このデバイスと対になる 225 のバッファは現在空なので、Process B がデバイス 225 を開き、MSG_3 を書き込むまで、Process A は待機します。InterSystems IRIS が、デバイス 224 と 225 で共有しているバッファにこのメッセージを配置した後、デバイス 224 への READ コマンドが成功します。

FeedbackOpens in a new tab