新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > SCSI总线和协议

SCSI总线和协议

作者: 时间:2016-12-15 来源:网络 收藏

本文引用地址:https://www.eepw.com.cn/article/201612/330386.htm

3.6.5.信号传送阶段

命令阶段、数据阶段、状态阶段和通信阶段被组合在一起作为信息传送阶段,因为它们都被用来通过数据总线传送数据或控制信息。SCSI使用C/D、I/0MSG信号区分不同的信息传送阶段以及对应的信息传输方向。目标方驱动这3个信号,控制从一个阶段到另一个阶段的转变。发起方可以通过把ATN信号置成“真”请求一个“通信出”阶段,而目标方可以通过释放MSG、C/D、I/0BSY信号引入总线空闲阶段。信息传送阶段使用一个或多个REQ/ACK握手过程控制信息传送。每个REQ/ACK握手过程允许传送1个或多个字节的信息。因为信息传送阶段一定是在选择阶段或重选阶段之后,所以不改变BSY和SEL信号。事实上,在该阶段,BSY持续为“真”,SEL信号持续为“伪”。

表2-2示出了MSG、C/D和I/0信号值与阶段名及信息传输方向之间的关系。其中的“出”和“入”是相对子发送方设备而言的,且数据传输方向由I/0信号确定。

2-2MSG、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个通信阶段可以传送多个多字节消息。

“通信入”阶段允许目标方请求把消息从目标方发送给发起方。在“通信入”阶段的REQ/ACK握手过程中,目标方把C/D信号、I/0信号和MSG信号都置成“真”。

“通信出”阶段允许目标方请求把消息从发起方传送到目标方。目标方在响应发起方建立的提醒条件时调用“通信出”阶段。在“通信出”阶段的REQ/ACK握手过程中,目标方把C/D信号和MSG信号置成“真”,把I/0信号置成“伪”。

3.7异步传输和同步传输

与传统网络的数据包传送方式不同,SCSI基于REQ/ACK信号控制数据传输的过程。根据REQ和ACK信号控制与数据总线置位时间的差别,信息传输又可分为异步传输和同步传输两个列别。而且,无论传输的方向如何,信息的传输都是由REQ信号开始,并且REQ信号都是由目标方控制和发送的。

1.异步信息传输

异步传输方式可用于数据阶段的数据传输,也可用于命令、状态和通信阶段的信息传输。首先,信息传输的方向是由I/O信号决定的。如果I/O信号为“真”,那么信息是由目标方向发起方传输。在此情况下,为了传送信息,目标方先把数据线DB(7/15-0,P)信号置成对应想要传送的二进制数位序列的值,然后把REQ信号置成“真”。发起方在检测到REQ为“真”时,读取数据总线的值,然后把ACK信号置成“真”。当目标方检测到ACK为“真”时,它就可以改变或取消放置在数据总线上的值,并把REQ置成“伪”。发起方在检测到REQ置成“伪”时把ACK也置成“伪”。当目标方检测到ACK为“伪”时,总线上就完成了一次数据传输,并可进行下一次数据传输。

在异步传输方式中,每个REQ/ACK握手过程传送1个(对于窄SCSI)或2个字节(对于宽SCSI)的信息。特别需要注意的是,在此方式中,目标方在置REQ信号后,必须持续地把数据线DB(7/l5~O,P)置成对应所要传送的二进制数位序列的值,直到它检测到ACK为真为止。

如果I/O信号为“伪”,那么信息是由发起方向目标方传输。在此情况下,目标方通过把REQ置成“真”来请求信息。发起方驱动DB(7/l5~O,P)到它需要发送的二进制数位序列的值,然后把ACK置成“真”。此后,继续把DB(7/l5~O,P)信号置成这个二进制数位序列的值,直到REQ变成“伪”为止。目标方则是在检测到ACK变成“真”时,读DB(7/l5~O,P)的值,然后把REQ置成“伪”。发起方在检测到REQ变成“伪”时,它可以改变或取消放置在数据总线上的值,并把ACK置成“伪”。

此后,目标方可以通过把REQ置成“真”,继续请求信息。

2.同步数据传输

同步数据传输只在数据阶段使用,并且是在目标方和发起方之间建立同步数据传输协定之后使用。

与异步传输中的规则相同,当I/0信号为“真”时,数据是由目标方向发起方传输。目标方先把数据放置到数据总线上,即置DB(7/l5~O,P)对应的线路,然后把REQ置成“真”。在同步数据传输中,目标方在把REQ置成“真”后,需要把放置在DB(7/l5~O,P)上的二进制数位序列的值保持一个指定长度的时间,但不必维持到对ACK信号变“真”的接收。这是与异步传输不同的一个地方。在指定长度的时间期满后,目标方就可以把REQ置成“伪”,并且可以改变或取消放置在数据总线上的值,然后准备发送下一个数据。发起方在检测到REQ变“真”之后一个指定长度的时间内读DB(7/l5~O,P)上的值,然后把ACK置成“真”作为对目标方的响应。

与异步传输一样,在同步数据传输中,发起方也在接收到一个REQ并读取了数据总线上的值之后就发送一个ACK信号。但与异步传输不同的是,目标方在接收到对一个数据的ACK之前可以发送多个REQ信号。SCSI为同步数据传输的REQ/ACK握手过程定义了一个称作REQ/ACK饱和值的参数,它表示在接收到ACK信号前可以发送的最大REQ信号数。如果发送的REQ数日多于接收到的ACK数目,并达到了定义的REQ/ACK饱和值,那么目标方暂停发送REQ信号和数据,直到接收到下一个ACK为止。这在原理上与传统网络中的流控制类似。

I/O信号为“伪”时,数据是由发起方向目标方传输。发起方每次接收到一个REQ信号就发送一次数据。目标方先把REQ置成“真”。发起方检测到REQ变“真”后把要发送的数据放置到数据总线上,即置DB(7/l5~O,P)对应的线路,然后把ACK置成“真”。接着发送方需要在一个指定长度的时间内保持在总线上放置的数据不变,并继续把ACK置成“真”。在指定的时间期满后,发起方可以把ACK置成“伪”,并且可以改变或取消放置在数据总线上的值。目标方在检测到ACK信号变“真”后,在指定的ACK保持为“真”的时间内读取数据总线上的数据,并把REQ置成“伪”。

此后,目标方可以通过把REQ再置成“真”继续请求信息。

3.8SCSI命令描述块

在互连层完成SCSI设备对总线的连接,以及发送方和目标方的选择的基础上,传输层协议执行实际的数据传输。传输层提供了两类服务,一是命令的执行和确认;二是数据的传送。命令的执行是在总线进入命令阶段后,发起方通过命令描述块(command description block,CDB)向目标方发送具体的命令。命令的确认是在总线进入通信(Message)阶段后,发起方接收由目标方发送的命令执行确认信息。数据的传送则是在数据阶段(数据出或数据入)进行的。传输协议的运行过程包括发送命令、传输数据和对命令执行的确认。SCSI基础命令规范SPC(SCSIPrimaryCommands,SCSI基础命令)定义了CDB的标准。

除了基本命令外,SPC还定义了所有类型的SCSI目标方设各都可以使用的管理参数,如诊断参数和日志参数等。

发起方对存储设备的实际操作是通过向目标方发送一个命令描述块来完成的。在一些情况下,在一个命令描述块之后可能还有一些参数要传给目标方,按照具体的协定,这些更多的参数是在命令描述块后的“数据出”阶段发送的。命令描述块有定长和不定长两种格式,而定长格式的命令描述块又有6、10、12或16字节不同的长度规定。

命令描述块由编号从0~56个字节组成。下面介绍其中各个段的内容。

1.操作码

操作码是所有命令描述块都有的,它总是被放在命令描述块的开头一个字节。正如其名字所言,操作码定义CDB的具体操作。8比特在理论上共有256个可能的操作码。实际上其中有一些是保留码,日前尚未定义。操作码的8个二进制位又分为两部分:5-7位是组代码,指示该命令具体属于哪个命令组,它决定CDB的长度,如“000”为组“0”,表示6个字节的CDB命令组,0-4位则是具体的命令代码。

2.混杂CDB信息

该参数表示与具体的CDB相关的信息,其中一个例子是表示逻辑设备号,寻址在SCSI目标设备中的一个逻辑单元。对应一个SCSIID的设备可以有多个逻辑单元,所以逻辑单元扩展了SCSI总线可访问的设备数目,使得目标方设各上可以有多个可被访问的设备而只占用一个有效的SCSIID。对一个逻辑单元的实际访问是通过该逻辑单元的一个特定的编号,即逻辑单元号实现的。

3.逻辑块地址

该地址是逻辑单元(比如磁盘)中的起始操作块的位置。在6字节的CDB中,有21位的逻辑块地址。SCSI把逻辑单元、卷或分区抽象成块的数组,每一块都有一个逻辑地址,编号从0开始。对SCSI存储设备的每一次读/写操作都是针对一组连续的逻辑块进行的,因而需要指出起始块的逻辑地址。

4.传送长度

该长度表示命令所请求的传送量,通常是块数。在有些类别的CDB中也可能是字节数。0表示不需要传送数据。

5.参数表长度

有些命令还需要更多的参数,这些参数由客户提供,定义在“数据出”缓冲区中。参数表长度就表示需要传送到存储设备的这类参数的长度,0表示不需要传递参数。

6.分配长度

分配长度表示应用客户为“数据入”缓冲区分配的最大长度,根据具体的CDB类别,可能是字节数,也可能是块数。应用客户通常使用该“数据入”缓冲区接收特殊信息,如日志数据、诊断数据等。如果传送的信息量超过了分配长度表示的最大值,则相关设备不应再传,并使用状态阶段返回特定的状态信息。

7.控制码

它是所有CDB格式的最后一个字节。在其中有一些特殊的域,如已经定义的一个NACA位。在一些情况下,一个命令的执行会以“检查条件(CheckCondition)”状态中止,它表明在命令执行过程中出现了错误或异常。有些命令执行的错误或异常不会影响其他命令的执行,也不需要作善后的恢复处理,而另一些命令执行的错误或异常则可能导致命令组中的其他命令被异常中止,需要专门的命令对其做善后处理,并要求存储设各在完成善后处理工作之前不再处理该用户的其他命令。为了区分这两种不同的情况,也为了让应用客户能够事先声明哪些命令执行的错误或异常需要善后处理,SCSI允许应用客户在CDB的控制码中设置NACA位,请求存储设备在命令执行以“检查条件”状态中止时建立“自动跟随”条件(Condition),从而允许应用客户在随后的善后处理命令中把新(New)任务的属性设置成自动跟随(AutoContingentAllegiance,ACA)。

3.9SCSI的读操作和写操作过程

1. SCSI的读操作过程

如果计算机要从存储设备上读取文件或数据,那么无论数据的大小如何,都至少要经历一个SCSI的读操作过程。当然,操作系统需首先将用户的读取操作通过SCSII/0的应用程序编程接口(ApplicationProgrammingInterface,API)转化为SCSI的读操作,并在操作完成后通过相应的API返回响应的值。

在SCSI域内,这个操作在传输层被简单地描述成5个主要过程:

(1)发起方通过CDB发送SCSI的读命令。

(2)目标方接收到该命令,通过设备管理器在指定的逻辑单元中执行该命令请求的操作。

(3)目标方以字节为单位向发起方传送数据。

(4)在数据传输完毕后,目标方向发起方发送命令完成的报告。

(5)发起方接收到命令完成的响应。

当然,这些过程是建立在SCSI互连层的基础上的。在第一个过程之前,SCSI总线由空闲阶段进入总线仲裁和选择阶段,完成发起方对总线使用权的获得以及对目标方的选择和寻址。

在第一个过程中,目标方发送REQ信号,请求信息传输,控制总线进入信息传送的命令阶段。目标方通过发送方传送的CDB获取“读”命令。在其后的第2个和第3个过程中,目标方从它控制的外围设备中读取数据并发送到发起方。如目标方准备数据需要较长的时间,则可能有多个总线释放、进入空闲和重选阶段的轮回。目标方在每次完成数据传送后,都控制总线进入状态阶段并返回一个状态信息。为进一步表示读命令的全部完成,在第四个过程中,总线进入信息传送的通信阶段,目标方发送“命令完成”信息,并可释放SCSI总线的BSY信号。在第五个过程中,发起方接收到日标方命令完成的响应,总线可恢复到空闲阶段。

2. SCSI的写操作过程

SCSI的写操作过程与读操作过程类似,但数据传送的方向不同,它把数据从发送方向目标方传送。在发送方系统中有对文件做写操作的用户请求时,它先通过文件系统查找该文件在存储设备(如磁盘)上的逻辑块地址(LogicalBlockAddress,LBA),接着文件系统把该LBA连同其他一些参数,如数据的指针、数据的长度以及逻辑单元号等传递给SCSIAPI,并指示一个写操作。例如写6000字节到LUNO的逻辑块地址OOOl234AB。SCSI的API则具体发送一个写命令给LUNO,并将数据以存储设备认可的方式分批或一次性地传递到LUNO,直到数据全部传输完毕。之后,SCSIAPI返回,并指示任务完成。然后,文件系统通知应用程序任务完成。至此,一个文件的写操作完成。

当然,在数据写操作中,仍然需要具体运行SCSI的各个阶段,并需要发送SCSI信号以及SCSI命令,如写命令等。这些方面都与上面描述的读操作类似,此处不再赘述。

从上面的介绍可以看出,一个简单的数据读或写操作会涉及一系列的过程。实际上,在这些过程中,除了有应用程序(如字处理软件、数据库等)为用户提供的直接操作界面和操作系统给应用程序提供的通用的系统功能外,还有文件系统、SCSIAPI、SCSI设备命令、SCSI驱动程序、总线和存储设备等多种软硬件的参与。


上一页 1 2 下一页

关键词: SCSI总线和协

评论


技术专区

关闭