C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx

上传人:b****8 文档编号:22687383 上传时间:2023-02-05 格式:DOCX 页数:14 大小:83.92KB
下载 相关 举报
C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx_第1页
第1页 / 共14页
C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx_第2页
第2页 / 共14页
C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx_第3页
第3页 / 共14页
C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx_第4页
第4页 / 共14页
C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx

《C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx》由会员分享,可在线阅读,更多相关《C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

C实现进程调度算法有先来先服务优先级调度短作业优先响应比高优先Word文档格式.docx

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.输入进程有关参数

采用先来先服务算法:

采用优先级调度:

采用短作业优先:

采用高响应比优先:

四、心得体会

通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。

在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1