FCFS算法根据进程请求访问磁盘的先后顺序进行调度,是一种最简单的调度算法。
例1:某一磁盘请求序列(磁道号):98、 183、 37、122、14、124、 65、 61,按照先来先服务FCFS磁盘调度对磁盘进行请求服务,假设当前磁头在53道上,则磁臂总移动道数为多少?
先来先服务,按进程请求访问磁盘的先后次序进行调度。
当前磁道:53
下一个磁道 | 移动磁道数 |
---|---|
98 | 45 |
183 | 85 |
37 | 146 |
122 | 85 |
14 | 108 |
124 | 110 |
65 | 59 |
61 | 4 |
总移动道数=45+85+146+85+108+110+59+4=642
算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
例2:若干个等待访问磁盘者依次要访问的磁道为 19, 43, 40, 4, 79,11,76,当前磁头位于 40 号柱面,若用最短寻道时间优先磁盘调度算法,则访问序列为_
根据最短寻道时间优先磁盘调度算法,每次在寻找下一个磁道时,都要选择离自己最近的,所以当前磁头位于40号,下一道选择与40绝对值最小的,即40,再下一道选择43,差值为3,以此类推,最后的访问序列应该为,40,43,19,11,4,76,79.
优先考虑磁头的当前移动方向,并且考虑当前磁道与下一磁道之间的距离。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应该是,即在当前磁道之外,又距离最近。这样自里向外的访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。移动原则同前一致。下面贴出这一段的来源浅谈磁盘调度算法
由于这种算法中磁头移动的规律与电梯的运行相似,因此又称为电梯调度算法。
循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。
前两道题目为牛客网上的练习题,之前应该是某家互联网公司网申的笔试题目,下面一道例题将用四种不同磁盘调度算法来解答。
假设移动头磁盘有200个磁道(从0号到199号)。目前正在处理143号磁道上的请求,而刚刚处理结束的请求是125号,如果下面给出的顺序是按FIFO排成的等待服务队列顺序:86,147,91,177,94,150,102,175,130
那么,用下列各种磁盘调度算法来满足这些请求所需的总磁头移动量是多少?
(1) FCFS;(2) SSTF;(3) SCAN;(4) LOOK;(5) C-SCAN?
当前磁道 | 下一磁道 | 移动距离 |
---|---|---|
143 | 86 | 57 |
86 | 147 | 61 |
147 | 91 | 56 |
91 | 177 | 86 |
177 | 94 | 83 |
94 | 150 | 56 |
150 | 102 | 48 |
102 | 175 | 73 |
175 | 130 | 45 |
总距离 | 579 |
寻道顺序:当前143,147,150,130,102,94,91,86,175,177;
4+3+20+28+8+3+5+89+2=162;
当前方向:从143向磁道号增加的方向
依次访问:147,150,175,177
反方向:130,102,94,91,86
4+3+25+2+47+28+8+3+5=125
当前方向:从143向磁道号增加的方向
依次访问:147,150,175,177
再从0开始增加方向:86,91,94,102,130
此处移动总距离存在疑问