图 3.3.1
(2)实验指导P177-3.3验证验证最短寻道时间优先(SSTF)磁盘调度算法,要求请给出在“输出”窗口中的结果。
答:最短寻道时间优先(SSTF)磁盘调度算法在“输出”窗口中的结果如下图所示。
5
图 3.3.2
(3)实验指导P178-3.4验证SSTF算法造成的线程“饥饿”现象,要求请给出在“输出”窗口中的结果。
答:SSTF算法造成的线程“饥饿”现象在“输出”窗口中的结果如下图所示。
6
图 3.3.3
(4)实验指导P179-3.5验证扫描(SCAN)磁盘调度算法,要求在非饥饿(即《实验指导》P176-3.2节中的数据)和饥饿(即《实验指导》P178-3.4节中的数据)请给出在“输出”窗口中的结果,并且要求在每次输入两次“ds”命令(注意不要连续输入,要等第一次“ds”命令执行完,再输入第二次“ds”命令),分析结果为什么不同。
答:在非饥饿情况下,“输出”窗口中的结果如下图所示。
7
图 3.3.4
在饥饿情况下,“输出”窗口中的结果如下图所示。
8
图 3.3.5
ScanInside是一个全局变量,当第一次执行“ds”命令时,调用IopDiskSchedule 函数,ScanInside被修改了一次,再次执行“ds”命令时,ScanInside不会被重置,因此输出的结果会不一样。
(5)在执行 SCAN、N-Step-SCAN 磁盘调度算法时,如果在EOS控制台中多次输入“ds”命令,调度的顺序会发生变化,说明造成这种现象的原因(提示:注意这两种算法使用的全局变量)。尝试修改源代码,使这两种算法在多次执行时,都能确保调度的顺序一致(提示:可以参考 io/block.c 文件中IopReceiveRequest 函数和 IopProcessNextRequest 函数判断磁盘调度算法开始工作和结束工作的方法)。
答:ScanInside是一个全局变量,当第一次执行“ds”命令时,调用IopDiskSchedule 函数,ScanInside被修改了一次,再次执行“ds”命令时,
9