InterSystems IRIS プロセス間通信
インタジョブ・コミュニケーション (IJC) デバイスは、複数の InterSystems IRIS プロセス間で情報を送受信できる一連の特別なデバイス番号です。プロセスは、ジョブ起動型プロセスあるいは対話型プロセスのいずれかです。
IJC デバイスはペアで機能します。IJC デバイスは 256 ペアまで使用可能です。データの読み取りには、レシーバと呼ばれる偶数番号のデバイスを使用します。データの書き込みには、トランスミッタと呼ばれる奇数番号のデバイスを使用します。トランスミッタからの読み取り、またはレシーバへの書き込みを実行しようとすると、<NODEV> エラーを生じます。
他のデバイスと同様に、入出力コマンドを IJC デバイスに発行します。OPEN コマンドと USE コマンドをデバイスへ発行後、プロセスは以下のコマンドを発行できます。
デバイスを開くことができるのは、一度に 1 つのプロセスのみです。
デバイスのペアは、InterSystems IRIS デバイス・テーブルでマップされた相対順序に基づいています。この順序は、管理ポータルの構成オプションを使用して表示および編集できます。
デバイスの各ペアは、IJC メモリ・バッファに対応します。プロセスが、WRITE コマンドを奇数番号の IJC デバイスに発行すると、InterSystems IRIS は、デバイスとペアになっているバッファにデータを書き込みます。別のプロセスが、ペアになっている偶数番号のデバイスに READ コマンドを発行した場合、InterSystems IRIS は同じバッファからデータを読み取ります。
書き込まれたデータは、先入れ先出し法でメモリにバッファされます。デバイスが空の場合に READ を実行すると、他のプロセスが対応する WRITE を発行するまでプロセスは中断します。バッファが一杯の場合に WRITE を実行すると、他のプロセスがバッファを読み取るまで中断します。
バッファにメッセージを書き込んだ後、トランスミッタを終了した場合も、メッセージが読み取られるまではバッファに残されます。複数のユーザが、OPEN、USE、WRITE、および 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 のデバイス番号の範囲が定義されます。任意の奇数/偶数番号のペアを、OPEN、USE、READ、WRITE、および 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 デバイスへの入出力コマンド
すべての標準入出力コマンド、OPEN、USE、READ、WRITE、および CLOSE を IJC デバイスで使用できます。
OPEN コマンド
OPEN コマンドは、IJC デバイスの使用を確保します。
構文
各項目の内容は次のとおりです。
引数 |
説明 |
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