📄 rfc3018.txt
字号:
5.2.3 TASK_REJECT
指令“任务拒绝”(TASK_REJECT)作为JCP对TASK_REQ指令的负响应发出,格式
如下:
OPCODE = 10
PCK = %b00
CHN = 0
ASK = 1. ;该指令不需要应答,这个标志仅仅说明必有REQ_ID字段。
EXT = 0/1
OPR_LENGTH = 1
REQ_ID – 取自CONTROL_REQ指令
操作数:
2 字节:基本错误码,不能为0。
2 字节:附加的错误码。
可选的扩展首部:
_INACT_TIME –非活动状态时间(见第5.7节)
_MSG – 任意的错误说明。
5.2.4 TASK_CHK
为了保证安全,即使任务启动后,收到打开会话连接请求的节点也可能要到JCP上对
启动连接的节点进行核实。“任务检查”(TASK_CHK)指令由收到建立会话连接指令
SESSION_OPEN的节点 JCP向发出。拥有该GJID的任务必须已经在该节点上存在。该指
令格式与TASK_REG类似,操作码是11,JCP同样使用TASK_REG指令应答。如果收到
的任务GTID和LTID已经在JCP上注册则发出确认指令。该指令是可选的。
5.3 建立会话连接
会话连接在同一工作的两个任务之间建立。会话连接由虚拟机自发建立,用于在虚拟机
之间交换指令。一个会话连接只能与节点上的一项任务有关,该任务可能与不同的节点建立
多个连接,对于每个GJID两个节点之间只能由一个会话连接。建立会话连接的请求命令包
含工作的全局标识符GJID。如果收到建立连接指令的节点上还没有该GJID,虚拟机就创建
新的任务,如果GJID所标识的任务已经启动,则不创建新任务。
会话连接必须通过TCP建立,但是连接建立后,如果指令的发送方不需要应答,也可
使用UDP。多个会话连接可以使用同一个TCP连接,一个会话连接也可使用多个TCP连接。
协议允许不建立会话连接的工作方式,但是节点必须有默认的虚拟机,并且虚拟机部通过连
接也可执行指令。
在建立会话连接时,双方就使用的虚拟机类型和实现的协议功能子集达成一致。会话连
接UMSP可以是不对称的,就是说连接的上方可以采用不同类型的虚拟机,提供不同的功
能子集。如果建立的会话连接中虚拟机类型为0,则表示成组虚拟机(见第9章),实际的
虚拟机类型不能是0。建立会话连接可能需要2到8次握手。
5.3.1 SESSION_OPEN
指令“打开会话”(SESSION_OPEN)用于启动会话连接并设置我手中使用的连接参数。
格式如下:
OPCODE = 12
PCK = %b00/11 .第一个指令(启动)取%b00,以后都是%b11。
CHN = 0
ASK = 1
EXT = 0/1
OPR_LENGTH = 6 - 10 ;取决于GJID和LTID的长度。
SESSION_ID – 第一条指令该字段为空, 此后是接收方指定的会话标识符。
REQ_ID – 指令发送方指定的会话连接标识符。
操作数:
2 字节:接收方需要的虚拟机类型。
2 字节:接收方需要的虚拟机版本。
4 字节:接收方需要的连接文档。
2 字节:发送方的虚拟机类型。
2 字节:发送方的虚拟机版本。
4 字节:发送方给出的连接文档。
2 字节:发送方为会话分配的缓冲区大小(以256字节组成的块为单位),0
表示没有缓冲区。
4-16 字节:GJID。
4/8 字节:发送方节点指定的任务(在发送方上)LTID,作为GTID字段的
一部分用于指令TASK_REG。
如果接受方所要求的虚拟机类型和版本是0,接收方节点自行选择选择虚拟机类型并在
应答中给出说明,连接的建立必须绑定某个虚拟机或者虚拟机组。
在连接的建立中最多一共可以传输7个SESSION_OPEN指令,指令SESSION_ACCEPT
作为建立连接请求的应答指令,如果拒绝建立连接则使用SESSION_REJECT指令。其中的
任何一个步骤都可拒绝连接的建立,但是要么批准连接,要么在第8次请求之前明确拒绝。
连接过程中部分参数可能改变:虚拟机类型和版本,连接文档。如果反复收到来自某个节点
的打开会话连接的请求,而请求中的GJID已经被原来建立的连接使用,那么可以视情况作
以下处理:
1) 如果请求来JCP,则必须:紧急结束原来的任务并时占用的动态资源;无需请
求JCP确认启动新的任务;同意建立连接。
如果请求来自其他的节点则应拒绝建立新的会话连接,不必改变现有的任务。
5.3.2 SESSION_ACCEPT
指令“接收会话”(SESSION_ACCEPT)是建立会话连接请求的正响应,格式如下:
OPCODE = 13
ASK = 1
PCK = %11
EXT = 0/1
CHN = 0
OPR_LENGTH = 0
SESSION_ID – 接收方指定的会话连接标识符。
REQ_ID – 发送方分配的会话连接标识符。
5.3.3 SESSION_REJECT
指令“拒绝连接”(SESSION_ACCEPT)是建立会话连接请求的负响应,格式如下:
OPCODE = 14
ASK = 0
PCK = %b11
EXT = 0/1
CHN = 0
OPR_LENGTH = 1
SESSION_ID – 接收方指定的会话连接标识符。
操作数:
2字节:基本错误码,不能是0。
2 字节:附加错误码。
可选的扩展首部:
_MSG – 任意的错误说明。
5.3.4 连接文档(Profile)
链接文档用4字节的标志字段定义,该标志分为32个标识符S0-S31,标识符中的数字
表示位的序列号。如果设为1则提供对应的功能,否则不(或者不一定)提供对应的功能。
会话连接中所建立的功能列表详述如下:
与链有关的:
S0 – 使用分段指令
S1 – 使用序列
S2 – 使用事务
与建立连接有关的:
S3 – 使用无连接的数据交换
S4 – 使用建立连接的数据交换
指令格式:
S5 - 保留,必须是0
S6 - 交换指令中使用16字节地址
S7 - 允许使用压缩的指令首部(OPR_LENGTH < > %b111)
S8 - 允许使用扩展格式的指令首部 (OPR_LENGTH = %b111)
S9 - 对于数据字段不超过254字节的指令使用扩展首部
S10 – 对于数据字段不超过4*10^9字节的指令使用扩展首部
S11-S15 操作数种数据字段的最大长度(4字节字),这些位是公用的。如果用
字节计算,等与该字段的值加1再乘上4。如果这4位是1111,则数据字段的最大长度由指
令格式定义。
S16-S19 这些位是通用的。如果表示指令受方的需求连接文档,这些位保存
UMSP版本号(必须是%b0001)。如果表示发送方的连接文档,该字段保存工作的优先级。。
工作优先级用于:工作指令发送到传输层的队列;设置在传输层上的优先级;设置任务计算
的优先级。
S20 – 指明是否采用4字节定界方式,如果S16 = 1,则:
(1) OPR_LENGTH = %b111
(2) 所有的扩展首部和操作数字段都从4的倍数开始。
(3) 如果需要每个首部的后面填0。
S21 – 使用对象的过程名。
S22 – 使用对象名。
可以执行那些指令:
S23 – 可以响应虚拟机上执行的操作(指令RSP)。
S24 – 使用数据读取和比较指令。
S25 – 使用数据写入指令。
S26 – 使用控制传输指令。
S27 – 使用同步指令。
S28 – 使用操作对象的指令。
S29 – 直接访问对象内存指令。如果该标志置0,只能通过对象方法访问对象。
如果S28是0,则该位也必须是0。
S30 – 在0会话中使用MVRUN指令。
S31 – 保留,必须是0。
5.4 关闭会话
只有已经建立会话连接后节点才能关闭会话连接,关闭会话连接使用SESSION_CLOSE
指令。断开连接需要执行3次握手。必须保证在无法控制的紧急情况下也能断开连接。该指
令可由任何一方发出。 假定A是建立连接的启动方,,B是连接的另一方。要关闭连接A
必须发出SESSION_CLOSE指令。发出该指令后A可以重新发送原来的指令,这意味着它
取消了关闭连接指令。应答指令(见第6章)不会影响连接的关闭。发出SESSION_CLOSE
指令的节点不再使用超时限制,可以一直等下去。
节点B在收到SESSION_CLOSE指令后发出RSP_P指令响应。如果应答指令中的基本
返回码是0就表示同意关闭连接,否则表示拒绝。在作出肯定性的响应后,节点在30秒内
不能使用连接。如果在这段时间内,没有从节点A收到除了应答指令以外的
SESSION_ABEND或其他指令,节点B就发出SESSION_ABEND指令并认为该会话连接已
经关闭。
如果收到的SESSION_CLOSE指令作出了肯定答复,节点A就发出SESSION_ABEND
指令,然后就认为该连接已经关闭了。节点A可能要中止关闭连接,为此只要发出一个其
他命令(也可以是NOP)就可以了。这样关闭过程就终止了,会话连接重新切换到工作状
态。
5.4.1 SESSION_CLOSE
指令“关闭会话”(SESSION_CLOSE)启动会话连接的关闭过程,格式如下:
OPCODE = 15
PCK = %b01/11
CHN = 0
ASK = 0
EXT = 0/1
OPR_LENGTH = 0/1
SESSION_ID – 受方指定的会话标识符。
操作数:
2字节:基本终止码
2字节:附加终止码
可选的扩展首部:
_MSG – 任何信息。
可以没有操作数,相当于0退出码。
5.4.2 SESSION_ABEND
指令“中止会话”(SESSION_ABEND)用于无条件结束会话。发出该指令的节点结束
连接双方的数据交换,不等待对方的响应。格式如下:
OPCODE = 16
PCK = %b01/11
CHN = 0
ASK = 0
EXT = 0/1
OPR_LENGTH = 0/1
SESSION_ID – 受方指定的会话标识符
操作数:
2字节:基本终止码
2字节:附加终止码
扩选的扩展首部:
_MSG – 任意信息
可以没有操作数,相当于0退出码。
5.5 终止任务
用户程序正常结束工作完成任务也就完成了,这个过程在后面描述。下面的情况要求不
考虑整个工作的进展而结束任务:节点上没有足够的资源继续任务的执行;结点已经完成了
工作;由于内部原因虚拟机没有受到结束的命令。任务分配的资源可能位于任何一个节点上,
因此任务结束时必须通知所有的节点。结束任务的节点必须异常关闭与参与该项任务的所有
节点之间的会话连接(发出SESSION_ABEND指令)。
5.5.1 TASK_TERMINATE
指令“终止任务”(TASK_TERMINATE)由结束任务的节点向JCP发出,格式如下:
OPCODE = 17
PCK = %b00
CHN = 0
ASK = 0
EXT = 0/1
OPR_LENGTH = 2/3 ;依赖于CTID的长度。
操作数:
2字节:基本终止码
2字节:附加终止码
4/8 字节: CTID.
可选的扩展首部:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -