模拟设计页式存储管理的分配与回收

上传人:文*** 文档编号:70417846 上传时间:2022-04-06 格式:DOC 页数:10 大小:36.50KB
收藏 版权申诉 举报 下载
模拟设计页式存储管理的分配与回收_第1页
第1页 / 共10页
模拟设计页式存储管理的分配与回收_第2页
第2页 / 共10页
模拟设计页式存储管理的分配与回收_第3页
第3页 / 共10页
资源描述:

《模拟设计页式存储管理的分配与回收》由会员分享,可在线阅读,更多相关《模拟设计页式存储管理的分配与回收(10页珍藏版)》请在装配图网上搜索。

1、#include #include #include #include #include page.h #include Random.h using namespace std;list reqtable;RandomNumber random; /随机数产生器unsigned pagenum=random.Random(80)+21; /内存页面数 21-100 unsigned pagesize=random.Random(16)+5; /页面大小 5-20 unsigned pnum=random.Random(4)+5;/进程的个数 5-8 int * mempage=new int

2、pagenum; /用整数数组模拟内存页面数 /*初始化内存页面*/ void Init_Mempage(void) int i=0; for(i=0;iint(pagenum);i+) mempagei=0; /数组全部赋初值 /*获取内存的使用情况*/ int Get_Mempagenum(void) int sum=0; for(int i=0;iint(pagenum);i+) if(mempagei=0) sum+; return sum; /判断有多少内存页面已经被使用 /*初始化默认的请求表*/ void Init_Reqtable(void) int i; for(i=1;i=

3、int(pnum);i+) reqtabitem preq; preq.pid=i; preq.reqpagenum=random.Random(4)+2;/进程请求的页面大小-5 preq.state=false; preq.pgtabadr=NULL; reqtable.push_back(preq); /依次压入容器 /*为默认的进程分配内存*/ void Init_DistMem(void) int reqpnum; /进程请求页面数 int i; list:iterator pos=reqtable.begin(); for(;pos!=reqtable.end();pos+) re

4、qpnum=(*pos).reqpagenum; if(reqpnumint(Get_Mempagenum() /判断请求的内存页面数 目是否大 于剩余的 cout没有足够的内存!endl; coutendl; else (*pos).state=true; pagetable temp = new pgtabitemreqpnum; /新建临时页表数组 if(temp=NULL) cout内存分配失败!endl; exit(0); (*pos).pgtabadr=temp; for(i=0;ireqpnum;i+) tempi.pagenum=i; /页表的页号 int randnum=ra

5、ndom.Random(pagenum)+1;/随机产生一块号 while(mempagerandnum=1) randnum=random.Random(pagenum)+1; tempi.blocknum=randnum;/页表的块号 mempagerandnum=1; /*手动创建进程,并分配内存*/ void Dist_Mem(void) int i; reqtabitem preq; /新创建进程记录 int pid; /进程号 int reqpnum; /请求页面数 bool flag=false; do coutpid; for(list:iterator pos=reqtabl

6、e.begin();pos!=reqtable.end();pos+) if(*pos).pid=pid) flag=true; cout该进程号已经存在,请重新输入endl; coutendl;break; while(flag=true); /循环直到输入的 Pid 满足条件 preq.pid=pid; coutreqpnum; preq.reqpagenum=reqpnum; preq.state=false; preq.pgtabadr=NULL; reqpnum=preq.reqpagenum; if(reqpnumGet_Mempagenum() cout没有足够的内存,进程创建失

7、败!endl; coutendl; else preq.state=true; pagetable temp = new pgtabitemreqpnum; if(temp=NULL) cout内存分配失败!endl; exit(0);preq.pgtabadr=temp; for(i=0;iint(reqpnum);i+) tempi.pagenum=i; /页表的页号int randnum=random.Random(pagenum)+1;/随机产生一个块号 while(mempagerandnum=1) randnum=random.Random(pagenum)+1;tempi.blo

8、cknum=randnum;/页表的块号 mempagerandnum=1; reqtable.push_back(preq);/*程序结束时,释放申请的动态内存*/ void Destroy(void) list:iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).state=true) delete (*pos).pgtabadr; reqtable.clear(); /将该进程的记录加入请求表/* 打印出进程请求表*/void PrintReqtable(voi

9、d) coutendl; cout|-|endl; cout| 进程请求表 |endl; cout|-|endl; cout|setw(8)进程号setw(16)请求页面数 setw(16)页表起始地址 setw(16)页表长度 setw(16)状态 |endl; cout|-|endl; list:iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();pos+) cout|setw(8)(*pos).pid setw(16)(*pos).reqpagenum setw(16)(*pos).pgta

10、badrsetw(16)(*pos).reqpagenum) * pagesize;if(*pos).state) coutsetw(4)已分配 |endl;else coutsetw(4)未分配 |endl;if(*pos).pid!=reqtable.back().pid) cout|-|end;else cout|-|endl;/*打印页表*/void PrintPageTable(void) unsigned pid; int i; bool flag=false; coutpid; list:iterator pos=reqtable.begin(); for(pos=reqtabl

11、e.begin();pos!=reqtable.end();pos+) if(*pos).pid=pid&(*pos).state=true) flag=true; cout|-|endl; cout| 此进程的页表 |endl; cout|-|endl; cout|setw(16)页号 setw(6)块号 |endl;cout|-|endl;int reqpagenum=(*pos).reqpagenum;for(i=0;ireqpagenum;i+) cout|setw(16)(*pos).pgtabadri.pagenumsetw(6)(*pos).pgtabadri.blocknum

12、|endl;if(i!=reqpagenum-1) cout|-|endl;else cout|-|endl; if(flag=false) cout系统中不存在该进程或者该进程还没有被分配内存!n;coutendl; void PrintMem(void) cout 内 存 总 块 数 为 pagenum, 已经使用了 pagenum-Get_Mempagenum()块!endl; cout现在还有Get_Mempagenum()块内存区域空闲!endl;coutendl; void PrintBlockSize(void) cout物理块大小为:pagesizeKBendl; couten

13、dl; /*结束指定进程*/ void Kill(void) bool flag; int i; reqtabitem temp; list:iterator pos=reqtable.begin(); int pid; do coutpid; for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).pid=pid) flag=true; temp=*pos; break; if(flag=false) cout系统中不存在该进程!endl; coutendl; while(flag=false); for(i=0;iint(te

14、mp.reqpagenum);i+)mempagetemp.pgtabadri.blocknum=0; reqtable.remove(temp); /重新为没有分配到内存的进程分配内存 for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).state=false) int reqpnum; reqpnum=(*pos).reqpagenum; if(reqpnum=Get_Mempagenum() (*pos).state=true; pagetable temp = new pgtabitemreqpnum; if(temp

15、=NULL) cout内存分配失败!endl; coutendl; exit(0); (*pos).pgtabadr=temp; for(i=0;iint(reqpnum);i+) tempi.pagenum=i; /页表的页号 号int randnum=random.Random(pagenum)+1;/随机产生一个块号 while(mempagerandnum=1) randnum=random.Random(pagenum)+1; tempi.blocknum=randnum;/页表的块号 mempagerandnum=1; /*初始化系统*/ void InitSys(void) co

16、ut.setf(ios:left);/左对齐 Init_Mempage(); Init_Reqtable(); Init_DistMem(); /*输出主菜单*/ void MainMenu(void) cout页式存储管理的分配与回收endl;cout1.手动创建进程endl; cout2.显示进程页表endl; cout3.显示请求表endl; cout4.撤销进程endl; cout5.显示内存使用情况endl; cout6.显示物理块大小endl; cout7.退出系统endl; coutchoice; switch(choice) case 1: Dist_Mem(); break;

17、 case 2: PrintPageTable(); break; case 3: PrintReqtable(); break; case 4: Kill(); break; case 5: PrintMem(); break; case 6: PrintBlockSize(); break; case 7: break; default :cout输入有误,请重新输入.n; coutendl; break; while(choice!=7); int main() InitSys();/初始化系统 MainChoice();/输出系统菜单 Destroy();/释放申请的动态内存 return 0; 10 / 10

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!