为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C ,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先

2017-10-06 8页 doc 26KB 35阅读

用户头像

is_314871

暂无简介

举报
C ,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先C ,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先 课程设计报告书 实践课题:姓 名:学 号:完成时间:指导老师: 一、设计摘要 利用C++,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先,进一步理解了进程调度各种算法的概念及含义。 二、设计背景 在OS中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理 1 系统中,为照顾为数众多的短作业,采用短作业有限调度算 法;在分时...
C  ,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先
C ,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先 课程设计书 实践课题:姓 名:学 号:完成时间:指导老师: 一、设计摘要 利用C++,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先,进一步理解了进程调度各种算法的概念及含义。 二、设计背景 在OS中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理 1 系统中,为照顾为数众多的短作业,采用短作业有限调度算 法;在分时系统中,为保证系统具有合理的响应时间,采用 轮转法进行调度。采用算法时,则要考虑多方面因素,以便 达到最佳效果。 三、主要技术/算法简介 #include using namespace std; #define MAX 10 struct task_struct { char name[10]; /*进程名称*/ int number; /*进程编号*/ float come_time; /*到达时间*/ float run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/ float run_end_time; /*运行结束时间*/ int priority; /*优先级*/ int order; /*运行次序*/ int run_flag; / *调度标志*/ }tasks[MAX]; int counter; /*实际进程个数*/ int fcfs(); /*先来先服务*/ int ps(); /*优先级调度*/ int sjf(); /*短作业优先*/ int hrrn(); /*响应比高优先*/ int pinput(); /*进程参数输入*/ int poutput(); / *调度结果输出*/ void main() { int option; pinput(); 2 printf(“请选择调度算法(0~4):\n”); printf(“1.先来先服务 \n”); printf(“2.优先级调度\n”); printf(“3.短作业优先\n”); printf(“4.响应比高优先\n”); printf(“0.退出\n”); scanf(“%d”,&option); switch (option) { case 0: printf(“运行结束。\n”); break; case 1: printf(“对进程按先来先服务调度。\n\n”); fcfs(); poutput(); break; case 2: printf(“对进程按优先级调度。\n\n”); ps(); poutput(); break; case 3: printf(“对进程按短作业优先调度。\n\n”); sjf(); poutput(); break; case 4: printf(“对进程按响应比高优先调度。\n\n”); hrrn(); poutput(); break; } } int fcfs() /*先来先服务*/ float time_temp=0; int i; int number_schedul; time_temp=tasks[0].come_time; for(i=0;itasks[i].run_begin_time=time_temp; tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].ru n_time; tasks[i].run_flag=1; time_temp=tasks[i].run_end_time; number_schedul=i; tasks[number_schedul].order=i+1; } 3 return 0; } int ps() /*优先级调度*/ { float temp_time=0; int i=0,j; int number_schedul,temp_counter; int max_priority; max_priority=tasks[i].priority; j=1; while ((jif (tasks[j].priority>tasks[i].priority) { max_priority=tasks[j].priority; i=j; } j++; } /*查找第一个被调度的进程*/ /*对第一个被调度 的进程求相应的参数*/ number_schedul=i; tasks[number_schedul].run_begin_time=tasks[number_schedul].come_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; temp_time=tasks[number_schedul].run_end_time; tasks[number_schedul].order=1; temp_counter=1; while (temp_countermax_priority=0; for(j=0;jif((tasks[j].come_timemax_priority) { max_priority=tasks[j].priority; number_schedul=j; } } /*查找下一个被调度的进程*/ 4 /*对找到的下一个被调度的进程求相应的参数*/ tasks[number_schedul].run_begin_time=temp_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; temp_time=tasks[number_schedul].run_end_time; temp_counter++; tasks[number_schedul].order=temp_counter; }return 0; } int sjf() /*短作业优先*/ { float temp_time=0; int i=0,j; int number_schedul,temp_counter; float run_time; run_time=tasks[i].run_time; j=1; while ((jif (tasks[j].run_timerun_time=tasks[j].run_time; i=j; } j++; } /*查找第一个被调度的进程*/ /*对第一个被调度的 进程求相应的参数*/ number_schedul=i; tasks[number_schedul].run_begin_time=tasks[number_schedul].come_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; 5 temp_time=tasks[number_schedul].run_end_time; tasks[number_schedul].order=1; temp_counter=1; while (temp_counterfor(j=0;jif((tasks[j].come_timerun_time=tasks[j].run_time;number_schedul=j;break;} } for(j=0;j{ if((tasks[j].come_time/*查找下一个被调度的进程*/ /*对找到的下一个被调度的进程求相应的参数*/ tasks[number_schedul].run_begin_time=temp_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; tasks[number_schedul].run_flag=1; temp_time=tasks[number_schedul].run_end_time; temp_counter++; tasks[number_schedul].order=temp_counter; }return 0; } int hrrn() /*响应比高优先*/ { int j,number_schedul,temp_counter; float temp_time,respond_rate,max_respond_rate; /*第一 个进程被调度*/ tasks[0].run_begin_time=tasks[0].come_time; 6 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_countermax_respond_rate=0; for(j=1;jif((tasks[j].come_time{ respond_rate=(temp_time-tasks[j].come_time)/tasks[j].run_time; if (respond_rate>max_respond_rate) { max_respond_rate=respond_rate; number_schedul=j; } } } /*找响应比高的进程*/ tasks[number_schedul].run_begin_time=temp_time; tasks[number_schedul].run_end_time=tasks[number_schedul].run_begin_time+tasks[number_schedul].run_time; temp_time=tasks[number_schedul].run_end_time; tasks[number_schedul].run_flag=1; temp_counter+=1; tasks[number_schedul].order=temp_counter; } return 0; } int pinput() /*进程参数输入*/ { int i; printf(“please input the process counter:\n”); scanf(“%d”,&counter); 7 for(i=0;i{ printf(“******************************************\n”); printf(“please input the process of %d th :\n”,i+1); printf(“please input the name:\n”); scanf(“%s”,tasks[i].name); printf(“please input the number:\n”); scanf(“%d”,&tasks[i].number); printf(“please input the come_time:\n”); scanf(“%f”,&tasks[i].come_time); printf(“please input the run_time:\n”); scanf(“%f”,&tasks[i].run_time); printf(“please input the priority:\n”); scanf(“%d”,&tasks[i].priority); tasks[i].run_begin_time=0; tasks[i].run_end_time=0; tasks[i].order=0; tasks[i].run_flag=0; } return 0; } int poutput() /*调度结果输出*/ { int i; float turn_round_time=0,f1,w=0; printf(“name number come_time run_time run_begin_time run_end_time priority order turn_round_time\n”); for(i=0;if1=tasks[i].run_end_time-tasks[i].come_time; turn_round_time+=f1; w+=(f1/tasks[i].run_time); printf(“ %s, %d, %5.3f, %5.3f, %5.3f, %5.3f, %d, %d, % 8 5.3f\n”,tasks[i].name,tasks[i].number,tasks[i].come_time,tas ks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_tim e,tasks[i].priority,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); return 0; } 三、设计运行情况截图 设有如下3个进程: 注:”优先级”一栏,数字大的表示优先级越高。 根据本例 来运行本算法,结果如下: 1.输入进程有关参数 采用先来先服务算法: 采用优先级调度: 采用短作业优先: 采用高响应比优先: 四、心得体会 通过此次课程设计,更深入的理解了各个进程调度算法, 9 及实现 过程。在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。 百度搜索“就爱阅读”,专业资料,生活学习,尽在就爱阅读网92to.com,您的在线图书馆 10
/
本文档为【C ,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索