操作系统入门 – 磁盘管理
1.磁盘结构
1.1 磁盘
表盘有一些磁性物质组成的盘片,可以利用这些磁性物质存储二进制数据
1.2 磁道
一个盘片上被划分为很多圆环,这些圆环就是磁道
1.3 扇区
上述的圆环又被分为很多部分,这些部分称为扇区。
1.4 磁盘物理地址
磁盘中可以使用柱面号、盘面号、扇区号来定义任意磁盘块。文件存储的块号就可以转换为对应的物理地址。磁盘读取一个块时首先按照柱面号摆动磁臂到对应磁道,激活指定盘面对应的磁头。磁盘在旋转过程中,指定扇区会从磁头下经过,这样就完成了文件读写。
2.磁盘调度算法
磁盘调度算法可以让计算机控制磁盘以最短的时间找到对应的内容
2.1 一次磁盘读/写操作需要的时间
-
寻道时间TS:在读/写数据前,将磁头移动到指定磁道所花费的时间。磁头启动时间为s,磁头经过每个磁道的时间为m,此时经过n个磁道的寻道时间为
T s = s + m ∗ n T_s = s + m * n Ts=s+m∗n -
延迟时间TR:通过旋转磁盘,使磁头定位到目标扇区所需的时间。设磁盘转速为r(转/分),则平均需要延迟时间为 T R = 1 2 ∗ 1 / r = 1 2 / r T_R = \frac{1}{2} * 1/r = \frac{1}{2}/r TR=21∗1/r=21/r
-
传输时间Tt:从磁盘读出或写入数据经历的时间,假设磁盘转速为r,读/写字节数为b,每个磁道上字节数为N则传输时间为 T t = ( 1 / r ) ∗ ( b / N ) = b / ( r N ) T_t = (1/r)*(b/N) = b/(rN) Tt=(1/r)∗(b/N)=b/(rN)
2.2 磁道调度算法
2.2.1 先来先服务(FCFS)
和进程调度的FCFS一样,这里磁盘将会根据请求访问的先后顺序控制磁臂摆动。
- 例子:假设磁头初始位置为100号磁道,目前有多个进程先后请求访问55、58、39、18、90、160、150、38、184。按照FCFS思想来看,上述几个磁道都要依次访问,因此磁头将会从100磁道触发,先到55磁道,并按照顺序依次访问。此时次都一共移动了45+3+19+21+72+70+10+112+146=498个磁道。
2.2.2 最短寻找时间优先(SSTF)
SSTF算法会优先处理距离磁头所在磁道最近的磁道,可以保证每次寻道时间最短,但是无法保证总体寻道时间最短。
- 例子:设磁头所在磁道为100,目前有多个进程先后请求访问55、58、39、18、90、160、150、38、184。按照SSTF思想,磁头首先会摆动到90磁道,然后是58,以此类推。总共移动(100 - 18) + (184 - 18) = 248个磁道。
2.2.3 扫描算法(SCAN)
SSTF算法容易产生饥饿,因为请求磁道的不同,磁头可能只会在很小的区间内摆动,因此当存在距离较远的磁道时可能无法响应请求。因此规定当磁头到最外侧时才能向内移动,到最内侧时才能向外移动。
- 例子:
2.2.4 Look算法
上述算法中了解到,只有当磁头到达边缘,即最外侧或最内侧时才能改变磁头方向,但如果磁头摆动到边缘之前就已经完成请求响应那这样做会产生不必要的浪费,因此Look算法会在没有更上方的请求后立即改变磁头的方向。
- 例子:
3.磁盘管理
3.1 磁盘初始化
文件物理结构为链式结构,把文件的数据块用链接的方式连起来形成类似单向链表的结构,这样的话可以方便操作系统进行管理,另外管理扇区所需要的数据结构一般都是放在头和尾的位置,比如说扇区校验码。
3.1.1 初始化
- 首先磁盘进行物理格式化,将磁盘各个磁道划分扇区。每个扇区分为头、数据区域、尾组成。管理扇区的各种数据结构一般存放在头、尾两个部分,包括扇区校验码
- 将磁盘分区,每个分区由若干柱面组成。
- 逻辑格式化,创建文件系统。包括文件系统根目录、初始化存储空间管理所用的数据结构
3.1.2 引导块
完成初始化后,就需要把操作系统相关数据写入磁盘中。而引导块中的数据就是计算机启动是第一个执行的程序,其中包括了CPU初始化、内存初始化等功能。
3.2 坏块处理
对磁盘来说,在逻辑格式化时会对整个磁盘进行坏块检查,标明哪些扇区为坏扇区。而某些复杂磁盘中磁盘控制器会维护一个坏块表,同时也会保留一些备用扇区用于替换坏块。这就是磁盘实际容量无法达到标称容量的原因之一。