存储系列之 硬盘接口与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年代,最初为音 ...
随机推荐
- Handler 机制(一)—— Handler的实现流程
由于Android采用的是单线程模式,开发者无法在子线程中更新 UI,所以系统给我提供了 Handler 这个类来实现 UI 更新问题.本贴主要说明 Handler 的工作流程. 1. Handler ...
- vue2.x学习笔记(二十五)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12677019.html. 过滤器 vue允许开发者自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地 ...
- 全网最清晰的ConstraintLayout教程
ConstraintLayout是AndroidStudio2.2新增的一个功能,那么这个到底是什么呢?首先第一点我们知道传统的安卓开发,页面基本都是XML编写实现,特别在一些复杂的页面上需要嵌套多层 ...
- codeforce 1311 D. Three Integers
In one move, you can add +1 or −1 to any of these integers (i.e. increase or decrease any number by ...
- JavaScript从入门到精通(转)
JavaScript从入门到精通 转自: https://github.com/Eished/JavaScript_notes 视频连接:https://www.bilibili.com/video/ ...
- Linux下使用Rsync进行文件同步
数据备份方案 1.需要备份的文件目录有(原则上,只要运维人员写入或更改的数据都需要备份)./data,/etc/rc.local,/var/spool/cron/root等,根据不同都服务器做不同的调 ...
- 【Java新特性】Lambda表达式典型案例,你想要的的都在这儿了!!
写在前面 不得不说,有些小伙伴的学习热情真高,学完了Lambda表达式的语法,想来几个典型案例再强化下.于是问冰河能否给几个Lambda表达式的典型使用示例.于是乎,便有了这篇文章. 案例一 需求 调 ...
- SpringBoot系列(十三)统一日志处理,logback+slf4j AOP+自定义注解,走起!
往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)we ...
- 从一条数据说起——InnoDB存储数据结构
本篇博客参考掘金小册--MySQL 是怎样运行的:从根儿上理解 MySQL 先给大家讲一个故事,我刚参加工作,在一个小作坊里面当[码畜](尽管现在也是),有一天老板从我背后走过,说了一句举世震惊的话: ...
- E. Sasha and Array 矩阵快速幂 + 线段树
E. Sasha and Array 这个题目没有特别难,需要自己仔细想想,一开始我想了一个方法,不对,而且还很复杂,然后lj提示了我一下说矩阵乘,然后再仔细想想就知道怎么写了. 这个就是直接把矩阵放 ...