单处理器系统的进程调度
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();
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮