第十五章 IRIS 进程之间的通信
本页介绍如何在两个或多个 IRIS
数据平台进程之间建立通信。
介绍
作业间通信 (IJC)
设备是一组特殊设备编号,可让在两个或多个 IRIS
进程之间传输信息。这些流程可以是作业流程或交互式流程。
IJC
设备成对工作。最多可以有 256
个 IJC
设备对。使用称为接收器的偶数设备来读取数据。使用称为发送器的奇数设备来写入数据。尝试从发送器读取或写入接收器会导致 <NODEV>
错误。
可以向 IJC
设备发出 I/O
命令,就像向任何其他设备一样。向设备发出OPEN和USE命令后,进程可以发出:
- 向接收器设备读取命令
- 将命令写入发送器设备
一次只能有一个进程可以打开设备。
对基于 IRIS
设备表中映射的相对顺序,可以使用管理门户的配置选项查看和编辑该表。
每对设备都与一个 IJC
内存缓冲区关联。当进程向任何奇数 IJC
设备发出WRITE
命令时 IRIS
会将数据写入该设备对的缓冲区中。当另一个进程向该对中的偶数设备发出READ
命令时 IRIS
会从同一缓冲区读取数据。
写入的数据以先进先出的方式缓冲在内存中。如果在设备为空时发生READ
,则发出该信号的进程将挂起,直到另一个进程发出相应的WRITE
信号。缓冲区已满时发生的写入将挂起,直到另一个进程从该缓冲区读取数据。
将消息写入缓冲区后,即使关闭发送器,它也会保留在那里直到被读取。多个用户可以向发射器发出OPEN
、 USE
、 WRITE
和CLOSE
命令,一次一个。随后的READ
命令将按照写入的顺序获取所有消息。
指定作业间通信设备的内存缓冲区
系统管理员可以使用管理门户配置 IJC
缓冲区。选择“系统管理” 、 “配置” 、 “附加设置” 、 “高级内存” 。可以设置的两个参数是:
-
ijcnum
:IJC
设备的最大数量。范围为0
到256
。默认值为16
。如果编辑此设置,则必须重新启动IRIS
才能应用更改。 -
ijcbuff
:每个IJC
缓冲区的最大大小(以字节为单位)。范围为512
到8192
。默认大小为512
字节。如果编辑此设置,则必须重新启动IRIS
才能应用更改。
每个 IJC
设备对应一个 IJC
缓冲区,其大小在ijcbuff
中指定。可以写入长度为ijcbuff
减 1
的消息。
禁用作业间通信缓冲区
如果不使用 IJC
设备,则可以将 IJC
设备的最大数量 ( ijcnum
) 设置为 0
以避免占用内存。
作业间通信设备编号
作业间通信设备由 IRIS
自动定义编号。它们的实际标识号取决于系统上配置的 IJC
缓冲区的最大数量
下表给出了系统上可用的 IJC
设备编号范围,具体取决于分配的 IJC
缓冲区的数量。
例如,如果分配 8
个 IJC
缓冲区,则系统上将定义从 224
到 239
的设备号(偶数用于READ
设备,奇数用于WRITE
设备)。
再举一个例子,如果分配 94
个 IJC
缓冲区,则定义以下设备编号范围:224
到 255
、64
到 199
、4
到 19
以及 2048
到 2051
。可以将任何偶数/奇数对与OPEN一起使用,使用、读取、写入和关闭命令。
设备编号
Buffers Allocated 分配的缓冲区 | READ Device # 读取设备 | # WRITE Device # 写入设备# |
---|---|---|
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 设备的 I/O 命令
可以对 IJC
设备使用所有标准 I/O
命令: OPEN
、 USE
、 READ
、 WRITE
和CLOSE
。
OPEN
命令
OPEN
命令保留作业间通信设备供使用。
OPEN device::timeout
device 设备
上表中的设备编号。打开偶数设备以发出READ
命令。打开奇数设备以发出WRITE
命令。为了两个进程进行通信,它们必须打开一组设备对。
timeout
暂停
可选— 一个正整数,其值(以秒为单位)是 IRIS
等待OPEN
完成的最长时间。如果指定 0
,则 OPEN
立即将控制权返回给进程。
此示例显示两个进程如何通过打开单独的设备进行读取和写入来进行通信:
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
过程A
首先打开设备227
并向其写入MSG_1
。 IRIS
将此消息写入设备226
和227
共享的缓冲区中。然后进程A
将第二条消息写入同一缓冲区。现在,进程B
打开伴随设备226
并从缓冲器读取第一消息(MSG_1
)。
现在,进程 A
想要读取消息,因此它必须打开另一个设备 224
。由于该设备及其同伴设备 225
的缓冲区当前为空,因此进程 A
会等待,直到进程 B
打开设备 225
并将 MSG_3
写入其中。在IRIS
将该消息放入由设备224
和225
共享的缓冲器中之后,对设备224
的READ
命令成功。