📄 page message.cpp
字号:
#include"iostream.h"
#include"stdio.h"
#include"string.h"
#include"windows.h"
#include"winbase.h"
#include"time.h"
#include"Job.h"
#include"Job_describe.h"
#include"memberdescribe.h"
#include"pagelist.h"
#include"menushow.h"
int mem_size;//存储器大小
int outnum=0;//淘汰次序记录
int page_size();
//********************************
void Job_showall(job *&jobs,JobDescribe *&jobsdes)
{
job title;
title.showall();//标题显示
for(int i=0;i<job_nums;i++)
{
cout<<jobs[i].job_name<<"\t"<<jobs[i].job_num<<"\t"<<jobs[i].job_size<<"\t\t"<<jobs[i].job_time<<"\t"<<jobsdes[i].job_block;
cout<<endl;
}
}
//----------------------------返回主存的页面大小---------------------
int page_sizes()
{
int mpage_size;
mpage_size=1;
cout<<"\n\t\t作业申请主存,选择作业分页标准:"<<endl;
cout<<"\t\t默认的情况下为1K"<<endl;
cout<<"\t1--------------->1k"<<endl;
cout<<"\t2--------------->2k"<<endl;
cout<<"\t3-------------->4k"<<endl;
cout<<"\t4--------------->跳过"<<endl;
cin>>mpage_size;
if(mpage_size!=1&&mpage_size!=2&&mpage_size!=3)mpage_size=1;
return mpage_size;
}
//--------------------------------
void Job_add(job *&jobs,int flage,int job_n,JobDescribe *&jobsdes)
{
job Tshow;
//if(flage==0)表示新建
Tshow.show();//提示输入作业信息
for(int i=0;i<job_n;i++)
{
(jobs+i)->input_information(job_n,i);//输入作业需要的信息
jobs[i].mpage_size=page_sizes();
jobsdes[i].initial(jobs[i]);//输入作业块号
}
}
//***************************存储分配
void Memberyshow(member *&memall)
{
member mshow;
mshow.mem_show();
for(int i=0;i<mem_size;i++)
{
cout<<memall[i].job_num<<"\t"<<memall[i].page_num<<"\t"<<memall[i].pagelock<<"\t\t"<<memall[i].page_size<<"\t"<<memall[i].bit<<endl;
}
}
//****************************分页过程
void page_info(job *&jobs,int job_num,member *&mem)
{
cout<<"\t该作业所分页开始调入内存:......\n"<<endl;
Sleep(1000);
pagelist *page_use;
page_use=new pagelist[jobs[job_num].page_n];
for(int i=0;i<jobs[job_num].page_n;i++)
{
page_use[i].job_num=job_num;
page_use[i].page_initbit();
page_use[i].page_num=i;
}
cout<<"\t正在查看内存使用情况:......\n"<<endl;
Sleep(2000);
for(i=0;i<jobs[job_num].page_n;i++)
{
for(int j=0;j<mem_size&&(mem[j].bit!=0);j++) Sleep(500);
if(j<mem_size&&(mem[j].bit==0))
{
cout<<"\n\t找到内存区空闲位置地:"<<mem[j].pagelock<<"块"<<endl;
mem[j].job_num=job_num+1;
mem[j].page_size=jobs[job_num].mpage_size;
mem[j].bit=1;
mem[j].page_num=i;
Sleep(2000);
cout<<"\n\t将第"<<job_num+1<<"个作业的第"<<i+1<<"页"<<"调入内存的第"<<mem[j].pagelock<<"块中"<<endl;
}
else
{
cout<<"\n\t 内存已经满了,选择置换算法FIFO进行页面替换..."<<endl;
Sleep(1000);
int k=(outnum++)%mem_size;
cout<<"\n\t将第"<<mem[k].pagelock<<"块淘汰"<<endl;
mem[k].job_num=job_num+1;
mem[k].page_size=jobs[job_num].mpage_size;
mem[k].bit=1;
mem[k].page_num=i;
cout<<"\n\t 将第"<<job_num+1<<"个作业的第"<<i+1<<"页"<<"调入内存的第"<<mem[k].pagelock<<"块中"<<endl;
}
}
}
//************************************系统开始运行**************
void Run(job *&jobs,member *&mem)
{
int page_no;
for(int i=0;i<job_nums;i++)
{
cout<<"\n\n\t第"<<i+1<<"个作业开始运行..."<<endl;
Sleep(1000);
page_no=jobs[i].job_size/jobs[i].mpage_size;
cout<<"\n\t该作业被分为:"<<page_no<<"页"<<endl;
jobs[i].page_n=page_no;//每个作业所分的页面数
page_info(jobs,i,mem);//调用页面函数填写信息
cout<<"\t作业"<<i+1<<"执行完毕";
}
}
//*************************初始化表项
void job_process(job *&jobs,int &job_n)
{
cout<<"\n\n\t\t\t\t页式管理\n\n\t";
cout<<"启动设置操作:......\n\n\t";
cout<<"开始新建作业......\n"<<endl;
Sleep(1000);
cout<<"\t情输入你想处理的作业个数:";
cin>>job_n;
job_nums=job_n;
jobs=new job[job_n];
}
void member_process(member *&memall)
{
cout<<"\n\t设置存储器..."<<endl;
Sleep(1000);
cout<<"\n\t请你自己设定存处器的大小:";
cin>>mem_size;
memall=new member[mem_size];
for(int i=0;i<mem_size;i++)
{
memall[i].mem_initial();
}
}
void jobdescribe_process(JobDescribe *&jobdes)
{
jobdes=new JobDescribe[job_nums];
}
//-------------内存回收
void recieve(member *&mem)
{
pagelock1-=mem_size;
for(int i=0;i<mem_size;i++)
{
mem[i].mem_receive();
}
cout<<"\t回收完毕!"<<endl;
}
//********************选择处理
void choice()
{
int choice_one;
int job_n;//记录输入的作业个数
int flage;//控制作业是建立还是添加的
flage=0;//表示建立
job *jobs;//建立作业
job_process(jobs,job_n);//建立作业过程
member *mem_all;//存储情况
member_process(mem_all);//存储过程
JobDescribe *jobsdescribe;//作业描述块
jobdescribe_process(jobsdescribe);//作业描述块初始化
menushow();//显示主菜单
cin>>choice_one;
while(1)
{
switch(choice_one)
{
case 1:Job_add(jobs,flage,job_n,jobsdescribe);
flage=1;//表示已经建立过了
break;
case 2:Job_showall(jobs,jobsdescribe);
break;
case 3:Run(jobs,mem_all);
break;
case 4:Memberyshow(mem_all);
break;
case 5:recieve(mem_all);
break;
}
if(6==choice_one)
break;
menushow();
cin>>choice_one;
}
}
//*************************主函数
void main()
{
choice();//菜单选择
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -