📄 caozuoxitong.cpp
字号:
#include <stdio.h>
#include <iostream>
using namespace std;
int i;//循环值
int j;//还在阻塞或就绪队列中的进程数
int s;
int m;//最大priority的id
struct pcb
{
int id;
int p; //priority
int cputime;
int alltime;
int startblock;
int blocktime;
int state; //0 表示ready ,1表示end ,-1表示block
};
struct pcb pro[5]={
{0,9,0,3,1,3,0},
{1,38,0,3,1,0,0},
{2,30,0,6,1,0,0},
{3,29,0,3,1,0,0},
{4,0,0,4,1,0,0}
};
int changestate0()
{
if(pro[0].startblock==0)
{
pro[0].state=-1;
pro[0].startblock--;
return 1;
}
if(pro[0].blocktime==0)
{
pro[0].state=0;
return 1;
}
if(pro[0].state==0&&pro[0].startblock!=-1)
{
pro[0].startblock--;
return 1;
}
if(pro[0].state==-1&&pro[0].blocktime!=0)
{
pro[0].blocktime--;
return 1;
}
}
int state0()
{
changestate0();
s=pro[0].p;
if(pro[0].state==-1)
s=-100;
return s;
}
int maxp()//求出最大priority
{
state0();
int max=s;
m=pro[0].id;
for(i=0;i<j;i++)
{
if(pro[i+1].p>pro[i].p)
{
max=pro[i+1].p;
m=pro[i+1].id;
}
}
return m;
}
void change()
{
maxp();
int x;//得到m现在的数组编号
for(i=0;i<j;i++)
{
pro[i].p++;
}
for(i=0;i<j;i++)
{
if(pro[i].id==m)
x=i;
}
pro[x].cputime++;
pro[x].p=pro[x].p-4;
pro[x].alltime--;
if(pro[x].alltime==0)
{
pro[x].state=1;
}
}
void display()
{
change();
cout<<"RUNNING PROG:"<<m<<endl;
cout<<"===============================================================\n";
cout<<"ID ";
for(i=0;i<j;i++)
{
cout.width(10);
cout<<pro[i].id;
}
cout<<endl<<"PRIORITY ";
for(i=0;i<j;i++)
{
cout.width(10);
cout<<pro[i].p;
}
cout<<endl<<"CPUTIME ";
for(i=0;i<j;i++)
{
cout.width(10);
cout<<pro[i].cputime;
}
cout<<endl<<"ALLTIME ";
for(i=0;i<j;i++)
{
cout.width(10);
cout<<pro[i].alltime;
}
cout<<endl<<"STARTBLOCK";
for(i=0;i<j;i++)
{
cout.width(10);
cout<<pro[i].startblock;
}
cout<<endl<<"BLOCKTIME ";
for(i=0;i<j;i++)
{
cout.width(10);
cout<<pro[i].blocktime;
}
cout<<endl<<"STATE ";
for(i=0;i<j;i++)
{
cout.width(10);
cout<<pro[i].state;
}
cout<<endl;
}
int main()
{
j=5;//刚开始有5个进程
while(j!=0)
{
for(i=0;i<j;i++)
{
if(pro[i].state==1)
{
for(;i<j;i++)
{
pro[i]=pro[i+1];
}
j=j-1;
}
}
display();
getchar();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -