操 作 系 统 实 验 报 告 课程名称 操作系统实验 课程编号 0 9 0 6 5 5 3 实验项目名称 磁盘调度算法 学号 年级 姓名 专业 计算机科学与技术 学生所在学院 计算机科学与技术学院 指导教师 实验室名称地点 哈尔滨工程大学 计算机科学与技术学院 1 磁盘调度算法 一. 实验概述: 1.实验名称:磁盘调度算法 2.实验目的: 1)通过学习 EOS 实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机; 2)观察 EOS 实现的 FCFS、SSTF 和 SCAN 磁盘调度算法,了解常用的磁盘调度算法; 3)编写 CSCAN 和 N-Step-SCAN 磁盘调度算法,加深对各种扫描算法的理解。 3.实验类型:验证、设计 4.实验内容: 1)准备实验,创建一个EOS Kernel 项目; 2)验证先来先服务(FCFS)磁盘调度算法; 3)验证最短寻道时间优先(SSTF)磁盘调度算法; 4)验证SSTF 算法造成的线程“饥饿现象”; 5)验证扫描(SCAN)磁盘调度算法; 6)改写SCAN 算法; 7)编写循环扫描(CSCAN)磁盘调度算法; 8)验证SSTF、SCAN 及 CSCAN 算法中的“磁臂粘着”现象; 9)编写N-Step-SCAN 磁盘调度算法。 二.实验环境 操作系统:w indow s XP 编译器:Tevalaton OS Lab 语言:C 三.实验过程 1.设计思路和流程图: SCAN 算法流程图: 2 SSTF 算法的流程图: CSACN 流程图: 3 有向内移动的线程? YES NO N-STEP-SCAN 算法调度: 2.实验过程: 1)新建一个 EOS Kernel 项目; 2)在 sysproc.c 文件中找到控制台命令“ds”对应的函数 ConsoleCmdDiskSchedule。“ ds” 命令专门用来测试磁盘调度算法。阅读该函数中的源代码,目前该函数使磁头初始停留在磁道 10, 其它被阻塞的线程依次访问磁道 8、21、9、78、0、41、10、67、12、10; 3)打开 io/block.c 文件,在 第 378 行找到磁盘调度算法函数 IopDiskSchedule。阅读该函数中的源代码,目前此函数实现了 FCFS 磁盘调度算法,流程图如下: 循环结束后记录了向内移动距离最短的线程和向外移动距离最长的线程 选择向内移动距离最短的线程 选择向外移动距离最长的线程 4 4)生成项目,启动调试,待 EOS 启动完毕,在 EOS 控制台中输入命令“ds”后按回车; 在 EOS 控制台中会首先显示磁头的起始位置是 10 磁道,然后按照线程被阻塞的顺 5 序依次显示线程的 信息(包括线程 ID 和访问的磁道号...