4.3、磁盘组织与管理

1、磁盘的结构

磁盘是由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称谓磁头的到体系安全从磁盘中存取数据。在读写操作期间,磁头固定,磁盘在下面高速旋转。磁盘的表面上数据存储在一组同心圆中,称为磁道。每个磁道与磁头一样快,一个盘面上有上千个磁道。磁道有划分为几百个扇区,每个扇区固定存储大小(通常为512B),一个扇区称为一个盘块。由于扇区按固定圆心角划分,所以每季度从最外道向里道增加,磁盘的存储能力受限于最内道的最大记录密度。

磁盘地址用“柱面号-盘面号-扇区号(或块号)”来表示。

2、磁盘调度算法

目前常用的磁盘调度算法有以下几种:

1)先来先服务(FCFS)算法

FCFS算法根据进程请求访问磁盘的先后顺序进行调度处理,这是一种最简单的调度算法。这种算法的优点是具有公平性。如果只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则会达到较好的性能;但如果有大量进程竞争使用磁盘,那么这种算法在性能上往往低于随即调度。所以,实际磁盘调度中考虑一些更为复杂的调度算法。

2)最短寻找时间优先(SSTF)算法

SSTF选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,一是每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比FCFS算法更好的性能。这种算法会产生饥饿现象。

3)扫描(SCAN)算法又称为电梯算法

SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。SCAN算法对最扫描过的区域不公平,因此,他在访问局部性方面不如FCFS算法和SSTF算法好。

4)循环扫描(C-SCAN)算法

在扫面算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。

采用scan算法和c-scan算法时磁头总是严格地遵循从盘面的一端到另一端,显然在实际使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点这种形式的SCAN算法和C-SCAN算法成为LOOK和C-LOOK调度。这是因为它们在朝一个给定方向移动前会查看是否有请求。

对比以上几种磁盘调度算法,FCFS算法太简单,性能较差,仅在请求队列长度接近于1时才较为理想;SSTF算法较为通用和自然;SCAN算法和C-SCAN算法在磁盘负载较大时比较占优势。

除了减少寻找时间外,减少延迟时间也是提高磁盘传输效率的重要因素。可以对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名。

磁盘时连续自转设备,磁盘机读写一个物理块后,需要经过短暂的处理时间才能开始读写下一个块。假设逻辑记录数据连续存放在磁盘空间中,若在盘面上按扇区交替编号连续存放,则连续读写多个记录时能够减少磁头的延迟时间;同柱面不同扇面的扇区若能错位编号,连续读写相邻两个盘面的逻辑记录时也能减少磁头延迟时间。

3、磁盘的管理

一个新的磁盘只是一个含有磁性记录材料的空白盘。在磁盘能存储数据之前,它必须分成扇区以便磁盘控制器能进行读和写的操作,这个过程称为低级格式化(物理分区)。低级格式化为磁盘的每个扇区采用特别的数据结构。每个扇区的数据结构通常由头、数据区域(通常为512B)大小和尾部组成。头部和尾部包含了一些磁盘控制器所使用的信息。

为了使用磁盘存储文件。操作系统还需要将自己的数据结构记录在磁盘上:第一步将磁盘分为一个或多个柱面组成分区;低而不对物理分区进行逻辑格式化,操作系统将出师的文件系统数据结构存储在磁盘上,这些数据结构包括空闲和已分配的空间以及一个初始为空的目录。

(2)引导块

计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动操作系统。为此,该自举程序应找到磁盘上的操作系统内核,装入内存,并转到起始地址,从而开始操作系统的运行。

自举程序通常保存在ROM中,为了避免改变自举代码需要改变ROM硬件的问题,故指在ROM中保留很小的自举装入程序,将完整功能的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位。拥有启动分区的磁盘称为启动磁盘或者系统磁盘。

(3)坏块

由于磁盘有移动部件且容错能力弱,所以容易导致一个或多个扇区损坏。部分磁盘甚至从出厂时就有坏扇区。根据所使用的磁盘和控制器,对这些坏块有多种处理方式。

对于简单磁盘,坏扇可手工处理。

对于复杂的磁盘,其控制器维护一个磁盘坏块链表。该链表在出厂前进行低级格式化就初始化了,并在磁盘的整个使用过程中不断更新。低级格式化将一些块保留作为备用,对操作系统透明。控制器可以使用备用块来逻辑地代替坏块,这种方案称为扇区备用。