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

📄 page message.cpp

📁 本人大学毕业设计
💻 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 + -