📄 main.cpp
字号:
#include<vector>
#include<functional>
#include<algorithm>
#include<time.h>
#include<iomanip>
#include<conio.h>
#include"job.h"
using namespace std;
void PrintBlock()//打印内存分配表
{
cout<<"内存分配表:"<<endl;
cout<<setw(10)<<"起始地址"<<setw(20)<<"大小"<<setw(20)<<"状态"<<endl;
for_each(btable.begin(),btable.end(),mem_fun_ref(BlockItem::output));
cout<<endl;
}
void PrintFree()//打印空闲分区表
{
cout<<"空闲分区表:"<<endl;
cout<<setw(10)<<"起始地址"<<setw(20)<<"大小"<<endl;
for_each(ftable.begin(),ftable.end(),mem_fun_ref(FreeItem::output));
cout<<endl;
}
void PrintJobDispute(JobList& jobs)//打印作业分配表
{
cout<<"作业分配表:"<<endl;
cout<<setw(10)<<"作业PID"<<setw(20)<<"装入地址"<<setw(20)<<"作业长度"<<endl;
for_each(jobs.begin(),jobs.end(),mem_fun_ref(Job::output));
cout<<endl;
}
void randFree(Job& job)//随机释放作业内存
{
if(job.startAddress!=-1&&1==randInt(1,100)%2)
job.Free();
}
JobList::iterator FindJob(JobList& jobs,PID& jpid)
{
JobList::iterator jit=jobs.begin();
while(jit!=jobs.end())
if(jit->pid==jpid)
return jit;
else jit++;
return jit;
}
void AddressTrans(JobList& jobs)
{
cout<<"输入(作业号 逻辑地址):";
PID jpid;
int laddr;
cin>>jpid>>laddr;
if(cin.fail())
return;
JobList::iterator jit=FindJob(jobs,jpid);
if(jit==jobs.end()) {
cout<<"不存在该作业"<<endl;
return;
}
if(jit->startAddress==-1)
cout<<"该作业没有分配内存"<<endl;
else if(jit->length<laddr)
cout<<"地址越界"<<endl;
else
cout<<"物理地址为:"<<jit->startAddress+laddr<<endl;
}
void main()
{
srand(time(NULL));
JobList jobs;
cout<<"输入物理内存容量:";
int memSize;
cin>>memSize;
ftable.push_back(FreeItem(0,memSize));
cout<<"输入作业个数:";
int jobNum;
cin>>jobNum;
cout<<"输入作业最大长度:";
cin>>JobSize;
jobs.resize(jobNum);
cout<<"随机生成作业并分配内存......"<<endl;
for_each(jobs.begin(),jobs.end(),mem_fun_ref(Job::initJob));
for_each(jobs.begin(),jobs.end(),mem_fun_ref(Job::Alloc));
PrintJobDispute(jobs);
PrintBlock();
PrintFree();
cout<<"逻辑地址到物理地址的转换....."<<endl;
while(!cin.fail())
{
AddressTrans(jobs);
cout<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -