存储系列之 硬盘接口与SCSI总线协议
本文主要介绍硬盘的接口、总线和协议,SSD与SATA硬盘一般是兼容的,NVmeSSD除外。
一、磁盘控制器
上一章介绍了存储系统的主要介质硬盘,而硬盘的读写通过磁头臂,磁头臂是由磁盘驱动器来控制的。磁盘驱动器还有自己的控制电路。而磁盘的读写命令是从主板上的磁盘控制器发出来,送到磁盘驱动器的控制电路,从而控制磁头臂的运动。所以,磁盘控制器是计算机与磁盘驱动器的接口设备。
磁盘控制器可以通过PCI插槽连接,而现在通常都集成在主板上,一般在南桥芯片端。磁盘控制器根据接口和总线分成不同的类型。接下来逐一介绍。
补充知识点
1.磁盘控制器有自己的BIOS(我们合作的一厂家命名WebBIOS),即磁盘控制器驱动程序,初始化磁盘控制器。可以存放在主板上单独的ROM中,也可以放在系统BIOS所在ROM的一块空间。系统BIOS通过执行驱动程序(包括磁盘BIOS)而使得CPU可以发送读指令,提取磁盘的0磁盘的第一个扇区的代码载入内存执行,从而加载操作系统。而且一般操作系统内核中还包括更完整、功能更全面的磁盘控制器驱动程序,以获得较好的磁盘性能。
2.磁盘上必须有缓存,用来接收指令和数据,还被用来预读。缓存在磁盘上表现就是一块电路板上的RAM芯片(磁盘驱动器),目前有2M~64M等容量规格。有些机器上有电池保护,这样保证宕机后数据不丢失。当然也可以通过设置“Write Through”模式来保证。
二、硬盘接口
硬盘接口是硬盘与主机系统间的连接部件,作用是在硬盘缓存 和主机内存之间传输数据。不同的硬盘接口决定着硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏。
1.IDE接口
IDE是“Integrated Drive Electronics”的缩写,即“电子集成驱动器”,把盘体与控制器集成在一起的做法减少了硬盘接口的电缆数目与长度。
IDE接口,也称为PATA接口,即Parallel ATA(并行传输ATA)。ATA-1到ATA-4采用的40针脚的传输电缆,ATA-5到ATA-7采用的40针80芯。
IDE代表着硬盘的一种类型,但在实际的应用中,人们也习惯用IDE来称呼最早出现IDE类型硬盘ATA-1,这种类型的接口随着接口技术的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如ATA、Ultra ATA、DMA、Ultra DMA等接口都属于IDE硬盘。
2.SATA接口
SATA是“Serial ATA”的缩写,即串行ATA,但是指令集不变,仍然采用ATA指令集。 SATA 技术是Intel公司在IDF 2000大会上推出的,最大的优势是传输速率高。
SATA 1.0的数据传输率达到150MB/s,这比最新的并行ATA(ATA133,或者叫ATA-7)所能达到133MB/s的最高数据传输率还高;
SATA 2.0的数据传输率达到300MB/s,线是4芯 ;
SATA 3.0的数据传输率达到600MB/s,线是8芯 。
SATA 2.0可以连接15个存储设备;SATA 2.0还可以作为eSATA,即外置设备的SATA 接口标准,兼容USB和IEEE1394。
SATA总线还具备了更强的纠错能力,更高的数据传输的可靠性,更好冗余能力。串行接口还具有结构简单、支持热插拔的优点。
现在主流服务器大都采用SATA 3.0接口硬盘。
3.SCSI接口
SCSI是“Small Computer System Interface”的缩写,即小型计算机系统接口。同IDE(ATA)完全不同的接口, IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。
SCSI与ATA是主机与外设通信的两大协议规范。如前所述,SATA接口采用的也是ATA协议,而IDE硬盘已经基本上被淘汰出局,目前一般采用SATA 2.0和SATA 3.0标准的硬盘。而在大型的服务器上特别是磁盘阵列都安装了LSI的SCSI卡,SCSI卡即应用SCSI协议的专门的SCSI控制器,所以硬盘和主机之间采用的是SCSI标准来通信。
所以接下来主要介绍SCSI总线和协议,而有关其他SAS接口、光纤接口等技术在这里不再铺开了。
三、SCSI 总线与协议
1.总线简介
内存与北桥间的总线称为内存总线;
CPU与北桥间的总线成为前端总线(Front Side Bus,FSB),也就是系统总线(System Bus)。出于物理性能的原因,高的系统速度需要短的印制导线。
北桥与南桥之间是桥间连接总线。
PCI(Peripheral Component Interconnection:外围互联设备)是当前广泛使用的实现主机I/O 总线的技术。
PCIE,即PCI-Express,是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由Intel在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。
而目前最新的PCIE3.0接口(PCIE x16, 比特率为8Gbps)往往是直接接入北桥,南桥只能接低速总线。南桥芯片现在集成了越来越多的动能,如IDE控制器、USB控制器、显卡控制器等等。
2.SCSI 总线
SCSI定义了一个并行总线,用于数据传输和通信控制。总线本身可以是印制导线的形式,也可以是一根电缆。外部 SCSI设备使用电缆以菊花链的形式连接到服务器上的控制器。在菊花链中,每个设备都跟其他设备串接。由于这个原因,外部 SCSI设备典型地都有两个 SCSI连接器,可以分别连接到链中的前一个设备和后一个设备。
SCSI占用CPU极低,因为SCSI卡本身带有CPU,可处理一切SCSI设备的事务,在工作时主机CPU只要向SCSI卡发出工作指令,SCSI卡就会自己进行工作,工作结束后返回工作结果给CPU,在整个过程中,CPU均可以进行自身工作。
普通台式机一般不集成SCSI卡,需要被插入PCI插槽。普通台式机主板上一般会有两个IDE插槽,一个IDE插槽可以连接两个IDE设备,即一个控制器掌管两个通道(总线)。
现在的一个 SCSI 总线可以连接多至 16个设备(节点)。其中包括1 个SCSI控制器和 15个存储装置,控制器的SCSI ID固定为7,优先级最高,而其他15个节点可以任意设置但不能重复。 由于总线是一种共享线路,同一时刻只能由一个节点向这条总线上放数据。
一个SCSI卡可以不止一个SCSI控制器,而每个控制器可以单独掌管一条SCSI总线,即多通道SCSI卡。每个控制器又可以有多个通道,称为多通道控制器。
通道也就是(SCSI)总线,一条SCSI总线就是一个通道。所以通道越多,总线越多,能接入的设备就越多。不同通道之间的设备ID,即SCSI ID可以相同。
SCSI总线的寻址方式,按照 “控制器-通道-SCSI ID -LUN ID”来寻址。LUN是Logic Unit Number简称,后续文章会有介绍。
3.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中的一样。
2003年,最新的SCSI标准Ultra 640 SCSI,时钟频率为160MHz加双倍数据速率,最大同步传输速度达到640MB/s。
SCSI是一套完整的数据传输协议。一个通信协议必然跨越OSI的七个层次。重点还是在传输协议层,SCSI 设备之间通过一系列的命令实现数据的传送,大致分成三个阶段:命令的执行,数据的传送和命令的确认。
简要的介绍下数据的读写过程:
(1)写入数据,控制器(initiator)向磁盘设备(target)发送数据。
发起方在获得总线仲裁(在16条总线中竞争取胜)之后,会发送一个SCSI Command写命令帧,其中包含对应的LUN号以及LBA地址段。
接收端接收后,向发起方回送一个XFER_RDY帧,表示已经准备好接收数据了。
发起方收到XFER_RDY帧,开始发送数据,每发送一帧数据,接收方都会应答一个XFER_RDY帧。如此反复直到数据发送完成。
当接收方执行完命令后,再发送一个RESPONSE帧,表示写入结束。
(2)读取数据,控制器(initiator)从磁盘设备(target)获取数据。
发起方在获得总线仲裁(在16条总线中竞争取胜)之后,会发送一个SCSI Command读命令帧。
接收端接收后,按LUN号以及LBA地址段对应的所有扇区数据读出,传回给发起方。
所有数据传输完成后,目标端发送一个RESPONSE帧,表示这条SCSI命令执行完毕。
对总线和SCSI协议更详细的介绍,请参考以下链接:
https://blog.csdn.net/tianlesoftware/article/details/6198256
iSCSI是一种基于因特网及SCSI-3协议下的存储技术,Internet小型计算机系统接口,又称为IP-SAN,由IETF提出,并于2003年2月11日成为正式的标准。iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道。
tgt是用户态实现的iscsi target,而iet(iscsi enterprise target)是在内核态实现的target,tgt相比于iet来说,因为其用户态实现,方便调试,新加入一些功能等,不过性能相比iet来说要稍差一点。
以下链接对 iscsi target tgt架构和交互流程 有非常详细的介绍:
https://blog.csdn.net/zengxiaosen/article/details/77529903
参考资料:《大话存储II》和百度百科。
存储系列之 硬盘接口与SCSI总线协议的更多相关文章
- AXI总线协议
AXI总线协议 (一).概述 AXI (高性能扩展总线接口,Advanced eXtensible Interface)是ARM AMBA 单片机总线系列中的一个协议,是计划用于高性能.高主频的系统设 ...
- 存储系列之 LUN 和 LVM
一.LUN 1.LUN的由来 上一篇文章已经介绍了RAID技术的原理,那么RAID的实现呢?有两种方式,RAID软件和RAID硬件.但是因软件RAID占用主机CPU和主机内存,而且RAID功能不易实现 ...
- 存储系列之 DAS、SAN、NAS三种常见架构概述
随着主机.磁盘.网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要.因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里 ...
- SPI、I2C、UART三种串行总线协议的区别
第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous R ...
- eMMC之分区管理、总线协议和工作模式【转】
本文转载自:https://blog.csdn.net/u013686019/article/details/66472291 一.eMMC 简介 eMMC 是 embedded MultiMedia ...
- SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)
SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...
- IIC总线协议基础1
文档类别 文档标识 IIC总线协议基础1 当前版本号 V0.2 作 者 Louis 完毕时间 2015-05-27 IIC总线协议基础1 IIC总线协议基础1. 1. II ...
- AHB总线协议(二)
下图是8拍回环字突发传输:地址将在 32 字节边界处回环因此地址 0x3C 之后的地址是 0x20. 下图是8增量半字突发传输,所以地址每次增加 2 个字节并且突发在递增因此地址连续增加通过了 16 ...
- I2C总线协议详解
I2C总线定义 I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C总线产生于在80年代,最初为音 ...
随机推荐
- Docker虚拟化管理:30分钟教你学会用Docker
关于Docker的官方介绍网上太多了我就不贴了,就实际体验来说Docker可以极大的简化环境搭建及服务部署的操作流程,大大降低部署的时间成本,解放你的双手. 本文不会深入讲解Docker底层架构及运行 ...
- centos6.5宽带拨号上网
CentOS6以后要安装rp-pppoe这个软件,centos之前的版本是adsl-setup命令安装. (1)查看是否安装 #rpm -qa|grep rp-pppoe 没有内容输出则没安装,若可以 ...
- 图论--网络流--费用流POJ 2195 Going Home
Description On a grid map there are n little men and n houses. In each unit time, every little man c ...
- Nginx模块开发(2)————下载文件
Nginx的HTTP模块下载文件和传送缓冲区的字符串差不多,只需将文件标志置为1即可,我转送的文件是mp3的,所以HTTP的那个mine 类型要写为audio/mp3,二话不说了,贴代码,代码和之前那 ...
- libevent(三)event_base
libevent能够处理三种事件: I/O.定时器.信号. event_base 统一管理所有事件. struct event_base { const struct eventop *evsel; ...
- libevent(十三)evhttp事件处理流程
在libevent(六)http server中,作为一个单线程http server,不仅要监听每个连接的到来,还要监听每个连接上的I/O事件. 查看源码可知,在evhttp_bind_socket ...
- Programming Languages_04 Deferred Substitution
Deferred Substitution 在执行出现with时,利用"substitution",每次with的出现,它都绕着整个body置换.这一方式是由F1WAE到env再到 ...
- Java——Java泛型
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...
- 从一条数据说起——InnoDB存储数据结构
本篇博客参考掘金小册--MySQL 是怎样运行的:从根儿上理解 MySQL 先给大家讲一个故事,我刚参加工作,在一个小作坊里面当[码畜](尽管现在也是),有一天老板从我背后走过,说了一句举世震惊的话: ...
- K - Painful Bases 状压dp
Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...