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

3.6 磁盘控制器、驱动器控制电路和磁盘控制器驱动程序

3.6.1 磁盘控制器

        硬盘的接口包括物理接口,也就是硬盘接入到磁盘控制器上需要用的接口,具体的针数、某个针的作用等等。除了物理接口规范,还定义了一套指令系统,叫做逻辑接口。磁盘通过物理线缆和接口连接到磁盘控制器之后,就需要业界定义的指令集来进行磁盘读取操作。指令集定义了“怎样向磁盘发送数据和从磁盘读取数据以及怎么样控制其他行为”,比如SCSI和ATA指令。其中,逻辑接口也就是SCSI或ATA指令集部分,指令实体内容需要由运行于操作系统内核的驱动程序来生成,而物理接口的连接,就是磁盘控制器芯片需要负责的。磁盘控制器的作用是参与底层的总线初始化,仲裁等过程以及指令运输过程、指令传输状态机、重传、ACK确认等,将这些太过底层的机制过滤掉,从而向驱动程序提供一种简洁的接口。驱动程序只需要将要读写的设备号、起始地址等信息,也就是指令描述块(Command Description Block,CDB)传输给控制器即可,控制器接受指令并作出相应动作,将执行后的结果返回给驱动程序。

3.6.2 驱动器控制电路

        应该将磁盘控制器和磁盘驱动器的控制电路区分开来。磁盘驱动器控制电路位于磁盘驱动器上,专门负责直接驱动磁头臂运动来读写数据;而位于主板上的磁盘控制器专门用来向磁盘驱动器的控制电路发送指令,从而控制磁盘驱动器读写数据。由磁盘控制器对磁盘驱动器发出指令,进而操作磁盘,CPU做的仅仅是操作控制器即可。整个过程就是,CPU通过主板上的导线向位主板南桥芯片上的磁盘控制器发送SCSI或ATA指令(CDB),磁盘控制器继而通过线缆将指令发送给磁盘驱动器并维护底层指令交互状态机,由磁盘驱动器解析收到的指令从而根据指令的要求来控制磁头臂。

        SCSI指令或ATA指令CDB是由OS内核的磁盘控制器驱动程序生成并发送的。CPU通过执行磁盘控制器驱动程序,生成指令发送给磁盘控制器,控制器接收到这些CDB后,会做一定程序的翻译映射工作,生成最底层的磁盘可接受的纯SCSI指令,然后通过底层的物理操作,比如总线仲裁,然后编码,再在线缆上将指令发送给对应的磁盘。

3.6.3 磁盘控制器驱动程序

         那么当机器刚通电,操作系统还没启动起来并加载磁盘控制器驱动的时候,CPU必须执行磁盘控制器驱动程序才能执行指令,才能读写数据。所以,系统的BIOS中存放了初始化系统所必须的基本代码。系统BIOS初始化过程中有这么一步,就是去查找磁盘控制器的BIOS地址,然后执行这个地址上的代码,也就是磁盘控制器的BIOS代码,来初始化磁盘控制器。磁盘控制器自己的BIOS可以存放在主机上单独的ROM中,也可以存放在系统BIOS所在的ROM里的一块空间,控制器BIOS所包含的就是基本地控制器驱动程序,说白了就是向系统BIOS中注册Int 13中断向量(int 0x13中断向量所指向的中断服务程序实质上就是磁盘服务程序,用途:将指定扇区的代码加载到内存的指定位置)。初始化时执行这个驱动程序的结果就是会向系统BIOS报告控制器所掌握的磁盘设备的情况。最后BIOS通过执行驱动程序使得CPU可以发送对应的指令,提取磁盘的0磁道的第一个扇区中的代码载入内存执行,从而加载OS。

        所以说,系统BIOS中是包含基本的磁盘控制器驱动程序的,只不过功能很不完善而已。在OS内核启动过程中,会用自己的完整的、全功能的磁盘控制器驱动来接管一开始被CPU执行的系统BIOS中的简化驱动。当然,BIOS中也要包含键盘驱动,如果支持USB移动设备启动,也要有USB驱动。下图显示了磁盘控制器驱动程序、磁盘控制器和磁盘驱动程序控制电路三者之间的关系。

大话存储II----第三章磁盘大挪移-磁盘原理与技术详解(3.6-3.7)_第1张图片          在启动操作系统之前,CPU都是直接从ROM的地址中来执行磁盘控制器驱动程序的,直到驱动程序本身的数据从硬盘读入到内存之后,此时就会发生一个跳转,CPU不再从ROM地址中提取驱动程序来执行,而是向RAM中的对应地址来提取驱动程序代码执行, 此时ROM才真正结束它在这一过程中的作用。同样,如果USB设备启动,OS自身的USB驱动没有加载到RAM之前,也是由ROM来提供简化USB驱动的。

        安装操作系统时,安装程序要求必须加载完整的磁盘驱动程序之后,才可以识别到控制器后面的磁盘才可以继续安装。此时虽然系统BIOS里的基本简化驱动已经可以向磁盘进行读写操作,但是其性能还是很差的,基本上都使用Int 13调用方式;而现代的操作系统都抛弃了这种方式,所以安装操作系统过程中必须加载完整驱动才能获得较高的性能。至于系统安装完后的启动过程,一开始必须由BIOS来将磁盘的0磁道代码读出执行以便加载操作系统,使用的是简化驱动,启动过程中,OS的完整驱动会替代掉BIOS的简化驱动被加载。

3.7 内部传输速率和外部传输速率

3.7.1 内部传输速率

        磁头的内部传输速率指的是磁头读写磁盘时的最高速率。这个速率不包括寻道以及等待扇区旋转到磁头下所耗费时间的影响。它是一种理想情况,即假设磁头读写的时候不需要换道,也不需要专门读取某个扇区,只是在一个磁道上连续的读写这个磁道所有的扇区,此时的速率叫做硬盘的内部传输速率。

        通常,每秒10000转的SCSI硬盘的内部传输速率的数量级大概是1000MB/S,但是实际使用的时候,由于要不断地换道,所以传输速率也只有80MB/S左右。为了避免磁头不断被打断的问题,人们发明了RAID技术,让一个硬盘的磁头在换道时,另一个磁盘的磁头在读写。如果很多磁盘联合起来,同一时刻总有某块硬盘的磁头在读写状态而不是都在换道状态,这就相当于一个大寻你磁盘的磁头总是处于读写状态,所以RAID可以显著提升传输速率。如果我们将RAID阵列再次进行联合,就能将速率在RAID提速的基础上,再次成倍增加。

3.7.2 外部传输速率

        磁头从盘片上将数据读出,然后存放到硬盘驱动器电路板上的缓存芯片内,再将数据从缓存内取出,通过外部接口传送给主板上的硬盘控制器。从外部接口传送给硬盘控制器时的传输速率就是硬盘的外部传输速率。这个动作由硬盘的接口电路发起和控制。接口电路和磁头控制电路是不同的部分,磁头电路部分是超精密高成本的部件,可以保证磁头读写时的高速率。但是因为磁头要不断被打断,所以外部接口传输速率无须和磁头传输速率一样,只要满足最终的实际速率即可。外部接口的速率通常大于实际使用中的磁头读写数据的速率(计入换道的损失)。


你可能感兴趣的:(存储)