⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcb.cpp

📁 操作系统中的进程调度算法
💻 CPP
字号:
#include<stdio.h>
#include"g:\file.cpp"
#define ERROR -1
int i,a,h,m,pr;
CHANGE(LinkQueue &P,QueuePtr q){
  QueuePtr s;
  if(Q.front==Q.rear) return  ERROR;
    q=Q.front->next;
    Q.front->next=q->next;
    if(Q.rear==q)Q.rear=Q.front;
  s=(QueuePtr)malloc(sizeof (QNode));
  if(!s) exit(OVERFLOW);
  s->ID=q->ID;s->Priority=q->Priority;s->hour=q->hour;s->minute=q->minute;s->Alltime=q->Alltime;
  s->next=NULL;
  P.rear->next=s;
  P.rear=s;
  free(q);
  return OK;
}
EnQueue(LinkQueue &P,int i,int pr,int h,int m,int a){
  QueuePtr s;
  s=(QueuePtr)malloc(sizeof (QNode));
  if(!s) exit(OVERFLOW);
  s->ID=i;s->Priority=pr;s->hour=h;s->minute=m;s->Alltime=a;
  s->next=NULL;
  P.rear->next=s;
  P.rear=s;
  return OK;
}
DeQueue(LinkQueue &P,int &i,int &pr,int &h,int &m,int &a){
    if(P.front==P.rear)
       return  ERROR;
    p=P.front->next;
    i=p->ID;pr=p->Priority;h=p->hour;m=p->minute;a=p->Alltime;
    P.front->next=p->next;
    if(P.rear==p)
      P.rear=P.front;
    free(p);
    return OK;
}
change(QueuePtr &p){
int a,b,c;
 a=p->hour;
 b=p->minute;
 a=a*60+b;
 return a;
}
time(){
int i,T;
  int a,b,c,m,n=1;
  int t=0;
  s=Q.front->next;
  CHANGE(P,s);
  p=P.front->next;
  a=change(p);
  while(p!=NULL)
    { T=10*p->Priority;
      p->Alltime-=T;
      a+=T;
      t=n*T;
      q=Q.front->next;
      b=change(q);
      s1=p->next;
      if(b<=a)
       { if(p->Alltime<=0) p->Alltime=0;
	 printf("%d\t%d\t\t%d\n" ,p->ID,p->Alltime,t);
	 p->hour=a/60;p->minute=a%60;
	 CHANGE(P,q);
	 DeQueue(P,i,pr,h,m,a);
	 if(p->Alltime>0)
	    EnQueue(P,i,pr,h,m,a);
	 p=P.front->next;
	 n=1;
	 continue;
       }
      if(s1!=NULL)
       { if(p->Alltime<=0) p->Alltime=0;
	 printf("%d\t%d\t\t%d\n" ,p->ID,p->Alltime,t);
	 p->hour=a/60;p->minute=a%60;
	 DeQueue(P,i,pr,h,m,a);
	 if(p->Alltime>0)
	   EnQueue(P,i,pr,h,m,a);
	 p=P.front->next;
	 n=1;
	 continue;
       }
      if(p->Alltime<=0)
       { p->Alltime=0;
	 printf("%d\t%d\t\t%d\n" ,p->ID,p->Alltime,t);
	 CHANGE(P,q);
	 DeQueue(P,i,pr,h,m,a);
	 p=P.front->next;
	 a=change(p);
	 n=1;
	 continue;
       }
     n++;
    }
  return OK;
}
void main()
{
   printf("  *****************\n");
  printf("    Now,begining!\n");
  printf("  *****************\n");
  InitQueue(Q);
  file();
  InitQueue(P);
  printf("The State of the PCBs are:\n");
  printf("ID  the left of time  TIME\n");
  time();
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -