磁盘的硬件结构 :
磁盘 : 磁盘是表面涂有磁性物质的圆形盘片。
磁道 : 每个盘面划分为一个个磁道,每个磁道又划分为一个个扇区。
盘面 : 磁盘有多个盘面“摞”起来,每个盘片有两个盘面
柱面 : 所有盘面中相对位置相同的磁道组成柱面
磁盘的物理地址 : (柱面号,盘面号,扇区号)
磁盘的分类 :
根据磁头是否可以移动分为 : 固定头磁盘(每一个磁道上有一个磁头) 移动头磁盘(每一个盘面上只有一个磁头)
根据是否可以更换盘片分为 : 固定盘磁盘 可换盘磁盘
磁盘调度算法
一次磁盘读写操作需要的时间 :
-
寻找时间(寻道时间) : 启动磁头臂(s) + 移动磁头(跨越一条磁道时间 m * 需要跨越的磁道数n) s
-
延迟时间 : 使磁头定位到目标扇区所需要的时间 :设磁盘转速为r (转每秒) 按照平均转半圈算的
- 传输时间 :
其中 b 是字节数,N表示一条磁道上的字节数
M为扇面的个数
一次访存总的访问时间 $$T_{a} = T_{s} + T_{r} + T_{t} = mn + s + \frac{1}{2r} + \frac{1}{rM}$$
先到先服务算法 :
假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问55、58、39、 18、90、160、150、38、184 号磁道
按照FCFS的规则,按照请求到达的顺序,磁头需要依次移动到55、58、 39、18、90、 160、150、 38、184号磁道
磁头总共移动了45+3+19+21+72+70+10+112+146 = 498个磁道
响应一个请求平均需要移动498/9= 55.3个磁道(平均寻找长度)
最短寻道时间算法 :
SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)
假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问55、58、39、18、 90、160、150、38、184号磁道
磁头总共移动了(100-18) + (184-18) = 248个磁道
响应一个请求平均需要移动248/9=27.5个磁道( 平均寻找长度)
优点:性能较好,平均寻道时间短 缺点:可能产生“饥饿”现象
如果源源不断的来近的磁道的请求的话,远的磁道可能出现饥饿的现象
扫描算法(电梯算法) :
SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问55、58、39、18、90、160、150、38、184 号磁道
只有到了最边上的磁道才能改变磁头移动方向减少磁盘延迟时间的方法
磁头总共移动了(200-100) + (200-18) = 282个磁道
响应一个请求平均需要移动282/9=31.3个磁道(平均寻找长度)
优点:性能较好,平均寻道时间较短,不会产生饥饿现象
缺点: 1. 只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。
2. SCAN算法对于各个位置磁道的响应频率不平均(如:假设此时磁头正在往右移动,且刚处理过90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道的请求之后,很快又可以再次响应184号磁道的请求了)
扫描算法的改进(LOOK调度算法)
边移动边观察,如果前进的方向已经没有任务了,就不再向前,改变方向移动
扫描算法的改进(循环扫描算法)
只有磁头朝某个特定的方向移动的时候才处理磁道访问请求,回来的时候不处理任务,直接快速的回到起始点位置
再改进 循环LOOK扫描算法
没有任务了就回到开始的地方,且不是第一个磁道,而是第一个由任务的磁道。
减少磁盘延迟的方法
交替编号 : 让逻辑上相邻的扇区在物理上有一定的间隔,使读取连续的逻辑扇区所需要的延迟时间更小。
错位命名 : 不同盘面之间的命名错开一位,这样可以方便不同盘面之间的连续读取。
磁盘的结构设计原因
在读取连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间。
扇区号拉满了之后进位换的是盘面,这个时候磁头不需要移动,节省时间,要是改为(盘面,柱面,扇区)的话,进位换的是磁道,需要移动磁头,很慢
磁盘的管理
磁盘的初始化 :
- 物理格式化(低级格式化) :
一个扇区通常可以分为头 、 数据区域 、 尾三个部分组成。 管理扇区所需要的数据结构一般放在头和尾两个部分,不占用数据区域
- 将磁盘分区
每个分区由若干个柱面组成,即我们熟悉的 C盘 D盘 E盘
- 进行逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示意图、空闲分区表)
引导块 :
计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(自举程序)完成的。
初始化程序可以放在ROM ( 只读存储器)中。ROM中的数据在出厂时就写入了,并且以后不能再修改。
万一需要更新自举程序,将会很不方便,因为ROM中的数据无法更改。如何解决呢?
1.ROM中只存放很小的“自举装入程序”
2.完整的自举程序放在磁盘的启动块(即引导块/启动分区)上,启动块位于磁盘的固定位置。拥有启动分区的磁盘称为动磁盘或系统磁盘C:盘
开机时计算机先运行“自举装入程序”,通过执行该程序就可找到引导块,并将完整的“自举程序”读入内存,完成初始化
坏块的管理
坏了、无法正常使用的扇区就是“坏块”。这属于硬件故障,操作系统是无法修复的。应该将坏块标记出来,以免错误地使用到它
对于简单的磁盘,可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,比如:在FAT表上标明。(在这种方式中, 坏块对操作系统不透明)
对于复杂的磁盘,磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表。
会保留一些“备用扇区”,用于替换坏块。这种方案称为扇区备用。且这种处理方式中,坏块对操作系统透明。