磁盘——磁盘基础

2011-12-24 由 创建在标签 开发, 电脑维护

磁盘是广为应用的保存大量数据的存储设备,存储数据的数量级可以达到几百到几千千兆字节,而基于RAM的存储器只能有几百或几千兆字节。不过,从磁盘上读信息的时间为毫秒级,从DRAM读比从磁盘读快10万倍,从SRAM读比从磁盘读快100万倍。

1、磁盘构造

磁盘是由盘片(platter)构成的。每个盘片有两面或者成为表面,表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴(spindle),它使得盘片以固定的旋转速率旋转,通常是5400~15000转每分钟(Revolution Per Minute, RPM)。 磁盘通常包含一个或多个这样的盘片,并封装在一个密封的容器内。

磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道;

扇区(sector):每个扇区包含相等数量的数据位(通常是512字节),这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙(gap)分隔开,这些间隙中不存储数据位。间隙存储用来标识扇区的格式化位。

磁盘制造商通常用术语柱面(cylinder)来描述多个盘片驱动器的构造,这里柱面是盘面表面上到主轴中心的距离相等的磁道的集合。例如,如果一个驱动器有三个盘片和六个面,每个表面上的磁道的编号都是一致的,那么柱面k就是六个磁道k的集合。

2、磁盘容量

一个磁盘上可以记录的最大位数称为它的最大容量,或者简称容量。磁盘容量是由以下技术因素决定:

  • 记录密度(recording density 位/英寸):磁道一英寸的段中可以放入的位数;
  • 磁道密度(track density 道/英寸):从盘片中心出发半径上一英寸的段内可以有的磁道数;
  • 面密度(areal densiy 位/平方英寸):记录密度与磁道密度的乘积;

磁盘制造商不懈的努力以提高面密度(从而增加容量),而面密度每隔几年就会翻倍。最初的磁盘,是在面密度很低的时代设计的,将每个磁道分为数目相同的扇区,扇区的数目是由最靠内的磁道能记录的扇区数决定的。为了保持每个磁道有固定的扇区数,越往外的磁道扇区隔得越开。

在面密度相对比较低的时候,这种方法还算合理。不过,随着面密度的提高,扇区之间的间隙(那里没有存储数据位)变得不可接受的大。因此,现代大容器磁盘使用一种称为多区记录(multiple zone recording)的技术,在这种技术中,柱面的集合被分割成不相交的子集合,称为记录区(recording zone)。每个区包含一组连续的柱面。一个区中的每个柱面中的没跳磁道都有相同数量的扇区,这个扇区的数量是由该区域中最里面的磁道所能包含的扇区数确定的。注意,软盘仍然使用的是老式的方法,每条磁道的扇区数是常数。

下面的公式给出了一个磁盘的容量:

3、磁盘操作

磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂(actuator arm)一端,如下图中a所示。

通过沿着半径轴前后移动这个传动臂,驱动器可以将读/写头定位在盘面上的任何磁道上。这样的机械运动称为寻道(seek)。一旦读/写头定位到了期望的磁道上,那么当磁道上的每个位通过它的下面时,读/写头可以感知到这个位的值(读该位),也可以修改这个位的值(写该位)。有多个盘片的磁盘针对每个盘面都有一个独立的读/写头,如上图(b)所示。读写头垂直排列,一致行动。在任何时刻,所有的读写头都位于同一个柱面上。

在传动臂末端的读写头在磁盘表面高度大约0.1微米处的一层薄薄的气垫上飞翔,速度大约为80km/h。这可以比喻成将sears tower(一座位于芝加哥的108层和442米高的摩天大楼)放倒,然后让他在距离地面2.5cm的高度上飞行环绕地球,绕地球一天只需要8秒钟!在这样小的间隙里,盘面上一粒微小的灰尘都像一块巨石。如果读写头碰到了这样的一块巨石,读写头会停下来,撞到盘面——所谓的读写头冲撞(head crash)。为此磁盘总是密封包装的。

磁盘以扇区大小的块来读写数据。对扇区的访问时间(access time)有三个主要的部分:寻道时间、旋转时间和传送时间:

  • 寻道时间:为了读取某个目标扇区的内容,传动臂首先将读写头定位到包含目标扇区的磁道上。移动传动臂所需的时间成为寻道时间。寻道时间依赖于读写头以前的位置和传动臂在盘面上移动的速度。现代驱动器中平均寻道时间是通过对几千次对随机扇区的寻道求平均值来测量的,通常为3~9ms。一次寻道的最大时间可以高达20ms。
  • 旋转时间:一旦读写头定位到了期望的磁道,驱动器等待目标扇区的第一个位旋转到读写头下。这个步骤的性能依赖于当读写头到达目标扇区时盘面的位置和磁盘的旋转速度。在最坏的情况下,读写头刚刚错过了目标扇区,必须等待磁盘转一整圈。
  • 传送时间:当目标扇区的第一个位位于读写头下时,驱动器就可以开始读或者写该扇区的内容了。一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目。

关于平均旋转时间和平均传送时间都有公式计算,而平均寻道时间参数一般会给定。

这样可以通过计算得出一些结论:

  • 访问一个磁盘扇区中一定字节的时间主要是寻道时间和旋转延迟。访问扇区中的第一个字节用了很长时间,但是访问剩下的字节几乎不用时间。
  • 因为寻道时间和旋转延迟大致是相等的,所以将寻道时间乘以2是估计磁盘访问时间的简单而合理的方法。
  • 对存储在SRAM中的双字的访问时间大约是4ns,对DRAM的访问时间是60ns。因此,从存储器中读一个512字节扇区大小的块的时间对SRAM 来说大约是256ns,对DRAM来说大约是4000ns。磁盘访问时间,大约10ms,比SRAM大约大40000倍,比DRAM大大约2500倍。如果我们比较访问一个简单字的时间,这些访问时间的差别会更大。

4、逻辑磁盘块

正如我们看到的那样,现代磁盘构造复杂,有多个盘面,这些盘面上有不同的记录区。为了对操作系统隐藏这样的复杂性,现代磁盘将它们的构造呈现为一个简单的视图,一个B个扇区大小的逻辑块的序列,编号为0,1,…,B-1。磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际(物理)磁盘扇区之间的映射关系。

当操作系统想要执行一个I/O操作时,例如读一个磁盘扇区的数据到主存,操作系统会发送一个命令到磁盘控制器,让它读某个逻辑块号。控制器上的固件执行一个快速表查找,讲一个逻辑块号翻译成一个(盘面,磁道,扇区)的三元组,这个三元组唯一的标识了对应的物理扇区。控制器上的硬件解释这个三元组,将读写头移动到适当的柱面,等待扇区移动到读写头下,将读写头感知到的位放到控制器上的一个小缓冲区中,然后将他们拷贝到主存中。

5、连接到I/O设备

虽然I/O总线比系统总线和存储器总线慢,但是它可以容纳种类繁多的第三方I/O设备。

通用串行总线(USB)控制器是一个连接到USB总线的设备的中转机构,USB总线是一个广泛使用的标准,连接各种外围I/O设备,包括键盘鼠标、调制解调器、数码相机、游戏操纵杆、打印机、外部磁盘驱动器和固态硬盘。USB 2.0 总线的最大带宽为60MB/s。USB 3.0的最大带宽为600MB/s。

主机总线适配器将一个或多个磁盘连接到I/O总线,使用的是一个特别地主机总线接口定义的通信协议。两个最常用的这样的磁盘接口是SCSI(读作“scuzzy”)和SATA。SCSI磁盘通常比SATA驱动器更快但是更贵。SCSI主机总线适配器(通常称为SCSI控制器)可以支持多个磁盘驱动器,SATA适配器只能支持一个驱动器。

其他设备,如网卡,可以通过插入主板上的扩展槽中,从而连接到I/O总线,这些插槽提供了到总线的直接电路连接。

6、访问磁盘

CPU使用存储器映射I/O(memory-mapped I/O)的技术来向I/O设备发出命令。在使用存储器映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保留的。每个这样的地址称为一个I/O端口(I/O port)。当一个设备连接到总显示,它与一个或多个关口相关联(或它被映射到一个或多个端口)。

  1. CPU通过将命令、逻辑块号和目的存储器地址写到与磁盘相关联的存储器映射地址,发起一个碰盘读;
  2. 磁盘控制器读扇区,并执行到主存的DMA传送;
  3. 当DMA传送完成时,磁盘控制器用中断的方式通知CPU

作为一个简单的例子,假设磁盘控制器被映射到端口0xa0。随后,CPU可能通过执行三个对地址0xa0的存储指令,发起磁盘读:第一条指令是发送一个命令字,告诉磁盘发起一个读,同时还发送了其他的参数,例如当读完成时,是否中断CPU。第二条指令知名应该读的逻辑块号。第三条指令指明应该存储磁盘扇区内容的主存地址。

当CPU发起了请求之后,在磁盘执行读的时候,它通常会做些其他的工作。回想一下,一个1GHz的处理器的时钟周期为1ns,在用来读磁盘的16ms时间里,它潜在的可执行1600万条置零。在传输进行时,只是简单地等待,什么都不做,这是种极大的浪费。

在磁盘控制器收到来自CPU的读命令之后,它将逻辑块号翻译成一个扇区地址,读该扇区的内容,然后将这些内容直接传送到主存,不需要CPU的干涉。设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程,这个过程称为DMA(direct memory access)直接存储器访问。这种数据传送称为DMA传送。

在DMA传送完成,磁盘扇区的内容被安全的存储在主存中以后,磁盘控制器通过给CPU发送一个中断信号来通知CPU。基本思想是中断会发信号到CPU芯片的一个外部引脚上。这会导致CPU暂停它当前正在做的工作,跳转到一个操作系统例程。这个程序会记录下I/O已经完成,然后将控制返回到CPU被中断的地方。

注:本文由同实验室的冯建辉整理,我看着不错就拿过来分享了,在这里先感谢一下。

标签:

一条评论

发表评论