页面置换算法-LRU实验报告

目录
原创性声明
1 项目描述
2 系统结构分析
3 系统详细设计
4 系统主要算法
5 系统程序实现
6课程设计总结
附录:源程序

原创性声明
参考文献

《面向对象程序设计与VisualC++6.0教程》 陈天华编著
《C程序设计(第三版)》 谭浩强编著
《C++入门经典》
《面向对象程序设计与C++实现》 刘晋萍编著
《计算机操作系统教程》 徐甲同等编著
《计算机操作系统》 翟一鸣等编著
《操作系统实验教程 》 张丽芬, 刘利雄, 王全玉编著
《计算机操作系统》 梁红兵、哲风屏、汤子瀛 编著
《操作系统教程》 陈向群、杨芙清 编著
**

**
设计一个程序,有一个虚拟存储区和内存工作区,实现下述三种算法中的任意两种,计算访问命中率(命中率=1-页面失效次数/页地址流长度)。附加要求:能够显示页面置换过程。该系统页地址流长度为320,页面失效次数为每次访问相应指令时,该指令对应的页不在内存的次数。
程序首先用srand()和rand()函数分别进行初始化、随机数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。通过随机数产生一个指令序列。共320条指令,指令的地址按下述原则生成:(1)50%的指令是顺序执行的。(2)25%的指令是均匀分布在前地址部分。(3)25%的指令是均匀分布在后地址部分。具体的实施方法如下:在【0,319】的指令地址之间随机选取一起点m。顺序执行一条指令,即执行地址为m+1的指令。在前地址【0,m+1】中随机选取一条指令并执行,该指令的地址为m’。顺序执行一条指令,其地址为m’+1。在后地址【m’+2,319】中随机选取一条指令并执行。重复步骤(1)-(5),直到320次指令。将指令序列变换为页地址流。设:页面大小为1KB。用户内存容量4页到32页。用户虚存容量为32KB。在用户虚存中,按每K存放10条指令虚存地址,即320条指令在虚存中的存放方式为:第0条~9条指令为第0页(对应虚存地址为【0,9】)。第10条~19条指令为第1页(对应虚存地址为【10,19】)。……第310条~319条指令为第31页(对应虚拟地址为【310,319】)。按以上方式,用户指令可组成32页。计算每种算法在不同内存容量下的命中率。

*

1 项目描述*

在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全部装入内存方能运行,但是有两种情况:(1) 有的作业很大,不能全部装入内存,致使作业无法运行;(2) 有大量作业要求运行,但内存容量不足以容纳所有这些作业。而虚拟内存技术正式从逻辑上扩充内存容量,将会解决以上两个问题。
从内存中调出一页程序或数据送磁盘的对换区中,通常,把选择换出的页面的算法称为页面置换算法(Page-Replacement Algorithms)。进而页面置换算法模拟程序能客观的将其工作原理展现在我们面前。

*

2 系统结构分析

首先,定义宏变量,设置所占最大内存长度。编辑以时间为种子,初始化随即发生器。进行相关页面输入程序的编写以及页面的打印。
其次,寻找最近最近最久未使用的页面 、记录当前内存块中页面离下次使用间隔长度等相关程序的代码编写。
最后,进行LRU算法的编写。.

*

程序N-S图

3 系统详细设计

由于分区式管理尽管实现方式较为简单,但存在着严重的碎片问题使得内存的利用率不高。再者,分区式管理时,由于各作业或进程对应于不同的分区以及在分区内各作业或进程连续存放,进程的大小或内存可用空间的限制。而且分区式管理也不利于程序段和数据段的共享。页式管理正是为了减少碎片以及为了只在内存存放那些反复执行或即将执行的程序段与数据部分,而把那些不经常执行的程序段和数据存放于外存待执行时调入,以提高内存利用率而提出来的页式管理有动态页式管理和静态页式管理之分,动态页式管理是在静态页式管理的基础上发展起来的。请求页式管理属于动态页式管理中的一一种,它的地址变换过程与静态页式管理时的相同,也是通过页表查出相应的页面号,由页面号与页内相对地址相加而得到实际物理地址。有关的地址变换部分是由硬件自动完成的。当硬件变换机构发现所要求的页不在内存时,产生缺页中断信号,由中断处理程序做出相应的处理。中断处理程序是由软件实现的。除了在没有空闲页面时要按照置换算法选择出被淘汰页面之外,还要从外存读入所需要的虚页。这个过程要启动相应的外存和涉及到文件系统。因此,请求页式管理是一个十分复杂的过程,内存利用率的提高是以牺牲系统开销的代价换来的。这里用到了置换算法。它是在内存中没有空闲页面时被调用。目的是选出一个被淘汰的页面。如果内存中有足够的空闲页面存放所调入的页,则不必使用置换算法。把内存和外存统一管理的真正目的是把那些被访问概率非常高的页存放在内存中。因此,置换算法应该置换那些被访问概率低的页,将它们移出内存。

*

4 系统主要算法

5系统程序实现

代码:

if(c==2)//LRU页面置换{     n=0;cout<<"     ******************************************      "<<endl;cout<<endl;cout<<"              LRU算法页面置换情况如下:           "<<endl; cout<<endl;cout<<"     ******************************************     "<<endl;while(i<m){int a;t=Search(p[i].num,page);if(t>=0)                        //如果已在内存块中{page[t].time=0;              //把与它相同的内存块的时间置0for(a=0;a<M;a++)if(a!=t)page[a].time++;            //其它的时间加1cout<<p[i].num<<"  ";cout<<"不缺页"<<endl;}else                           //如果不在内存块中{  n++; //缺页次数加1t=Max(page);               //返回最近最久未使用的块号赋值给tpage[t].num=p[i].num;        //进行替换page[t].time=0;              //替换后时间置为0cout<<p[i].num<<"  ";print(page);for(a=0;a<M;a++)if(a!=t)page[a].time++;            //其它的时间加1}  i++;    }cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl; }

6. 课程设计总结

通过这次课程设计,不仅让我了解了页面置换算法,开始我一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没没有成功,我仔细的分析题目,分析材料,在原有的基础上我进行了改正,我最后还是调试成功了,还是经过了一翻努力,这次操作系统实验,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握。通过努力,LRU页面置换算法程序都已经完成,此时此刻,我心里多了些成就感。
虽然自己所做的很少也不够完善,但毕竟也是努力的结果。主要有以下几点收获:
1.通过对上网和看书查阅相关资料,使自己对C++语言的基本框架有新的了解,加深了对其的认识。
2.在使用C++语言来实现功能时,不像以往用的其他语言,它比较简练,更容易理解,实用性很强。
课程设计就要结束了,不但对专业知识有了更深的理解,更使的自己认识到实践的重要性,理论、实践相结合才能达到很好的学习效果,特别是程序语言的学习。

源程序

#include<iostream>
#define N 3
using namespace std;
int main()
{int ym[]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};int lru[N]={1,0,7};int len[N]={0,0,0};int allchagetimes=0;for(int t=0;t<N;t++){cout<<lru[t]<<"  ";}cout<<endl;for(int i=3;i<20;i++){int flag=0;int j=0;int sum=0;for(;j<N;j++){if(ym[i]==lru[j]){flag=1;break;}else if(ym[i]!=lru[j]){sum++;if(sum==3){flag=0;break;}}}if(flag==1){int temp=lru[0];if(j==0){}else if(j==1){lru[0]=lru[j];lru[2]=lru[2];lru[1]=temp;}else if(j==2){lru[0]=lru[j];lru[2]=lru[1];lru[1]=temp;}}else if(flag==0){allchagetimes++;lru[2]=lru[1];lru[1]=lru[0];lru[0]=ym[i];}for(int t=0;t<N;t++){cout<<lru[t]<<"  ";}cout<<endl;}cout<<"缺页"<<allchagetimes+3 <<"次,置换"<<allchagetimes<<"次"<<endl;
}

页面置换算法-LRU相关推荐

  1. 7-2 页面置换算法--LRU (50 分)

    一:题目(思路+详解+运行时错误解决) 先初始化页面大小,和物理块数.连续输入页面的逻辑地址,以"-1"作为结束标志,采用LRU页面置换算法.固定分配局部置换分配策略.输出该页面的 ...

  2. 操作系统之虚拟存储管理 java python 实现 最优(Optimal)置换算法 先进先出(FIFO)页面置换算法 LRU(Least Recently Used)置换算法

    操作系统之虚拟存储管理 实验内容:模拟请求分页虚拟存器管理技术中的硬件地址变换.缺页中断以及页式淘汰算法,处理缺页中断. 实验目的:清楚认识请求分页管理. 最佳(Optimal)置换算法 其所选择的被 ...

  3. 使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法

    一,LRU算法介绍 LRU是内存分配中"离散分配方式"之分页存储管理方式中用到的一个算法.每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中, ...

  4. 操作系统页面置换算法(最佳置换算法,FIFO,LRU,Clock)

    页面置换算法 为什么要页面置换 最佳置换算法 先进先出页面置换算法 LRU置换算法 Clock置换算法 为什么要页面置换 缺页中断: 在地址映射过程中,若在页表中发现所要访问的页面不在内存,则产生中断 ...

  5. OS- -内存之页面置换算法

    OS- -内存之页面置换算法 文章目录 OS- -内存之页面置换算法 一.内存之页面置换算法 1.最优页面置换算法 2.最近未使用页面置换算法 3.先进先出页面置换算法 4.第二次机会页面置换算法 5 ...

  6. 内存管理之页面置换算法

    前面我们提到了关于内存管理的一些知识,交换技术和虚拟内存是两种常用的处理内存过载的办法.对于虚拟内存,进行换入换出的基本单位是页面.当进程访问的页面没有被映射到内存时,操作系统必须在内存中选择一个页面 ...

  7. 操作系统 页面置换算法模拟

    据实验作业挑选了几种页面置换算法进行实验.(仅个人理解 1.先进先出页面置换算法(FIFO). 2.最近最久未被使用页面置换算法(LRU). 3.最佳页面置换算法(OPT). 4.最少使用页面置换算法 ...

  8. 操作系统实验2—页面置换算法模拟程序设计

    一.实验目的 对页面置换做进一步的理解. 了解页面置换的任务. 通过编程掌握页面置换算法及缺页率计算. 了解Belady现象和抖动现象. 二.实验内容 输入给出一组页面访问顺序(如页面走向是1.2.5 ...

  9. 页面置换算法 - FIFO、LFU、LRU

    缓存算法(页面置换算法)-FIFO. LFU. LRU 在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO. LFU ...

最新文章

  1. 开源Jekyll助您构建你的网站
  2. 深圳Uber优步司机奖励政策(12月28日到1月3日)
  3. php展开收缩bom表_WordPress实现文章内容收缩和展开功能
  4. 谷歌Chrome 11对早期开发者开放使用
  5. JSON-RPC、XML-RPC、SOAP三者的关系
  6. epub 机器人系列 阿西莫夫_艾萨克·阿西莫夫是不是穿越来的,他怎么能那么准地预言机器人,互联网技术呢?...
  7. ssms 缺少索引信息_搜索引擎整合营销
  8. 【正在完善】高级CSS特效解析其示范案例
  9. html 怎么看版本号,怎样查看jquery版本号?
  10. 聚合物电容作用原理与基础
  11. SSM搭建-Spring第一个Spring HelloWorld(2)
  12. QT实现TCP断点传输文件
  13. python 文本框不能放表情_用Python自动生成表情包,生活不易多才多艺!
  14. 计算机开机发出长滴,为何我的电脑开机出现一声长滴声三声短滴声
  15. mysql数据库中学分的简写_一些数据库相关词汇缩写
  16. autocad Objectarx 使用setWindowArea设置打印区域后,发现与实际打印出来的区域不一致的问题
  17. csdn怎么了???
  18. windows配置OpenGL(VS C++版)
  19. Windows 10自带的磁盘Check工具
  20. react-grid-layout 使用说明

热门文章

  1. 别让你的mongodb宕机了
  2. yuv 格式之 Semi Planar和Planar
  3. matlab求全相应
  4. python2.7运行报警告:UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode
  5. 涂鸦画板,监听touch事件,手机端
  6. 这样去做信用贷款违约预测项目,效果提升明显
  7. 我的世界java版注册账号教程_我的世界java版官方购买教程
  8. 【重磅】61篇NIPS2019深度强化学习论文及部分解读
  9. HadoopHA部署(1+x)
  10. 软工大牛Collin McMillan及其顶会论文解读