磁盘调度算法的模拟实现课程设计报告
淮北师范大学
操作系统课程设计
磁盘调度算法的模拟实现
学 院 计算机科学与技术
专 业 计算机科学与技术(师范)
学 号
学 生 姓 名
指导教师姓名
2015年7月1日
目录
一、引言2
二、总体设计2
1.功能实现2
2.流程图3
3.具体内容3
三、实验验证5
1.结果截图7
2.代码分析6
四、源代码9
五、总结13
六、参考资料13
引言
1、课程设计的目的:
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
进一步巩固和复习操作系统的基础知识。
培养学生结构化程序、模块化程序设计的方法和能力。
提高学生调试程序的技巧和软件设计的能力。
提高学生分析问题、解决问题以及综合利用 C 语言进行程序设计的能力。
2、设计内容:设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。
1、先来先服务算法FCFS
2、最短寻道时间优先算法SSTF
3、设计要求:
磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。
最好能实现磁道号序列中磁道号的动态增加。
磁道访问序列以链表的形式存储
4. 给出各磁盘调度算法的调度顺序和平均寻道长度
总体设计
1、算法实现
1.先来先服务算法(FCFS)
先来先服务(FCFS)调度:按先来后到次序服务,未作优化。
最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。例如,如果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱面为130、199、32、159、15、148、61、99,那么,当50号柱面上的操作结束后,移动臂将按请求的先后次序先移到130号柱面,最后到达99号柱面。
采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。
2.短寻道时间优先算法(SSTF)
最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。现在仍利用同一个例子来讨论,现在当50号柱面的操作结束后,应该先处理61号柱面的请求,然后到达32号柱面执行操作,随后处理15号柱面请求,后继操作的次序应该是99、130、148、159、199。
采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了200多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。
但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。
①先来先服务算法(FCFS)流程图:
②最短寻道时间优先算法(SSTF)流程图:
三、总体验证
1、数据结构及信号量定义的说明;
本系统划分为四个模块:先来先服务算法模块void FCFS(int array[],int m)、最短寻道时间优先算法模块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)
将磁道号用冒泡法从小到大排序,输出排好序的磁道序列,输入当前磁道号,根据前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。
4、代码分析
1、先来先服务算法模块:void FCFS(int array[],int m)
主要代码:
for(i=0,j=1;j
{
sum+=abs(array[j]-array[i]);
ave=(float)(sum)/(float)(m);
}
2 最短寻道时间优先算法模块:void SSTF(int ar