经典调度算法.docx
- 文档编号:30194724
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:17
- 大小:155.70KB
经典调度算法.docx
《经典调度算法.docx》由会员分享,可在线阅读,更多相关《经典调度算法.docx(17页珍藏版)》请在冰豆网上搜索。
经典调度算法
经典调度算法
实践课题:
姓名:
学号:
指导老师:
学院:
课程设计实践时间
2014.3.11~2014.3.22
目录
1.设计目的----------------------------------------3
2.设计内容----------------------------------------3
3.设计要求----------------------------------------3
4.程序流程图--------------------------------------4
5.设计摘要----------------------------------------7
6.源程序------------------------------------------8
7.运行结果---------------------------------------16
一课程设计的目的:
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
1.进一步巩固和复习操作系统的基础知识
2.培养学生结构化程序、模块化程序设计的方法和能力。
3.提高学生调试程序的技巧和软件设计的能力。
4.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
二设计内容:
实现以下几种调度算法
1.FCFS
2.SJF
3.高响应比优先调度算法。
三.设计要求:
1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。
对程序其它部分也进行必要的注释。
2.对系统进行功能模块分析、画出总流程图和各模块流程图。
3.用户界面要求使用方便、简洁明了、美观大方、格式统一。
所有功能可以反复使用,最好使用菜单。
4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
5.所有程序需调试通过。
四、设计结束需提交下列资料:
1、课程设计报告。
报告中至少应包括:
相关操作系统的知识介绍,程序总的功能说明、程序各模块的功能说明、程序设计的流程图源程序清单。
2、源程序和编译连接后的可执行程序文件。
五、进程调度模拟程序流程图
主函数流程图1-1
先来先服务算法调度1-2
短作业优先调度1-3
高响应比优先调度1-4
六、设计摘要及背景
利用高级语言,实现经典进程调度算法,有先来先服务、短作业优先、响应比高优先,进一步理解了进程调度各种算法的概念及含义。
在OS中,调度的实质是一种资源分配,调度算法即指:
根据系统的资源分配策略所规定的资源分配算法。
对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;采用算法时,则要考虑多方面因素,以便达到最佳效果。
七、源程序代码
#include
#include
usingnamespacestd;
#defineMAX8
structtask_struct
{
charname[10];/*进程名称*/
floatcome_time;/*到达时间*/
floatrun_begin_time;/*开始运行时间*/
floatrun_time;/*运行时间*/
floatrun_end_time;/*运行结束时间*/
intorder;/*运行次序*/
intrun_flag;/*调度标志*/
}tasks[MAX],a[MAX];
intcounter;/*实际进程个数*/
intfcfs();/*先来先服务*/
intsjf();/*短作业优先*/
inthrrn();/*高响应比优先*/
intpinput();/*进程参数输入*/
intpoutput();
voidmain()
{
system("color6a");
intoption;
pinput();
while
(1)
{
printf("请选择调度算法(0~3):
\n");
printf("1.先来先服务\n");
printf("2.短作业优先\n");
printf("3.高响应比优先\n");
printf("0.退出\n");
scanf("%d",&option);
switch(option)
{
case0:
//save();
printf("运行结束。
\n");
exit(0);
break;
case1:
printf("对进程按先来先服务调度。
\n\n");
fcfs();
poutput();
break;
case2:
printf("对进程按短作业优先调度。
\n\n");
sjf();
poutput();
break;
case3:
printf("对进程按高响应比优先调度。
\n\n");
hrrn();
poutput();
break;
}
}
}
voidturn(){
for(inti=0;i { strcpy(tasks[i].name,a[i].name); tasks[i].come_time=a[i].come_time; tasks[i].run_time=a[i].run_time; tasks[i].run_begin_time=0; tasks[i].run_end_time=0; tasks[i].order=0; tasks[i].run_flag=0; } } intfcfs()/*先来先服务*/ {turn(); floattime_temp=0; inti; time_temp=tasks[0].come_time; for(i=0;i { tasks[i].run_begin_time=time_temp; tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; tasks[i].run_flag=1; time_temp=tasks[i].run_end_time; tasks[i].order=i+1; } return0; } intsjf()/*短作业优先*/ {turn(); floattemp_time=0; inti=0,j; inttemp_counter; floatrun_time; run_time=tasks[i].run_time; j=1; while((j { if(tasks[j].run_time { run_time=tasks[j].run_time; i=j; } j++; }/*查找第一个被调度的进程*/ /*对第一个被调度的进程求相应的参数*/ tasks[i].run_begin_time=tasks[i].come_time; tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; tasks[i].run_flag=1; temp_time=tasks[i].run_end_time; tasks[i].order=1; temp_counter=1; while(temp_counter { for(j=0;j { if((tasks[j].come_time<=temp_time)&&(! tasks[j].run_flag)) { run_time=tasks[j].run_time;i=j;break; } } for(j=0;j { if((tasks[j].come_time<=temp_time)&&(! tasks[j].run_flag))//两个条件必须同时成立 if(tasks[j].run_time { run_time=tasks[j].run_time; i=j; } } /*查找下一个被调度的进程*/ /*对找到的下一个被调度的进程求相应的参数*/ tasks[i].run_begin_time=temp_time; tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; tasks[i].run_flag=1; temp_time=tasks[i].run_end_time; temp_counter++; tasks[i].order=temp_counter; } return0; } inthrrn()/*高响应比优先*/ {turn(); intj,i,temp_counter; floattemp_time,respond_rate,max_respond_rate; /*第一个进程被调度*/ tasks[0].run_begin_time=tasks[0].come_time; tasks[0].run_end_time=tasks[0].run_begin_time+tasks[0].run_time; temp_time=tasks[0].run_end_time; tasks[0].run_flag=1; tasks[0].order=1; temp_counter=1; /*调度其他进程*/ while(temp_counter { max_respond_rate=0; for(j=1;j { if((tasks[j].come_time<=temp_time)&&(! tasks[j].run_flag))//注意temp_time和tasks[i]都在变化 { respond_rate=(temp_time-tasks[j].come_time)/tasks[j].run_time;//等待时间/运行时间 if(respond_rate>max_respond_rate) { max_respond_rate=respond_rate; i=j; } } } /*找响应比高的进程*/ tasks[i].run_begin_time=temp_time;//把第一个进程的结束时间赋值于下一个进程的开始时间,前提是必须满足上面条件 tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; temp_time=tasks[i].run_end_time;//改换到进程的结束时间,比较下一轮的(等待时间/运行时间) tasks[i].run_flag=1; temp_counter+=1; tasks[i].order=temp_counter; } return0; } intpinput()/*进程参数输入*/ { inti; printf("请输入实际进程的个数: \n"); scanf("%d",&counter); for(i=0;i {printf("******************************************\n"); printf("请输入第%d个进程: \n",i+1); printf("请输入该进程名字: \n"); scanf("%s",tasks[i].name); printf("请输入该进程到达时间come_time: \n"); scanf("%f",&tasks[i].come_time); printf("请输入该进程运行时间run_time: \n"); scanf("%f",&tasks[i].run_time); tasks[i].run_begin_time=0; tasks[i].run_end_time=0; tasks[i].order=0; tasks[i].run_flag=0; } for(i=0;i { strcpy(a[i].name,tasks[i].name); a[i].come_time=tasks[i].come_time; a[i].run_time=tasks[i].run_time; a[i].run_begin_time=0; a[i].run_end_time=0; a[i].order=0; a[i].run_flag=0; } return0; } intpoutput()/*调度结果输出*/ { inti; floatturn_round_time=0,f1,w=0; printf("namecome_timerun_timerun_begin_timerun_end_timeorderturn_round_time\n"); for(i=0;i { f1=tasks[i].run_end_time-tasks[i].come_time; turn_round_time+=f1; w+=(f1/tasks[i].run_time); printf("%s,%5.3f,%5.3f,%5.3f,%5.3f,%d,%5.3f\n",tasks[i].name,tasks[i].come_time,tasks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_time,tasks[i].order,f1); } printf("average_turn_round_timer=%5.2f\n",turn_round_time/counter); printf("weight_average_turn_round_timer=%5.2f\n",w/counter); return0; } 八、程序运行结果 输入进程界面1-1 算法选择界面1-2 FCFS结果输出结果1-3 SJF和高响应比优先界面1-4 退出界面1-5 九、课程设计总结心得体会 通过此次课程设计,更深入的理解了先来先服务调度算法、短作业优先调度算法、高响应比优先调度算法,及实现过程。 在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 调度 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)