?? 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 + -