实验五 存储管理.docx

上传人:b****7 文档编号:23722846 上传时间:2023-05-20 格式:DOCX 页数:11 大小:18.66KB
下载 相关 举报
实验五 存储管理.docx_第1页
第1页 / 共11页
实验五 存储管理.docx_第2页
第2页 / 共11页
实验五 存储管理.docx_第3页
第3页 / 共11页
实验五 存储管理.docx_第4页
第4页 / 共11页
实验五 存储管理.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验五 存储管理.docx

《实验五 存储管理.docx》由会员分享,可在线阅读,更多相关《实验五 存储管理.docx(11页珍藏版)》请在冰豆网上搜索。

实验五 存储管理.docx

实验五存储管理

实验五存储管理

1.实验目的:

存储管理的主要功能之一是合理地分配空间。

请求页式管理是一种常用的虚拟存储管理技术。

本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法

2.实验内容:

设计程序实现下述三个算法,并计算下述算法的命中率。

A.OPTIMAL:

最佳置换算法

B.FIFO:

先进先出置换算法

C.LRU:

最近最久未使用置换算法

[预备内容]

地址映射过程中,若发现所要访问的页面不再内存中,则产生缺页中断。

当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。

而用来选择淘汰哪一页的规则叫做页面置换算法。

以下分别是三个算法的设计思想。

OPTIMAL:

最佳置换算法。

其所选择的被淘汰页面,将是以后永不使用的,或是在未来最长时间内不再被访问的页面。

FIFO:

先进先出置换算法。

该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。

LRU:

最近最久未使用置换算法。

该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的的时间T,当须淘汰一个页面时,选择现有页面中其T值最大的给予淘汰。

在该实现中是选择Timer值最大的淘汰。

2)举例即将被访问的页面如下

page

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

内存情况

FIFO

Block

-1

-1

-1

7

-1

-1

7

0

-1

7

0

1

2

3

1

……

2

3

0

OPT

……

2

0

1

2

0

1

2

0

3

2

4

3

……

LRU

LRU

2

0

1

……

4

0

3

2

0

3

 

具体实现:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

FIFO

Block

-1

-1

-1

7

-1

-1

7

0

-1

7

0

1

OPT

Block

-1

-1

-1

7

-1

-1

7

0

-1

7

0

1

Block

-1

-1

-1

7

-1

-1

7

0

-1

7

0

1

LRU

参考程序如下:

#include

#defineBsize3

#definePsize20

typedefstructpage

{

intcontent;//页面号

inttimer;//被访问标记

}page;

pageblock[Bsize];//物理块

pagepage[Psize];//页面号串

voidInit(void)

{//初始化

intQString[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};

for(inti=0;i

{

block[i].content=-1;

block[i].timer=0;

}

for(i=0;i

{

page[i].content=QString[i];

page[i].timer=0;

}

}

intfindSpace(void)

{//查找是否有空闲内存

for(inti=0;i

if(block[i].content==-1)

returni;//找到空闲内存,返回BLOCK中位置

return-1;

}

intfindExist(intcurpage)

{//查找内存中是否有该页面

for(inti=0;i

if(block[i].content==page[curpage].content)

returni;//找到内存中有该页面,返回BLOCK中位置

return-1;

}

intfindReplace(void)

{//查找应予置换的页面,被置换的页面的Timer值最大

intpos=0;

for(inti=0;i

if(block[i].timer>=block[pos].timer)

pos=i;//找到应予置换页面,返回BLOCK中位置

returnpos;

}

voiddisplay(void)

{//显示

for(inti=0;i

if(block[i].content!

=-1)

cout<

cout<

}

voidOptimal(void)

{//OPTIMAL算法

intexist,space,position;

for(inti=0;i

{

exist=findExist(i);

if(exist!

=-1)

{cout<<"不缺页"<

else

{

space=findSpace();

if(space!

=-1)

{block[space]=page[i];//block[space].content=page[i].content,block[space].timer=page[i].timer

display();

}

else

{//没有找到空闲分区,需找一个页面进行置换

for(intk=0;k

for(intj=i;j

{

if(block[k].content!

=page[j].content)

{block[k].timer=1000;}//将来不会用,设置TIMER为一个很大数

else

{

block[k].timer=j;

break;

}

}

position=findReplace();

block[position]=page[i];

display();

}

}

}

}

voidLRU(void)

{//

}

voidFIFO(void)

{//

}

voidBlockClear(void)

{

for(inti=0;i

{

block[i].content=-1;

block[i].timer=0;

}

}

voidmain(void){

Init();

cout<<"|----------页面置换算法----------|"<

cout<<"页面号引用串:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1"<

cout<<"----------------------------------------------------"<

cout<<"选择<1>应用Optimal算法"<

cout<<"选择<2>应用FIFO算法"<

cout<<"选择<3>应用LRU算法"<

cout<<"选择<0>退出"<

intselect;

while(select)

{

cin>>select;

switch(select)

{

case0:

break;

case1:

cout<<"Optimal算法结果如下:

"<

Optimal();

BlockClear();

cout<<"----------------------"<

break;

case2:

cout<<"FIFO算法结果如下:

"<

FIFO();

BlockClear();

cout<<"----------------------"<

break;

case3:

cout<<"LRU算法结果如下:

"<

LRU();

BlockClear();

cout<<"----------------------"<

break;

default:

cout<<"请输入正确功能号"<

break;

}

}

}

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

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1