第十五章 IRIS 进程之间的通信
第十五章 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命令成功。