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

📄 czxt1.cpp

📁 采用动态优先权的进程调度算法作为进程设计算法
💻 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 + -