目录
设计内容
编程序实现下述磁盘调度算法,并求出每种算法的平均移动磁道数,并分析结果:
①先来先服务算法(FCFS)
②最短寻道时间优先算法(SSTF)
③扫描算法(SCAN)
④循环扫描算法(C-SCAN)
设计目的
使学生熟悉磁盘管理系统的设计方法;加深对所学各种磁盘调度算法的了解及其算法的特点。
设计原理
磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。[1]
①先来先服务算法FCFS
算法思想:根据进程请求访问磁盘的先后顺序进行调度。
假设磁头的初始位置是30号磁道,有多个进程先后陆续地请求访问50,70,60,80,110,20号磁道。
按照先来先服务算法规则,按照请求到达的顺序,磁头需要依次移动到50,70,60,80,110,20号磁道。
②最短寻道时间优先算法SSTF
算法思想:优先处理的磁道是与当前磁头最近的磁道。可以保证每次寻道时间最短,但是不能保证总的寻道时间最短。(贪心算法)
假设磁头的初始位置是30号磁道,有多个进程先后陆续地请求访问50,70,60,80,110,20号磁道。
③扫描算法SCAN
算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。
假设磁头的初始位置是30号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续的访问50,70,60,80,110,20号磁道。
④循环扫描算法C-SCAN
算法思想:在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。
假设磁头的初始位置是30号磁道,有多个进程先后陆续的访问50,70,60,80,110,20号磁道。
实现代码
流程图
数据说明
选择算法与实验参数
在main函数中输入磁道数量与进程请求访问数量和实验次数,进入method函数。
初始化数组
先来先服务算法FCFS
最短寻道时间优先算法SSTF
扫描算法SCAN
循环扫描算法C-SCAN
实现结果
①数据分布较为分散时:
②数据分布较为密集时:
实现总结
综上实验,可以得知两组数据下四种算法的平均移动磁道数分别为:
算法 | 平均移动磁道数 |
FCFS | 16449 |
SSTF | 1030 |
SCAN | 1946 |
C-SCAN | 1990 |
表1 数据组1结果
算法 | 平均移动磁道数 |
FCFS | 66469.1 |
SSTF | 1737.08 |
SCAN | 1842.65 |
C-SCAN | 1989.41 |
表2 数据组2结果
在数据较为分散时:FCFS性能最差;SSTF明显优于SCAN;SCAN的性能与C-SCAN接近,而两者平均移动磁道数都接近两倍磁道数量。
在数据较为集中时:FCFS性能下降颇多;SSTF与SCAN、C-SCAN性能接近;而C-SCAN无论何种情况平均移动磁道数都接近两倍磁道数量。
由结果可以得知:
算法 | 优点 | 缺点 |
FCFS | 公平、易实现 | 请求分散时,性能差 |
SSTF | 性能优于FCFS | 可能产生“饥饿”现象 |
SCAN | 同时考虑距离与方向,可以避免“饥饿”现象 | 不利于远离磁头一端的请求访问 |
C-SCAN | 在SCAN的基础上消除对两端磁道请求的不公平 | 仍然存在磁臂粘着 |
表3 算法比较
参考资料
[1]科普中国.磁盘调度算法.百度百科[OL].[2022-07-18].
https://baike.baidu.com/item/%E7%A3%81%E7%9B%98%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95/3505728?fr=aladdin