实验六 请求分页存储管理文档格式.docx

上传人:b****6 文档编号:21032242 上传时间:2023-01-27 格式:DOCX 页数:8 大小:75.53KB
下载 相关 举报
实验六 请求分页存储管理文档格式.docx_第1页
第1页 / 共8页
实验六 请求分页存储管理文档格式.docx_第2页
第2页 / 共8页
实验六 请求分页存储管理文档格式.docx_第3页
第3页 / 共8页
实验六 请求分页存储管理文档格式.docx_第4页
第4页 / 共8页
实验六 请求分页存储管理文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

实验六 请求分页存储管理文档格式.docx

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

实验六 请求分页存储管理文档格式.docx

实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。

实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。

三、设计过程

3.1算法原理分析

OPT算法是未来最远出现,当当前内存中没有正要访问的页面时,置换出当前页面中在未来的访问页中最远出现的页面或再也不出现的页面。

FIFO算法是先进先出,当当前内存中没有正要访问的页面时,置换出最先进来的页面。

LRU算法是最近最久未使用,当当前内存中没有正要访问的页面时,置换出在当前页面中最近最久没有使用的页面。

3.2数据定义

intlength,num_page,count,seed;

//length记录访问串的长度,num_page页面数,count记录缺页次数

intresult[20][30],order[30],a[10];

//result记录结果,order存储访问串,a存储当前页面中的值

intpos1,flag1,flag2,flag3;

//pos1位置变量,flag1等为标志变量

charresult1[30];

//记录缺页数组voidopt()//最佳

voidfifo()//先进先出

boolsearch(intn)//查找当前内存中是否已存在该页

3.3流程图与运行截图

图6.1FIFO()函数流程图;

 

图2.2OPT算法流程图

四、小结

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

要求设计随机页面产生程序,并说明随机的性能和其性能可能对算法的影响,对随机性要有一定的参数控制能力;

计算并输出FIFO及LRU算法在不同内存容量下的命中率。

由于上学期做过页面置换的实验,内容包括先进先出算法(FIFO)、最近最久未使用页面置换算法(LRU)和理想淘汰算法(OPT),3种算法思想简单明确,选好数据结构,思路清晰便基本没问题了。

所以相对来说,这次操作系统的课程设计容易许多,只是在之前实验基础上,要附加设计随机页面产生程序,对随机性要有一定的参数控制能力。

对于随机页面产生程序,我们之前没做过,在网上查阅资料,使用了库函数srand()和rand(),实现了简单的随机页面产生程序,功能基本完成。

我们知识所限,没有使用漂亮可视化界面编程实现功能,用简单的C语言编程实现的。

不管怎么样,最终还是实现的本次课程设计要求的。

五、源程序

#include<

iostream>

stdlib.h>

usingnamespacestd;

voidinit()

{memset(a,-1,sizeof(a));

inti;

cout<

<

"

输入访问串的长度:

;

cin>

>

length;

输入种子数控制产生的随机值:

seed;

srand(seed);

产生的随机访问串:

for(i=0;

i<

i++)

{order[i]=rand()%10;

cout<

order[i]<

"

endl;

}

输入页面的个数:

num_page;

}

voidprint()

{inti,j;

表示缺页"

for(j=0;

j<

j++)

printf("

%2d"

order[j]);

for(i=0;

{for(j=0;

{if(result[i][j]==-1)

{printf("

);

}

elseprintf("

result[i][j]);

}cout<

{printf("

%2c"

result1[j]);

}cout<

缺页率:

count<

/"

printf("

=%.1lf"

(count*1.0)/(length*1.0)*100);

%"

boolsearch(intn)//查找当期内存是否已存在

{inti;

{if(a[i]==n)returntrue;

returnfalse;

voidopt()//最佳

{inti,pos[10],flag[10];

while

(1){

flag1=flag2=0;

for(i=0;

{if(!

search(order[i]))

{count++;

result1[i]='

*'

if(a[num_page-1]!

=-1)//表示当前页面已满要淘汰一个

{memset(pos,-1,sizeof(pos));

memset(flag,0,sizeof(flag));

intj,k;

for(j=i;

j++)//找出当前页中的值在将来访问串中对应的最近位置

{for(k=0;

k<

k++)

{if(order[j]==a[k]&

&

flag[k]==0)

{pos[k]=j;

flag[k]=1;

}

}

cout<

intmax=-10,max_pos;

for(k=0;

k++)//找出位置最远的那个值

{if(pos[k]==-1)//未出现则跳出,替换该值

{max_pos=k;

break;

elseif(max<

pos[k])

{max=pos[k];

max_pos=k;

a[max_pos]=order[i];

}

else//还有空页

{for(intj=0;

{if(a[j]==-1)

{a[j]=order[i];

elseresult1[i]='

'

for(intj=0;

{result[j][i]=a[j];

}

print();

if(flag1==0&

flag2==0)break;

voidfifo()//先进先出

{inti,thisn=0;

while

(1)

{count=0;

flag1=flag2=0;

for(i=pos1;

result1[i]='

{a[thisn]=order[i];

thisn++;

if(thisn>

=num_page)thisn=0;

else

voidmain()//主函数

{

intm;

1.OPT.\n"

2.FIFO.\n"

0.退出.\n"

选择所要操作:

scanf("

%d"

&

m);

switch(m)

{case1:

init();

fifo();

main();

case2:

lru();

case0:

default:

选择错误,重新选择."

感谢下载!

欢迎您的下载,资料仅供参考

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

当前位置:首页 > 经管营销 > 经济市场

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

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