图 3.5.4
(3)验证SSTF算法造成的线程“饥饿”现象
修改sysproc.c文件ConsoleCmdDiskSchedule函数中的源代码,仍然使磁头初始停留在磁道10,而让其它线程依次访问磁道78、21、9、8、11、41、10、67、12、10。按 F7生成项目,然后按F5 启动调试。 待 EOS启动完毕,在EOS控制台中输入命令“ds”后按回车。输出窗口输出结果如下图所示。
图 3.5.5
(4)验证扫描(SCAN)磁盘调度算法
20
使用 scan.c 文件中 IopDiskSchedule 函数的函数体,替换 block.c 文件中 IopDiskSchedule 函数的函数体。按 F7生成项目,然后按F5 启动调试。 待 EOS启动完毕,在EOS控制台中输入命令“ds”后按回车。输出窗口输出内容如下图所示。
图 3.5.6
再次输入“ds”命令,输出窗口输出内容如下图所示。
图 3.5.7
(5)改写SCAN算法
修改完代码后,按 F7生成项目,然后按F5 启动调试。待 EOS启动完毕,在EOS控制台中输入命令“ds”后按回车。输出窗口输出内容如下图所示。
图 3.5.8
21
调试结果与预期一致,说明算法改写正确。
图 3.5.9
(6)编写循环扫描(CSCAN)磁盘调度算法
修改完代码后,按 F7生成项目,然后按F5 启动调试。待 EOS启动完毕,在EOS控制台中输入命令“ds”后按回车。输出窗口输出内容如下图所示。
图 3.6.10
调试结果与预期一致,说明算法改写正确
图 3.5.11
22
(7)验证SSTF、SCAN 及 CSCAN算法中的“磁臂粘着”现象
修改sysproc.c文件ConsoleCmdDiskSchedule函数中的源代码,仍然使磁头初始停留在磁道10,而让其它线程依次访问磁道78、10、10、10、10、10、10、10、10、10。 分别使用SSTF、SCAN 和CSCAN算法调度这组数据。输出窗口输出内容如下图所示。
SSTF“磁臂粘着”现象:
图 3.5.12
SCAN“磁臂粘着”现象:
图 3.5.13
CSCAN“磁臂粘着”现象:
图 3.5.14
23
(8)编写N-Step-SCAN磁盘调度算法
修改完代码后,按 F7生成项目,然后按F5 启动调试。待 EOS启动完毕,在EOS控制台中输入命令“ds”后按回车。输出窗口输出内容如下图所示。
图 3.5.15
调试结果与预期一致,说明算法改写正确。
图 3.5.16
四、实验体会
本实验通过学习EOS实现磁盘调度算法的机制,对磁盘调度算法执行的条件和时机有了一定的掌握。同时通过实验操作观察了EOS实现的FCFS、SSTF和SCAN磁盘调度算法,了解了常用的磁盘调度算法。本次实验设计部分不是太难,主要是针对不同磁盘调度算法的特点改写代码,通过设计SCAN、CSCAN和N-STEP-SCAN算法,也让我感受到了每个算法所具有的特点。本次实验也是最后一次实验,通过本学期的实验学习对操作系统的知识有了更切实的了解,也让自己的编程能力有所锻炼。最后感谢王老师一学期以来的指导,让我在很多细节的方面能有所认识和提高。
24