1.磁盘
1.1 概述
磁盘(Disk)是由表明涂有磁性物质的物理盘片,通过一个称为磁头的导体线圈从磁盘存取数据。
在读/写期间,磁头固定,下面的磁盘在高速旋转。
磁盘是可共享设备(分时共享),是指某段时间内可以有多个用户进行访问,但某一时刻只能由一个作业可以访问。
文件以块为单位存放在磁盘中,读写时也以块为单位。
1.2 结构
1.2.1 磁盘的结构
磁盘上面的数据存储在一组同心圆中,称为磁道(Track)
,每条磁道等宽,一个盘面上有上千条磁道。所有盘片上的相同磁道组成柱面(Cylinder)
。
磁道又划分为若干个扇区(Sector)
,每个扇区存储容量相同(尽管“长度”不同),一个扇区又称为盘块
。相邻扇区或磁道会通过一定的间隙分隔开。
由于扇区是按圆心角度划分,因此由最内道向最外道,密度逐渐递减。
磁盘的存储容量受限于最内道的最大记录密度。
1.2.2 磁盘驱动器的结构
磁盘驱动器由磁头臂、用于旋转磁盘的主轴和用户数据输入/输出的电子设备组成。
多个盘片垂直堆叠,组成磁盘组,每个盘面对应一个磁头,所有磁头固定在一起,与磁盘中心的距离相同且一起移动。
扇区
是磁盘可寻址的最小单位,磁盘上能存储的物理块数由盘面数、磁道数和扇区数共同决定。
磁盘地址用柱面号 · 盘面号 · 扇区号
表示。
1.3 分类
固定头磁盘
:磁头相对于盘片的径向方向是固定的。活动头磁盘
:每个磁道对应一个磁头,磁头可移动,可来回伸缩定位磁道。固定盘磁盘
:磁盘永久固定在磁盘驱动器内。活动盘磁盘
:磁盘可移动且可替换。
1.4 管理
1.4.1 初始化
一个新的磁盘只是一个磁性记录材料的空白盘,真要使用该磁盘,则必须先对该磁盘进行低级格式化/物理格式化
,以将每个扇区结构格式化为特殊的数据结构(还确定了磁盘扇区的校验码),然后磁盘控制器才能对其进行读写。
低级格式化后的每个扇区的数据结构由头部、数据区域(通常大小为256B或512B)、尾部组成。头部和尾部包含了一些磁盘控制器的使用信息。
大多数磁盘在工厂的制造过程中就已被低级格式化了,这种格式化能够让厂商测试磁盘的好坏,同时它还能初始化从逻辑块号到无损磁盘扇区的映射。
1.4.2 分区
在可以使用磁盘存储文件之前,OS还需要将自己的数据结构记录到磁盘上。
- 将磁盘划分为一个或多个柱面组成的分区,每个分区的起始扇区和分区大小都将记录在磁盘的主引导记录(MBR)中。
- 对物理分区进行逻辑格式化/高级格式化(创建文件系统(FS)),OS将FS的数据结构存储到磁盘上,这些数据结构包括空闲空间、已分配的空间和一个初始为空的目录。
通常扇区都很小,因此为了提高效率,OS将多个相邻的扇区组合在一起,形成一
簇
(Linux中称为块),为了进一步提高效率,规定一簇只能存放一个文件的内容,文件所占的空间只能是簇的整数倍。
1.4.3 引导块
计算机启动时需要一个初始化程序(自举程序)
,它用来初始化CPU、寄存器、设备控制器、内存等,然后启动OS。为此,自举程序需要找到存储在磁盘上的OS内核,然后将它加载到内存中,然后转到OS的起始地址,开始OS的运行。
自举程序通常保存在ROM中,但由于自举代码的改变可能会需要改变ROM硬件的问题,通常只在ROM中存放很小的额自举装入程序,将完整功能的引导程序存放在磁盘的启动块上,启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘。
自举装入程序将指示磁盘控制器将引导块读入内存,然后开始执行自举程序,它将从非固定的磁盘位置加载并运行整个OS。
1.4.4 坏块
由于磁盘有移动部件且容错能力弱加之其他外界因素的干扰,因此很容易导致一个或多个扇区的损坏。对于此类盘块的处理有下面几种:
- 对于简单磁盘:若采用IDE控制器的磁盘,则坏块可以手动处理;若采用MS-DOS的Format命令执行逻辑格式化时会扫描磁盘以检查坏块,并在检查出来的坏块会在FAT表上标明,以告知程序不要再使用这些坏块。
- 对于复杂磁盘:控制器将在磁盘内维护一个坏块列表,这个列表在磁盘出厂时就已被低级初始化,并将在磁盘使用过程中不断更新,与此同时,低级初始化还划出部分块来作为备用块,这些备用块在闲置时将对OS不可见,仅在控制器将准备用备用块来替换坏块时,它们才可见以顶替坏块来承担存储的任务。这种方案称为
扇区备用
。
对坏块的处理实质上是使用某种机制不让OS去使用这些坏块。
1.5 性能指标
1.5.1 寻道时间
活动头磁盘在读写信息前,将磁头移动到指定磁道所需要的时间。(从家里去公交站牌所需的时间)
注:
- m:与磁盘驱动器速度有关的时间常数,通常为0.2ms。
- n:跨越的磁道数。
- s:启动磁臂的时间。
1.5.2 旋转延迟时间
磁头定位到某一扇区所需要的时间。
注:
- r:磁盘的旋转速度。
旋转延迟时间最小为
0
(不用等,相当于刚到站牌,公交车就到了),最大为1/r
(刚到站牌,但不巧的是,公交车刚走,于是得等整一圈的时间)。这里的公式取了个平均。
旋转延迟的时间的大小与磁盘调度算法无关。
旋转延迟时间的大小与磁盘空闲空间的分配、文件的物理结构有关。
1.5.3 传输时间
从磁盘读出或向磁盘写入所经历的时间,该时间取决于读写的字节数和磁盘的旋转速度。(坐上公交车去上班所经历的时间)
注:
- b:每次读/写的总字节数。
- r:磁盘的转速。
- N:一个磁道上的所存储的字节数。
总平均存取时间:。该公式仅具有参考意义,因为真正进行磁盘存取时,其存取时间与调度算法密切相关。
寻道时间和旋转延迟时间这类“找”的时间可通过一定的方法削减,但传输时间与磁盘本身特性有关,很难通过采取一定措施削减。
磁盘调度中,对读/写时间影响最大的是
寻道时间
,寻找过程为机械运动,时间较长,影响较大。
1.6 磁盘调度算法
磁盘调度时对访问磁道次序的调度。
1.6.1 先来先服务算法(First Come First Served,FCFS)
1.6.1.1 评估
FCFS算法根据进程请求访问磁盘的先后顺序进行调度。
假设访问序列为:98,183,37,122,14,124,65,67
1.6.1.2 评估
该算法具有公平性,且当仅有少量进程需要访问并且访问的位置邻近时,该算法能达到很好的性能,但如果访问进程多且访问位置分散的话,那该算法就有点类似随机算法了。。。
1.6.2 最短寻找时间优先算法(Shortest Seek Time First,SSTF)
1.6.2.1 概述
SSTF算法将优先选择离当前磁头所在磁道距离最近的磁道。
假设访问序列为:98,183,37,122,14,124,65,67
最终访问序列为:65,67,37,14,98,122,124,183
1.6.2.2 评估
该算法存在“饥饿”现象。
1.6.3 扫描算法(SCAN)/电梯调度算法
是SSTF算法的优化版,它规定了磁头的移动方式,单向扫描的过程中必须确保移动方向不改变,只有撞到“南墙”后才“回头”(即扫描到该方向上的最后一个磁道后调转方向扫描)。
假设访问序列为:98,183,37,122,14,124,65,67
最终访问序列为:37,14,0,65,67,98,122,124,183
当然,不一定每次回返时都要返回到端点,我们只要到达最远的一个请求点返回即可:(LOOK算法
)
1.6.4 循环扫描算法(Circular SCAN,C-SCAN)
是SCAN算法的优化版,仍然规定磁头单向移动,但回返时将直接移动到起始端而不服务于任何请求。
假设访问序列为:98,183,37,122,14,124,65,67
最终访问序列为:65,67,98,122,124,183,199,0,14,37
同样地,不一定每次回返时都要返回到端点,我们只要到达最远的一个请求点返回即可:(C-LOOK算法
)
当系统总是出现某个磁道的连续访问请求时,导致系统总是访问磁盘的某个磁道而不对其他磁道的访问请问进行相应的现象(磁臂黏着现象)。处在该情况下,FCFS算法会按照服务请求次序依次进行服务,不会出现磁臂黏着现象,而SSTF、SCAN、C-SCAN算法均会一直服务该磁道的请求,会引发磁臂黏着现象。
上述几种调度算法的比较:
2.固态硬盘
2.1 概述
固态硬盘(SSD)是一种基于闪存技术的存储器,它与U盘并无本质差别,只是容量更大,性能更好。
SSD基于闪存技术,没有机械部件,因此随机读写不需要机械操作,其读写速度明显高于磁盘。但是SSD的缺点是容易磨损。
尽管SSD的写速度慢于读速度,但不至于比常规硬盘差。
相比于常规硬盘,固态硬盘的优势主要体现在随机存取的速度上。
2.2 结构
一块SSD由一个或多个闪存芯片和闪存翻译层组成。
闪存芯片 ≈ 传统旋转磁盘中的机械驱动器。
闪存翻译层 ≈ 磁盘控制器,用于将来自CPU的对逻辑块的读写请求翻译成对底层物理设备的读写控制信号。
一个闪存由B个块组成,一个块由P个页组成。
数据是以页为单位进行读写的,只有某一页所在的块被整个擦除后,才能对该页进行写。若对某个页进行修改,需要将该页所在的块中所有的页复制到一个新的被擦除过的块中之后,才能进行写。
擦除块比访问页要高出一个数量级。
某个块进行若干次重复写后,可能就会因磨损而无法使用。
2.3 优点
- 由半导体存储器构成,无移动的部件,因此随机访问速度要快于机械硬盘。
- 没有任何的机械噪声和震动,能耗更低,抗震性好,安全性高 and so on。
2.4 磨损均衡(Wear Leveling)
2.4.1 概述
由于闪存的采血寿命是有限的,一般是几百次到几千次。为了弥补SSD的寿命缺陷,便引入磨损均衡技术。
2.4.2 分类
动态磨损均衡
:写入数据时,将有限选择新的闪存块,让老的闪存块“歇一歇”。静态磨损均衡
:即使在无数据写入时,SSD也会监测并自动进行数据的分配,让老的闪存块承担无需写数据的存储任务,让新的闪存块腾出空间来,并使平常的读写操作都在新的闪存块中进行。
光盘、磁盘和U盘可进行随机读写,磁带只能顺序读写。
静态磨损均衡算法的表项优于动态磨损算法。