if(((double)Differ(job[r[j]].enter,job[dest].end))/job[r[j]].requesttime>
((double)Differ(job[r[index]].enter,job[dest].end))/job[r[index]].requesttime)
index=j;
if(index!
=i)
{
intw=r[i];
r[i]=r[index];
r[index]=w;
}
index=r[i];
job[index].start=job[dest].end;
hour=job[index].requesttime/60;
minute=job[index].requesttime%60;
job[index].end.minute=(job[index].start.minute+minute)%60;carry=(job[index].start.minute+minute)/60;
job[index].end.hour=job[index].start.hour+hour+carry;
job[index].Ttime=Differ(job[index].enter,job[index].end);
job[index].WTtime=((double)job[index].Ttime)/
job[index].requesttime;
dest=index;
}
show();
}
};
此代码段定义一个最高响应比优先函数,第一道作业的开始时间,结束时间,带
权周转时间,周转时间都与先来现服务的第一道作业的算法相同。
从第二道开始,进入一个for循环,
首先我们要计算出各个作业的响应比:
响应比=1+(作业等待时间/作业处理时
间)。
然后通过循环比较找到响应比最高的那道作业首先执行,此作业的开始时间为第一道作业的结束时间,一次类推知道执行完最后一道作业为止。
intmain()
{
schedules;
s.readFile();〃从文件读信息
s.FCFS();〃先来先服务(FirstComeFirstServe)
s.SJF();//短作业优先(ShortestJobFirst)
s.HRN();//最高响应比优先(HighestResponse_ratioNext)s.HPF();//基于<外部〉优先数(HighestPriorityFirst)
return0;
}
定义主函数。
5.
测试数据及结果分析
六、调试过程中的问题
调试过程中,对于C++弋码不是很熟,所以经常编译失败,我通过老师的帮助以及上网查询解决方法来不断修改错误,完善代码。
比如我们要输入800时,必
须输入800的形式。
而且我对短作业优先算法的理解不完善,所以一度导致短作业优先算法的运行结果不正确。
后来通过看书和请教老师在不断调式下终于完善了该代码。
七、参考文献和查阅的资料
黄刚、徐小龙、段卫华
《操作系统教程》人民邮电出版社
朱立华朱建俞琼
《面向对象程序设计及C++〉人民邮电出版社
陈向群、杨夫清
《操作系统教程》北京大学出版社
沈显君、杨进才、张勇
《C++语言程序设计教程》清华大学出版社
八、程序设计总结
通过本次专业课程设计,
使我对《操作系统》这门课程有了更深入的理解。
《操
作系统》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
一个人的力量是有限的,要想把课程设计做的更好,就要学会参考一定的资料,吸取别人的经验,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。
在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
虽然这只是一次的极简单的课程制作,可是平心而论,也耗费了我不少的心血,这就让我不得不佩服开发技术的前辈,才意识到老一辈对我们社会的付出,为了人们的生活更美好,他们为我们社会所付出多少心血啊!
对我而言,知识上的收获重要,精神上的丰收更加可喜。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆!
通过这次的专业课程设计我对于专业课的学习有了更加深刻的认识,以为现在
学的知识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。
以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!
而且老师也给我许多的帮助。
在此次实验中我对作业调度算法中的短作业优先算法不是很理解,不太明白该算法的中心思想,在老师和同学的帮助下,我弄懂了。
所以我觉得同学之间的合作很重要。
也很感谢老师这两个星期对我的帮助。
附录
#include
#inelude
#include
usingnamespacestd;
constintdefMaxJobNumber=10;//作业数量的最大值
classTime//时间类
{
public:
inthour;
intminute;
};
classJob//作业类
{
public:
intID;〃作业编号
Timeenter;
〃进入时间
intrequesttime;//估计运行时间
intpriority;
〃优先数
Timestart;
//开始时间
Timeend;
//结束时间
intTtime;
〃周转时间
doubleWTtime;//带权周转时间
j,
classschedule
〃调度类
{
private:
intsize;//作业数
Job*job;〃作业数组
int*r;〃排序用数组
intDiffer(Timet1,Timet2)〃求两个时刻间的时间差
{
intborrow=(t2.minute1:
0;
return