操作系统核心原理-6.外存管理(上)磁盘基础

  计算机是处理数据的机器,而数据就需要有地方存放。在计算机中,可供数据存放的地方并不太多,除了内存之外,最主要的存储数据的媒介就是磁盘。对于大多数计算机领域的人来说,磁盘通常被看做是一种外部设备。可是,对于现代操作系统来说,磁盘是不可或缺的。虽然早期的操作系统可以基于磁带,但由于操作系统复杂性和性能的不断提升,用磁带作为操作系统的载体已经不合时宜,取而代之的是磁盘。由于操作系统需要存放在磁盘上,且操作系统内的文件系统也是基于磁盘,所以,从某种程度来说,磁盘是操作系统不可分割的一部分,理解磁盘将对理解操作系统的原理具有重要的意义。

一、磁盘的结构

1.1 什么是磁盘?

  通俗地讲,磁盘就是以形状像盘子一样的磁性存储介质

  (1)特性是持久,正常情况下数据存放在上面不会消失;

  (2)显著特征是磁性圆形,因此被称为磁盘;

  (3)价格低廉,因此可以大量使用;

1.2 磁盘的结构

  一块磁盘实际上并不是只有一块盘片,而是由多块盘片组成,每块盘片的正反两面皆可以存放数据。下图给出的是一个将磁盘外壳切开一块所看到的结构图:

  (1)每个盘面上都有一个读写磁头,而所有读写磁头都连在一根共享的磁臂上。

  (2)当磁臂运动时,所有的磁头均作相同的运动,盘片则以常速不停地旋转。

PS:盘片的旋转速度通常为每分钟3500~10000转,即大约每6ms~17ms旋转一圈。目前3500转的磁盘已经看不到,对于笔记本来说,最低的都是5400转了,一般都是7200转,10000转+已经是机械磁盘的极限。 

1.3 盘面的结构

  为了方便存储数据,人们将每块盘面又分为磁道扇面,如下图所示:

  (1)磁道是一个个的同心环;

  (2)每个磁道又被分为若干个扇面(也称为扇区),数据是以扇面进行存储的,扇面也是磁盘I/O的最小单位;

  (3)扇面的内容通常分为3个部分:标题、数据部分和ECC纠错信息,如下表所示:

二、磁盘驱动器的访问速度

  磁盘在读写数据时的访问速度称为磁盘的动态属性,这是衡量一个磁盘性能的重要数据。数据访问时间或速度的计算并不简单,而这种计算不仅依赖于磁盘的旋转速度,还依赖于在访问开始时读写磁头所处的位置。数据访问时间也有几种衡量办法:

2.1 寻道时间

  寻道时间(Seek Time)是指将读写磁头移动到所要求的磁道位置所需要的平均时间。寻道时间通常在8ms~20ms以内,在近年来变化不大。

2.2 磁道到磁道的访问时间

  磁道到磁道的访问时间(Track-to-Track Time)衡量的是磁头从一个磁道移动到一个相邻磁道所需要的时间。这个时间通常在2ms~3ms以内,它也被称为柱面切换时间或磁道切换时间。

2.3 旋转延迟时间

  旋转延迟时间指的是磁头到达所要求的磁道位置后,等待所要求的扇面旋转到磁头下方的平均时间。当前磁盘驱动器的旋转速度所处的范围为每分钟3500~10000转,因此旋转延迟的范围在3ms~8.57ms内。

→ 平均访问时间 = 寻道时间 + 旋转延迟时间

三、磁盘调度算法

3.0 磁盘读写时间的影响因素

  (1)寻道时间

  (2)旋转延迟时间

  (3)数据传输时间

  在以上3者中,前两者为机械运动,数据传输主要为电子运动,机械运动的速度远低于电子运动的速度。在两个机械运动中,寻道时间又相对较长,因此,寻道时间居于支配地位。所以,为了提高磁盘的读写效率,需要降低磁盘的寻道时间,实现的手段则是磁盘调度。下面我们陆续来了解一下主要的磁盘调度算法。

3.1 先来先服务算法

  先来先服务是一种自然公平的调度策略,先来后到,谁也木有神马特权!

  例如下图中的一组磁盘请求,其中X表示需要读写的扇面,下面的数字为磁道号(这里不考虑旋转延迟,数据所在的扇面号在此忽略)。假定磁头的初始位置为10号位,而磁盘请求发生的顺序为0、23、6、16、2、21、8、9、12。则在先来先服务调度下,总寻道的道数为:

  先来先服务追求自然公平,当然效率也十分低下,因此很少采纳。

3.2 短任务优先算法

  短任务优先就是谁的磁盘读写数据量最少,谁就优先。由于磁盘的访问时间主要取决于寻道和旋转延迟,因此读写的数据量对于整个磁盘读写时间的影响并不大,因此这种策略意义不大。

3.3 短寻道优先算法

  短寻道优先则考虑当前磁头离谁的数据最近,谁就优先。由于寻道在磁盘访问时间中占的比重最大,因此此种策略能够缩短磁盘访问时间。

  例如继续使用上面FCFS的例子,使用短寻道优先算法的访问磁道号顺序为:9、8、6、2、0、12、16、21、23,总寻道数为1+1+2+4+2+12+4+5+2=33,可以看到比FCFS的109个少了好几倍。

  但是,这种缩短并不是绝对的,如果当前的磁盘读写操作如下图所示,则磁盘读写请求的执行呈现的就是一种左右摆动的模式,这种情况下总寻道数=1+3+7+15+31=57。

  从上图也可以看出,寻道执行呈现出一种左右摆动的情况,如果左右摆动的幅度越来越大,系统花费在寻道上的时间将会迅速增加。而改进的办法就是不要左右摆动,而令其单向运动,这就是下面将要提到的电梯调度策略。

3.4 电梯调度算法

  电梯调度的核心思想是:先满足一个方向的所有请求,再满足所有反方向的请求,如此循环往复

  这里再次使用FCFS的例子来看,使用电梯调度时,磁头往每个方向运动时皆会扫描到头,如下图所示:

  这里的总寻道数为:1+4+16+1+24+8=54,比短寻道优先节省了3个磁道的寻道时间。

  但是,电梯调度策略执行时,如果一个方向已经没有需求了,它还是会扫描到末端才会掉头,无法提前调度,也就影响了效率。因此,实现提前调度的电梯调度就是下面要介绍的提前查看电梯调度算法。

3.5 提前查看电梯调度算法

  提前查看电梯调度算法的核心思想是:如果一个方向的请求全部满足后,立即反转运行,而无需扫描到底。每次往某个方向移动时必须确保该方向还有请求未满足,否则就立刻调转方向,这样也就提高了效率。

  还是使用FCFS的例子来看,使用提前查看电梯调度算法的总寻道数为:1+4+16+23+8=52,比普通的电梯调度算法节省了2个磁道的寻道时间,如下图所示:

  这种正反两个方向的交替运动并不一定最优,另一种改进办法则是单向电梯调度:即只向一个方向扫描。当该方向没有剩余请求时,则回到0道,再进行同样的扫描。同样,在FCFS的例子中,如果使用单向电梯调度策略,那么执行结果会如下所示,其总寻道数为:1+4+16+8=29,比提前查看电梯调度节省了23个磁道的寻道时间。

四、关于固态盘

  前面的介绍我们可以知道:磁盘低下的瓶颈在于寻道和旋转延迟,而寻道和旋转操作之所以效率低下的原因又在于它们都是机械运动(磁臂的直线来回运动和磁盘的旋转运动)。目前,磁臂移动速度和磁盘旋转速度已达或接近极限,再行提高会导致定位精度的降低。因此,提高磁盘的运行效率只能将机械运动从磁盘的结构中去除。

  回想一下我们之前提到的内存,不就是没有机械运动的存储介质嘛?于是,使用与内存介质相同或相仿的存储介质构建的磁盘就是所谓的固态盘(Solid State Disk,SSD)横空出世了。

  固态的原始意义是半导体驱动器,但在今天的存储工业界已经演化为表示没有机械运动部件的驱动器由于没有移动的部件,整个驱动器似乎是固定的,因而也就被称为固态盘

  由于木有移动的机械部件,固态盘具有一些机械盘所不具备的优点:

  (1)可靠性高,没有噪音(没有风扇);

  (2)访问速度快,接近内存的访问速度;

  (3)热耗低于机械盘,且更省电;

  (4)不需要旋转,其启动时间更短;

  但是,固态盘最大的问题是成本,其单位容量成本大约为机械盘的10~20倍,这对于大容量的固态盘来说,这个成本十分可观。对于小容量的固态盘来说,我们已经能够承受。

参考资料

邹恒明,《操作系统之哲学原理》,机械工业出版社

 

posted @ 2016-01-17 02:00 Edison Chou 阅读(...) 评论(...) 编辑 收藏