SCSI 总线和协议
Posted zhengmeifu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SCSI 总线和协议相关的知识,希望对你有一定的参考价值。
I/O 技术实现在计算机和存储设备之间的数据交换。实现从CPU 到存储系统的I/O通路的一个中间就是SCSI( Small Computer System Interface ).
一. I/O 通路
在计算机中,一个或多个CPU 处理在CPU缓存或主存储器(RAM:Random Access Memory)中的数据。 CPU缓存或主存储器是非常快的器件,但是断电就不能保存,价钱也比较昂贵。 所以数据还需要放在存储设备上。
通常,数据从主存储器(RAM)通过系统总线,主机I/O 总线 和 I/O 总线移动到磁盘或者磁带等存储设备。
1.1 系统总线
在计算机的核心部分,系统总线保证数据在CPU和主存储器之间进行快速的传递。 系统总线必须使用非常高的时钟频率,使得它能够足够快的给CPU 提供数据。 该总线的实现采用在主电路板上印制导线的形式。 出于物理性能的原因,高的系统速度需要短的印制导线。 因此,系统总线应该尽可能的短一些,并且只能连接CPU和主存储器。
1.2 主机I/O 总线
在现在计算机中,为了释放CPU 的应用处理负担,人们把尽可能多的任务移到诸如图像处理器这样的特别的处理器中。 由于上述物理上的限制条件,这些器件不可以连接到系统总线。 因此大多数计算机都实现了称作主机I/O总线的第二个总线。 桥接芯片提供在系统总线和主机I/O总线之间的连接。 PCI(Peripheral Component Interconnection:外围互联设备)是当前最广泛使用的实现主机I/O 总线的技术。
1.3 I/O 总线
设备驱动器负责控制外围设备以及与外围设备的通信。针对存储设备的设备驱动器部分以软件形式存在,该软件由CPU处理。由于跟存储设备通信的部分设备驱动器几乎总是以固件的形式实现,该固件由特别的处理器(ASIC:Application Specific Integration Circuit)处理。 当前这些ASIC 有的集成到主电路板(如SCSI 控制器),也有的通过附加的PCI卡连接到主板。 这些附加的卡通常被称作控制器。 存储设备通过主机总线适配器(HBA:Host Bus Adapter)或者通过在板上的控制器连接到服务器。 在控制器和外围设备之间的通信连接叫作I/O总线。
当前用户I/O 总线的最重要的技术是SCSI 和光纤通道。 SCSI 定义了一种总线,该总线能够连接16个设备(包括服务器和存储设备)。 在另一方面,光纤通道定义存储网络的不同拓扑结构,该存储网络可以连接数百万个设备(包括服务器和存储设备)。 作为替代光纤通道的其他选择,工业界正在使用TCP/IP 和以太网(IP存储)实现存储网络。 注意的是,这些新技术都是继续使用SCSI 协议在设备间通信。
二. 并行SCSI 总线
把磁盘和磁带设备连接到应用服务器或文件服务器,最常用的方法就是通过传统的 SCSI总线。尽管 SCSI主要是一个块协议,但这个术语也被用来指称运行该协议的并行线缆机制。
最初的 SCSI物理层传输介质是一种并行电缆,由 8根数据线和一些控制线构成。在每个发送时钟里传输 8 位数据,传输速率相对说来是比较高的;但是由于电气方面的问题,使得多数SCSI设备所允许的传输距离被限制在 15-25 m左右。随着时间的推移,SCSI 并行总线的性能一直在提高,并通过提供更多的数据通路 (例如采用 16 位数据线和32位数据线)和更快的时钟,得到了更大的带宽。
并行总线存在的一个问题是飘移现象。如果把一组并行的多位数据同时发出,每条数据线上的传输延迟会出现差异,导致各个位不会在精确的同一时间到达目的地。所谓飘移指的是一个时间窗口,所有的数据位在这段分布的时间内都能到达目的地。各个传输线上传输延迟的差别越大,飘移窗口也就越大。根据传输线理论,总线中每条线路的传输阻抗 (包括容抗和感抗)跟它所处的位置有关,因此,传输延迟是位线所处的物理位置的函数。对于给定长度的线缆,要想增加时钟频率,就必须减小飘移窗口,从而最小化线路间的传输延迟差。显然在高频条件下,电缆越长,飘移窗口越大。
SCSI 规范的第 1 个版本发布于 1986 年。自那时以来,它被广泛应用于服务器和高档 PC 中,其速率由最初的4 MBps发展到现在的 320 MBps,而且还在提高着。
作为一种介质,SCSI定义了一个并行总线,用于数据传输和通信控制。总线本身可以是印制导线的形式,也可以是一根电缆。外部 SCSI设备使用电缆以菊花链的形式连接到服务器上的控制器。在菊花链中,每个设备都跟其他设备串接。由于这个原因,外部 SCSI设备典型地都有两个 SCSI连接器,可以分别连接到链中的前一个设备和后一个设备。现在的一个 SCSI 总线可以连接多至 16个设备。其中包括1 个SCSI控制器和 15个存储装置。
2.1 SCSI 类型
SCSI有三个基本规范:
SCSI-1:SCSI-1是在1986年开发的原始规范,现已不再使用。它规定总线宽度为8位,时钟速度为5MHz。
SCSI-2:1994年采用,此规范包括通用指令集(CCS)——支持任何SCSI设备所必需的18个命令。在此规范中,可以选择将时钟速度提高一倍,达到10MHz (Fast),将总线宽度增加为原来的两倍,即16位,将设备数增加为15个(Wide),或者同时实现上述两种升级(Fast/Wide)。SCSI-2还增加了命令队列,允许设备存储命令,并从主机排列命令优先级。
SCSI-3:此规范于1995年正式出台,包括一系列较小范围的标准。涉及SCSI并行接口(SPI)的一组标准在SCSI-3中得到了继续发展,SPI是SCSI设备之间的通信方式。大多数SCSI-3规范都以Ultra开头,如Ultra for SPI规范、Ultra2 for SPI-2规范和Ultra3 for SPI-3规范。名称中的Fast和Wide的含义与SCSI-2中的一样。SCSI-3是当前正在使用的标准。
双倍总线速度、双倍时钟速度和SCSI-3规范的不同组合,产生了许多不同的SCSI规范。下表对几种不同规范进行了比较。很多较慢的规范已不再使用——在此列出仅作比较之用。
名称 | 规范 | 设备数量 | 总线宽度 | 总线速度 | Mbps |
异步SCSI | SCSI-1 | 8 | 8位 | 5MHz | 4Mbps |
同步SCSI | SCSI-1 | 8 | 8位 | 5MHz | 5Mbps |
Wide | SCSI-2 | 16 | 16位 | 5MHz | 10Mbps |
Fast | SCSI-2 | 8 | 8位 | 10MHz | 10Mbps |
Fast/Wide | SCSI-2 | 16 | 16位 | 10MHz | 20Mbps |
Ultra | SCSI-3SPI | 8 | 8位 | 20MHz | 20Mbps |
Ultra/Wide | SCSI-3SPI | 8 | 16位 | 20MHz | 40Mbps |
Ultra2 | SCSI-3SPI-2 | 8 | 8位 | 40MHz | 40Mbps |
Ultra2/Wide | SCSI-3SPI-2 | 16 | 16位 | 40MHz | 80Mbps |
Ultra3 | SCSI-3SPI-3 | 16 | 16位 | 40MHz | 160Mbps |
Ultra320 | SCSI-3SPI-4 | 16 | 16位 | 80MHz | 320Mbps |
除了总线速度提高之外,Ultra320 SCSI还使用分组化数据传输,从而提高其效率。Ultra2也是最后一种具有“窄”(8位)总线宽度的规范。
所有这些SCSI类型都是并行的——数据通过总线同时传输,而不是一次传输一种数据。最新的SCSI类型称为串行连接SCSI(SAS:Serial Attached SCSI),这种连接使用SCSI命令,但以串行方式传输数据。SAS使用点对点串行连接,以3.0千兆位每秒的速度传输数据,每个SAS端口可以支持多达128个设备或扩展设备。
2.2 SCSI的控制器、设备和电缆
SCSI控制器在SCSI总线上的所有其他设备和计算机之间进行协调。SCSI控制器也称为主机适配器,控制器既可以是插入可用插槽的卡,也可以内置在主板上。SCSI Bios(Basic Input output System)也在控制器上。它是一个小型ROM或闪存芯片,包含访问和控制总线上的设备所需的软件。
每个SCSI设备都必须具有唯一的标识符(ID)才能正常工作。例如,如果总线能够支持16个设备,通过硬件或软件设置指定的设备ID的范围为0-15。SCSI 控制器本身必须使用其中一个ID,通常是最高的那一个,而将其他ID留给总线上的其他15个设备使用。
内部设备通过带状电缆连接到SCSI控制器。外部SCSI设备使用一条粗的圆形电缆,以菊花链形式连接到控制器(串行连接SCSI设备使用SATA电缆)。在菊花链中,每个设备都依次连接到下一个设备。因此,外部SCSI设备通常具有两个SCSI连接器——分别连接前后两个设备。
电缆本身通常由三层构成:
(1)内层:保护性最好的层,包含实际发送的数据。
(2)介质层:包含向设备发送控制命令的线路。
(2)外层:包含传输奇偶校验信息的线路,这些信息可确保数据的正确性。
不同SCSI标准使用不同的连接器,这些连接器通常不兼容,通常使用50、68或80针。SAS使用较小的SATA兼容连接器。
一旦总线上的全部设备安装完毕,而且分配了各自的ID,则总线的每一端都必须闭合。下面介绍如何执行这一操作。
2.3 终接器
如果SCSI总线保持开放状态,沿总线发送的电信号会反射回来,从而干扰设备和SCSI控制器之间的通信。解决方法是终结总线,用电阻电路闭合每一端。如果总线同时支持内部和外部设备,则必须终结每个系列的最后一个设备。
SCSI 终结的类型主要可分为两类:被动(无源)和主动(有源)。
(1)被动(无源)终结通常用于在标准时钟速度下运行、且设备到控制器的距离小于1米的SCSI系统。
(2)主动(有源)终结用于Fast SCSI系统,或设备到SCSI控制器的距离大于1米的系统。
SCSI还使用三种不同类型的总线信令,这也会影响终结。电脉冲以信令的方式在线路上发送。
(1)单端(SE:Single-ended):控制器生成信号,并通过单条数据线将信号传送至总线上的所有设备。每个设备都会产生信号损失。因此,信号会很快开始衰减,由此SE SCSI的传输距离被限制为约3米以内。PC中普遍采用SE信令。
(2)高压差动(HVD:High-Voltage Differential):HVD常用于服务器,它以串联方式发送信号,采用一条数据高压线和一条数据低压线。SCSI总线上的每个设备都有信号收发器。控制器与设备通信时,总线沿途的设备接收信号并转发信号,直至信号到达目标设备为止。这样,控制器和设备之间的允许距离可显著增加,可达25米。
(3)低压差动(LVD:Low-Voltage Differential):LVD是HVD的同类技术,工作原理非常相似。两者之间的差异在于,LVD的收发器更小,并且内置于每个设备的SCSI适配器中。这使得LVD SCSI设备的价格更合理,并且LVD使用更少的电量就可以通信。缺点在于最大距离仅为HVD的一半——12米。
HVD和LVD通常都使用被动终结器,即使设备和控制器之间的距离远大于1米也是如此。这是因为收发器可以确保信号足够强,能从总线的一端传输到另一端。
三. SCSI 协议
在SNIA 共享存储模型中,SCSI 负责从上层接收请求并转发,或者从并行设备获取数据并转发。
例如:有一个应用程序向操作系统发出对磁盘设备的写请求。 在SCSI协议层,这个写请求被看成是特定数量的数据块以协议的形式传递到指定位置的命令。作为操作系统和存储设备之间的一个中介,SCSI 协议既不规定数据块如何组织,也不规定怎样把数据块放到磁盘上。 在SCSI把数据块发送到目的地时,目标方可能是单个物理磁盘,也可能是把数据块在多个物理盘上分条存放的RAID 控制器。 SCSI 协议的责任,就是在确认写操作已经正确完成后向操作系统报告成功,而不管在磁盘上物理存储是如何配置以及写操作是如何执行的。
3.1 SCSI 域
SCSI 设备是在一定的环境中运行的。 通常需要有多个SCSI设备才能形成这样的环境。 SCSI 设备间的运行环境也称为SCSI域。在这个域内,生成和发送SCSI命令和任务管理请求的SCSI端口称为SCSI发起方,接收和处理SCSI命令,根据请求执行任务管理的端口称为SCSI目标方。
SCSI 域的组成包括SCSI设备,设备内的SCSI 发起方和目标方以及提供数据交接的总线。 SCSI总线连接了挂在它上面的所有SCSI设备。我们可以把一个实际的SCSI应用系统抽象为一个SCSI域,域中有多个SCSI设备,而且带SCSI驱动器的计算机也可以被看成是一个SCSI设备。
尽管可以允许有多个SCSI设备接在同一条总线上,SCSI协议实际定义的是设备间一对一的数据交换,即同一时刻在SCSI总线上只允许有两个设备互相交换数据。因为,SCSI上的各个设备是以分时共享的方式使用总线的。
在一个实际的SCSI域中,必须至少有一个发起方和1个目标方,考虑到主机对数据存储的需求,配置了SCSI控制器的主机至少有1个SCSI发起方。而磁盘设备主要是提供存储和数据服务,一般都有目标发。
3.2 SCSI 协议模型
为了便于实现和理解SCSI的各个协议,SCSI 采取了分层结构。 SCSI 大致可分为三层,即SCSI应用层,SCSI 传输层和SCSI 互连层。 SCSI中的各个具体协议一般都位于其中的某一层,可以可能跨越两层。
在应用层,SCSI 体系结构把发起方(主机)和目标方(如磁盘)的通信定义为客户/服务器交换。SCSI 客户位于主机中,代表上层应用程序,文件系统和操作系统I/O请求。 SCSI 设备服务器位于目标设备中,对请求做出响应。 客户/服务器请求和响应通过某种形式的底层协议进行传输。
在传输协议层,SCSI 设备之间通过一系列的命令实现数据的传送,大致分成三个阶段:命令的执行,数据的传送和命令的确认。
SCSI 互联层完成SCSI设备对总线的连接以及发送方和目标方的选择等功能。
3.3 寻址机制
为了对连接在总线上的设备寻址,SCSI 协议引入了SCSI设备ID 和逻辑单元号LUN. 在SCSI 总线上的每个设备都必须有一个唯一的ID,其中包括服务器中的主机总线适配器也拥有设备ID. 取决域SCSI标准的版本,每条总线最多可允许有8个或者16个设备ID。
诸如RAID 磁盘子系统和磁带库这样的存储设备可能包括若干个子设备,如虚拟磁盘,磁带驱动器和介质更换器等。 因此SCSI 引入了逻辑单元号,以便于对大的设备中的子设备进行寻址。 另外一个服务器可能配置了多个SCSI控制器,从而就可能有多条SCSI总线。 因此,操作系统用一个三元描述标识一个SCSI目标:总线/目标设备/逻辑单元号
传统的SCSI 适配卡连接单个总线,相应的只具有一个总线号。 在引入存储网络之后,每个光纤通道HBA(Host Bus Adapter)或iSCSI(Internet SCSI)网卡也都连接一条总线,分配一个总线号,在他们之间依靠不同的总线号加以区分。
目标设备标识在一条总线菊花链上的单个设备,逻辑单元号则表示一个目标设备中的一个子设备。 通常,单个物理磁盘只具有一个逻辑单元号,而RAID磁盘阵列虽然也只有一个目标设备,但却有多个逻辑单元号。
在一条总线上各个设备具有不同的优先级。起初的SCSI 协议只允许有8个目标设备ID,规定ID7 具有最高权限。后来版本的SCSI 协议允许有16个不同的目标设备ID。出于兼容性的考虑,从7到0的目标设备依然具有高优先级,而从15到8的设备ID具有较低优先级。
设备(服务器和存储设备)在可以通过SCSI 总线发送数据之前必须预定总线(仲裁)。在总线的仲裁期间,具有最高优先权的目标设备总能获胜。 在总线负载重的情况下,这可能导致具有较低优先级的设备总是不被允许发送数据,因此,SCSI的仲裁过程是不平等的。
出于配置和管理的需要,操作系统使用总线号/目标设备ID/逻辑单元号三元组来标识一个SCSI目标,然而用户和应用程序所看到的只是一个逻辑标识符,如D盘。 因此在总线号/目标设备ID/逻辑单元号和逻辑盘符之间存在着一个映射,提供在物理设备和上层文件系统之间不同表示形式的转换。
3.4 交互方式
SCSI协议把发起方 (主机)和目标方 (例如磁盘)之间的交互定义为客户/服务器方式。应用客户位于主机中,代表上层应用程序、文件系统和操作系统的 I/0 请求。设备服务器位于目标设备中,它响应客户的请求。请求和响应通过某种形式的下层分布设施进行传输,该分布设施称作分布子系统,可以是并行电缆,也可以是光纤通道协议或iSCSI。
一个发起方可能会有多个请求同时发给目标方。多个请求产生应用客户的多个实例,从而在设备服务器上产生多个事务。
发起方在其发往一个或多个目标的多个请求正在被相关的设备服务器处理的时候,需要能够执行上下文交换 (Context Switching),即具有从一个任务快速切换到另一个任务的能力。例如,作为一个发起方的文件服务器可以向一个目标方发送一个写请求。‘当该文件服务器在等待这个目标方准备好缓冲区以接收数据的那段时间内,可以切换到另一个挂起的任务,例如处理已经到达的对先前的另一个请求的响应,从而提高运行效率,最大化吞吐量。如果SCSI任务只能依次串行地执行,那么等待每个写或读请求完成的时间就都被白白地浪费了。一般来说,上下文交换是由主机适配卡完成的,可以是并行 SCSI,也可以是光纤通道或iSCSI。
由于 SCSI体系结构模型是层次化的,因此它对主机I/0请求的处理可以独立于底层的分发子系统。一个应用客户主机可以处理涉及不同种类的目标设备的 I/0 操作,例如一个应用服务器可以有直接附接的 SCSI 目标方,也可以有通过千兆位速率接口连接的串行SCSI 目标方。
在SCSI发起方和目标方之间读写数据是通过SCSI命令、分发请求、分发操作和响应来完成的。SCSI命令和参数在 CDB (Command Descriptor Block,命令描述块)中指定。作为交互示例,在执行对磁盘的 SCSI写过程时,在发起方 (例如主机总线适配器)创建一个应用客户,该客户发送SCSI命令请求给目标方,令其准备缓冲区以接收数据。目标设备服务器在其缓冲区准备好之后,发送一个数据分发操作请求进行响应。接着,发送方就执行分发操作,开始发送数据块。依赖于底层的分发子系统,数据块可能按字节并行传输 (例如并行 SCSI 总线),也可能以分段成帧的形式串行传输 (例如光纤通道或iSCSI)。
从应用程序或操作系统的角度看,写操作只是一个事务。但实际上,对应一个写操作,发送方和目标方可能要进行多次的分发请求和分发操作的交互,才能把命令请求的所有数据都发送给目标方。
在一次读操作中,SCSI命令块遵循相反的数据分发请求和确认序列,然而由于是发起方发出读命令,所以命令就假定自己已经准备好了缓冲区以接收第 1 批数据块。在读写事务的每个阶段所发送的数据块数量,由发起方和目标方根据对方的缓冲区容量协商决定。例如,高性能磁盘阵列一般都能提供较大的缓冲区,可以完成大规模的数据传送,从而提高了产品性能。
3.5 SCSI总线信号
SCSI在物理信号的基础上定义了一组总线信号。这些信号可划分为数据信号和控制信号两类。它们都是二进制信号,并且只有“真”和“伪”两个稳定状态。其中有指示总线已经被占用的“BSY”信号,有清除并重新设置SCSI总线的“RST”信号等。
下面对这些信号的名称和功能逐一进行介绍。
1. BSY (Busy,忙)信号
该信号是“或态”信号,表示已经有设备占用总线。
2. SEL (Select,选择)信号
该信号是“或态”信号,由发起方用以选择目标方,或者由目标方用以重新选择发起方。
3. C/D (Control/Data,控制/数据)信号
该信号由目标方驱动,表示在数据总线上传送的是数据信号还是控制信号。该信号处于真状态时表示控制信号。
4. I/O(Input/Output,输入输出)信号
该信号由目标方驱动,控制数据在数据总线上的移动方向。当 I/0 信号为“真”时表示是对发起方的输入,数据由目标方向发起方传送;若I/0信号为“伪”,则表示数据由发起方向目标方传送。该信号也被用来区分选择和重选阶段。
5. MSG (Message,通信)信号
该信号由目标方驱动,表示总线处于信息传送的通信阶段。
6. REQ (Request,请求)信号
该信号由目标方驱动,表示有信息传输请求,请求一个 REQ/ACK 数据传送握手过程。
7. ACK (Acknowledge,应答)信号
该信号由发起方驱动,表示对REQ信号的应答。
8. ATN (Attention,提醒)信号
该信号由发起方驱动,指示一个提醒信息,表明发起方有一个消息要给目标方发送。
9. RST (Reset,重置)信号
该信号是“或态”信号,表示一个硬件重置状态,指示总线进入重新设置阶段,清除所有使用总线的 SCSI设备。
10. DB (DataBus,数据总线)信号
DB 信号有两种,分别是用于 8 位数据总线的 DB (7-0,P)和用于 16 位数据总线的DB (l5~O,P)。这些信号都用于传送信息的值,它们包括数据比特信号,加上奇偶检验比特信号。
由于在SCSI总线上挂有多个设备,一些控制信号可能同时被多个SCSI设备驱动。这些信号被称作“或态”信号。对于“或态”信号,SCSI设备不会主动将其驱动成“伪”,而是依赖总线终接器,在总线上的所有设备都没有驱动该信号时将其设置成“伪。”只要有 1个或多个设备驱动该信号,该信号就是“真”。与“或态”信号相对照的是“非或态”信号。对于“非或态”信号,SCSI设备可以将其驱动成“伪”。
3.6 SCSI 总线的使用阶段
根据对总线不同的使用,可以把SCSI总线状态划分成8个不同的阶段:空闲阶段,仲裁阶段,选择阶段,重选阶段,命令阶段,数据阶段,状态阶段和通信阶段。
其中命令阶段,数据阶段,状态阶段和通信阶段都设计信息在总线的传送,所以又称为:信息传送阶段。
除了空闲阶段外,其他阶段的总线都被SCSI设备占用。
3.6.1. 总线空闲阶段
总线空闲表明没有一个设备在使用 SCSI 总线,也表示在此状态下,SCSI 设备如果需要,可以使用总线。SCSI设备需要在总线上的 SEL信号和 BSY信号都是“伪”之后,才可以检测总线是否处于空闲状态。
作为例子,SCSI总线可能在下列情况下进入空闲状态:
1.RST信号被设置;
2.不成功的总线选择或重选;
3.目标设备解除连接;
4.目标设备命令完成。
一旦一个SCSI设备确定总线处于空闲阶段,它就可以申请总线仲裁,从而进入仲裁阶段。
3.6.2. 总线仲裁阶段
在 SCSI总线上的设备必须先获得总线连接权,然后才可以进行其他的操作。在默认条件下,看似挂在总线上的设备在逻辑上是与总线断开的,没有参与总线上的活动。SCSI设备只有在需要进行数据传输和设备状态报告时才会申请总线连接权。SCSI设备一旦得到了总线连接权,就将在发起方和目标方之间形成一个物理连接的通道,然后就可以进行数据传输。
一般情况下,总线的获取与对目标方的选择都由发起方完成。为了更加高效地使用总线,在某些情况下,例如在有较长时间的CPU处理等待或设备存取等待时,需要释放总线以供其他设备使用。在等待的相关任务完成后,再重新进行总线仲裁和连接权获取操作,以继续进行暂停的工作。因此,有时目标方也可以执行总线操作和连接权获取操作,准确地讲,是再获取操作。
SCSI总线上的设备的优先级是由它的地址即 SCSI ID 决定的。在窄 SCSI 中的 ID 范围是 0-7,对应的优先级是从 1 到 8。在宽 SCSI 中的ID范围是O~l5,其中对应 IDO~7的优先级是从9到 16递增,而对应 ID8~l5 的优先级是从 1 到 8 递增。在这里,我们用较大的数值表示较高的优先级,因此,ID7具有最高优先级。在窄 SCSI 中,ID 0具有最低优先级;在宽SCSI中,ID8具有最低优先级。
SCSI总线上的 ID数目是与 SCSI数据总线宽度一致的,因此,窄 SCSI有8个ID,宽 SCSI有 16个ID。在窄 SCSI 中的 8根数据线的编号是从0到 7,在宽 SCSI 中的 16根数据线的编号是从 0到 15。有趣的是,具有某个编号的数据线上的信号,还被用来表示具有对应号码ID 的 SCSI设备是否在执行选择或相关操作。例如当数据总线中的数据线DB (2)在某个特定的阶段被驱动成真时,就可以表示其ID为 2 的设备已经在总线上执行了选择或相关操作。
在SCSI域中,主机是存储设备的主要使用者,且对存储的响应要求较高, 因此通常主机的优先级最高,其分配的ID值也最大,在窄 SCSI 中是 ID 7,在宽 SCSI 中是IDl5。
总线仲裁就是在可能同时有多个设备请求的情况下,最终只给予其中的一个 SCSI设备总线控制权的过程。SCSI设备在检测到“总线空闲”并等待一个时延后即可以把总线置成BSY,并把与它的 SCSI ID对应的数据线信号置为“真”,开始总线仲裁申请。
在等待 1 个时延后,该SCSI设备需检测在数据总线上是否有更高优先级的 SCSI ID也为“真”。如果总线上确有更高优先级的设备在进行总线申请,则该 SCSI 设备不再置BSY和对应的数据线为“真”。放弃总线仲裁申请,直到下一次“总线空闲”;否则,该设备就获得了总线控制权,并由该设备把SEL信号置为“真”。同时,总线上的其他SCSI设备则检测到 SEL信号为“真”后,不再置BSY信号和对应的数据线为“真”,放弃总线仲裁申请。为了保证确实已经获得了总线控制权,该设备在置SEL信号为“真”后、传送其他信号前,需要有一定的时延。
在总线仲裁阶段结束时,总线上有BSY、SEL和与获得总线的 SCSI设备的 ID,其对应的数据线的信号为“真”。
3.6.3. 选择阶段
在选择阶段,得到总线使用权的SCSI设备在总线上选择目标设备,以便随后可以向该目标设各发送诸如读和写这样的命令。这个阶段主要是完成对具有特定SCSI ID的设备的选择,其相关协议的定义主要是在SCSI体系结构的互连层。需要注意的是,逻辑单元号LUN的寻址是逻辑单元通过SCSI传输层协议完成的,不在互连层。与LUN编址相关的协议在传输协议层描述。
赢得仲裁的SCSI设备在把BSY和SEL信号置成“真”,经过一小段时延后,即可进入选择阶段。作为发起方,赢得仲裁的SCSI设备不可以把1/0信号置成“真”。在此阶段,发起方需要把与自己的SCSI ID对应的数据线的信号和对应所要选择的目标设备的SCSI ID的数据线的信号置成“真”,经过一小段时延,再把BSY信号置成“伪”,然后等待目标方的响应。
例如,SCSI ID为6的主机把对应自己的ID的数据线DB(6)和对应目标设备的ID(=6)的数据线DB(0)置成“真”后,数据总线上信号值的状态将如下所示。
DS ( 0) DS (1) DS (2) DS (3 ) DS (4) DS (5) DS (6) DS (7)
1 0 0 0 0 0 1 0
此时,只有两个数据线的信号值是“真”。如果有多于两个的数据线为“真”,则目标方认为有误。目标方在SEL和对应它的ID的数据线的信号为“真”并且BSY和I/0信号为“伪”的情况下,就可以确定它自己已经被选为目标设备。此时,目标方设备应该重新把BSY信号置成“真”。发起方在检测到BSY为“真”的信号后,就把SEL信号置成“伪”。特别需要注意的是,在该阶段结束时,BSY信号是由目标方置位的。
3.6.4. 重选阶段
在 SCSI 目标设备忙于处理其内部事务 (通常是对于执行对存储数据的读或写操作)期间,它可以在等待操作 (比如把存储在设备中的数据读入缓冲区或把暂存在缓冲区的数据写入缓冲区)完成时释放总线供其他设备使用,并在操作完成后重新申请对总线的使用权。因此,重选阶段也发生在“总线仲裁阶段”之后。但与选择阶段不同,重选阶段由目标方启动,重新建立由发送方启动成功但被目标方挂断的连接。
在目标设备释放了总线之后,BSY和 SEL信号处于被置成“真”的状态。此时日标设备通过把I/0信号置成“真”使自己成为赢得对总线使用权的一方。在重选阶段,目标方也需要把与自已的 SCSI ID 对应的数据线的信号和对应发送方设备的 SCSI ID的数据线的信号置成“真”,经过一段短的时延,再把BSY信号置成“伪”,然后等待发起方的响应。
发起方在SEL、I/0和对应它的 ID 的数据线的信号为“真”并且BSY为“伪”的情况下,就可以确定它自己已经被重选。被重选的发起方可以通过查看数据总线来验证重迭的目标方的 SCSI ID。然后,发起方设各重新把BSY信号置成“真”。目标方在检测到BSY为“真”的信号后,它也执行把BSY驱动成“真”的操作,并把 SEL信号置成“伪”。
被重选的发起方在检测到 SEL信号为“伪”后,它就把BSY置成“伪”,而目标设备则继续把 BSY 设置成“真”,直到它放弃对总线的使用权为止。这样,在该阶段结束时,信号的状态与选择阶段一样,也是由目标方设置的BSY信号。
3.6.5. 信号传送阶段
命令阶段、数据阶段、状态阶段和通信阶段被组合在一起作为信息传送阶段,因为它们都被用来通过数据总线传送数据或控制信息。SCSI 使用 C/D、I/0 和 MSG信号区分不同的信息传送阶段以及对应的信息传输方向。目标方驱动这3个信号,控制从一个阶段到另一个阶段的转变。发起方可以通过把ATN信号置成“真”请求一个“通信出”阶段,而目标方可以通过释放MSG、C/D、I/0 和 BSY信号引入总线空闲阶段。信息传送阶段使用一个或多个REQ/ACK握手过程控制信息传送。每个REQ/ACK握手过程允许传送 1个或多个字节的信息。因为信息传送阶段一定是在选择阶段或重选阶段之后,所以不改变BSY和 SEL信号。事实上,在该阶段,BSY持续为“真”,SEL信号持续为“伪”。
表2-2 示出了 MSG、C/D和I/0信号值与阶段名及信息传输方向之间的关系。其中的“出”和“入”是相对子发送方设备而言的,且数据传输方向由I/0信号确定。
表 2-2 MSG、C/D和 1/0信号值与阶段名及信息传输方向之间的关系
MSG | CID | 1/0 | 阶段 | 具体阶段 | 传输方向 | |||
1 | 0 | 0 | * (未用) | |||||
1 | 0 | 1 | * (末用) | |||||
1 | 1 | 0 | 通信 | 通信出 | 从发送方到目标方 | |||
1 | 1 | 1 | 通信 | 通信入 | 从目标方到发送方 | |||
0 | 0 | 0 | 数据 | 数据出 | 从发送方到目标方 | |||
0 | 0 | 1 | 数据 | 数据入 | 从目标方到发送方 | |||
0 | 1 | 0 | 命令 | 从发送方到目标方 | ||||
0 | 1 | 1 | 状态 | 从目标方到发送方 |
注释:0=伪,1=真,*=保留未来定义
命令阶段允许目标方请求发起方传送命令信息。在命令阶段的 REQ/ACK 握手过程中,目标方把C/D信号置成“真”,把I/0信号和MSG信号置成“伪”。
数据阶段包括“数据入”阶段和“数据出”阶段。
(1)“数据入”阶段允许目标方请求把数据从目标方传送给发起方。在“数据入”阶段的 REQ/ACK 握手过程中,目标方把I/0信号置成“真”,把C/D信号和MSG信号置成“伪”。
(2)“数据出”阶段允许目标方请求把数据从发起方传送到目标方。在“数据出”阶段的 REQ/ACK 握手过程中,目标方把C/D信号、I/0信号和 MSG信号都置成“真”。
状态阶段允许目标方请求把状态信息从目标方传送给发起方。在状态阶段的REQ/ACK握手过程中,目标方把C/D信号和I/0信号置成“真”,把MSG信号置成“伪”。
通信阶段可以是“通信入”阶段或“通信出”阶段。无论是在“通信入”阶段,还是在“通信出”阶段,都可以传送多条消息。传送的第一个字节可以是单字节消息,也可以是多字节消息的首字节。在 1 个通信阶段可以传送多个多字节消息。
“通信入”SCSI/iSCSI及SASNASSAN的基本介绍