磁盘和固态磁盘
磁盘的物理结构
磁盘的表面由一些磁性的物质组成,可以用这些磁性物质来记录二进制数据。磁盘的盘面被划分成一个个磁道,这样一个“圈”就是一个磁道。同一磁盘上不同磁道上记录的信息量相同,因此内侧磁道上的数据密度较大。一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同
如下图,所示。一个磁盘中可能会有多个盘面,一个盘面上会有不同的磁道。对于活动的头磁盘,磁臂可以来回伸缩来确定磁头定位磁道,因此每个盘面对应一个磁头。而对于一个固定头磁盘,每个盘面的每个磁道都有一个对应的磁头。
了解了磁道的物理结构,我们便可以用(柱面号,盘面号,扇区号)
(编号的顺序不能换,在后面的减少延迟时间的方法具体解释)来定义任意一个“磁盘块”。根据该地址读取一个“块”的过程如下:
- 根据柱面号移动磁臂,让磁头指向指定柱面
- 激活指定盘面对应的磁头
- 磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写(实质上是电流的磁效应,和切割磁感线,具体的可以看机组中的磁盘描述)
磁盘一次读/写操作的时间
一次磁盘的读写时间
一次磁盘的读写时间由寻找(寻道)时间、旋转延迟时间和传输时间决定
寻找时间(寻道时间)Ts:在读写数据前,将磁头移动到指定磁道所花的时间。
- 启动磁头臂需要的时间
- 移动磁头需要的时间
延迟时间 T R T_R TR:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。设转速为r,则平均所需的延迟时间 T R = 1 2 r T_R = \frac{1}{2r} TR=2r1
传输时间 T t T_t Tt:从磁盘读出或向磁盘写入数据所经历的时间,假定磁盘转速为r,此次读写的字节数为b,每个磁道上的字节数为N。则传输时间 T t = b r N T_t = \frac{b}{rN} Tt=rNb
总的平均存取时间$T_a=T_s + \frac{1}{2r} + \frac{b}{rN} $
延迟时间和传输时间都与磁盘的转速相关,。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间。但是操作系统的硬盘调度算法会直接影响寻道时间。
磁盘调度算法
先来先服务算法(FCFS)
FCFS算法的根据进程请求访问磁盘的先后顺序进行调度。
优点是该种算法的具有公平性,不会产生饥饿现象。当只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有达到较好的性能
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS性能上较差,寻道时间较长
最短寻找时间(SSTF)
SSTF(Shortest Seek Time First)算法有限处理与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是不能保证总的寻道时间最短.(贪心思想)
优点:性能较好,平均寻道时间短
缺点:可能产生饥饿现象(当进程中有一个较大的磁道号的请求时,但后面来了很多低磁道号,导致大磁道号的请求长时间未被响应)
SCAN算法(电梯调度算法)
SSTF算法会产生饥饿的原因在于,磁头可能会一直在一个区域内来回移动。于是出现了SCAN算法,SCAN算的思想在于:只磁头移动到最外侧磁道的时候才能往回移动,移动到最内侧磁道的时候才能往外移动。这种方式类似于电梯的运行,因此也叫做电梯算法
优点:性能较好,平均寻道时间较短,不会产生饥饿现象
缺点:
- 只有到达最边上的磁道才能改变磁头方向,有部分时间浪费
- SCAN算法对个位置磁道的响应频率不平均,磁道号高的磁道更容易被多次访问,可以根据下图看出
注意:若题目中无特别说明,则SCAN就是LOOK
LOOK调度算法
LOOK算法与SCAN算法的不同之处在于,弥补了SCAN算法的第一个缺点。
LOOK算法的思想是:如果在磁头的移动方向上已经没有别的请求,就可以立即改变磁头移动方向。
优点:相比于SCAN算法来,不需要每次都移动到最外侧或者最内侧才改变磁头方向,是寻道时间进一步缩短
循环扫描算法C-SCAN
C-SCAN算法其实也是对SCAN算法的一个改进,C-SCAN算法弥补了SCAN算法的缺点2——对不同位置的磁道访问频率不同
C-SCAN算法规定只有磁头朝某个特定方向运动时才处理磁道访问请求,而返回时直接快速移动至起事端而不处理任何请求
优点:比SCAN算法,对各个位置磁道的响应频率都很平均
缺点:只有到达最边上的磁道时才能改变磁头移动方向,因此会浪费部分寻道时间(SCAN算法的缺点1)
注意:若题目中无特别说明,C-SCAN就是C-LOOK
C-LOOK算法
C-LOOK算法其实就是C-SCAN和LOOK算法的结合。
C-LOOK算法的思想:如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道请求的位置即可,返回过程中磁头不处理请求
优点:比起C-SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,是寻道时间进一步缩短
注意:若题目中无特别说明,则SCAN就是LOOK;C-SCAN就是C-LOOK
减少延迟时间的方法
假设现在要读取,下图这种扇区编号连续磁盘中的2、3扇区:
磁头在读取一个扇区的时候,需要一下小段的时间处理,此时磁头不工作。但此时磁头又在不停地旋转。因此当读取完2号扇区的时,无法连续地读入3号扇区,必须等待盘片继续旋转,再次划过磁头,才能完成扇区读入。
所以若磁盘按照顺序对扇区编号的时读取多个连续的逻辑区,可能要很长的延迟时间
交替编号
阅读了上面这个小案例后,可以想到用不连续的给扇区编号来解决。即采用交替编号的策率,让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延时跟段
磁盘地址结构的设计
这个小节就是解释为什么磁盘的物理地址是(柱面号,盘面号,扇区号)而不是(盘面号,柱面号,扇区号)
若要连续读取物理地址(00,000,000)~(00,000,111)
转两圈可读完,之后在读取物理地址相邻的区域,即(00,001,000)~(00,001,111)
。
若采用(盘面号,柱面号,扇区号)的地址结构,因为要切换磁道所以需要启动磁头臂,将磁头移动到下一个磁道,再转两圈对数据进行读取。
而要是采用(柱面号,盘面号,扇区号)的地址结构,因为两部分数据在不同盘片的同一磁道,因此只需要激活对应盘片磁道的磁臂即可,从而节省了启动磁头臂并移动的时间
虽然采用(盘面号,柱面号,扇区号)
错位命名
采用错位命名的原因和采用交替编号的理由类似。即如果要连续访问(00,00,111)
和(00,01,000)
这两个地址。
若不采用错位命名的方式,如下图。当0号盘面读取完,一号盘面对应的磁头也一起转过了这个扇区,所以还需要再转一圈才可以读取出其中的数据
而当采用错位命名的方式,如下图。由于采用错位命名方式,因此当读完磁盘块(00,00,111)
之后,还有一段时间处理,当(00,01,000)
第一次划过1号盘面的磁头下方时,就可以直接读取数据,从而减少了延迟时间
磁盘的管理
磁盘的初始化
Step1:在磁盘可以存储数据之前,必须将它分成扇区,以便磁盘控制器可以进行读写,这个过程称为低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可以分为头、数据区、尾三个部分组成。管理扇区的各种数据结构一般放在头、尾两根部分,包含扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)
Step2:将磁盘分区,每个分区由若干柱面组成(即C、D、E盘)
Step3:进行逻辑格式化,创建文件系统。包括创建问及那系统的根目录、初始化存储空间管理所使用的数据结构
引导块
通常在ROM中保留很小部分的自举装入程序,而将完整的引导程序保存在磁盘的启动块上,启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘
坏块
对于简单的磁盘,可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,例如在FAT表上标明。在这种方式中,坏块对操作系统不透明。
对于复杂的磁盘,磁盘控制区(磁盘设备内部的一个硬件部件)会维护一个坏块链表。在磁盘出厂前进行低级格式化(物理格式化)时就将坏链进行初始化。会保留一些“备用扇区”,用于替换坏块。这种方案称为扇区备用。且这种处理方式的中,坏块对操作系统透明。
固态硬盘
固态硬盘SSD是一种基于闪存技术的存储器。它与U盘本质无差异。一个SSD由多个存储芯片和闪存翻译层组成。SSD有很多优点,例如没有任何机械噪声和震动,能耗低,抗震性号,安全性高等
SSD的写比较慢(但是快于磁盘),因为在写数据的时候,若写数据的页Pi已经含有数据了,那么这个块中所有含有用数据的页都必须被复制到一个新块中,然后才能对该页Pi进行写操作。
固态硬盘的缺点是,闪存的擦写寿命是有限的。因此一般搭配磨损均衡技术,而磨损均衡技术分为两种:
- 动态磨损均衡。写入数据时,自动选择较新的闪存块。老的闪存块先歇歇
- 静态磨损均衡。这种技术更为先进,SSD会监测并自动进行数据分配,让老的闪存块承担无须写数据的存储任务,同时让较新的闪存块腾出空间
参考
- 《王道 24 操作系统考研指导》