OS 磁盘调度算法 之 FCFS、SSTF、SCAN、CSCAN

了解磁盘构造

先初步了解下磁盘的构造以及相关名词等。
补充资料:博客园:磁盘基本知识(磁头、磁道、扇区、柱面)
01

磁盘调度

  • 寻道时间:把磁臂(磁头)移动到指定磁道上所经历的时间。
  • 旋转延迟时间:指定扇区移动到磁头下面所经历的时间。
  • 传输时间:指把数据从磁盘读出或向磁盘写入数据所经历的时间。

磁盘调度算法

  • 磁盘调度算法有若干种,但着眼点都放在寻道优化上,即寻道时间尽量短,吞吐量尽量大。
  • 目前广泛使用的寻道策略有下列几种:

一、先来先服务算法(first-come first-service,FCFS)

磁头按照进程请求访问磁道先后依次进行移动。
按照顺序来移动。

  • 算法思想:按进程请求访问磁盘的先后次序进行调度。
  • 优点:简单,公平。
  • 缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。- 特点:合理、简单、但未对寻道进行优化。

二、最短寻道时间优先算法(Shortest-Seek-Time-First,SSFT)

磁头选择与当前所在磁道位置距离最近的磁道请求作为下一次服务的对象。
选择最近的磁道来移动。

  • 算法思想:优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。
  • 优点:改善了磁盘平均服务时间。
  • 缺点
    (1)不能保证平均寻道时间最短;
    (2)可能会使某些请求总得不到服务(又称饥饿)。

三、扫描算法(又称电梯算法,SCAN)

在磁头移动方向上选择与当前磁头所在的磁道距离最近的请求作为下一次服务的对象。
像电梯一样在向上移动的时候一直移动到要访问的最高层,然后反过来移动到要访问最低层。
比如移动方式:内→外→内→外,一直来回往返移动。

  • 算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。
  • 优点
    (1)具有较好的寻道性能;
    (2)避免了饥饿现象
  • 缺点:不利于远离磁头一端的访问请求。

四、循环扫描算法(CSCAN)

磁头按照规定的移动方向一直移动到另一端,然后迅速回到原始位置,以此循环。
比如移动方式:内→外、内→外,一直以单一方向移动。

  • 该算法是对扫描算法(SCAN)的改良,它规定磁头单向移动,例如自内向外移动,当磁头移动到最外磁道时立即又返回到最内磁道,如此循环进行扫描。
  • 优点:消除了对两端磁道请求的不公平。

总体比较

优点缺点
FCFS算法公平、简单平均寻道距离大,仅应用在磁盘I/O较少的场合
SSTF算法性能比“先来先服务”好不能保证平均寻道时间最短,可能出现“饥饿”现象
SCAN算法寻道性能较好,可避免“饥饿”现象不利于远离磁头一端的访问请求
C-SCAN算法消除了对两端磁道请求的不公平

例题

这里为了分辨理解调度算法,上述四种方法在下面例题中都会使用。

假定一个磁盘有200个柱面,编号为0~199,在完成了对125柱面的请求后,当前正在143号柱面处为一个请求服务。请求队列中还有若干个请求者在等待服务,假设它们依次要访问的柱面号为: 86,147, 91,177,94,150,102,175,130。 请分别计算采用先来先服务调度算法、最短寻找时间优先调度算法和扫描调度算法时实际服务的次序和磁臂移动的距离。并说明哪种算法更合适些,为什么?

解:

① FCFS(先来先服务)算法:

  • 直接按照文题中依次要访问的柱面号来进行磁头移动
  • 143 → 86 → 147 → 91 → 177 → 94 → 150 → 102 → 175 → 130

磁头从143号柱面开始移动

访问的下一磁面号移动磁面数
8657
14761
9156
17786
9483
15056
10248
17573
13045

平均寻面长度 = (57+61+56+86+83+56+48+73+45) / 9 = 565/9 = 62.78

② SSTF(最短寻道时间优先)算法:

以143为出发点,寻找离143号最近的磁面即147;然后以147位出发点,寻找最近的磁面即150;后面以此类推即可。
143 → 147 → 150 → 130 → 102 → 94 → 91 → 86 → 175 → 177

从143号柱面开始

访问的下一磁面号移动磁面数
1474
1503
13020
10228
948
913
865
17589
1772

平均寻面长度 = (4+3+20+28+8+3+5+89+2) / 9 = 162/9 = 18

③ SCAN(扫描)算法:

  • 从文题(在完成了对125柱面的请求后,当前正在143号柱面处为一个请求服务)中可以知道磁头的移动方向是由125→143即由小到大,由外而内(磁道0号在最外面)
  • 以143为出发点,然后向磁面号比它大的最近磁面号移动即移动到147;然后以147为出发点向磁面号比它大的最近磁面号移动即移动到150;
  • 当达到需要访问的最大磁面号177时,移动方向 由小到大 改为 由大到小(由外而内 改为 由内而外)。然后以177为出发点向磁面号比它小的最近磁面号移动即移动到130,然后依次类推。
  • 有点类似生活中的公交车一样,一直往一个方向开车,中途有人访问时就停车访问,然后继续开车直至该方向上的最后一个乘客,然后把方向掉头继续开(并不是非要开到终点站才转头,详情请看题后的 注释 )。
  • 143 → 147 → 150 → 175 → 177 → 130 → 102 → 94 → 91 → 86

从143号柱面开始

访问的下一磁面号移动磁面数
1474
1503
17525
1772
13047
10228
948
913
865

平均寻面长度 = (4+3+25+2+47+28+8+3+5) / 9 = 125/9 = 13.89

④ CSCAN(循环扫描)算法:

  • 和上述的SCAN算法有些相似,区别就是到达终点站的时候并不是改变移动方向然后继续移动,而是磁头会立即回到初始位置然后以之前相同的方向继续移动。
  • 147 → 150 → 175 → 177 → 86 → 91 → 94 → 102 → 130

从143号柱面开始

访问的下一磁面号移动磁面数
1474
1503
17525
1772
8691
915
943
1028
13028

平均寻面长度 = (4+3+25+2+91+5+3+8+28) / 9 = 169/9 = 18.78

答:其中SCAN算法的平均寻面长度最小,所以选择SCAN算法比较好。

注释:

  • 在这里面,SCAN 和 CSCAN 算法还有一些小疑问或争议,就是磁头是否要从0号的一端完整的移动到另外一端?

  • 首先去百度了一下,然后看到了下面的解释:

02

  • ①百度百科上面横线处是规定SCAN和CSCAN算法中,磁头要一直移动到末端然后才掉头继续移动(SCAN)或重新回到起点继续移动(CSAN)。
  • ②而波浪线处的实际情况却更加符合我们做题的情况——移动到该方向上最后一个需要访问的地方就开始掉头(SCAN)或从改方向上第一个需要访问的磁道号(CSCAN)。

这里给出的解释是:我们在做题过程中,文题中没有特别说明的话就按照上述第②种情况进行解题,并不需要移动至末端。

例如上述例题中的CSCAN算法:
磁头到了177号磁面后就没有继续向该方向(磁面号由小到大)移动了,同时而是到达了86号,177→86。而不是立即回到0号磁面处再去86号磁面:177→0→86。

战争中军队移动支援战场理解例子:

  • 磁头 —— 主力部队:规模极大,移动速度慢。用于支援每一处战场。
  • 磁盘 —— 战争发生场所:在一条长河畔边,岸上有许多的小规模战争需要军队的支援。
  • 调度算法 —— 侦查队伍:规模极小,速度快;用于通知主力部队的下一个支援地点;根据调度算法不同侦查部队的侦查顺序也不同。

主力部队在177号战场支援后,派出侦查部队去探寻需要支援的位置。侦查部队向该方向继续移动直至末端确保没有需要支援的战场,然后迅速回到0号初始位置继续移动,到达86号确定需要支援后通知主力部队,随后主力部队直接移动到86号位置进行支援。后面以此类推。
侦查部队:177→末端→0→86
主力部队:177→86
03

资料参考

### 回答1: FCFS:先来先服务,是一种调度算法,按照作业到达的顺序进行调度。 SSTF:最短寻道时间优先,是一种磁盘调度算法,按照磁头距离最近的磁道进行调度。 SCAN:扫描算法,是一种磁盘调度算法,磁头按照一个方向移动,直到到达磁盘的一端,然后改变方向继续移动。 CSCAN:循环扫描算法,是一种磁盘调度算法,磁头按照一个方向移动,直到到达磁盘的一端,然后回到磁盘的另一端继续移动。 ### 回答2: FCFS(先来先服务)是一种最基本的磁盘调度算法,它按照磁盘请求的先后顺序来安排磁盘访问,不会对请求的位置进行任何优化,也无法避免磁盘头的寻道移动,因此会造成长等待时间和低效率的情况。FCFS适用于只有一个程序在磁盘上读写且磁盘访问请求较少的情境。 SSTF(最短寻道时间优先)算法是一种更高效的磁盘调度算法,它通过计算相邻请求磁道与当前磁头的距离来决定下一次磁头移动方向,从而使得磁头在磁盘上移动的距离最小。但是SSTF并不能避免饥饿问题,当存在大量服务请求时,它可能无法及时响应部分请求,从而使得磁头移动距离增加。 SCAN(扫描)算法也是一种磁盘调度算法,它是按磁头扫描方向进行调度的,当磁头到达一侧边界时,磁头会反向扫描,这样可以使得磁盘上的请求得到均匀的调度。但是SCAN算法也存在一定的缺点,当请求比较密集时,磁头来回移动的次数增加会影响磁盘的性能。 CSCAN(循环扫描)算法是SCAN算法的改进版,它能够有效地减少磁头在磁盘上移动的距离。CSCAN算法也是按磁头扫描方向进行调度,当磁头到达一侧边界时,它会直接返回到另一端进行扫描,这样可以避免磁头反向移动。这种算法适用于请求比较密集的情境,能够合理调度磁盘读写请求,提高磁盘调度效率。 总之,不同的磁盘调度算法都有其适用的情境和优劣点,需要根据实际情况进行选择。 ### 回答3: FCFSSSTF、SCAN、C-SCAN是磁盘调度算法,用于指导磁盘按照何种顺序读写数据。 FCFS(First-Come-First-Serve)算法是最简单的磁盘调度算法,它按照请求的先后顺序进行读写。但是,FCFS算法存在低效问题,当磁盘读写密度大、请求并发高时,平均等待时间会变得十分长。 SSTF(Shortest-Seek-Time-First)算法是一种优化算法,它总是选择最短路径的读写请求。SSTF能极大地减小平均寻道时间,提高磁盘读写效率。但是SSTF算法优先考虑寻找靠近当前磁道的读写请求,可能出现在磁盘的某个区域形成“饥饿”现象。 SCAN算法(又叫电梯算法)是按照一个方向前进处理磁盘读写请求,直到该方向无请求之后,再改变方向处理请求。SCAN算法的特点是避免了“饥饿”现象,其缺点在于在每次改变方向时需要退回至磁盘的最大磁道。 C-SCAN(Circular-SCAN)算法是SCAN算法的进一步改进。C-SCAN的处理方式是,在磁盘某一磁道没有读写请求时,将磁头移动到磁盘的最小或最大磁道,继续处理请求。C-SCAN算法适用于具有轴对称特点的磁盘系统,能够让磁头遍历磁盘并进行全部请求读写操作。 综上所述,FCFS适用于请求较少的情况,SSTF适用于需要高效处理寻道时间的情况,SCAN适用于请求密集且磁盘范围较大的情况,C-SCAN适用于在请求密集的情况下同时保证磁盘访问范围较小的情况。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MoMing丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值