📄 czxt1.cpp
字号:
#include<iostream.h>
int r,b;
int j;
int max;
struct pcb
{
int id;
int priority;
int cputime;
int alltime;
int startblock;
int blocktime;
int state;
};
pcb ready[5];
pcb block[5];
void input()
{
cout<<"input id of PCD:";
cin>>ready[r].id;
cout<<"input priority of PCD:";
cin>>ready[r].priority;
cout<<"input cputime of PCD:";
cin>>ready[r].cputime;
cout<<"input alltime of PCD:";
cin>>ready[r].alltime;
cout<<"input startblock of PCD:";
cin>>ready[r].startblock;
cout<<"input blocktime of PCD:";
cin>>ready[r].blocktime;
cout<<"input state of PCD:";
cin>>ready[r].state;
}
void display_ready()
{
cout<<"running program"<<ready[max].id<<endl;
cout<<"ready queue:";
for(j=0;j<r;j++)
cout<<"->id"<<ready[j].id;
cout<<endl;
cout<<"block queue:";
for(j=0;j<b;j++)
cout<<"->id"<<block[j].id;
cout<<endl;
cout<<"==================================================================="<<endl;
cout<<"ID|"<<"Priority|"<<"CPUtime|"<<"AllTime|"<<"StartBlock|"<<"BlockTime|"<<"state"<<endl;
for(j=0;j<r;j++)
{
cout.width(2);
cout<<ready[j].id<<"|";
cout.width(8);
cout<<ready[j].priority<<"|";
cout.width(7);
cout<<ready[j].cputime<<"|";
cout.width(7);
cout<<ready[j].alltime<<"|";
cout.width(10);
cout<<ready[j].startblock<<"|";
cout.width(9);
cout<<ready[j].blocktime<<"|";
cout.width(6);
cout<<"ready"<<endl;
}
}
void display_block()
{
for(j=0;j<b;j++)
{
cout.width(2);
cout<<block[j].id<<"|";
cout.width(8);
cout<<block[j].priority<<"|";
cout.width(7);
cout<<block[j].cputime<<"|";
cout.width(7);
cout<<block[j].alltime<<"|";
cout.width(10);
cout<<block[j].startblock<<"|";
cout.width(9);
cout<<block[j].blocktime<<"|";
cout.width(6);
cout<<"block"<<endl;
}
}
int maxpcb()//返回优先级最大进程
{
max=0;
for(j=1;j<r;j++)
{
if(ready[j].priority>ready[max].priority)
max=j;
}
return max;
}
//插入和释放的四个函数
void in_ready(pcb x)
{
ready[r]=x;
r++;
}
void in_block(pcb x)
{
block[b]=x;
b++;
}
void out_ready()
{
for(j=j+1;j<r;j++)
{
ready[j-1]=ready[j];
}
r--;
}
void out_block()
{
for(j=j+1;j<b;j++)
{
block[j-1]=block[j];
}
b--;
}
void change_ready()//进程状态队列变换
{
for(j=0;j<r;j++)
{
if(ready[j].startblock>0)
{
ready[j].startblock--;
}
if(ready[j].startblock==0)
{
ready[j].state=0;
in_block(ready[j]);
out_ready();
}
}
}
void change_block()
{
for(j=0;j<b;j++)
{
if(block[j].blocktime>0)
{
block[j].blocktime--;
}
if(block[j].blocktime==0)
{
block[j].state=1;
in_ready(block[j]);
out_block();
}
}
}
void attemper()//调度
{
for(j=0;j<r;j++)//调整优先级
{
ready[j].priority++;
if(ready[j].alltime==0)
{
out_ready();
}
}
ready[maxpcb()].priority=ready[maxpcb()].priority-4;
if(ready[max].alltime!=0)//更新运行时间
{
ready[max].cputime++;
ready[max].alltime--;
}
change_ready();//进程队列变换
change_block();
}
void main()
{
struct pcb ready[5]={
{0,9,0,3,2,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}
};
for(r=0;r<5;r++)//输入初始状态
input();
do
{
attemper();//调度
for(j=0;j<r;j++)//显示
display_ready();
for(j=0;j<b;j++)
display_block();
}
while(r!=0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -