1. 磁盘调度算法⚓
1.1 机械磁盘的结构⚓
每个盘面都有自己的磁头。盘片中的每一层分为多个磁道,每个磁道分多个扇区,每个扇区是 512
字节。多个具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。
假设有下面一个请求序列,每个数字代表磁道的位置: 98,183,37,122,14,124,65,67 初始磁头当前的位置是在第 53 磁道。
接下来,分别对以上的序列,作为每个调度算法的例子。
1.2 先来先服务(First-Come,First-Served,FCFS)⚓
先到来的请求,先被服务。
总共移动了 640 个磁道的距离。
如果大量进程竞争使用磁盘,请求访问的磁道可能会很分散,那先来先服务算法在性能上就会显得很差,因为寻道时间过长。
1.3 最短寻道时间优先(Shortest Seek First,SSF)⚓
优先选择从当前磁头位置所需寻道时间最短的请求。
根据距离磁头(53 位置)最近的请求的算法,具体的请求则会是下列从左到右的顺序: 65,67,37,14,98,122,124,183。
磁头移动的总距离是 236 磁道,相比先来先服务性能提高了不少。
假设是一个动态的请求,如果后续来的请求都是小于 183 磁道的,那么 183 磁道可能永远不会被响应,于是就产生了饥饿现象,这里产生饥饿的原因是磁头在一小块区域来回移动。
1.4 扫描(Scan)⚓
磁头在一个方向上移动,访问所有未完成的请求,直到磁头到达该方向上的最后的磁道,才调换方向,这种算法也叫做电梯算法。
假设扫描调度算先朝磁道号减少的方向移动,具体请求则会是下列从左到右的顺序: 37,14,0,65,67,98,122,124,183。
扫描调度算法性能较好,不会产生饥饿现象,但是存在这样的问题,中间部分的磁道会比较占便宜,中间部分相比其他部分响应的频率会比较多,也就是说每个磁道的响应频率存在差异。
1.5 循环扫描(Circular Scan, CSCAN )⚓
只有磁头朝某个特定方向移动时,才处理磁道访问请求,而返回时直接快速移动至最靠边缘的磁道,也就是复位磁头,这个过程是很快的,并且返回中途不处理任何请求,该算法的特点,就是磁道只响应一个方向上的请求。
假设循环扫描调度算先朝磁道增加的方向移动,具体请求会是下列从左到右的顺序: 65,67,98,122,124,183,199,0,14,37。
循环扫描算法相比于扫描算法,对于各个位置磁道响应频率相对比较平均。
1.6 LOOK 与 C-LOOK 算法⚓
扫描算法和循环扫描算法,都是磁头移动到磁盘「最始端或最末端」才开始调换方向。
那这其实是可以优化的,优化的思路就是磁头在移动到「最远的请求」位置,然后立即反向移动。
针对 SCAN 算法的优化则叫 LOOK 算法
,它的工作方式,磁头在每个方向上仅仅移动到最远的请求位置,然后立即反向移动,而不需要移动到磁盘的最始端或最末端才反向移动,反向移动的途中会响应请求。
针对 C-SCAN 算法的优化则叫 C-LOOK
,它的工作方式,磁头在每个方向上仅仅移动到最远的请求位置,然后立即反向移动,而不需要移动到磁盘的最始端或最末端才反向移动,反向移动的途中不会响应请求。