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

📄 caozuoxitong.cpp

📁 请求页式存储管理地址转换模拟
💻 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 + -