【摘要】
计算机是处理数据的机器。而数据就需要有地方存放。在计算机环境下,可供数据存放的地方并不多,其中一个主要的存储数据的媒介就是磁盘。 对于计算机领域的人来说,磁盘通常被看做一种外部设备。可是,对于现代操作系统来说,磁盘是不可或缺的。虽然早期的操作系统可以基于磁带,但由于操作系统的复杂性和性能的不断提升,用磁带作为操作系统的载体已经不合时宜,取而代之的就是磁盘。虽然现在有研究人员试图将操作系统建于内存中,即基于内存的操作系统,但这种操作系统处于实验阶段,并未形成商业气候。对于一般用户来说,我们看到的操作系统都是存放在磁盘上的。操作系统为磁盘提供的抽象:文件及文件系统。或者说文件就是磁盘的抽象。
1.磁盘操作
1.1 什么是磁盘
通俗的讲,磁盘就是形状像盘子的磁性存储介质。这种存储介质的特性就是持久,正常情况下数据在上面不会消失;磁性,圆形是它的显著特征,所以称为磁盘;成本低廉,所以可以大量使用。
1.2 磁盘的结构
一块磁盘实际并不只有一块盘片,而是由多块盘片组成,每块盘片的正反两面皆可以存放数据。每个盘面上都配有一个读写磁头,而所有的读写磁盘连在一根共享的磁臂上。当磁盘运动时,所有的磁头均作相同的运动。盘面则以常速不停的旋转。这个旋转的速度通常为每分钟3500〜10000转,即大约每6ms〜17ms旋转一圈。
除此之外,一块磁盘还含有信号和界面电子系统。通过这些电路和电子系统,我们得以将系统用户与系统的运作原理隔离开来。
现代的磁盘都带有一个微控制器,如IDE磁盘。这种磁盘提供较为复杂的功能:纠错,数据分拆与组装,磁盘调度等。
1.3 盘面的结构
为方便存储数据,人们将每块盘分为磁道和扇面。磁道是一个个同心环。而每个磁道被分为扇面(扇区)。数据则以扇面进行存储。扇面也是磁盘I/O的最小单位。
扇面的内容通常分为3个部分:标题,数据部分和ECC纠错信息。
扇面的标题通常包含同步和位置信息。同步信息允许磁头的定位电路将磁头保持在磁道的中心位置,而位置信息则允许磁盘控制器决定扇区的身份。如果是读取操作,则磁头将捕捉存放于盘面上的信息;在写入操作时,则将信息写入盘面。下图中的扇区结构里面有一个12B的ECC纠错信息,该信息的功能是对这个512B的数据段提供错误侦测和纠正。
有时候会将同步信息从标题部分分出来,并加上一个尾区,从而形成5个部分
对于不同的磁盘系统来说,扇面里面每个区的大小可能不一样。但数据部分则通常都是512B。至少这部分应该是2的指数次方大小。
一般来讲,磁盘驱动器的制造商将磁盘进行初始化或格式化,即将原始的磁盘和扇面信息存入盘面,并对盘面进行检查以判断数据是否可以写入每个扇面或从其读出。如果某个扇面确认被损坏,即在使用ECC的情况下也不能使用该扇面时,则格式化过程将对这个扇面作出标记,这样操作系统就不会在这个扇面上进行任何读写操作(避免使用这个扇面)。
一个磁盘驱动器的所有盘面处于同一位置的磁道构成磁柱。如果一个磁盘的驱动器有8个盘片,则这个磁盘的一个磁柱由16个磁道构成(每个盘片有正反两面),而这16个磁道离磁盘的中心旋转轴的距离均相等。
1.4 磁盘驱动器的访问速度
磁盘在读写数据的访问速度称为磁盘的动态属性。这是衡量一个磁盘性能的重要数据。数据访问时或速度的计算不仅依赖于磁盘的旋转速度,而且还依赖于访问开始的读写磁头所处的位置。数据访问时间也有几种衡量办法:
(1)平均寻道时间(seek time):是指把读写磁头移动到所要求的磁道位置所需要的平均时间。实际的寻道时间则依赖于在读写请求收到时读写磁头所处的位置和磁头需要移动的距离。寻道时间通常在8〜20ms内。
(2)磁道到磁道的访问时间(track to track time):磁头从一个磁道移动到一个相邻磁道所需要的时间。这个时间通常在2〜3ms内。该时间在有的资料上也称为柱面切换时间或磁道切换时间。
(3)旋转延迟时间:磁头到达所要求的磁道位置后,等待所要求的扇面旋转到磁头下方的平均时间。若平均来讲,所需要的扇面将在磁头刚刚移动到所需磁道时处于离磁头半圈远的距离。旋转延迟通常为旋转时间的一半。当前磁盘驱动器的旋转速度所处的范围为3500〜10000转/s,因此旋转延迟的在范围在3〜8.57ms内。
【1】平均访问时间:平均寻道时间+旋转延迟时间。
【2】爆发速度:在磁头到达所需扇面后,磁盘驱动器输出或接收数据的最大速度。这个数值等于磁头发送数据位流的速度。
【3】可持续数据速度:在一段可持续的时间内数据可以被访问的速度。这个参数在设计那些必须进行大文件实时访问(如视频或音频数据)的系统时非常重要。
1.5 操作系统界面
对于磁盘来说,操作系统的一种功能是将磁盘驱动器系统里面的各种细节屏蔽起来,这样用户和应用程序都无须知道数据到底如何存放在磁盘上的。操作系统在对磁盘进行管理时通常以磁盘块作为最小单位。而定位一个磁盘块则通过磁盘块地址进行。磁盘块通常为扇面数的整数倍,更为常见的是2的幂次方倍,如:32扇面或64扇面等。
磁盘块地址类似于访问内存时需要提供的内存地址,操作系统访问磁盘块的时候需要提供磁盘块地址。不过磁盘块地址比内存地址更复杂,它包括多个部分。典型的操作系统通常都会标明磁道(磁柱),扇面和盘面(磁头)3个参数。以这种方式给出的地址称为逻辑块地址(logical block address,LBA),如下表所示:
LBA用于将磁盘读写请求传送给磁盘控制器。在磁盘读取请求里,所要读取信息的起始地址由磁道号(磁柱号),扇面号和盘面号(或磁头号)组成,而扇面计数则给出了该次磁盘访问将要读取的扇面数量。磁盘控制器则将这些参数转换为一系列的低层磁盘操作。在对磁盘进行读取时,操作系统负责将该数值写入磁盘驱动器界面里指定的I/O端口。另外5个额外的宽度均为一个字节的寄存器则用来驱动读写命令和状态信息。值得注意的是:LBA不一定与磁盘上面的块存储区域的真实物理地址对应;而磁盘控制将负责进行从LBA到物理块地址的映射。
下列步骤描述的是从磁盘上读取一个扇面的过程:
(1)操作系统将要读取的LBA传送给磁盘驱动器并启动读取命令。
(2)磁盘驱动器通过将磁盘头移动到正确的位置,并启动处于指定盘面上的磁头来搜索指定的磁道。在磁头移动过程中,读取磁头将不断的检查下面的扇面号直到找到所要求的扇面为止。
(3)磁盘控制器将扇面数据和ECC信息传送到一个处于磁盘界面的缓冲区。这里的ECC信息是在数据流动的动态过程中进行计算而得出的。
(4)磁盘驱动器向操作系统发出”数据就绪“信号。
(5)操作系统从磁盘界面里的缓冲区读取数据,即可以按一个字节一个字节的方式来读取,又可以启动DMA命令来读取。
1.6 磁盘调度算法
影响磁盘读写时间的因素如下3个:
(1)寻道时间
(2)旋转延迟
(3)数据传输时间
而在3者中,前两者为机械运动,数据传输主要为电子运动。显然机械运动的速度远低于电子运行的速度。在两个机械运动部分,寻道时间又较长。因此,在上述3个因素中,寻道时间居于支配地位。为了提高磁盘的读写效率,需要降低磁盘的寻道时间,实现的手段是磁盘调度。磁盘调度的算法有以下几种:
(1)先来先服务FCFS(First Come,First Serve)
先来先服务是一种自然公平的调度策略。先来后到,谁也有没有特权。因为自然公平的策略效率十分低下,因此很少采纳。改进的办法就是对每个磁盘读写任务进行区别对待。
(2)短任务优先STF(Shortest Task First)
谁的磁盘读写数据量少,谁就优先。由于磁盘的访问时间主要取决于寻道和延迟,因此读写的数据量对整修磁盘读写时间的影响并不大。因此这种策略意义不大。
(3)短寻道优先SSF(Shortest Seek First)
短寻道优先则考虑当前磁头离谁的数据最近,谁就优先。由于寻道在磁盘访问时间中占的比重最大,此种策略似乎正中要害,能够缩短磁盘访问时间。不过这种缩短并不是绝对的,它取决于磁盘的读写操作,有时会呈现一种左右摆动的模式。由于左右摆动幅度越来越大,系统花在寻道上的时间迅速增加。而改进的办法就是不要左右摆动,而令其单向运动,这就是电梯调度策略。
(1)电梯调度ES(Elevator Scheduling)
电梯调度的策略就是先满足一个方向所有请求,再满足反方向的所有请求,这样循环往复。在电梯调度策略里,磁头往每个方向运动时(由里面外和由外到里)皆扫描到头。
对于这个策略仔细分析发现,其运行模式与电梯的运行模式并不完全相同,而是一扫到底。从一个方向扫描到头再反转方向,这也许并不是最有效的方案。如果一个方向没有请求了,我们可以提前调头,而无须扫描到尽头才进行调转方向,这种改进的算法就是提前查看电梯算法。
(2)提前查看电梯调度ESLA(Elevator Scheduling with Look Ahead)
如果一个方向在请求满足后,即反转运行,而无须扫描到底。这种算法就是每次往某个方向移动时必须确保该方向还有请求未满足。否则立即调转方向,这样效率才可以得到提高。
(3)单向电梯调度OWES(One Way Elevator Scheduling)
由于这种正反两个方向交替运动也存在一定的问题,所以另外一种改进的办法就是单向电梯调度,即只向一个方向扫描。该方向没有剩余的请求时,则回到0道,再进行同样的扫描,可样可以节省扫描的时间。
1.7 固态硬盘
由于影响磁盘效率低下的瓶颈主要是寻道和旋转时间。寻道和旋转操作之所以效率低下是因为这两项运动是机械运动:磁臂的直线来回运动和磁盘的旋转运动。目前,磁臂移动速度和磁盘旋转速度都已经达到了极限,再提高将导致定位精度的降低。因此,提高磁盘的运行效率只剩下一个办法,那就是将机械运动从磁盘的结构中去除。
使用与内存介质相同或相仿的存储介质构建磁盘就是所谓的固态硬盘(solid state disk,SSD)。
固态硬盘的优点:
(1)可靠性高
(2)无噪音,由于没有风扇,因此不存在风扇发出的噪音
(3)访问速度高,接过于内存的访问速度
(4)热耗低于普通硬盘,更省电
(5)由于不需要旋转,