📄 static.cpp
字号:
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
#define null 0
#define max 10000
struct PCB{//进程信息块
string name;
int Rtime;
int size;
};
struct MemoryTable{//存储区信息块
int num;//分区号
bool state;//分区状态
int size;//分区大小
int BePos;//分区起始位置
PCB *pcb;
};
typedef MemoryTable MT;
MT *T;
int n,m;
void displayMT()//显示分区说明表
{ PCB *p;
cout<<"分区说明表:\n";
cout<<"区号 分区长度 起始地址 状态 |进程 大小 完成时间\n";
cout<<"__________________________________|____________________\n";
for(int i=1;i<=n;i++)
{cout<<right<<setw(4)<<T[i].num<<setw(9)<<T[i].size<<'k'<<setw(9)
<<T[i].BePos<<'k';
if(T[i].state==true)
cout <<" 已分配 |"<<setw(4)<<T[i].pcb->name<<setw(5)
<<T[i].pcb->size<<'k'<<setw(10)<<T[i].pcb->Rtime<<endl;
else cout<<" 未分配 |"<<setw(4)<<"无"<<setw(6)<<"无"<<setw(10)
<<"无"<<endl;
}
cout<<"\n";
system("pause");
}
void createMT()//建立分区说明表
{
cout<<"请输入内存分区个数:";
cin>>n;
T=new MT[n+1];
T[0].BePos=0;
T[0].size=0;
cout<<"输入各个存储区的大小:\n";
for(int i=1;i<=n;i++)
{
T[i].num=i;
cout<<"分区"<<i<<":";
cin>>T[i].size;
T[i].state=false;
T[i].BePos=T[i-1].BePos+T[i-1].size;
T[i].pcb=null;
}
displayMT();
}
void AssignPCB(PCB *p)//为进程分配存储区
{
int i;
for(i=1;i<=n;i++)
{
if(T[i].state==false&&T[i].size>=p->size)
{T[i].pcb=p;T[i].state=true;break;}
}
if(i==n+1) {cout<<"进程要求空间过大,无合适分区,释放进程\n";delete p;m--;}
}
void applyPCB()//输入请求的进程
{
cout<<"输入进程数:";
cin>>m;
int j=m;
PCB *p;
cout<<"输入各进程的名称、要求空间、完成时间\n";
for(int i=1;i<=j;i++)
{
p=new PCB;
cout<<"NO."<<i<<":";
cin>>p->name;
cin>>p->size;
cin>>p->Rtime;
AssignPCB(p);//分配内存资源
}
displayMT();
cout<<"\n\n进程执行中。。。。\n\n" ;
system("pause");
}
void reclaim()//进程执行结束,回收内存资源
{
int min,mark;
cout<<m<<endl;
for(int i=1;i<=m;i++)
{
min=max;mark=0;
for(int j=1;j<=n;j++)
{
if(T[j].state==true)
{
if(T[j].pcb->Rtime<min) {mark=j;min=T[j].pcb->Rtime;}
}
}
system("cls");
cout<<"时刻:"<<min<<"\n\n";
cout<<"进程"<<T[mark].pcb->name<<"执行结束,回收资源,修改分区说明表\n\n";
PCB *p=T[mark].pcb;T[mark].pcb=null;T[mark].state=false;
delete p;
displayMT();
}
cout<<"\n\n所有进程执行结束,资源全部回收,程序结束\n\n";
}
int main()//主函数
{
createMT();
applyPCB();
reclaim();
system("pause");
delete []T;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -