第五讲 磁盘调度算法.doc

第五讲 磁盘调度算法

操作系统 实 验 报 告 课程名称 操作系统实验 课程编号 0906553 实验项目名称 磁盘调度算法 学号 班级 姓名 专业 计算机科学与技术 学生所在学院 计算机科学与技术学院 指导教师 王红滨 实验室名称地点 21B 475 哈尔滨工程大学 计算机科学与技术学院 一、实验概述 1. 实验名称 磁盘调度算法 2. 实验目的 通过学习 EOS 实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机。 观察 EOS 实现的 FCFS、SSTF 和 SCAN 磁盘调度算法,了解常用的磁盘调度算法。 编写 CSCAN 和 N-Step-SCAN 磁盘调度算法,加深对各种扫描算法的理解。 3. 实验类型 验证+设计 4. 实验内容 准备实验 验证先来先服务(FCFS)磁盘调度算法; 验证最短寻道时间优先(SSTF)磁盘调度算法; 验证SSTF算法造成的线程“饥饿”现象; 验证扫描(SCAN)磁盘调度算法; 改写SCAN算法。 编写循环扫描( CSCAN )磁盘调度算法 验证SSTF、NSCAN及NCSCAN算法中的“磁臂粘着”现象 编写N- Step-NSCAN磁盘调度算法 二、实验环境 操作系统:indows操作系统 编译器:开发环境: 1. 需要解决的问题及解答 实验指导P176-3.2验证先来先服务(FCFS)磁盘调度算法,要求请给出在“输出”窗口中的结果。 答:先来先服务(FCFS)磁盘调度算法输出结果如下: 实验指导P177-3.3验证验证最短寻道时间优先(SSTF)磁盘调度算法,要求请给出在“输出”窗口中的结果 答:最短寻道时间优先(SSTF)磁盘调度输出结果如下: 实验指导P178-3.4验证SSTF算法造成的线程“饥饿”现象,要求请给出在“输出”窗口中的结果。 答:修改ConsoleCmdDiskSchedule函数,使磁头初始停留在磁道10,让其它线程依次访问磁道78,21,9,8,11,41,10,67,12,10; 在OS Lab的输出窗口显示线程调度的信息: 可以看到访问78号磁道的线程的请求第一个被放入请求队列,但却被推迟到最后才被处理,出现了“饥饿”现象。 实验指导P179-3.5验证扫描(SCAN)磁盘调度算法,要求在非饥饿(即《实验指导》P176-3.2节中的数据)和饥饿(即《实验指导》P178-3.4节中的数据)请给出在“输出”窗口中的结果,并且要求在每次输入两次“ds”命令(注意不要连续输入,要等第一次“ds”命令执行完,再输入第二次“ds”命令),分析结果为什么不同。 答:SCAN算法可以防止老线程出现“饥饿”现象,使用scan.c文件提供的IopDiskSchedule函数替换block.c文件中的IopDiskSchedule函数,生成项目,启动调试,在控制台运行“ds”命令。在控制台中按线程被阻塞的顺序依次显示线程的信息: 在OS Lab的输出窗口显示线程调度的信息: 第二次运行“ds”命令,线程调度顺序发生改变: 磁盘调度顺序发生改变的原因是ScanInside默认值为TRUE,但在第一次“ds”运行结束后,ScanInside更改为FALSE,即寻道方向发生改变。 按照《实验指导》的P179-3.6改写SCAN算法,编写代码。要求至少给出源代码、解释及运行结果。 答:源代码、解释与运行结果分别在第2、3小题中。 2. 源程序并附上注释 改写SCAN算法 PREQUEST IopDiskSchedule(VOID) { PLIST_ENTRY pListEntry; PREQUEST pRequest; PREQUEST INpNextRequest = NULL; PREQUEST OUTpNextRequest = NULL; LONG Offset; // 磁头偏移;0: 向内; 0: 向外; =0: 无移动 ULONG InsideShortestDistance = 0xFFFFFFFF; // 向内磁头移动最短距离 ULONG OutsideShortestDistance = 0xFFFFFFFF; // 向外磁头移动最短距离 PREQUEST pNextRequest = NULL; // // 需要遍历请求队列一次或两次 // for (pListEntry = RequestListHead.Next

文档评论(0)

1亿VIP精品文档

相关文档