C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文件下载.docx
- 文档编号:14415093
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:13
- 大小:83.97KB
C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文件下载.docx
《C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文件下载.docx》由会员分享,可在线阅读,更多相关《C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
三、主要技术/算法简介
#include<
iostream>
usingnamespacestd;
#defineMAX10
structtask_struct
{
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 进程 调度 算法 有先来先 服务 优先级 作业 优先 响应 比高