磁盘调度算法的模拟实现课程设计报告.doc
《磁盘调度算法的模拟实现课程设计报告.doc》由会员分享,可在线阅读,更多相关《磁盘调度算法的模拟实现课程设计报告.doc(14页珍藏版)》请在三一文库上搜索。
1、淮北师范大学操作系统课程设计磁盘调度算法的模拟实现学 院 计算机科学与技术 专 业 计算机科学与技术(师范)学 号 学 生 姓 名 指导教师姓名 2015年7月1日目录一、引言2二、总体设计21.功能实现22.流程图33.具体内容3三、实验验证51.结果截图72.代码分析6四、源代码9五、总结13六、参考资料13一、 引言1、课程设计的目的:操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 l 进一步巩固和复习操作系统的基础知识。 l 培养学生结构化程序、模块化程序设计的方法和能力。 l 提高学生
2、调试程序的技巧和软件设计的能力。 l 提高学生分析问题、解决问题以及综合利用 C 语言进行程序设计的能力。 2、设计内容:设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。 1、先来先服务算法FCFS 2、最短寻道时间优先算法SSTF 3、设计要求:1. 磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。 2. 最好能实现磁道号序列中磁道号的动态增加。3. 磁道访问序列以链表的形式存储 4. 给出各磁盘调度算法的调度顺序和平均寻道长度二、 总体设计1、算法实现 1.先来先服务算法(FCFS)先来先服务(FCFS)调度:按先来后到次序服务,未作优化。最简单的移臂
3、调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。例如,如果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱面为130、199、32、159、15、148、61、99,那么,当50号柱面上的操作结束后,移动臂将按请求的先后次序先移到130号柱面,最后到达99号柱面。采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。2.短寻道时间优先算法(SSTF)最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个
4、请求先执行的,而不管访问者到来的先后次序。现在仍利用同一个例子来讨论,现在当50号柱面的操作结束后,应该先处理61号柱面的请求,然后到达32号柱面执行操作,随后处理15号柱面请求,后继操作的次序应该是99、130、148、159、199。采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了200多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SST
5、F查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。先来先服务算法(FCFS)流程图:输入磁道号求平均寻道长度输出移动的平均磁道数按输入顺序将磁道序列输出开始结束最短寻道时间优先算法(SSTF)流程图:求平均寻道长度选择与当前磁道距离最近的磁道进行扫描移动到最小(大)号,改向外(内)移动扫描未扫描的磁道输出移动的平均磁道数输出排好序的磁道序列判断当前磁头在序列中的位置结束开始输入磁道号使用冒泡法从小到大排序输入当前磁道号三、总体验证 1、数据结构及信号量定义的说明;本系统划分为四个模块:先来先服务算法模块void FCFS(int array,int m)、最短寻
6、道时间优先算法模块void SSTF(int array,int m)、扫描算法模块void SCAN(int array,int m) 和循环扫描算法模块:void CSCAN(int array,int m) 。2. 先来先服务算法模块:void FCFS(int array,int m)输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移动平均磁道数。3、 最短寻道时间优先算法模块:void SSTF(int array,int m)将磁道号用冒泡法从小到大排序,输出排好序的磁道序列,输入当前磁道号,根据前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出
7、移动的平均磁道数。4、代码分析 1、先来先服务算法模块:void FCFS(int array,int m)主要代码:for(i=0,j=1;jm;i+,j+) sum+=abs(arrayj-arrayi); ave=(float)(sum)/(float)(m);2 最短寻道时间优先算法模块:void SSTF(int array,int m)主要代码:for(i=0;im;i+) /*使用冒泡法按从小到大顺序排列*/for(j=i+1;jarrayj) temp=arrayi; arrayi=arrayj; arrayj=temp; if(arraym-1=0;i-) coutarray
8、i=now) /*若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务*/ while(l=0)&(rm) /*当前磁道在请求序列范围内*/ if(now-arrayl)=(arrayr-now) /*选择与当前磁道最近的请求给予服务*/ coutarrayl ; sum+=now-arrayl; now=arrayl; l=l-1; 3、实验的步骤; 1先来先服务算法输入磁道序列:555839189016015038184当前磁道号:100 2最短寻道时间优先算法(1) 当前磁道号大于磁道序列中的最大的磁道号时(2) 输入磁道序列:555839189016015038184当前
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 磁盘 调度 算法 模拟 实现 课程设计 报告
