¡¶²Ù×÷ϵͳ¡·ÊµÑéÖ¸µ¼Êé2017 ÏÂÔØ±¾ÎÄ

p=(PCB *)malloc(sizeof(PCB)); scanf(\ scanf(\ 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; } } void clrscr(void);

printf(\ ÓÅÏȼ¶µ÷¶ÈË㷨ģÄâÊä³ö½á¹û£º\\n\ printf(\\ 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(\ÇëÊäÈë½ø³ÌµÄÃû×ÖºÍÔËÐÐËùÐèÒªµÄʱ¼ä\\n\ for(i=1;i<=N;i++) { p=(PCB *)malloc(sizeof(PCB)); scanf(\ scanf(\ 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; } } void clrscr(void);

printf(\ ʱ¼äƬÂÖת·¨Ä£ÄâÊä³ö½á¹û£º\\n\ printf(\n\ }

prt(alg); /*Êä³ö½ø³ÌPCBÐÅÏ¢*/

run=ready; /*½«¾ÍÐ÷¶ÓÁеĵÚÒ»¸ö½ø³ÌͶÈëÔËÐÐ*/ ready=ready->next; run->state='R';

/*****ÏÈÀ´ÏÈ·þÎñËã·¨´´½¨PCB*****/ void create3(char alg) { PCB *p; int i;

ready=NULL; run=NULL; finish=NULL;

printf(\ÇëÊäÈë½ø³ÌµÄÃû×Ö¡¢µ½´ïʱ¼äºÍÔËÐÐËùÐèÒªµÄʱ¼ä\\n\ for(i=0;i

p=(PCB *)malloc(sizeof(PCB)); scanf(\ scanf(\ scanf(\ p->starttime=0; p->finishtime=0; p->turnaroundtime=0; p->weightedturnaroundtime=0; p->state='W'; if(ready!=NULL) insert3(p);

else { p->next=ready; ready=p; } } void clrscr(void); printf(\ ÏÈÀ´ÏÈ·þÎñË㷨ģÄâÊä³ö½á¹û£º\\n\ printf(\******\\n\ prt(alg); }

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 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)/*ÔËÐÐÍ꽫Æä±äΪÍê³É̬£¬²åÈëÍê³É¶ÓÁÐ*/ {

run->next=finish; finish=run; run->state='F'; run=NULL;

if(ready!=NULL)

firstin(); /*¾ÍÐ÷¶ÔÁв»¿Õ£¬½«µÚÒ»¸ö½ø³ÌͶÈëÔËÐÐ*/ } else

if(run->count==run->round) /*Èç¹ûʱ¼äƬµ½*/ {

run->count=0; /*¼ÆÊýÆ÷ÖÃ0*/

if(ready!=NULL) /*Èç¾ÍÐ÷¶ÓÁв»¿Õ*/ {

run->state='W'; /*½«½ø³Ì²åÈëµ½¾ÍÐ÷¶ÓÁÐÖеȴýÂÖת*/ insert2(run);

firstin(); /*½«¾ÍÐ÷¶ÔÁеĵÚÒ»¸ö½ø³ÌͶÈëÔËÐÐ*/ } } } }

prt(alg); /*Êä³ö½ø³ÌÐÅÏ¢*/

/*****ÏÈÀ´ÏÈ·þÎñµ÷¶ÈËã·¨*****/ void FIFO(char alg) { int time; while(run!=NULL) { time=run->arrivetime>time?run->arrivetime:time; run->starttime=time; time=time+run->servicetime; run->finishtime=time; run->turnaroundtime=run->finishtime-run->arrivetime; run->weightedturnaroundtime=run->turnaroundtime/run->servicetime; run->next=finish; finish=run; run->state='F';