请求页式存储管理模拟实验源代码及实验报告.docx

上传人:b****7 文档编号:25531480 上传时间:2023-06-09 格式:DOCX 页数:16 大小:70.74KB
下载 相关 举报
请求页式存储管理模拟实验源代码及实验报告.docx_第1页
第1页 / 共16页
请求页式存储管理模拟实验源代码及实验报告.docx_第2页
第2页 / 共16页
请求页式存储管理模拟实验源代码及实验报告.docx_第3页
第3页 / 共16页
请求页式存储管理模拟实验源代码及实验报告.docx_第4页
第4页 / 共16页
请求页式存储管理模拟实验源代码及实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

请求页式存储管理模拟实验源代码及实验报告.docx

《请求页式存储管理模拟实验源代码及实验报告.docx》由会员分享,可在线阅读,更多相关《请求页式存储管理模拟实验源代码及实验报告.docx(16页珍藏版)》请在冰豆网上搜索。

请求页式存储管理模拟实验源代码及实验报告.docx

请求页式存储管理模拟实验源代码及实验报告

请求页式存储管理模拟实验源代码及实验报告

//请求页式存储管理模拟‎‎实验源代码及实验报告

//自己写的,程序写得比较简单,只为方便学弟学妹们呵呵^^

//dlnu.

#include

#include

#include

#include

#include

usingnamespacestd;intyemianliu[32]={0};//全局变量数组,地址流intp;//全局变量p是一共有多少地址流

voidchushihua()//初始化函数

{

intt;

srand(time(0));//随机产生指令序列

p=12+rand()%32;

cout<<"地址流序列:

";

for(inti=0;i

{

t=1+rand()%9;

yemianliu[i]=t;//将随机产生的指令数存入页面流

cout<

}

cout<

}

voidFIFO(intn)//FIFO算法,n是M的值{

inti;

intq=p;

inte;

intqueye=0;

intflag;

intfifo[32]={0};

while(q--)

{

flag=0;

e=q;

for(i=0;i

{

if(fifo[i]==yemianliu[q])

{

flag=1;

break;

1

}

}

if(flag==0)

{

intm=n-1;

intk=m;

while(m--)

{

fifo[k]=fifo[k-1];

k--;

}

fifo[0]=yemianliu[e];

queye++;

}

}

cout<<"M="<

"<<(1-((double)queye/p))*100<<"%"<<"";

}

voidLRU(intn)//LRU算法{

inti;

intq=p;

inte;

intqueye=0;

intflag;

intflag1,;

inty;

intlru[32]={0};

while(q--)

{

flag=0;

e=q;

for(i=0;i

{

if(lru[i]==yemianliu[q])

{

flag=1;

flag1=i;

break;

}

}

if(flag==0)

{

intm=n-1;

2

intk=m;

while(m--)

{

lru[k]=lru[k-1];

k--;

}

lru[0]=yemianliu[e];

queye++;

}

elseif(flag==1)

{

y=flag1;

while(y--)

{

lru[flag1]=lru[flag1-1];

flag1--;

}

lru[0]=yemianliu[e];

}

}

cout<<"M="<

"<<(1-((double)queye/p))*100<<"%"<

}

voidmain()

{

chushihua();

for(inti=3;i<33;i++)

{

FIFO(i);

LRU(i);

}

}

3

报告,

××××大学

计算机科学与工程学院实验报告实验题目:

请求页式存储管理模拟

课程名称:

计算机操作系统

实验类型:

?

演示性?

验证性?

操作性?

设计性?

综合性专业:

班级:

姓名:

学号:

实验日期:

2012年5月24日实验地点:

实验学时:

实验成绩:

指导教师签字:

年月日

4

实验题目:

........................................................................................错误~未定义书签。

实验要求:

........................................................................................错误~未定义书签。

一、方案设计.....................................................................................错误~未定义书签。

1.技术方案:

..............................................................................错误~未定义书签。

(1)先进先出法(FirstInFirstOut):

.......................错误~未定义书签。

(2)最近最久未使用(LeastRecentlyUsed):

..............错误~未定义书签。

2.功能设计:

..............................................................................错误~未定义书签。

(1)chushihua()函数的功能:

.......................................错误~未定义书签。

(2)FIFO()的功能:

.......................................................错误~未定义书签。

(3)LRU()的功能:

........................................................错误~未定义书签。

二、结构设计.....................................................................................错误~未定义书签。

1、数据结构设计........................................................................错误~未定义书签。

2、程序结构设计........................................................................错误~未定义书签。

三、程序设计.....................................................................................错误~未定义书签。

1.FIFO()函数流程图;..............................................................错误~未定义书签。

2.LRU()函数流程图:

............................................................错误~未定义书签。

四、编码调试.....................................................................................错误~未定义书签。

主要问题及解决方法:

...............................................................错误~未定义书签。

五、实验总结.....................................................................................错误~未定义书签。

六、程序清单.....................................................................................错误~未定义书签。

源代码:

.....................................................................................错误~未定义书签。

运行结果:

.................................................................................错误~未定义书签。

5

实验题目:

请求页式存储管理模拟

实验要求:

设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。

(1)先进先出的算法(FIFO)

(2)最近最久未用算法(LRU)

(3)最近最不经常使用算法(NUR)*(选做)(4)最佳淘汰算法(OPT)*(选做)

(5)最少访问页面算法(LFU)*(选做)

命中率=1-页面失效次数/页面地址流长度

程序设计中,首先用Srand()和Rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,针对不同的算法计算出相应的命中率。

6

一、方案设计

1.技术方案:

(1)先进先出法(FirstInFirstOut):

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

在该算法的模拟过程中,每当页面需要被置换进入内存时,最先进入内存的内容们都依次向底移一位,需要访问的内容存入数组0号单元,即最顶部,这时缺页数加1;当不需要进行页面置换,即所需访问的内容在内存中时,不需要操作,继续读下一条指令。

这样就实现了总是淘汰最先进入内存的页面,选择了在内存中驻留时间最久的页面予以淘汰。

(2)最近最久未使用(LeastRecentlyUsed):

该算法将过去最长一段时间里不曾被使用的页面置换掉。

在该算法的模拟过程中,每当页面需要被置换进入内存时,最先进入内存的内容们都依次向底移一位,需要访问的内容存入数组0号单元,即最顶部,这时缺页数加1;当不需要进行页面置换,即所需访问的内容在内存中时,将要访问的指令移到内存顶部,其他指令依次向下移一位,这样就把最久不用的指令沉到了底部,有必要时淘汰,即实现了总是淘汰最近最久未使用的指令。

2.功能设计:

(1)chushihua()函数的功能:

先由Srand()和Rand()函数定义和随机产生指令序列,然后将指令序列变换成相

应的页地址流存入地址流数组里。

(2)FIFO()的功能:

实现FIFO算法,淘汰最先进入内存的页面并根据缺页数算出命中率。

(3)LRU()的功能:

实现LRU算法,淘汰最近最久未使用的页面并根据缺页数算出命中率。

二、结构设计

1、数据结构设计

本程序使用了三个一维数组:

yemianliu[]存放地址指令流序列;

fifo[]存放FIFO算法时的内存指令;

lru[]存放LRU算法时的内存指令。

2、程序结构设计

7

开始

主函数

Chushihua()FIFO()LRU()

结束

三、程序设计

1.FIFO()函数流程图;

开始

得到执行的指令

指令是否

在内存中否

queye加1,指令

是存入内存,最先

存入指令被淘汰

是下面是否

还有指令

得出命中率

结束

8

2.LRU()函数流程图:

开始

得到执行的指令

指令是否

在内存中

queye加1,指令

将指令移到数存入内存,淘汰

数组底部指令组顶部,其他

依次下移一位

是下面是否

还有指令

得出命中率

结束

9

四、编码调试

主要问题及解决方法:

刚开始老师的例题看不懂,虽然知道FIFO和LRU的原理,但不知道从何下手。

我觉得老师的那个例题太复杂了,如果我也写那么复杂程序肯定崩溃得一塌糊涂,所以我觉

,老师的例题和网上定按自己的理解写。

我也搜了很多例题,但都和题目要求不太一样

的例题都用到了结构体数组,在内存的指令旁都附加了一个累加器,以访问次数和时间决定要淘汰的指令,而我是每访问一次后,按访问次数冒泡排序一次,这样最近被访问的就在数组的最顶上,最远被访问的在内存数组的最底部,没有用到循环队列,但也能实现功能。

这次我没有用到结构体数组,也没有用到指针(有点遗憾),不过测试了好几组数据,结果都和我用笔算的一样。

在编程中,因为定义的变量太多了,取名也有点混乱,弄得我很晕,刚开始一直崩溃,后来我把程序的运行过程一步步的cout出来和调试,终于发现了错误的地方。

开始我一直用for()语句来控制循环,但是都找不到适合的让它结束循环的方法,后来才想到了可以用while(n--)来控制,效果还不错。

还有就是第一次使用随机函数,有点陌生,上网查了些资料,终于会应用它了。

这次试验大概就遇到了以上问题,都一一解决了,当然程序还是存在一些问题的,但是收获很多~

五、实验总结

通过本次实验,我对操作系统这门课程有了更进一步的认识和了解,通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟储技术的特点。

通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解,也知道了几种算法的效率,也验证了LRU算法的命中率平均的比FIFO算法的高。

过程中,用到了许多C++的基本知识和操作系统的基本原理,是对平时所学在本次设计

知识的一次考验,尽管这些知识都学过,但运用到实际时,却不知从何下手,而且错误不断,往往为了找一个错误而花了大量的时间,这是专业知识掌握不够,缺乏实践动手能力的表现。

在设计的过程中我们发现了许多自己的不足之处。

通过该实验,我收获了很多。

我了解到编写程序不是首要任务,而是一种实现手段。

我们最重要的是如何做好需求分析和理清思路,做出正确、简洁的流程设计,这样可以达到事半功倍的效果。

10

六、程序清单

源代码:

#inclu#includede

#include

#include

#include

usingnamespacestd;intyemianliu[32]={0};//全局变量组数,地址流intp;//全局变量p是一共有多少地址流

voidchushihua()//初始化函数

{

intt;

srand(time(0));//随机产生指令序列

p=12+rand()%32;cout<<"地址流序列,";

for(inti=0;i

t=1+rand()%9;

yemianliu[i]=t;//将随机产生的指令数存入页面流

cout<

}

cout<

}

voidFIFO(intn)//FIFO算法,n是M的值{

inti;

intq=p;

inte;

intqueye=0;

intflag;

intfifo[32]={0};while(q--)

{

flag=0;

e=q;

for(i=0;i

{

if(fifo[i]==yemianliu[q])

{

flag=1;

11

break;

}

}

if(flag==0)

{

intm=n-1;

intk=m;

while(m--)

{

fifo[k]=fifo[k-1];

k--;

}

fifo[0]=yemianliu[e];

queye++;

}

}

cout<<"M="<

}

voidLRU(intn)//LRU算法{

inti;

intq=p;

inte;

intqueye=0;

intflag;

intflag1,;

inty;

intlru[32]={0};

while(q--)

{

flag=0;

e=q;

for(i=0;i

{

if(lru[i]==yemianliu[q])

{

flag=1;

flag1=i;

break;

}

}

if(flag==0)

{

12

intm=n-1;

intk=m;

while(m--)

{

lru[k]=lru[k-1];

k--;

}

lru[0]=yemianliu[e];

queye++;

}

elseif(flag==1)

{

y=flag1;

while(y--)

{

lru[flag1]=lru[flag1-1];

flag1--;

}

lru[0]=yemianliu[e];

}

}

cout<<"M="<

}

voidmain()

{

chushihua();

for(inti=3;i<33;i++)

{

FIFO(i);

LRU(i);

}

}

13

运行结果:

14

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

当前位置:首页 > PPT模板 > 动态背景

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

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