存储系列之 硬盘接口与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年代,最初为音 ...
随机推荐
- gitlab环境部署
一:配置主机名 [root@localhost ~]# hostname gitlab[root@localhost ~]# bash 二:安装依赖包 [root@gitlab ~]# yum -y ...
- JAVA 之 EL表达式
一.什么是EL表达式 1.Expression Language表达式语言 2.是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据) 语法格式:${expression } 二.EL中的 ...
- Python封装应用程序的最佳项目结构是什么?
Python封装应用程序的最佳项目结构是什么? 转载来源于stackoverflow:https://stackoverflow.com/questions/193161/what-is-the-be ...
- Xapian实战(二):core concepts
参考资料 core concepts 正文 1. 并发性 xapian不包含任何全局变量,所以多线程编程中,在没有共享资源的情况下可以安全使用xapian.在实际操作中,由于每个线程都可以创建自己的x ...
- 关于SQL语言,这些你不得不了解!
一.SQL概述 关系数据库标准语言SQL(结构化查询语言). 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言, ...
- andorid jar/库源码解析之okio
目录:andorid jar/库源码解析 Okio: 作用: 说白了,就是一个IO库,基于java原生io.来进行操作,内部做了优化,简洁,高效.所以受到了一部分人的喜欢和使用 栗子: 读写文件. p ...
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- E. A Simple Task
E. A Simple Task 这个题目的意思是 给你一个由小写字母组成的字符串,有两种操作 i j k 如果k==1 那么就是就把i 到 j 的这个区间非递减排序. i j k如果k==2 那么就 ...
- 3、Hive-sql优化,数据倾斜处理
一.Hive-sql优化 #增加reducer任务数量(拉取数量分流) ; #在同一个sql中的不同的job是否可以同时运行,默认为false set hive.exec.parallel=true; ...
- 设计模式之GOF23访问者模式
访问者模式Visitor 模式动机:对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同访问者的访问方式也不同 定义 ...