SCSI命令

来源:百度文库 编辑:神马文学网 时间:2024/04/26 03:56:19
SCSI命令由启动器发出,让目标器执行某种操作。命令是以字节流的形式通过总线发送到目标器,这些由字节组成的命令称“命令描述块(Command Descriptor Blocks,CDB)”,命令描述块的格式见表10.2。命令的第一个字节是命令的操作码,它定义了命令的类型和长度。它的高3位代表命令所属的命令组,低5位代表命令本身。每个命令组都有一个命令长度。因而,对命令的第一个字节进行解码以后,目标器就知道这个命令还剩下多少字节。
命令操作码的高3位代表了命令所属组,3位共有八种不同组合,因此可以表示8个命令组,见表10.3。
命令的最后一个字节是控制字节,其最低位D0为链接位,该位为1表示启动器在当前命令正常结束后要自动连接下一条命令。这样可将几个命令连接成一个命令链,从而形成一个连接的I/0过程,这就可以阻止其他I/O过程的命令插入这个已形成命令链的I/0过程。例如,对一个逻辑数据块进行读取一修改一回写时,就需要这样做。此外,链接命令允许使用逻辑块相对寻址方式。控制字节的D1位是标志位。标志位必须和连接命令一起使用,以便在一个命令链中标出一个特定的命令。
命令的中间字节是具体命令的特定参数。
表10.4是一个10字节命令描述块的实例,这是一个10字节硬盘读命令(操作码为28H时)或写命令(操作码为2AH时)。
表10.4 10字节命令描述块实例中间的8个字节是该命令的具体参数,其中LUN用来指定接到目标器的8个实际设备之一。在命令描述块中设置LUN是为了与CSI-1兼容,后面的版本使用识别消息来寻址LuN。当使用识别消息寻址LUN时,命令描述块中的LUN将被忽略。Rel表示使用相对地址,该位必须和连接命令连用。当它为1时,命令中的逻辑块起始地址被解释为相对于前一条命令起始地址的偏移量。命令中的其他参数因涉及硬盘的具体操作,这里不再一一解释。
根据SCSI规范,有四种不同的命令实现类型(见表10.5),这决定了一个命令是否要被实现和怎样被实现。
命令在SCSI规范中占据了很大的比例。上面是从命令的格式和从命令的实现两个方面考虑的。从设备的角度考虑,每一类设备(硬盘设备、磁带设备、打印机、扫描仪、处理器设备、通信设备、光存储设备和WORM设备、cD-ROM设备、介质转换设备等)都有自己的命令集,还有对所有SCSI设备都适用的,即设备通用命令。为了使读者对SCSI命令有一个直观的了解,这里列出硬盘设备的部分命令(表10.6)和设备通用命令的一部分(表10.7)。很显然,命令是针对具体设备的,因此同一个操作码(指数值)对不同的设备可以表示不同的含义。