模拟设计页式存储管理的分配与回收Word下载.docx

上传人:b****4 文档编号:6548197 上传时间:2023-05-06 格式:DOCX 页数:14 大小:16.88KB
下载 相关 举报
模拟设计页式存储管理的分配与回收Word下载.docx_第1页
第1页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第2页
第2页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第3页
第3页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第4页
第4页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第5页
第5页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第6页
第6页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第7页
第7页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第8页
第8页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第9页
第9页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第10页
第10页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第11页
第11页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第12页
第12页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第13页
第13页 / 共14页
模拟设计页式存储管理的分配与回收Word下载.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

模拟设计页式存储管理的分配与回收Word下载.docx

《模拟设计页式存储管理的分配与回收Word下载.docx》由会员分享,可在线阅读,更多相关《模拟设计页式存储管理的分配与回收Word下载.docx(14页珍藏版)》请在冰点文库上搜索。

模拟设计页式存储管理的分配与回收Word下载.docx

int(pagenum);

i++)

mempage[i]=0;

//数组全部赋初值

}

/*获取内存的使用情况*/

intGet_Mempagenum(void)

intsum=0;

for(inti=0;

if(mempage[i]==0)

sum++;

returnsum;

//判断有多少内存页面已经被使用

/*初始化默认的请求表*/

voidInit_Reqtable(void)

inti;

for(i=1;

=int(pnum);

{

reqtabitempreq;

preq.pid=i;

preq.reqpagenum=random.Random(4)+2;

//进程请求的页面大小-5

preq.state=false;

preq.pgtabadr=NULL;

reqtable.push_back(preq);

//依次压入容器

}

}

/*为默认的进程分配内存*/

voidInit_DistMem(void)

intreqpnum;

//进程请求页面数

inti;

:

iteratorpos=reqtable.begin();

for(;

pos!

=reqtable.end();

pos++)

reqpnum=(*pos).reqpagenum;

if(reqpnum>

int(Get_Mempagenum()))//判断请求的内存页面数

目是否大于剩余的

cout<

<

"

没有足够的内存!

endl;

}

else

(*pos).state=true;

pagetabletemp=newpgtabitem[reqpnum];

//新建临时页表数组

if(temp==NULL)

{

内存分配失败!

exit(0);

(*pos).pgtabadr=temp;

reqpnum;

temp[i].pagenum=i;

//页表的页号

intrandnum=random.Random(pagenum)+1;

//随机产生一块号

while(mempage[randnum]==1)

randnum=random.Random(pagenum)+1;

temp[i].blocknum=randnum;

//页表的块号

mempage[randnum]=1;

/*手动创建进程,并分配内存*/

voidDist_Mem(void)

{inti;

//新创建进程记录

intpid;

//进程号

intreqpnum;

//请求页面数

boolflag=false;

do

请输入进程号:

;

flag=false;

cin>

>

pid;

for(list<

iterator

pos=reqtable.begin();

if((*pos).pid==pid)

{

flag=true;

该进程号已经存在,请重新输入"

cout<

break;

}while(flag==true);

//循环直到输入的Pid满足条件

preq.pid=pid;

请输入需要的页面数:

preq.reqpagenum=reqpnum;

reqpnum=preq.reqpagenum;

Get_Mempagenum())

没有足够的内存,进程创建失败!

else

preq.state=true;

if(temp==NULL)

preq.pgtabadr=temp;

int(reqpnum);

i++)

{temp[i].pagenum=i;

//页表的页号

intrandnum=random.Random(pagenum)+1;

//随机产生一个块号

while(mempage[randnum]==1)

temp[i].blocknum=randnum;

//页表的块号

/*程序结束时,释放申请的动态内存*/

voidDestroy(void)

for(pos=reqtable.begin();

pos++)

if((*pos).state==true)

delete[](*pos).pgtabadr;

reqtable.clear();

}//将该进程的记录加入请求表

/*打印出进程请求表*/

voidPrintReqtable(void)

|------------------------------------------------------------------|"

|进程请求表|"

|"

setw(8)<

进程号"

setw(16)<

请求页面数"

页表起始地址"

<

页表长度"

状态|"

|-------------------------------------------------------------------|"

list<

(*pos).pid

(*pos).reqpagenum

(*pos).pgtabadr

((*pos).reqpagenum)*pagesize;

if((*pos).state)

setw(4)<

已分配|"

else

未分配|"

if((*pos).pid!

=reqtable.back().pid)

|--------------------------------------------------------------|"

end;

elsecout<

|-------------------------------------------------------------|"

/*打印页表*/

voidPrintPageTable(void)

unsignedpid;

for(pos=reqtable.begin();

if((*pos).pid==pid&

&

(*pos).state==true)

flag=true;

|---------------------------|"

|此进程的页表|"

页号"

setw(6)<

块号|"

intreqpagenum=(*pos).reqpagenum;

for(i=0;

reqpagenum;

(*pos).pgtabadr[i].pagenum

(*pos).pgtabadr[i].blocknum<

|"

if(i!

=reqpagenum-1)

if(flag==false)

系统中不存在该进程或者该进程还没有被分配内存!

\n"

voidPrintMem(void)

内存总块数为"

pagenum<

已经使用了

"

pagenum-Get_Mempagenum()<

块!

现在还有"

Get_Mempagenum()<

块内存区域空闲!

voidPrintBlockSize(void)

{cout<

物理块大小为:

pagesize<

KB"

/*结束指定进程*/

voidKill(void)

boolflag;

reqtabitemtemp;

if((*pos).pid==pid)

temp=*pos;

if(flag==false)

系统中不存在该进程!

}while(flag==false);

int(temp.reqpagenum);

mempage[temp.pgtabadr[i].blocknum]=0;

reqtable.remove(temp);

//重新为没有分配到内存的进程分配内存for(pos=reqtable.begin();

if((*pos).state==false)

if(reqpnum<

=Get_Mempagenum())

temp[i].pagenum=i;

//页表的页号号

mempage[randnum]=1;

}/*初始化系统*/

voidInitSys(void)

cout.setf(ios:

left);

//左对齐

Init_Mempage();

Init_Reqtable();

Init_DistMem();

/*输出主菜单*/

voidMainMenu(void)

页式存储管理的分配与回收"

1.手动创建进程"

2.显示进程页表"

3.显示请求表"

4.撤销进程"

5.显示内存使用情况"

6.显示物理块大小"

7.退出系统"

请输入您的选择(0--7):

/*选择函数*/

voidMainChoice()

intchoice;

do{MainMenu();

cin>

choice;

switch(choice)

case1:

Dist_Mem();

case2:

PrintPageTable();

break;

case3:

PrintReqtable();

case4:

Kill();

case5:

PrintMem();

case6:

PrintBlockSize();

case7:

default:

输入有误,请重新输入.\n"

}while(choice!

=7);

intmain()

InitSys();

//初始化系统

MainChoice();

//输出系统菜单

Destroy();

//释放申请的动态内存

return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2