}
getch();/*压任意键继续*/
}
/*优先数的插入算法*/
insert1(PCB *q)
{
PCB *p1,*s,*r;
int b;
s=q;/*待插入的PCB指针*/
p1=ready; /*就绪队列头指针*/
r=p1; /*r做p1的前驱指针*/
b=1;
while((p1!=NULL)b)/*根据优先数确定插入位置*/
if(p1-prio=s-prio)
{
r=p1;
p1=p1-next;
}
else
b=0;
if(r!=p1)/*如果条件成立说明插入在r与p1之间*/
{
r-next=s;
s-next=p1;
}
else
{
s-next=p1;/*否则插入在就绪队列的头*/
ready=s;
}
}
/*轮转法插入函数*/
insert2(PCB *p2)
{
tail-next=p2;/*将新的PCB插入在当前就绪队列的尾*/
tail=p2;
p2-next=NULL;
}
/*优先数创建初始PCB信息*/
void create1(char alg)
{
PCB *p;
int i,time;
char na[10];
ready=NULL; /*就绪队列头指针*/
finish=NULL;/*完成队列头指针*/
run=NULL; /*运行队列指针*/
printf("Enter name and time of process\n"); /*输入进程标识和所需时间创建PCB*/
for(i=1;i=N;i++)
{
p=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("output of priority:\n");
printf("************************************************\n");
prt(alg);/*输出进程PCB信息*/
run=ready; /*将就绪队列的第一个进程投入运行*/
ready=ready-next;
run-state='R';
}
/*轮转法创建进程PCB*/
void create2(char alg)
{
PCB *p;
int i,time;
char na[10];
ready=NULL;
finish=NULL;
run=NULL;
printf("Enter name and time of round process\n");
for(i=1;i=N;i++)
{
p=malloc(sizeof(PCB));
scanf("%s",na);
scanf("%d",time);
strcpy(p-name,na);
p-cputime=0;
p-needtime=time;
p-count=0; /*计数器*/
p-state='w';
p-round=2;/*时间片*/
if(ready!=NULL)
insert2(p);
else
{
p-next=ready;
ready=p;
tail=p;
}
}
clrscr();
printf("output of round\n");
printf("************************************************\n");
prt(alg);/*输出进程PCB信息*/
run=ready;/*将就绪队列的第一个进程投入运行*/
ready=ready-next;
run-state='R';
}
/*优先数调度算法*/
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-prioready-prio))
{
run-state='W';
insert1(run);
firstin(); /*将就绪队列的第一个进程投入运行*/
}
prt(alg); /*输出进程PCB信息*/
}
}
/*时间片轮转法*/
roundrun(char alg)
{
while(run!=NULL)
{
run-cputime=run-cputime+1;
run-needtime=run-needtime-1;
run-count=run-count+1;
if(run-needtime==0)/*运行完将其变为完成态,插入完成队列*/
推荐阅读
- GIS充气量,GIS充气量一般多少
- 如何建立电商粉丝模型,电商粉丝平台
- 网络游戏安全公司起名,网络游戏公司取名字大全
- 网页搜索栏代码java 网页制作搜索框代码
- ERP系统评估使用情况,erp系统建议
- 网络天才一样的游戏,网络天才一样的游戏叫什么
- gis10.5左边的工具栏,gis左侧工具栏
- mysql中怎么查日期 mysql 查询日期
- chatgpt雅思作文和口语,雅思口语小作文