模拟设计页式存储管理的分配与回收
仅仅是代码哦
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <list>
#include "page.h"
#include "Random.h" using namespace std;
list<reqtabitem> reqtable;
RandomNumber random; //随机数产生器
unsigned pagenum=random.Random(80)+21; //内存页面数
unsigned pagesize=random.Random(16)+5; //页面大小 5-20
unsigned pnum=random.Random(4)+5;//进程的个数 5-8
int * mempage=new int[pagenum]; //用整数数组模拟内存页面数
/*初始化内存页面*/
void Init_Mempage(void)
{
int i=0;
for(i=0;i<int(pagenum);i++)
mempage[i]=0; //数组全部赋初值
}
/*获取内存的使用情况*/
int Get_Mempagenum(void)
{
int sum=0;
for(int i=0;i<int(pagenum);i++)
if(mempage[i]==0)
sum++;
return sum; //判断有多少内存页面已经被使用
}
/*初始化默认的请求表*/
void Init_Reqtable(void)
{
int i;
for(i=1;i<=int(pnum);i++)
{ 21-100
仅仅是代码哦
reqtabitem preq;
preq.pid=i;
preq.state=false;
preq.pgtabadr=NULL;
reqtable.push_back(preq); //依次压入容器
}
}
/*为默认的进程分配内存*/
void Init_DistMem(void)
{
int reqpnum; //进程请求页面数
int i;
list<reqtabitem>::iterator pos=reqtable.begin();
for(;pos!=reqtable.end();pos++)
{
reqpnum=(*pos).reqpagenum;
if(reqpnum>int(Get_Mempagenum())) //判断请求的内存页面数 目是否大 于剩余的
{
cout<<"没有足够的内存!"<<endl;
cout<<endl;
}
else
{
(*pos).state=true;
pagetable temp = new pgtabitem[reqpnum]; //新建临时页表数组 if(temp==NULL)
{
cout<<"内存分配失败!"<<endl;
exit(0);
}
(*pos).pgtabadr=temp;
for(i=0;i<reqpnum;i++)
{ preq.reqpagenum=random.Random(4)+2;//进程请求的页面大小-5
仅仅是代码哦
temp[i].pagenum=i; //页表的页号
int randnum=random.Random(pagenum)+1;//随机产生一块号 while(mempage[randnum]==1)
randnum=random.Random(pagenum)+1;
temp[i].blocknum=randnum;//页表的块号
mempage[randnum]=1;
}
}
}
}
/*手动创建进程,并分配内存*/
void Dist_Mem(void)
{ int i;
reqtabitem preq; //新创建进程记录
int pid; //进程号
int reqpnum; //请求页面数
bool flag=false;
do
{
cout<<"请输入进程号:";
flag=false;
cin>>pid;
for(list<reqtabitem>::iterator
pos=reqtable.begin();pos!=reqtable.end();pos++)
{
if((*pos).pid==pid)
{
flag=true;
cout<<"该进程号已经存在,请重新输入"<<endl;
cout<<endl;
break;
}
}
}while(flag==true); //循环直到输入的 Pid 满足条件
仅仅是代码哦
preq.pid=pid;
cout<<"请输入需要的页面数:";
cin>>reqpnum; preq.reqpagenum=reqpnum; preq.state=false; preq.pgtabadr=NULL; reqpnum=preq.reqpagenum; if(reqpnum>Get_Mempagenum()) {
cout<<"没有足够的内存,进程创建失败!"<<endl;
cout<<endl;
}
else
{
preq.state=true; pagetable temp = new pgtabitem[reqpnum]; if(temp==NULL) {
cout<<"内存分配失败!"<<endl;
exit(0);
}
preq.pgtabadr=temp;
for(i=0;i<int(reqpnum);i++)
{ temp[i].pagenum=i; //页表的页号
int randnum=random.Random(pagenum)+1;//随机产生一个
块号
while(mempage[randnum]==1)
randnum=random.Random(pagenum)+1;
temp[i].blocknum=randnum;//页表的块号
mempage[randnum]=1;
}
}
reqtable.push_back(preq);
}
/*程序结束时,释放申请的动态内存*/
void Destroy(void)
{
仅仅是代码哦
list<reqtabitem>::iterator pos=reqtable.begin();
for(pos=reqtable.begin();pos!=reqtable.end();pos++)
{
if((*pos).state==true)
delete [](*pos).pgtabadr;
}
reqtable.clear();
} //将该进程的记录加入请求表
/* 打印出进程请求表*/
void PrintReqtable(void)
{
cout<<endl;
cout<<"|------------------------------------------------------------------|"<<endl; cout<<"| 进程请求表 |"<<endl; cout<<"|------------------------------------------------------------------|"<<endl; cout<<"|"<<setw(8)<<"进程号"<<setw(16)<<"请求页面数"
<<setw(16)<<"页表起始地址" <<setw(16)<<"页表长度"
<<setw(16)<<"状态 |"<<endl;
cout<<"|-------------------------------------------------------------------|"<<endl; list<reqtabitem>::iterator pos=reqtable.begin();
for(pos=reqtable.begin();pos!=reqtable.end();pos++)
{
cout<<"|"<<setw(8)<<(*pos).pid
<<setw(16)<<(*pos).reqpagenum
<<setw(16)<<(*pos).pgtabadr
<<setw(16)<<((*pos).reqpagenum) * pagesize;
if((*pos).state)
cout<<setw(4)<<"已分配 |"<<endl;
else
cout<<setw(4)<<"未分配 |"<<endl;
if((*pos).pid!=reqtable.back().pid)
cout<<"|--------------------------------------------------------------|"<<end; else
cout<<"|-------------------------------------------------------------|"<<endl; }
}
仅仅是代码哦
/*打印页表*/
void PrintPageTable(void)
{
unsigned pid;
int i;
bool flag=false;
cout<<"请输入进程号:";
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




