优先级进程调度排序c语言,进程调度--动态优先数法(C语言实现)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

ready=s;

}

}

//优先数创建初始PCB信息

void create1(char alg)

{

PCB *p;

int i,time;

char na[10];

ready=NULL; //就绪队列头文件

finish=NULL; //完成队列头文件

run=NULL; //运行队列头文件

printf("输入进程号和运行时间:\n"); //输入进程标志和所需时间创建PCB

for(i=1;i<=N;i++)

{

p=(PCB *)malloc(sizeof(PCB));

scanf("%s",na);

scanf("%d",&time);

strcpy(p->name,na);

p->cputime=0;

p->needtime=time;

p->state='w';

p->prio=50-time;

if(ready!=NULL) //就绪队列不空,调用插入函数插入

insert1(p);

else

{

p->next=ready; //创建就绪队列的第一个PCB

ready=p;

}

}

//clrscr();

printf(" 优先数算法输出信息:\n");

printf("***********************************************\n");

prt(alg); //输出进程PCB信息

run=ready; //将就绪队列的第一个进程投入运行

ready=ready->next;

run->state='R';

}

//优先数调度算法

void priority(char alg)

{

while(run!=NULL) //当运行队列不空时,有进程正在运行

{

run->cputime=run->cputime+1;

run->needtime=run->needtime-1;

run->prio=run->prio-3; //每运行一次优先数降低3个单位

if(run->needtime==0) //如所需时间为0将其插入完成队列

{

run->next=finish;

finish=run;

run->state='F'; //置状态为完成态

run=NULL; //运行队列头指针为空

if(ready!=NULL) //如就绪队列不空

firstin(); //将就绪队列的第一个进程投入运行

}

else //没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列

if((ready!=NULL)&&(run->prioprio))

{

run->state='W';

insert1(run);

firstin(); //将就绪队列的第一个进程投入运行

}

prt(alg); //输出进程PCB信息

}

}

//主函数

void main()

{

char algo; //算法标记

//clrscr();

printf("输入进程数:\n");

scanf("%d",&N); //输入进程数

create1(algo); //优先数算法

priority(algo);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值