设磁盘的磁道数为M;
假设多个进程将随机的进行磁盘访问,每个进程的磁道访问序列可随机产生;
实现先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)
分析并比较不同磁盘调度算法下磁盘寻道性能。
1.寻道时间T:在读/写数据前,将磁头移动到指定磁道所花的时间。
①启动磁头臂是需要时间的。假设耗时为s;
②移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。则寻道时间。对本实验进行模拟时因不知道m的值具体为多少,故最终结果显示以平均寻
2.平均寻道长度
平均寻道长度为磁头移动的总磁道数除以磁头移动次数。本实验规定了总的磁道数M=200,且磁头刚开始在第100个磁道上。
3.先来先服务算法(FCFS):
算法思想:FCFS算法会根据进程请求访问磁盘的先后顺序进行调度。
优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去。
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
4.最短寻道时间优先算法(SSTF):
算法思想:SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)。
优点: 性能较好,平均寻道时间短。
缺点: 可能产生“饥饿”现象,因为可能出现磁头在一个小区域内来回地移动。
5.扫描算法(SCAN)
算法思想:规定只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。
优点:性能较好,平均寻道时间较短,不会产生饥饿现象。
缺点:SCAN算法对于各个位置磁道的响应频率不平均。
6.循环扫描算法(C-SCAN)
算法思想:规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理仼何请求。
优点:比起SCAN来,对于各个位置磁道的响应频率很平均。
缺点:只有到达最边上的磁道时才能改变磁头移动方向, 有时候不需要经过最外侧磁道但还是要移动到那。另外,比起SCAN算法来,平均寻道时间更长。
1.首先随机产生一组进程的磁道访问序列,接下来进行设计4种算法。
2.先来先服务算法:将随机产生的进程的磁道访问序列读入到数组中,按顺序从前往后依次遍历,并在每次遍历中打印“当前磁道号”和“移动的磁道数”,最后打印“平均寻道长度”。
3. 最短寻道时间优先算法:将随机产生的进程的磁道访问序列读入到数组中,每一次寻找并读取离当前磁头所在的磁道最近的磁道号,并在每次遍历中打印“当前磁道号”和“移动的磁道数”,最后打印“平均寻道长度”。
4. 扫描算法:以初始磁头所在磁道号为基准,将左右两边的序列分成两组序列A、B,其中A序列中的磁道号大,B序列中的磁道号小。接下来将A序列从小到大排序,B序列从大到小排序。规定磁头首次先往磁道号递增的方向移动。故先遍历A序列,并在每次遍历中打印“当前磁道号”和“移动的磁道数”,紧接着遍历B序列,并在每次遍历中打印“当前磁道号”和“移动的磁道数”。最后打印“平均寻道长度”。
5.循环扫描算法:以初始磁头所在磁道号为基准,将左右两边的序列分成两组序列A、B,其中A序列中的磁道号大,B序列中的磁道号小。接下来将A、B序列均从小到大排序。规定磁头首次先往磁道号递增的方向移动。故先遍历A序列,并在每次遍历中打印“当前磁道号”和“移动的磁道数”,紧接着遍历B序列,并在每次遍历中打印“当前磁道号”和“移动的磁道数”。最后打印“平均寻道长度”。
本实验基于c++编写的代码,开发工具为CodeBlocks20.03版。其中以链表为主要数据结构进行开发。
-
- 4方案流程图
图2-1 方案流程图
图3-1 初始菜单项
图3-2 选择FCFS算法
图3-3 FCFS算法的磁道图
图3-4选择SSTF算法
图3-5 SSTF算法的磁道图
图3-6 选择SCAN算法
图3-7 SCAN算法的磁道图
图3-8选择C-SCAN算法
图3-9 C-SCAN算法的磁道图
对于这组随机产生的磁道访问序列:27 1 148 80 92 99 60 173 16 141来说,最短寻道时间优先算法(SSTF)与扫描算法(SCAN)的表现效果都很不错,即平均寻道数小。而先来先服务算法(FCFS)的表现效果最差,其平均寻道数最大。
对于先来先服务算法来说,因为其根据进程请求访问磁盘的先后次序进行调度,虽说对进程的每个请求都公平处理,但是很容易出现来回交替地移动磁头的现象(由图3-3可以很明显看出),这无疑增加了磁头移动的距离。
对于最短寻道时间优先算法来说,访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。总的来说,这种算法不能够保证平均寻道时间最短,但是是有可能出现寻道时间最短的情况的,正如这组输入。
对于扫描算法来说,其缺点就是对于各个位置磁道的响应频率不平均,如图3-7所示,初始情况磁头在100号磁道上,对于进程要访问的第99号磁道,它相较于第141号磁道来说不仅离初始磁道最近的,而且在时间上来说也是进程需最先访问的,但是最终的磁道访问顺序则是先访问第141号磁道,然后再返回来访问第99号磁道,这说明了扫描算法会出现对于各个位置磁道的响应频率不平均的现象。
对于循环扫描算法来说,它解决了扫描算法的缺点,即各个位置磁道的响应频率很平均,但带来的缺点就是:可能会增加平均寻道数。从图3-9可以很清楚的看出,访问完173号磁道后,它紧接着访问1号磁道,其移动的磁道数是很大的,无疑会增加最终的平均寻道长度。
总的来说,最短寻道时间优先算法、扫描算法和循环扫描算法的性能都要比先来先服务算法的性能好的很多。其中最短寻道时间优先算法、扫描算法的性能会稍微好一些,而循环扫描算法的性能稍微差一些。
代码详见主页