单处理器系统的进程调度

2019-07-14 06:34发布

单处理器系统的进程调度的代码,#include
#include
#define NULL 0
char Name[5]={'a','b','c','d','e'};
int Super[5]={3,5,7,10,6};////定义PCB
struct PCB {
  char name;//PCB名字
  int RunTime;//PCB已运行时间
  int RequestTime;//PCB要求运行时间
  int super;//PCB优先级
  char status;//PCB状态
  struct PCB* head;//指向上一个PCB结构体的指针变量
  struct PCB* next;//指向下一个PCB结构体的指针变量
  };struct PCB pcb1,pcb2,pcb3,pcb4,pcb5,*p,*q;/////////定义5个PCB进程
////定义PCB各参数的初值,输入各个进程的运行时间
Value()
{
///定义PCB名
 pcb1.name=Name[0];
 pcb2.name=Name[1];
 pcb3.name=Name[2];
 pcb4.name=Name[3];
 pcb5.name=Name[4];
///定义PCB优先级
 pcb1.super=Super[0];
 pcb2.super=Super[1];
 pcb3.super=Super[2];
 pcb4.super=Super[3];
 pcb5.super=Super[4];
///定义PCB状态,初态为'R'
 pcb1.status='R';
 pcb2.status='R';
 pcb3.status='R';
 pcb4.status='R';
 pcb5.status='R';
///定义PCB运行时间,初值为0
 pcb1.RunTime=0;
 pcb2.RunTime=0;
 pcb3.RunTime=0;
 pcb4.RunTime=0;
 pcb5.RunTime=0;
///给PCB的要求运行时间赋值
 cout< cout<<"***请给各个PCB的要求运行时间赋值(int):"< cout<<"***第一个PCB "< cin>>pcb1.RequestTime;
 cout<<"***第二个PCB "< cin>>pcb2.RequestTime;
 cout<<"***第三个PCB "< cin>>pcb3.RequestTime;
 cout<<"***第四个PCB "< cin>>pcb4.RequestTime;
 cout<<"***第五个PCB "< cin>>pcb5.RequestTime;
 cout<<"------------------------------------参数定义完毕-------------------------------"<}
///////////使PCB连接成循环队列
Connect()
{
///////PCB的前驱
 pcb1.head=&pcb5;
 pcb2.head=&pcb1;
 pcb3.head=&pcb2;
 pcb4.head=&pcb3;
 pcb5.head=&pcb4;
////////PCB的后续
 pcb1.next=&pcb2;
 pcb2.next=&pcb3;
 pcb3.next=&pcb4;
 pcb4.next=&pcb5;
 pcb5.next=&pcb1;
}///////显示输入
display()
{
 cout<<"----------------------------------------------------------------"< cout<<"    进程名称 "<<"   下一进程名"<<"   运行时间";
 cout<<"   要求时间"<<"   优先级"<<"   状态"< cout<<"----------------------------------------------------------------"<}/////PCB执行
Run()
{
 Value();
 Connect();
// struct PCB pcb1,pcb2,pcb3,pcb4,pcb5,*p,*q;
 char a;
 int num,n,PcbNum=5,Number=5,flag=1;//PcbNum表示进程执行过程中进程的个数,n表示已执行完毕的进程个数
 q=NULL;                          //flag=1时程序继续
 cout< cout<<"***选择a进程先运行的请按1;"< cout<<"***选择b进程先运行的请按2;"< cout<<"***选择c进程先运行的请按3;"< cout<<"***选择d进程先运行的请按4;"< cout<<"***选择e进程先运行的请按5;"< cout<<"***请选择你想要运行的进程:";
 cin>>num;
 cout< switch(num)//num为何值则转向那一个case,选择执行的进程
 {
 case 1:
  p=&pcb1;
  break;
 case 2:
  p=&pcb2;
  break;
 case 3:
  p=&pcb3;
  break;
 case 4:
  p=&pcb4;
  break;
 case 5:
  p=&pcb5;
  break;
 } while (flag==1){
  n=1;
  if((p->RequestTime==0)||(p->RequestTime==p->RunTime)){///要求运行时间为0或要求运行时间=运行时间时status='E'
   p->status='E';
  }
  else{ //否则,运行时间+1
   p->RunTime=p->RunTime+1;
  }
  cout<<"***进程运行情况如下所示:"<  cout<<"***当前正在执行的进程名称为:"<name<  display(); 
  while(n<=PcbNum){
    if((p->RequestTime==0)||(p->RequestTime==p->RunTime)){///要求运行时间为0或要求运行时间=运行时间时status='E'
     p->status='E';
    }
   cout<<"/t"<name<<"/t    "<next->name<<"/t         "<RunTime<<"/t    "<RequestTime;
   cout<<"/t    "<super<<"/t    "<status<   cout<<"----------------------------------------------------------------"<   cout<   if ((p->RunTime==p->RequestTime)&&(n==1)){/////该进程执行完毕
    q=p;
    Number=Number-1;
   }
   p=p->next;//指向下一进程
   n++;
   PcbNum=Number;
  }
 
  if(q!=NULL){
   if(q->RunTime==q->RequestTime){//有一个进程块执行完毕
    q->status='E';
    q->head->next=q->next;
    q->next->head=q->head;
    cout<<"*************************进程"<name<<"已执行完毕!****************************"<    p=q->next;
    q=p;
   }
 
   else{
    p=p->next;
   }
  }
  if(q==NULL){
   p=p->next;
  }
  if(PcbNum!=0){
   flag=0;
   cout<<"***要继续运行程序请按Enter键两次......"<   a=getchar();   if(a==getchar()){
    flag=1;
   }
   else{
    cout<<"***输入错误!!!"<    cout<<"********************** 程序结束!*************************"<    flag=0;
   }
  }
  if(PcbNum==0){
   flag=0;
   cout<<"*********************进程经已全部执行完毕!**********************"<  }
 
 }
}main()
{
//Value();
// Connect();
 Run();
}