一、 实验目的
通过学习EOS实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机。 观察EOS实现的FCFS、SSTF和SCAN磁盘调度算法,了解常用的磁盘调度算法。 编写CSCAN和N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。 二、实验内容 1 、准备实验
2 、验证先来先服务(FCFS)磁盘调度算法 3 、验证最短寻道时间优先(SSTF)磁盘调度算法 4 、验证SSTF算法造成的线程“饥饿”现象 三、问题答案及参考代码
1. 在执行SCAN、N-Step-SCAN磁盘调度算法时,如果在EOS控制台中多次输入“ds”命令,调度的顺序会发生变化,说明造成这种现象的原因(提示:注意这两种算法使用的全局变量)。尝试修改源代码,使这两种算法在多次执行时,都能确保调度的顺序一致(提示:可以参考io/block.c 文件中IopReceiveRequest函数和IopProcessNextRequest函数判断磁盘调度算法开始工作和结束工作的方法 )。
答:SCAN算法使用了全局变量ScanInside记录磁头移动的方向,每次执行“ds”时,磁头的移动方向都可能不一样,所在磁道也可能不一样,所以在每次执行时距离最短的线程也不同,所以调度的顺序会发生变化,例如在第一次执行“ds”命令时,ScanInside初始化为true则开始磁头是从外向内移动的,结束时磁头变为从内向外移动,所以在下次执行“ds”命令时,开始磁头就继续从内向外移动了。 要解决这个问题,可以IopProcessNextRequest函数中,每次检测到磁盘调度算法结束工作时,将这些全局变量恢复为默认值。
4. 分析已经实现的各种磁盘调度算法的优缺点,尝试实现更多其它的磁盘调度算法。
先来先服务FCFS:公平,简单,每个进程的请求都能依次得到处理。没有对寻道优化,平均寻道时间长。最短时间优先调度算法SSTF:要求访问的磁道是当前磁头所在的磁道最近,每次寻道时间最短,但不能保证平均寻道时间最短。可能导致一些请求无限期推延,产生饥饿现象。电梯调度算法SCAN:不仅考虑当前磁道的距离,优先考虑在磁道前进方向的最短时间,排除磁头在盘面上的往复运动,避免了出现“饥饿”现象。电梯原理。C-SCAN:磁头单项移动。
实验总结:
操作系统实验中我们亲自动手操作,分别实现了进程、存储器管理等功能,将课上所学到的知识与实际操作结合到一起,领会到了各个功能实现的过程原理,加深了对于操作系统
意义、作用的理解,对于今后计算机的相关课程的学习打下了基础。实验的课程中思考题的部分更是对课程内容的进一步理解,让我们有许多收获。最后,感谢老师的悉心教导。