📄 rfc3018.txt
字号:
机内部组织、命令系统和API可以是任意的。协议定义的仅仅是虚拟机可以通过网络交换
的基本格式。
协议没有对工作所使用的内存进行控制,内存孔应该由虚拟机完成。如果一个节点上运
行了多个虚拟机,它们既可以共享内存空间也可以用互相隔离的内存空间。
UMSP使用可靠的网络传输层协议传输数据,本文定义了TCP的使用。对于不需要确
认数据的传输可以使用UDP。因此连接的建立必须使用TCP,本文假定使用多路TCP的多
重连接技术,传输连接控制不在本文的讨论范围之内。
UMSP指令不含收端和发端的网络地址,协议要求单地址的UMSP必须与一个传输层
地址对应。因此,必须让128位内存地址唯一确定一个传输层的节点地址。除了TCP之外,
也可使用其它的传输协议或者非网络通信方式,但必须满足以下要求:
? 可靠的传输,传输层必须告知交付与否;
? 允许改变传输段的先后顺序;
? 不允许重复发送同一个段;
? 在节点突然发生重载时必须保证能够确认重载前分配的与会话连接相关的段;
? 允许使用非连接方式。
虚拟机是独立的程序,只有执行128位地址指令涉及到其它节点时才需要适用本协议。
虚拟机可以执行多项用户任务,每个任务可以包含多个控制线程。虚拟机必须能够把128
位地址的程序指令解释成几条UMSP协议指令。交换数据的节点之间打开会话连接,每个
连接只与一个工作相关,两个节点之间可能同时打开多个用于不同工作的会话连接。此外,
协议也提供了无连接的数据交换。
? UMSP节点之间的交换可以包含以下类型的指令:
? 直接内存访问;
? 请求分配/释放内存;
? 比较指令;
? 子程序调用与无条件跳转指令;
? 同步指令;
? 对象操作指令——访问对象内存或者执行对象过程。
UMSP不跟踪用户控制线程,虚拟机必须自行确定指令的执行次序。UMSP指令的长度
不依赖于传输层的分段长度,分段是为了传输长指令。短指令封装在一个分段中传输,可能
还要压缩标题。分段最小6个字节,要实现所有的功能则需要54个字节。
3 指令格式
USMP指令包括基本头、扩展头和操作数,所有各部分的长度都是可变的。
+----------------+----------------------+------------------------+
| 首部 | 扩展首部 | 操作数 |
+----------------+----------------------+------------------------+
首部包括操作码和解释命令所需要的信息。扩展首部是可选的,包括基本首部没有定义
的附加信息。操作数包括指令数据。不需要了解不同操作码的定义,通过指令格式可以计算
一般的指令长度此外。为了保证在不同网络速度下协议能够有效地工作,指令首部提供了简
短和扩充两种格式。此外还提供了一种首部压缩的简单算法。所有的指令和扩展首部的标识
符以大写字符给出,指令标识符的第一个字符必须是字母,扩展首部的标识符以下划线开始。
3.1 指令首部
首部格式如下:
字节:
+0 +1
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0: | OPCODE |ASK| PCK |CHN|EXT| OPR_LENGTH|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
2: | OPR_LENGTH_EXT |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
4: | CHAIN_NUMBER |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
6: | INSTR_NUMBER |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
8: | |
+ SESSION_ID +
| |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
12:| |
+ REQ_ID +
| |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
1) 操作码(OPCODE):占用一个字节,这个字段的值取决于指令。操作码的值分为
以下几段:
1 - 112 管理指令
113 - 127 保留
128 - 223 虚拟机之间的交换指令
0, 224, 255 保留
2) 应答请求(ASK):1位,表示是否必须响应,规定了首部中是否要包含REQ_ID
字段。如果ASK=1,则指令中包含REQ_ID字段,否则不出现该字段。
3) 压缩(PCK):2位,首部压缩属性。该标志用于压缩在一次TCP连接中传输的指
令首部或在UDP分组中发送的多条指令。使用该标志是基于这样的假定,即前后两条指令
属于同一次会话连接,或者(更可能)属于一个链。该标志的取值及含义如下:
%b00 – 该指令属于待定的会话,该指令不含CHAIN_NUMBER、INSTR_NUMBER和
SESSION_ID字段。
%b01 – 给定指令与前一指令属于同一次会话连接,指令首部没有SESSION_ID字段。
%b10 – 给定指令与前一指令属于同一连接、同一链,该指令首部没有
CHAIN_NUMBER、INSTR_NUMBER和SESSION_ID字段,前一指令的INSTR_NUMBER
加上1即得到该指令的INSTR_NUMBER值。
%b11 – 给定与前一指令可能不属于同一会话,必出现SESSION_ID字段,字段
CHAIN_NUMBER与INSTR_NUMBER是否出现依赖于CHN标志。
3) 链(CHN):链标志占用1位。在一次会话连接中传输的或者从属于同一工作的指
令可能组成链,关于链详细地讨论参见第7章。如果SEQ=1,则该指令与一条链相关,并
包含CHAIN_NUMBER和INSTR_NUMBER (如果PCK不是%b10)字段。如果CHN = 0,则
该指令没有相关的链,也没有CHAIN_NUMBER和INSTR_NUMBER字段。
4) 扩展(EXT):1位,表示指令中是否出现扩展首部。如果EXT=1则表示存在一个
或多个扩展首部,否则没有。
5) 操作数长(OPR_LENGTH):3位,操作数字段的字(32位)数。如果值为0就表
示没有操作数,如果值为%b111则表示采用扩展首部格式。在扩展首部格式中,操作数的长
度由OPR_LENGTH_EXT决定而不是OPR_LENGTH。
6)扩展操作数长(OPR_LENGTH_EXT):2字节,操作数字段的字(32位)数。只有
当OPR_LENGTH =%b111时才出现字段OPR_LENGTH_EXT,否则该字段不会出现。如果
OPR_LENGTH_EXT = 0则表示没有操作数。使用OPR_LENGTH_EXT字段有几个原因:
操作数的长度可能超过24个字节(6个字);采用4字节对齐格式比2字节的压缩首部效率
更高。
7) 链数(CHAIN_NUMBER):2字节,链的个数。该字段保存给定指令相关的链个
数,值%x0000和%xFFFF保留不用。
8) 指令号(INSTR_NUMBER)2字节,指令在链中的序号,从0开始计数,%xFFFF
保留不用。
9) 会话号(SESSION_ID):4字节,它是指令受方分配的会话连接标识符。在会话连
接中双方在连接中都设定自己的标识符并通知对方。如果值为0则表示指令不属于任何确定
的会话,值%xFFFFFFFF保留不用。
10)请求号(REQ_ID):4字节,请求标识符,用于建立请求及其响应的对应关系。
另外,描述指令格式也要用到标识符OPR_LENGTH,如果OPR_LENGTH = %b111则
需要使用OPR_LENGTH_EXT字段。如果指令操作数的长度不超过24字节,即可以使用2
字节的短格式(OPR_LENGTH < > %b111)与首部一起传送,也可以使用4字节的扩展格
式(OPR_LENGTH = %b111),两者是等价的。
3.2 扩展首部
如果指令首部的EXT标志设为1,则指令包含一个或多个(最多30个)扩展首部,扩
展首部用于:传送基本首部没有包含的服务信息;如果一条指令中的数据超过262240字节,
则用于传送数据长度。一般格式如下:
字节:
+0 +1
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0: |HXT| HEAD_LENGTH | HEAD_LENGTH_EXT |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
2: | continued HEAD_LENGTH_EXT |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
4: |HSL|HOB|HRZ| HEAD_CODE | HEAD_CODE_EXT |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
6: | RESERVED |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
8: | |
/ DATA /
/ /
| |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
1) HXT:1位,规定数据长度字段的长度。如过HXT = 0,则扩展首部的长度
由字段HEAD_LENGTH确定,此时没有HEAD_LENGTH_EXT字段。如果
HXT = 1,则首部长度由字段HEAD_LENGTH和HEAD_LENGTH_EXT一
起决定。
2) HEAD_LENGTH:7位,数据字段的字(16位)数。如果HXT = 0,则这7
位就是一个独立的字段,否则是整个长度字段的高7位。
3) HEAD_LENGTH_EXT:3字节,数据字段的字(16位)数。如果HXT = 0,
则没有该字段,否则作为长度字段的低位。
4) HSL:1位,最后一个首部标志,指令中的最后一个扩展首部此位设1,其他
都是0。
5) HOB:1位,强制处理标志。如果受方节点不知道扩展首部的目的或者由于
某种原因无法处理,则该位定义了处理指令的顺序。如果HOB = 1则不执行
指令,否则没有任何影响。协议必须处理所有的扩展首部,无论是否出错。
6) HRZ:1位,保留以备日后扩展之用。根据协议,受方不得处理该位,发方
须将其设为0。
7) HEAD_CODE:5位。如果HXT = 0,则该字段保存扩展首部编码,否则加
入HEAD_CODE_EXT字段。它是首部编码的高位。
8) HEAD_CODE_EXT:1字节,如果HXT = 0,则该字段不出现,否则作为首
部编码的低位出现。
9) RESERVED:2字节,如果HXT = 0,则该字段不出现,否则保留以备后用。
按照协议,在现在的实现中受方不得处理该字段,发方须将其设为0。
10) DATA:扩展首部的数据字段。= 0,则该字段的长度为0——254字节,否则
为0——4*10^9字节。该字段的格式取决于首部编码的值。
对于受方而言,必须按照扩展首部在指令中出现的顺序进行处理,如果一条指令包含的
扩展首部超过30个则认为是错误的。在收到这样的指令后必须断开传送该指令的会话。标
识符HEAD_LENGTH 和HEAD_CODE更多地用于扩展首部格式的描述,如果HEX = 0,
则使用字段HEAD_LENGTH + HEAD_LENGTH_EXT和HEAD_CODE +
HEAD_CODE_EXT。编码为0-30的3首部既可用短格式(HEX=0)又可用扩充格式(HEX=1)
传送。
3.3 指令操作数
操作数字段包括指令数据,操作数字段长度由OPR_LENGTH或者
OPR_LENGTH_EXT乘以4得到。如果需要可以在该字段的尾部填充1-3个0字节。操作数
的最大长度是262140字节。如果需要使用更长的数据,则应用扩展首部。操作数的格式由
指令决定。
3.4 地址格式
以下地址格式数据用于定义直接连接到全局性Ipv4网络上的节点:
N 4-0-0 (4)
N 4-0-1 (4-1)
N 4-0-2 (4-2)
相应的128位地址格式为:
字节:
+0 +1 +2 +3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0: |0 1 0 0|0 0|0 0| Free |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4: | Free |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8: | Free | IP address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12:| IP address | Local memory address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0: |0 1 0 0|0 0|0 1| Free |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4: | Free |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8: | Free | IP address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12:| IP address | Local memory address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0: |0 1 0 0|0 0|1 0| Free |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4: | Free |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8: | IP address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12:| Local memory address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1) Free:本协议未使用该字段。
2) IP 地址:设定全局Ipv4网络上的节点地址。
3) 本地内存地址(Local memory address):参见第2.1节。
IP地址唯一确定了给定类型的节点,这些节点之间的交互使用TCP协议。如果发送无
需应答的指令也可使用UDP。IANA分配给TCP和UDP的端口是2110,监听方(受方)必
须打开该端口。TCP节点初始化打开的连接后(或者UDP节点)可以使用任何端口传送分
组。本文假定可以利用多路技术打开多个TCP连接。
4 对指令的响应
本协议把指令分为两类:在UMSP层(操作码为1-112)上传输的管理指令和虚拟机之
间交换的指令(操作码为128-223)。处理这两类指令的区别在于:前一类指令的请求标识
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -