一. 磁盘
二. 磁盘的管理
磁盘初始化
一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须将它分成扇区,以便磁盘控制器能够进行读/写操作,这个过程称为低级格式化(或称物理格式化)。
每个扇 区通常由头部、数据区域和尾部组成。头部和尾部包含了一些磁盘控制器的使用信息,其中利用 磁道号、磁头号和扇区号来标志一个扇区,利用CRC字段对扇区进行校验。
大多数磁盘在工厂时作为制造过程的一部分就已低级格式化,这种格式化能够让制造商测试 磁盘,并且初始化逻辑块号到无损磁盘扇区的映射。对于许多磁盘,当磁盘控制器低级格式化时, 还能指定在头部和尾部之间留下多长的数据区,通常选择256或512字节等。
分区
逻辑格式化的内容
在可以使用磁盘存储文件之前,还要完成两个步骤。
- 第一步是,**将磁盘分区(**我们熟悉的C 盘、D盘等形式的分区),每个分区由一个或多个柱面组成,每个分区的起始扇区和大小都记录 在磁盘主引导记录的分区表中。
- 第二步是,对物理分区进行逻辑格式化(也称高级格式化),将初始文件系统数据结构存储到磁盘上,这些数据结构包括空闲空间和已分配空间,以及一个初始 为空的目录,建立根目录、对保存空闲磁盘块信息的数据结构进行初始化。
因扇区的单位太小,为了提高效率,操作系统将多个相邻的扇区组合在一起,形成一簇(在 Linux中称为块)。为了更高效地管理磁盘,一簇只能存放一个文件的内容,文件所占用的空间只 能是簇的整数倍;如果文件大小小于一簇(甚至是0字节),也要占用一簇的空间。
引导块
计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器 和内存等,接着启动操作系统。为此,自举程序找到磁盘上的操作系统内核,将它加载到内存, 并转到起始地址,从而开始操作系统的运行。
自举程序通常存放在ROM中,为了避免改变自举代码而需要改变ROM硬件的问题,通常 只在ROM中保留很小的自举装入程序,而将完整功能的引导程序保存在磁盘的启动块上,启动 块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘。
引导ROM中的代码指示磁盘控制器将引导块读入内存,然后开始执行,它可以从非固定的 磁盘位置加载整个操作系统,并且开始运行操作系统。下面以Windows为例来分析引导过程。 Windows允许将磁盘分为多个分区,有一个分区为引导分区,它包含操作系统和设备驱动程序。 Windows系统将引导代码存储在磁盘的第0号扇区,它称为主引导记录(MBR)。引导首先运行 ROM中的代码,这个代码指示系统从MBR中读取引导代码。除了包含引导代码,MBR还包含 一个磁盘分区表和一个标志(以指示从哪个分区引导系统),如图5.17所示。当系统找到引导分区时,读取分区的第一个扇区,称为引导扇区,并继续余下的引导过程,包括加载各种系统服务。
坏块
由于磁盘有移动部件且容错能力弱,因此容易导致一个或多个扇区损坏。部分磁盘甚至在出厂时就有坏块。根据所用的磁盘和控制器,对这些块有多种处理方式。
对于简单磁盘,如采用IDE控制器的磁盘,坏块可手动处理,如MS-DOS的Format命令执 行逻辑格式化时会扫描磁盘以检查坏块。坏块在FAT表上会标明,因此程序不会使用它们。
对于复杂的磁盘,控制器维护磁盘内的坏块列表。这个列表在出厂低级格式化时就已初始化, 并在磁盘的使用过程中不断更新。低级格式化将一些块保留作为备用,操作系统看不到这些块。 控制器可以采用备用块来逻辑地替代坏块,这种方案称为扇区备用。
对坏块的处理实质上就是用某种机制使系统不去使用坏块。
三. 磁盘调度算法
磁盘存取时间
磁盘调度算法
先来先服务(FCFS)算法
最短寻道时间优先(Shorted Seek Time First,SSTF)算法
扫描(SCAN)算法
LOOK 调度算法
循环扫描(Circular SCAN,C-SCAN)算法
C-LOOK 算法
减少延迟时间的方法
除减少寻道时间外,减少延迟时间也是提高磁盘传输效率的重要因素。
磁盘是连续自转设备,磁头读入一个扇区后,需要经过短暂的处理时间,才能开始读入下一 个扇区。若逻辑上相邻的块在物理上也相邻,则读入几个连续的逻辑块可能需要很长的延迟时间。 为此,可对一个盘面的扇区进行交替编号,即让逻辑上相邻的块物理上保持一定的间隔,于是读入多个连续块时能够减少延迟时间。
此外,由于磁盘的所有盘面是同步转动的,逻辑块在相同柱面上也是按盘面号连续存放的, 即按0号盘0号扇区、0号盘1号扇区……0号盘7号扇区、1号盘0号扇区……1号盘7号扇区、 2号盘0号扇区……的顺序存放。要读入不同盘面上的连续块,在读完0号盘7号扇区后,还需 要一段处理时间,所以当磁头首次划过1号盘0号扇区(下一次要读的块)时,并不能读取,只 能等磁头再次划过该扇区时才能读取。为此,可对不同的盘面进行错位命名[假设有2个盘面, 且已采用交替编号],则读入相邻两个盘面的连续块时也能减少延迟时间。
在磁盘的存取时间中,寻道时间和延迟时间属于“找”的时间,凡是“找”的时间都可以通 过一定的方法优化,但传输时间是磁盘本身性质所决定的,不能通过一定的措施减少。
提高磁盘 I/O 速度的方法
文件的访问速度是衡量文件系统性能最重要的因素,可从以下三个方面来优化:
①改进文件 的目录结构及检索目录的方法,以减少对目录的查找时间;
②选取好的文件存储结构,以提高对 文件的访问速度;
③提高磁盘I/O速度,以实现文件中的数据在磁盘和内存之间快速传送。
其中, ①和②已在第4章文件管理中介绍,这里主要介绍如何提高磁盘I/O的速度。
- 改善磁盘I/O性能的方法
1)采用磁盘高速缓存。
2)调整磁盘请求顺序。即上面介绍的各种磁盘调度算法。
3)提前读。在读磁盘当前块时,将下一磁盘块也读入内存缓冲区。
4)延迟写。仅在缓冲区首部设置延迟写标志,然后释放此缓冲区并将其链入空闲缓冲区链 表的尾部,当其他进程申请到此缓冲区时,才真正将缓冲区信息写入磁盘块。
5)优化物理块的分布。除了上面介绍的扇区编号优化,当文件采用链接方式和索引方式组 织时,应尽量将同一个文件的盘块安排在一个磁道上或相邻的磁道上,以减少寻道时间。 另外,将若干盘块组成簇,按簇对文件进行分配,也可减少磁头的平均移动距离。
6)虚拟盘。是指用内存空间去仿真磁盘,又叫RAM盘。常用于存放临时文件。
7)采用磁盘阵列RAID。由于可采用并行交叉存取,因此能大幅提高磁盘I/O速度。(RAID 属于计算机组成原理存储介质部分内容)
四. 固态硬盘(SSD)
固态硬盘特性
固态硬盘(Solid State Disk,SSD)是一种基于闪存技术的存储器。
它与U盘并无本质差别, 只是容量更大,存取性能更好。一个SSD由一个或多个闪存芯片和闪存翻译层组成,
- 比起传统磁盘,SSD有很多优点
- 它由半导体存储器构成,没有移动的部件,因此随机访问速度比机械磁盘要快很多
- 也没有任何机械噪声和震动,能耗更低、抗震性好、安全性高等。
- 随着技术的不断发展,价格也不断下降,SSD有望逐步取代传统机械硬盘。
磨损均衡(Wear Leveling)
固态硬盘也有缺点,闪存的擦写寿命是有限的,一般是几百次到几千次。如果直接用普通闪 存组装SSD,那么实际的寿命表现可能非常令人失望——读/写数据时会集中在SSD的一部分闪 存,这部分闪存的寿命会损耗得特别快。一旦这部分闪存损坏,整块SSD也就损坏了。
这种磨损不均衡的情况,可能会导致一块256GB的SSD只因数兆空间的闪存损坏而整块损坏。
为了弥补SSD的寿命缺陷,引入了磨损均衡。SSD磨损均衡技术大致分为两种:
1)动态磨损均衡。写入数据时,自动选择较新的闪存块。老的闪存块先歇一歇。
2)静态磨损均衡。这种技术更为先进,就算没有数据写入,SSD也会监测并自动进行数据 分配,让老的闪存块承担无须写数据的存储任务,同时让较新的闪存块腾出空间,平常的读/写操作在较新的闪存块中进行。如此一来,各闪存块的寿命损耗就都差不多。