📄 rfc3018.txt
字号:
_MSG – 任何信息
向JCP发出TASK_TERMINATE指令后,节点向与该任务有关的所有会话连接发出无
条件结束连接指令ABEND_SESSION,人后就认为该任务已经完成了。如果指令
TASK_TERMINATE中的基本返回码是0,表示无须通知其他节点该任务已经结束。如果任
务没有占用动态资源就可能出现这种情况。如果基本返回码不是0,JCP在收到
TASK_TERMINATE指令后,必须通知执行此项工作的其他节点该任务已经结束。JCP负责
通知参与此项工作的所有节点某一任务的结束。
5.5.2 TASK_TERMINATE_INFO
指令“终止任务信息”(TASK_TERMINATE_INFO)用于通知任务的结束,该指令由
JCP向参与工作的其它节点发出,格式如下:
OPCODE = 18
PCK = %b00
CHN = 0
ASK = 0
EXT = 0/1
OPR_LENGTH = 2-5 ;依赖于GTID的长度
操作数:
2字节:基本终止码
2字节:附加终止码
4-16 字节:终止任务的GTID,JCP根据取自指令TASK_REG的LTID和任
务的传输层地址构造GTID。
可选的扩展首部:
_MSG –任何信息
终止码字段的值取自TASK_TERMINATE指令,工作在收到TASK_TERMINATE_INFO
指令后,必须删除(使其无效)与完成任务的节点有关的所有资源引用。
5.6 工作完成
当启动工作的节点上的相应用户程序完成后工作也就完成了,工作的结束由虚拟机主动
提出,此外在工作的生命期结束后或者JCP节点的工作结束后也可以有JCP结束工作。
5.6.1 JOB_COMPLETED
指令“工作完成”(JOB_COMPLETED)由启动工作的节点向JCP发出,,格式如下:
OPCODE = 19
PCK = %b00
CHN = 0
ASK = 0
EXT = 0/1
OPR_LENGTH = 2/3 ;依赖于CTID的长度
操作数:
2字节:基本完成码
2字节:附加完成码
4/8 字节:工作完成任务的CTID,是工作GJID的一部分。
可选的扩展首部:
_MSG – 任何信息
向JCP发出JOB_COMPLETED 指令后,节点向参与该工作的所有会话连接发出无条
件结束连接指令ABEND_SESSION,然后认为该工作已经结束。JCP在收到
JOB_COMPLETED指令后必须通知参与该工作的所有节点工作已经结束,JCP负责通知所
有的节点工作的结束。如果任务节点非正常结束,也可由JCP发出TASK_TERMINATE_INFO
指令。
5.6.2 JOB_COMPLETED_INFO
指令“工作完成信息”(JOB_COMPLETED_INFO)用于通知工作已经结束,由JCP向
参与工作的其它节点发出,格式如下:
OPCODE = 20
PCK = %b00
CHN = 0
ASK = 0
EXT = 0/1 ;
OPR_LENGTH = 2-5 ;取决于GJID的长度和是否有完成码字段
操作数
2字节:基本完成码
2字节:附加完成码
4-16字节:所完成工作的GJID
可选的扩展首部
_MSG – 任何信息
完成码字段是可选的。完成码字段取自指令JOB_COMPLETED。节点在收到
JOB_COMPLETED_INFO指令后必须作以下处理:
(1) 关闭与该任务相关的会话连接,关闭时无需发送基本网络指令。
(2) 非正常结束工作任务并施放任务占用的动态资源。
如果工作生命期结束或者JCP节点工作完成,JCP也可主动发出
JOB_COMPLETED_INFO指令,此时该指令的第一个接收方是启动工作的节点。发出所有
的JOB_COMPLETED_INFO指令后JCP即认为该工作已完成。
5.7 节点的活动控制
UMSP把以某种方式连接在网络中和没有统一控制方式的节点组织在一起。任何时候节
点都可能断开连接或者发生重载,但是其它节点可能对此并不了解。传输连接的中断或者重
新建立并不能作为结点断开或重载的指示器。对传输连接的控制不属于UMSP协议的范围,
该协议甚至没有要求必须存在传输连接。
在紧急结束节点上的个别任务时,还必须执行第5.5.1节所述的处理过程,否则该节点
上的任务必然是非正常结束的。JCP负责执行控制节点激活状态的函数,因此周期性地在JCP
和任务节点之间来回发出状态查询指令TASK_REQ。
如果JCP检测到节点没有处于激活状态,可能要作以下处理:
(1) 如果启动工作的任务已经完成,则认为该工作已经完成,JCP给所有执行该工
作的其它节点发出JOB_COMPLETED_INFO指令。
(2) 如果完成的不是启动工作的任务,则JCP给其他所有节点发出
TASK_TERMINATE_INFO指令。
JCP节点的失效在其重新载入后对GJID的使用有一定限制,,可能有以下变化:
(1) JCP结点断开连接是正常通过的,它给控制的所有节点都发出了
JOB_COMPLETED_INFO指令,这种情况下重载后可使用任何GJID。
(2) JCP节点突然断开连接,没有通知其他节点。这种情况下必须保证重载后,在
该JCP设定的最大失效时间的两倍时间内,新的GJID不能占用失效前使用的GJID。
如果重载的是非JCP节点则没有类似的限制。
5.7.1 _INACTION_TIME
扩展首部“非活动时间”(INACTION_TIME)允许设定非JCP节点的失效时间,格式
如下:
HEAD_CODE = 2
HEAD_LENGTH = 1;
HOB = 1
DATA 包括:
2 字节:不活动时间,0到5秒之间,在这个指定时间范围内,JCP将检查
该指令发送方节点的活动状态。
不活动时间至少要大于传输层上最大传输时间的三倍,传输层的排队等待时间不影响超
时条件。
首部_INACTION_TIME可用于以下指令:
(1) 如果用于TASK_REG指令,必须满足一定的条件——该节点上不能有其他控
制JCP的激活任务。如果值为0就表示不进行检查,如果不含该首部则表示不活动时间必
须由JCP设定。
(2) 如果指令TASK_REG指定的值不适合JCP,该首部还可用于TASK_REJECT。
(3) 如果指令TASK_REG没有包含这个首部,还可用于TASK_CONFIRM。
如果JCP受到带有该首部的TASK_REG指令,必须检查发送该指令的节点是否存在激
活的任务(如果有的话就表示这个节点是重新载入的)。如果存在这样的任务,则必须按照
第5.6.2节所述的过程结束任务,只有完成这些处理后才能发出TASK_CONFIRM指令。
5.7.2 STATE_REQ
指令“状态查询”(STATE_REQ)由JCP发给其他节点上确定的任务,格式如下:
OPCODE = 21
PCK = %b00
CHN = 0
ASK = 0
EXT = 0
OPR_LENGTH = 1/2 ;依赖于LTID的长度。
操作数:
4/8字节:指令受方节点指定的LTID。
指令STATE_REQ 在定义任务时发出,但是还与节点有关系。如果在不活动时间间隔
内节点和JCP之间没有发送该指令则发出该指令。发出最后一条STATE_REQ指令后激活的
任务不影响对激活状态的控制。作为对STATE_REQ的响应发送TASK_STATE指令。在等
待响应时,超时限制设为一个不活动时隙。超出时间限制后继任务节点已经被切换掉。
如果节点在两个不活动时隙的时间范围内没有从JCP收到任何指令,即认为JCP已经
完成工作。这种情况下,节点按照已经收到JOB_COMPLETED_INFO指令(见5.6.2节)
进行处理。节点也可以选择检查是否工作已经完成。对于JCP而言,如果没有活动任务与
给定的节点相关,则不对该节点执行激活控制。
5.7.3 TASK_STATE
指令“任务状态”(TASK_STATE)有特定的任务节点向JCP发出,作为对STATE_REQ
指令的响应,格式如下:
OPCODE = 22
PCK = %b00
CHN = 0
ASK = 0
EXT = 0
OPR_LENGTH = 1/2/3 ;取决于CTID的长度
操作数:
1字节:任务状态码,取值和相应的含义如下:
%x01 – 任务处于激活状态并且会话连接也处于激活状态。
%x02 – 任务激活但是没有会话连接。
%x03 – 任务激活但是没有会话连接而且在该节点上没有分配资源。
%x04 – 任务已完成。
1/3 字节:保留。如果OPR_LENGTH = 1则该字段长1字节否则长3字节,
JCP不得检查给字段的值,该字段在发送时置0。
2/4/8字节:与取自指令STATE_REQ的LTID相关的CTID。
如果OPR_LENGTH = 1,前一保留字段的长度是1字节,CTID占用2字节。否则保留
字段的长度为3字节,CTID的长度不小于4字节。
5.7.4 NODE_RELOAD
指令“节点重入”(NODE_RELOAD)由JCP作为对STATE_REQ指令的负响应发出,
格式如下:
OPCODE = 23
PCK = %b00
CHN = 0
ASK = 0
EXT = 0
OPR_LENGTH = 1/2 ;取决于LTID的长度。
操作数:
4/8字节:取自指令STATE_REQ的LTID。
指令RELOAD_NODE表明,在那个节点上由给定JCP和LTID确定的任务不存在了,
收到该指令后,JCP必须作如下处理:
(1) 对于在发送倒数第二个STATE_REQ指令之前启动的节点上的所有任务发送
STATE_REQ 指令。
(2) 在发出最后一个STATE_REQ指令(收到的是否定响应)之后等待一个不活动
时间。
(3) 对于在最后和倒数第二个STATE_REQ指令(不包括前面的一条中的指令)之
间启动的节点上的所有任务发送STATE_REQ指令。
对于STATE_REQ指令,无论响应是肯定的(TASK_STATE)还是否定的
(RELOAD_NODE)都必须明确答复。
5.8 不使用会话连接的工作方式
协议提供了节点之间不通过建立会话连接交换数据的工作方式,这种方式下工作和任务
不需要初始化,也不是用JCP。不通过连接传输的指令格式与通过会话连接传输的指令完全
对应,区别仅仅在于字段SESSION_ID的值为0或者PCK = %b00。支持无连接工作方式的
节点必须有能够缺省执行不通过连接传输指令的虚拟机。事实上,这些指令在虚拟机的所谓
0会话(0任务))框架下执行。此类虚拟机的内存地址空间无需建立连接也能访问。
SESSION_ID = 0并且REQ_ID = 0的SESSION_INIT指令允许指定其0会话参数或者
请求受方的0会话参数。如果收到该指令的节点要提供需求文档,可以发送
SESSION_ACCEPT指令。否则也发送同样的SESSION_INIT指令,其中的SESSION_ID和
REQ_ID也是0。实际上这样的会话初始工作不会间连接,不过是通知一下而已。0会话中
的数据交换可以根本不必考虑它。
采用无连接的工作方式有以下限制:1)必须发送整个链,除非整个链都放在一个传输
层的分组内;2)不能请求分配内存或者创建对象(除非使用MVRUN指令)。创建的对象
不从属于特定的工作,在创建对象的工作完成之后也不自动释放内存;3)因为结点随时可
能重入,因此函数参数和返值中不能包含指针,否则可能造成指针无效或者指向其它的地址。
协议无法对这些条件的满足与否进行检查,因此实现是完全依赖于虚拟机。
无连接的工作方式可用于以下系统:1)没有操作系统的简单设备;2)执行大量请求的
服务器上(无连接的工作方式占用的资源较少);3)要求响应快但请求少的系统(保持连接
可能降低响应的速度)。
6 虚拟机之间交换的指令
用于在逊尼基之间交换的指令的操作码在128-233之间,根据操作数字段的不同,同一
操作码可以有不同的指令格式。整个的指令格式由操作码和OPR_LENGTH共同决定。如果
指令首部中的ASK=1,则相应必有REQ_ID字段。REQ_ID用作响应标识符,其值由虚拟
机指定,同样该指令的响应也是虚拟机构造的。对于虚拟机之间交换的指令,协议不检查其
响应也不处理REQ_ID字段。用于应答的指令包括:RSP、DATA、RETURN、ADDRESS、
OBJECT和PROC_NUM。ASK=1的响应指令中的REQ_ID字段值取自原指令。响应指令不
需要应答。
如果满足以下条件,虚拟机之间交换的指令可以通过UDP发送:1)ASK=0;2)指令
包含在一个UDP报文内。
对于虚拟机之间交换的指令,在UMSP传输层上不使用超时限制和重复发送。就是说
如果输出队列非常长,那么优先级较低的指令发送的时间可能很长。因此值由虚拟机才完全
了解传输局的类型,也值由虚拟机才能确定什么时候传输超时。另外,传输层协议需使用超
时限制。可能有多个虚拟机连接到节点上的协议中。虚拟机可以同时执行多个工作,每个工
作都有自己的内存空间。协议根据SESSION_ID字段值确定收到的指令要传递给
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -