非抢占式高优先级调度算法

非抢占式高优先级调度算法
非抢占式高优先级调度算法

/*

非抢占式高优先级调度算法(优先数越大级别越高)

算法思想:在按进程达到时间由小到大的顺序输入进程信息后,先对其优先数进行排列,将最先到达的进程的到达时间设为开始时间,计算结束时间,

然后对后面到达的时间与该进程的结束时间进行比较,如若小于该进程的结束时间,记录进程的个数,再对其优先数逐个进行比较,将优

先数最大的提到前面,每次进程结束都要进行比较,得到执行序列,在依次输出结果

*/

#include<>

#define MAX 100

struct hrfs

{

char name[10];

float arrvitetime;

float starttime;

float servietime;

float finishtime;

int priority;riority;

j=1;

while((j

if(p[j].priority>p[i].priority){

max_priority=p[j].priority;

i=j;

}

j++;

}

k=i;

p[k].starttime=p[k].arrvitetime;inishtime=p[k].starttime+p[k].servietime;

p[k].run_flag=1;

temp_time=p[k].finishtime;

p[k].order=1;

temp_count=1;

while(temp_count

max_priority=0;

for(j=0;j

rrvitetime<=temp_time)&&(!p[j].run_flag))

riority>max_priority){

max_priority=p[j].priority;

k=j;

}

}

p[k].starttime=temp_time;

p[k].finishtime=p[k].starttime+p[k].servietime;

p[k].run_flag=1;

temp_time=p[k].finishtime;

temp_count++;

p[k].order=temp_count;

}

}

void input()

{

int i;

printf("\n请输入进程名到达时间运行时间优先数,例如:a 0 100 1\n");

for(i=0;i

{

printf("进程%d的信息:",i+1);

scanf("%s%f%f%d",p[i].name,&p[i].arrvitetime,&p[i].servietime,&p[i].priorit y);

p[i].starttime=0;

p[i].finishtime=0;

p[i].order=0;

p[i].run_flag=0;

}

}

void print()

{

int i;

float turn_round_time=0,f1,w=0;

float right_turn_round_time;

printf("\n-------------------------------进程完成信息------------------------------------\n");

printf("进程名优先级达到时间运行时间开始时间结束时间周转时间带权周转时间运行次序\n");

for(i=0;i

f1=p[i].finishtime-p[i].arrvitetime;

turn_round_time+=f1;

right_turn_round_time=f1/p[i].servietime;

w+=(f1/p[i].servietime);

printf("%s %5d % % % % % % %8d\n",p[i].name,p[i].priority,p[i].arrvitetime, p[i].servietime,p[i].starttime,p[i].finishtime,f1,right_turn_round_time,p[i].or der);

}

printf("平均周转时间=%\n",turn_round_time/count);

printf("平均带权周转时间=%\n",w/count);

}

void main()

{

printf("---------------------------非抢占式高优先级调度算法----------------------------\n");

printf("进程个数:");

scanf("%d",&count);

input();

HRfs();

print();

}

相关主题
相关文档
最新文档