×
嵌入式 > 嵌入式开发 > 详情

SCSI总线和协议

发布时间:2022-07-12 发布时间:
|
三.SCSI协议

在SNIA共享存储模型中,SCSI负责从上层接收请求并转发,或者从并行设备获取数据并转发。

例如:有一个应用程序向操作系统发出对磁盘设备的写请求。在SCSI协议层,这个写请求被看成是特定数量的数据块以协议的形式传递到指定位置的命令。作为操作系统和存储设备之间的一个中介,SCSI协议既不规定数据块如何组织,也不规定怎样把数据块放到磁盘上。在SCSI把数据块发送到目的地时,目标方可能是单个物理磁盘,也可能是把数据块在多个物理盘上分条存放的RAID控制器。SCSI协议的责任,就是在确认写操作已经正确完成后向操作系统报告成功,而不管在磁盘上物理存储是如何配置以及写操作是如何执行的。

3.1SCSI

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.2SCSI协议模型

为了便于实现和理解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。

一个发起方可能会有多个请求同时发给目标方。多个请求产生应用客户的多个实例,从而在设备服务器上产生多个事务。

发起方在其发往一个或多个目标的多个请求正在被相关的设备服务器处理的时候,需要能够执行上下文交换(ContextSwitching),即具有从一个任务快速切换到另一个任务的能力。例如,作为一个发起方的文件服务器可以向一个目标方发送一个写请求。‘当该文件服务器在等待这个目标方准备好缓冲区以接收数据的那段时间内,可以切换到另一个挂起的任务,例如处理已经到达的对先前的另一个请求的响应,从而提高运行效率,最大化吞吐量。如果SCSI任务只能依次串行地执行,那么等待每个写或读请求完成的时间就都被白白地浪费了。一般来说,上下文交换是由主机适配卡完成的,可以是并行SCSI,也可以是光纤通道或iSCSI。

由于SCSI体系结构模型是层次化的,因此它对主机I/0请求的处理可以独立于底层的分发子系统。一个应用客户主机可以处理涉及不同种类的目标设备的I/0操作,例如一个应用服务器可以有直接附接的SCSI目标方,也可以有通过千兆位速率接口连接的串行SCSI目标方。

在SCSI发起方和目标方之间读写数据是通过SCSI命令、分发请求、分发操作和响应来完成的。SCSI命令和参数在CDB(CommandDescriptorBlock,命令描述块)中指定。作为交互示例,在执行对磁盘的SCSI写过程时,在发起方(例如主机总线适配器)创建一个应用客户,该客户发送SCSI命令请求给目标方,令其准备缓冲区以接收数据。目标设备服务器在其缓冲区准备好之后,发送一个数据分发操作请求进行响应。接着,发送方就执行分发操作,开始发送数据块。依赖于底层的分发子系统,数据块可能按字节并行传输(例如并行SCSI总线),也可能以分段成帧的形式串行传输(例如光纤通道或iSCSI)。

从应用程序或操作系统的角度看,写操作只是一个事务。但实际上,对应一个写操作,发送方和目标方可能要进行多次的分发请求和分发操作的交互,才能把命令请求的所有数据都发送给目标方。

在一次读操作中,SCSI命令块遵循相反的数据分发请求和确认序列,然而由于是发起方发出读命令,所以命令就假定自己已经准备好了缓冲区以接收第1批数据块。在读写事务的每个阶段所发送的数据块数量,由发起方和目标方根据对方的缓冲区容量协商决定。例如,高性能磁盘阵列一般都能提供较大的缓冲区,可以完成大规模的数据传送,从而提高了产品性能。

3.5SCSI总线信号

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.6SCSI总线的使用阶段

根据对总线不同的使用,可以把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,对应的优先级是从18。在宽SCSI中的ID范围是O~l5,其中对应IDO~7的优先级是从9到16递增,而对应ID8~l5的优先级是从18递增。在这里,我们用较大的数值表示较高的优先级,因此,ID7具有最高优先级。在窄SCSI中,ID 0具有最低优先级;在宽SCSI中,ID8具有最低优先级。

SCSI总线上的ID数目是与SCSI数据总线宽度一致的,因此,窄SCSI有8个ID,宽SCSI有16个ID。在窄SCSI中的8根数据线的编号是从0到7,在宽SCSI中的16根数据线的编号是从0到15。有趣的是,具有某个编号的数据线上的信号,还被用来表示具有对应号码IDSCSI设备是否在执行选择或相关操作。例如当数据总线中的数据线DB(2)在某个特定的阶段被驱动成真时,就可以表示其ID为2的设备已经在总线上执行了选择或相关操作。

在SCSI域中,主机是存储设备的主要使用者,且对存储的响应要求较高,因此通常主机的优先级最高,其分配的ID值也最大,在窄SCSI中是ID7,在宽SCSI中是IDl5。

总线仲裁就是在可能同时有多个设备请求的情况下,最终只给予其中的一个SCSI设备总线控制权的过程。SCSI设备在检测到“总线空闲”并等待一个时延后即可以把总线置成BSY,并把与它的SCSIID对应的数据线信号置为“真”,开始总线仲裁申请。

在等待1个时延后,该SCSI设备需检测在数据总线上是否有更高优先级的SCSIID也为“真”。如果总线上确有更高优先级的设备在进行总线申请,则该SCSI设备不再置BSY和对应的数据线为“真”。放弃总线仲裁申请,直到下一次“总线空闲”;否则,该设备就获得了总线控制权,并由该设备把SEL信号置为“真”。同时,总线上的其他SCSI设备则检测到SEL信号为“真”后,不再置BSY信号和对应的数据线为“真”,放弃总线仲裁申请。为了保证确实已经获得了总线控制权,该设备在置SEL信号为“真”后、传送其他信号前,需要有一定的时延。

在总线仲裁阶段结束时,总线上有BSY、SEL和与获得总线的SCSI设备的ID,其对应的数据线的信号为“真”。

3.6.3.选择阶段

在选择阶段,得到总线使用权的SCSI设备在总线上选择目标设备,以便随后可以向该目标设各发送诸如读和写这样的命令。这个阶段主要是完成对具有特定SCSIID的设备的选择,其相关协议的定义主要是在SCSI体系结构的互连层。需要注意的是,逻辑单元号LUN的寻址是逻辑单元通过SCSI传输层协议完成的,不在互连层。与LUN编址相关的协议在传输协议层描述。

赢得仲裁的SCSI设备在把BSY和SEL信号置成“真”,经过一小段时延后,即可进入选择阶段。作为发起方,赢得仲裁的SCSI设备不可以把1/0信号置成“真”。在此阶段,发起方需要把与自己的SCSIID对应的数据线的信号和对应所要选择的目标设备的SCSIID的数据线的信号置成“真”,经过一小段时延,再把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)

10000010

此时,只有两个数据线的信号值是“真”。如果有多于两个的数据线为“真”,则目标方认为有误。目标方在SEL和对应它的ID的数据线的信号为“真”并且BSY和I/0信号为“伪”的情况下,就可以确定它自己已经被选为目标设备。此时,目标方设备应该重新把BSY信号置成“真”。发起方在检测到BSY为“真”的信号后,就把SEL信号置成“伪”。特别需要注意的是,在该阶段结束时,BSY信号是由目标方置位的。

3.6.4.重选阶段

SCSI目标设备忙于处理其内部事务(通常是对于执行对存储数据的读或写操作)期间,它可以在等待操作(比如把存储在设备中的数据读入缓冲区或把暂存在缓冲区的数据写入缓冲区)完成时释放总线供其他设备使用,并在操作完成后重新申请对总线的使用权。因此,重选阶段也发生在“总线仲裁阶段”之后。但与选择阶段不同,重选阶段由目标方启动,重新建立由发送方启动成功但被目标方挂断的连接。

在目标设备释放了总线之后,BSY和SEL信号处于被置成“真”的状态。此时日标设备通过把I/0信号置成“真”使自己成为赢得对总线使用权的一方。在重选阶段,目标方也需要把与自已的SCSIID对应的数据线的信号和对应发送方设备的SCSIID的数据线的信号置成“真”,经过一段短的时延,再把BSY信号置成“伪”,然后等待发起方的响应。

发起方在SEL、I/0和对应它的ID的数据线的信号为“真”并且BSY为“伪”的情况下,就可以确定它自己已经被重选。被重选的发起方可以通过查看数据总线来验证重迭的目标方的SCSIID。然后,发起方设各重新把BSY信号置成“真”。目标方在检测到BSY为“真”的信号后,它也执行把BSY驱动成“真”的操作,并把SEL信号置成“伪”。

被重选的发起方在检测到SEL信号为“伪”后,它就把BSY置成“伪”,而目标设备则继续把BSY设置成“真”,直到它放弃对总线的使用权为止。这样,在该阶段结束时,信号的状态与选择阶段一样,也是由目标方设置的BSY信号。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Recogni:将高端AI芯片推向自动驾驶边缘