C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx
- 文档编号:22687383
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:14
- 大小:83.92KB
C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx
《C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx》由会员分享,可在线阅读,更多相关《C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
charname[10];
/*进程名称*/
intnumber;
/*进程编号*/
floatcome_time;
/*到达时间*/
floatrun_begin_time;
/*开始运行时间*/
floatrun_time;
/*运行时间*/
floatrun_end_time;
/*运行结束时间*/
intpriority;
/*优先级*/
intorder;
/*运行次序*/
intrun_flag;
/*调度标志*/
}tasks[MAX];
intcounter;
/*实际进程个数*/
intfcfs();
/*先来先服务*/
intps();
/*优先级调度*/
intsjf();
/*短作业优先*/
inthrrn();
/*响应比高优先*/
intpinput();
/*进程参数输入*/
intpoutput();
/*调度结果输出*/
voidmain()
{intoption;
pinput();
printf("
请选择调度算法(0~4):
\n"
);
1.先来先服务\n"
2.优先级调度\n"
3.短作业优先\n"
4.响应比高优先\n"
0.退出\n"
scanf("
%d"
&
option);
switch(option)
{
case0:
printf("
运行结束。
break;
case1:
对进程按先来先服务调度。
\n\n"
fcfs();
poutput();
case2:
对进程按优先级调度。
ps();
poutput();
case3:
对进程按短作业优先调度。
sjf();
case4:
对进程按响应比高优先调度。
hrrn();
}
intfcfs()/*先来先服务*/
{
floattime_temp=0;
inti;
intnumber_schedul;
time_temp=tasks[0].come_time;
for(i=0;
i<
counter;
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;
number_schedul=i;
tasks[number_schedul].order=i+1;
return0;
intps()/*优先级调度*/
floattemp_time=0;
inti=0,j;
intnumber_schedul,temp_counter;
intmax_priority;
max_priority=tasks[i].priority;
j=1;
while((j<
counter)&
&
(tasks[i].come_time==tasks[j].come_time))
if(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_counter<
counter)
max_priority=0;
for(j=0;
j<
j++)
if((tasks[j].come_time<
=temp_time)&
(!
tasks[j].run_flag))
if(tasks[j].priority>
max_priority)
{
max_priority=tasks[j].priority;
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_counter++;
tasks[number_schedul].order=temp_counter;
}return0;
intsjf()/*短作业优先*/
floatrun_time;
run_time=tasks[i].run_time;
if(tasks[j].run_time<
tasks[i].run_time)
{
run_time=tasks[j].run_time;
j++)
tasks[j].run_flag))
{
run_time=tasks[j].run_time;
number_schedul=j;
break;
if(tasks[j].run_time<
run_time)
run_time=tasks[j].run_time;
number_schedul=j;
}
tasks[number_schedul].run_flag=1;
temp_time=tasks[number_schedul].run_end_time;
temp_counter++;
tasks[number_schedul].order=temp_counter;
inthrrn()/*响应比高优先*/
intj,number_schedul,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;
/*调度其他进程*/
while(temp_counter<
max_respond_rate=0;
for(j=1;
respond_rate=(temp_time-tasks[j].come_time)/tasks[j].run_time;
if(respond_rate>
max_respond_rate)
max_respond_rate=respond_rate;
/*找响应比高的进程*/
temp_counter+=1;
intpinput()/*进程参数输入*/
inti;
pleaseinputtheprocesscounter:
scanf("
counter);
{printf("
******************************************\n"
pleaseinputtheprocessof%dth:
i+1);
pleaseinputthename:
%s"
tasks[i].name);
pleaseinputthenumber:
tasks[i].number);
pleaseinputthecome_time:
%f"
tasks[i].come_time);
pleaseinputtherun_time:
tasks[i].run_time);
pleaseinputthepriority:
tasks[i].priority);
tasks[i].run_begin_time=0;
tasks[i].run_end_time=0;
tasks[i].order=0;
tasks[i].run_flag=0;
intpoutput()/*调度结果输出*/
floatturn_round_time=0,f1,w=0;
namenumbercome_timerun_timerun_begin_timerun_end_timepriorityorderturn_round_time\n"
f1=tasks[i].run_end_time-tasks[i].come_time;
turn_round_time+=f1;
w+=(f1/tasks[i].run_time);
%s,%d,%5.3f,%5.3f,%5.3f,%5.3f,%d,%d,%5.3f\n"
tasks[i].name,tasks[i].number,tasks[i].come_time,tasks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_time,tasks[i].priority,tasks[i].order,f1);
average_turn_round_timer=%5.2f\n"
turn_round_time/counter);
weight_average_turn_round_timer=%5.2f\n"
w/counter);
三、设计运行情况截图
设有如下3个进程:
进程名称
到达时间
运行时间
优先级
A
4
5
3
B
6
10
1
C
8
2
注:
"
优先级"
一栏,数字大的表示优先级越高。
根据本例来运行本算法,结果如下:
1.输入进程有关参数
采用先来先服务算法:
采用优先级调度:
采用短作业优先:
采用高响应比优先:
四、心得体会
通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。
在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 进程 调度 算法 有先来先 服务 优先级 作业 优先 响应 比高