大话存储II----第三章磁盘大挪移-磁盘原理与技术详解(3.5)

3.5 SCSI硬盘接口

        SCSI与ATA是目前现行的两大主机与外设通信的协议规范,而且他们各自都有物理接口定义。ATA协议对应的就是IDE接口,SCSI协议协议对应的就是SCSI接口。凡是作为一个通信协议,就可以按照OSI模型将其划分,尽管有些层次缺失或者合并。

        SCSI的全称是Small Computer System Interface,即小型计算机系统接口,是一种较为特殊的接口总线,具备与多种外设进行通信的能力,比如硬盘、磁带机和扫描仪等。SCSI采用ASPI(高级SCSI编程接口)的标准软件接口使驱动器和计算机内部安装的SCSI适配器进行通信。SCSI为存储产品带来强大的、灵活的连接方式,还提供了很高的性能,可以有8个或者更多(16个)的SCSI设备连接在一个通道上。SCSI是广泛应用于小型机上的高速数据传输技术。SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低以及热插拔等优点。

        SCSI接口的设备必须要有专门的SCSI控制器,也就是一块SCSI控制卡,才能使用,这与IDE硬盘不同。因为SCSI控制器有一个类似于CPU的芯片,他对SCSI设备进行控制,能处理大部分的工作,减少了CPU的负担。在同时期的硬盘中,SCSI硬盘的转速、缓存容量、数据传输速率都要高于IDE硬盘,因此更多的是应用于商业领域。常见的SCSI设备安装在服务器上较多,但是如今可以在市面上买到PCI转SCSI卡。

        SCSI的型号变更从SCSI-1.SCSI-2,SCSI-3,Ultra SCSI,Ultra 2 SCSI,Ultra 160 SCSI,到Ultra 320 SCSI。到Ultra 320 SCSI时,它已经支持双转换时钟控制、循环冗余码校验和域名确认,支持异步和同步两种传输模式。还引入了调步传输模式,简化了数据时钟逻辑,使得高传输速率成为可能。Ultra 320 SCSI的传输速率可以达到320MB/S。

        下面介绍SCSI协议中的OSI模型。

        1.SCSI协议的链路层。

        OSI模型中链路层的功能就是用来将数据帧成功传送到这条线路的对端。SCSI协议中,利用CRC校验码来校验每个指令或者数据的帧,如果发现对方发过来的校验码与本地计算的不同,则说明这个数据帧在传输过程中收到了干扰使得其中某个或某些位发生了反转,那么就会丢弃掉这个帧,重传这个帧。

        2.SCSI协议的网络层。

        1>SCSI总线编址机制

        OSI模型中网络层的功能就是用来寻址的,那么总线或者交换架构下的多个节点是通过SCSI协议定义的SCSI ID的概念来区分每一个节点。在Ultra 320 SCSI协议中,一条SCSI总线上只能有16个节点,SCSI控制器也会占用一个节点,默认设置为7,优先级最高,其他的15个节点的SSID也是可以随便设置但是不能重复。SSDI的优先级如下所示:


从左到右,依次减小。因为SSCI接口分窄位(8位)和宽位(16位),所以为了向下兼容,就如此设置优先级。

       普通的台式机一般不集成SCSI控制器,如果想介入SCSI磁盘,就需要增加SCSI卡。SCISI卡一端接入主机的PCI总线,另一端用一个SCSI控制器接入SCSI总线。如果这块卡不只一个SCSI控制器,则每个控制器都可以单独掌管一条SCSI总线,这就是多通道SCSI卡。通道越多,一张卡可接入的SCSI设备就越多。

        2>SCSI寻址机制和几个阶段

        (1)空闲阶段

         总线一开始是处于空闲状态,没有节点要发起通信。总线空闲的时候,BSY和SEL这两天控制信号线的状态都为False状态(用一个持续的电位表示),此时任何节点都可以发起通信。

        (2)仲裁阶段

         节点是通过在8条或者16条数据总线上,提升自己对应的那条线路的电位来申请总线使用权的。提升自己ID对应线路的电位的同时,此节点也提升BSY线路的电位。每个ID号对应这8条或者16条线中的一条。SCSI设备上都有跳线来设置这个设备的ID号。跳线设置好之后,该设备每次申请仲裁都只会在SCSI接口的数据线中的对应它自身ID的那条线提升电位。如果同时有多个节点提升了所在线路的电位,那么所有发起申请的节点均需判断总线上的这些信号,如果自己是最高优先级的,那么就持续保留这个信号。而其他低优先级的节点一旦检测到高优先级的ID线路上有信号,立即撤销自己的信号,等待下轮仲裁。而最高优先级ID的线路取得总线的使用权,并同时将SEL信号线提升电位。

        SCSI总线的寻址方式:按照控制器——通道——SCSI ID——LUN ID来寻址。LUN全称是Logical Unit Number。

        控制器一级寻址。控制器就是指SCSI控制器,这个控制器集成在南桥上,或者独立于某个PCI插卡。不管在哪里,都是要连接到主机IO总线上。有IO端口,就可以让CPU访问到。一个主机IO总线上不一定只有一个SCSI控制器,可以有多个。每个控制器又有多个通道,一条通道就是一个SCSI总线。多条SCSI总线可以被一个控制器管理,这个物理控制器会被逻辑划分为多个虚拟的、可以管理多个通道的控制器,称为多通道控制器。不仅SCSI控制器可以有多个通道,IDE控制器也有通道的概念。普通台式机主板一般有两个IDE插槽,一个IDE插槽可以连接两个IDE设备。

        然而,SCSI ID并不是SCSI网络中的最后一层地址,还有一个LUN ID。但是一个SCSI ID就代表一个SCSI设备,那就只能在逻辑上将每个SCSI ID再区分出若干个LUN ID。对于带RAID功能的SCSI接口磁盘阵列设备来说,由于会产生许多的虚拟磁盘,所以只靠SCSI ID是不够的。这时候就需要扩充可寻址范围。所以习惯上称磁盘阵列生成的虚拟磁盘为LUN。

        (3)选择阶段

        仲裁阶段结束之后,胜利的节点会将BSY和SEL信号线置位。然后将数据总线上对应它自身ID的线路和对应它要通信的目标IO的线路的电位提升,这样目的节点能感知它自己的线路上来了信号,开始做接收准备。

         总线上最经常发生的是控制器向其他节点发送和接收数据,而除控制器之外的其他节点交互数据一般不会发生。如果要从总线上的一块硬盘复制到另一块硬盘,也必须先将数据发送到控制器,控制器再复制到内存,经过CPU运算后再发送给控制器,然后控制器再发送给另一块硬盘。之所以如此做的原因就是,硬盘本身是不能感知文件这个概念的,硬盘只理解SCSI语言,而SCSI语言是处理硬盘LBA块的,即只能告诉硬盘读或者写某些LBA地址上的扇区,而不能告诉硬盘读写某些文件。文件这个层次的功能室运行在主机上的文件系统代码实现的。所以硬盘必须先将数据发送到主机内存由文件系统处理,然后再法向另外的硬盘。

        3. SCSI协议的传输层

        OSI模型中的传输层的功能就是保障此端的数据成功传动到彼端。与链路层不同的是,链路层只是保障线路两端数据的传送,而且一旦某一帧出错,链路层程序本身不会重新传送那个帧,所以需要一个端到端的机制来保障传输,这个机制时运行在通信双方最终的两端,而不是链路的两端。

        在发起方获得总线仲裁之后,会SCSI Command写命令帧,其中包含对应的LUN号以及LBA地址段。接收端接收后,就知道下一步对方就要传输数据了。接受方做好准备后,向发起方发送一个XFER_RDY的帧,表示已经做好准备,可以随时发送数据。发起方接收到XFER_RDY帧之后,会立即发送数据。每发送一帧,接受方就回一个XFER_RDY帧,表示上一帧成功收到并且无误,可以立即发送下一帧,知道数据发送结束。接受方发送一个RESPONSE帧来表示这条SCSI命令执行完毕。

        发起方在获得总线仲裁之后。会发送一个SCSI Command读命令帧。接受方接收到后,立即将改命令的LUN以及LBA地址段的所有扇区的数据读出,传送给发起端。所有的数据传输结束后,目标端发送一个RESPONSE帧来表示这条SCSI命令执行完毕。SCSI语言就是利用这种两端节点之间相互传送一些控制帧来达到保障数据成功传输的目的。

        4.SCSI协议的会话层、表示层和应用层

        这三层与底层网络通信语言无关,没必要了解上层语言的含义。




























































猜你喜欢

转载自blog.csdn.net/qq_28814687/article/details/80293969