如何用c++lru 页面置换算法实现虚拟内存的扩充

作者&投稿:化兔 (若有异议请与网页底部的电邮联系)
要弄这个题目的课程设计,模拟实现页面置换算法,页面缓冲置换算法。~

#include #include #include using namespace std; typedef struct { int id; //页面ID int stayTime; //内存中驻留时间 int unUseTime; //已经多久未被使用 }CPage; deque RunQueue; deque interPage; //内存中的四个页面 deque exterPage; //外存中的N个页面 int presentSeat; //目前运行到了队列的第几个? int lackNum[3] ={0}; int getRandNum(int range) //返回[0,range)范围内的整数 { return static_cast(rand()%range); } int findPageIdByCmdId(int cmdId) //通过强制转换成整数的形式判断指令属于哪个页面 { return static_cast(cmdId/10); } void InitDevice() //初始化运行队列 按照25% 50% 25%的标准生成 { srand(static_cast(time(NULL))); int t_cmdNum = getRandNum(320); //随机选择第一条指令 RunQueue.push_back(t_cmdNum); //将其插入队列 if(t_cmdNum < 319) RunQueue.push_back(t_cmdNum+1); //顺序执行下一条指令

页面置换算法

一.题目要求:

通过实现页面置换算法的FIFO和LRU两种算法,理解进程运行时系统是怎样选择换出页面的,对于两种不同的算法各自的优缺点是哪些。

要求设计主界面以灵活选择某算法,且以下算法都要实现 1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。

2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。 4) 最不经常使用算法(LFU) 二.实验目的:

1、用C语言编写OPT、FIFO、LRU,LFU四种置换算法。 2、熟悉内存分页管理策略。 3、了解页面置换的算法。 4、掌握一般常用的调度算法。 5、根据方案使算法得以模拟实现。 6、锻炼知识的运用能力和实践能力。 三、设计要求

1、编写算法,实现页面置换算法FIFO、LRU;

2、针对内存地址引用串,运行页面置换算法进行页面置换; 3、算法所需的各种参数由输入产生(手工输入或者随机数产生); 4、输出内存驻留的页面集合,页错误次数以及页错误率;

四.相关知识:

1.虚拟存储器的引入:

局部性原理:程序在执行时在一较短时间内仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域,它主要表现在以下两个方面:时间局限性和空间局限性。

2.虚拟存储器的定义:

虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。

3.虚拟存储器的实现方式:

分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页面形式虚拟存储系统。

请求分段系统,它是在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。

4.页面分配:

平均分配算法,是将系统中所有可供分配的物理块,平均分配给各个进程。 按比例分配算法,根据进程的大小按比例分配物理块。

考虑优先的分配算法,把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据个进程的优先权,适当的增加其相应份额后,分配给各进程。

5.页面置换算法:

常用的页面置换算法有OPT、FIFO、LRU、Clock、LFU、PBA等。 五、设计说明

1、采用数组页面的页号

2、FIFO算法,选择在内存中驻留时间最久的页面予以淘汰;

分配n个物理块给进程,运行时先把前n个不同页面一起装入内存,然后再从后面逐一比较,输出页面及页错误数和页错误率。

3、LRU算法,根据页面调入内存后的使用情况进行决策;

同样分配n个物理块给进程,前n个不同页面一起装入内存,后面步骤与前一算法类似。

选择置换算法,先输入所有页面号,为系统分配物理块,依次进行置换: 六.设计思想:

OPT基本思想:

是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组next[mSIZE]记录物理块中对应页面的最后访问时间。每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。

FIFO基本思想:

是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的,所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页。或者借助辅助数组time[mSIZE]记录物理块中对应页面的进入时间,每次需要置换时换出进入时间最小的页面。

LRU基本思想:

是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。数组flag[10]标记页面的访问时间。每当使用页面时,刷新访问时间。发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面。 七.流程图:

如下页所示

六.运行结果: 1. 按任意键进行初始化:

2. 载入数据:

3. 进入置换算法选择界面:

4.运算中延迟操作:

5.三种算法演示结果:

地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。常见的置换算法有:

1)最佳置换算法(OPT)(理想置换算法)

这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10、100或者1000条指令后才会被访问,每个页面都可以用在该页面首次被访问前所要执行的指令数进行标记。最佳页面置换算法只是简单地规定:标记最大的页应该被置换。这个算法唯一的一个问题就是它无法实现。当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。

2)先进先出置换算法(FIFO)


凌海市18822408553: LRU页面置换算法的实现 -
检鬼外用: 我会.就是最近未使用的算法吧.例如一个三道程序,等待进入的是1,2,3,4,4,2,5,6,3,4,2,1.先分别把1,2,3导入,然后导入4,置换的是1,因为他离导入时间最远.然后又是4,不需要置换,然后是2,也不需要,因为内存中有,到5的时候,因为3最远,所以置换3,依次类推,还有不懂联系我吧.QQ:243926566

凌海市18822408553: 求模拟页面置换算法,c++ -
检鬼外用: 只有一个先进先出(fifo)的!#include<iostream.h> int choose; //选择置换方法 int PageOrder[100]; //页面走向 int Order=0; //页面计数 int MaxPage; //页面总数 int MaxPhy; //物理块总数 int count; //命中次数struct PageTable //页表结构体 ...

凌海市18822408553: 用C++语言编写FIFO页面置换算法代码 -
检鬼外用: 分别使用FIFO、OPT、LRU三种置换算法来模拟页面置换的过程.(Linux、Windows下皆可) 输入: 3 //页帧数7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 //待处理的页 输出:页面置换过程中各帧的变化过程和出现页错误的次数 [cpp]#include<iostream> ...

凌海市18822408553: 编写一个能演示LRU内存页面置换算法的程序,它可根据给定的一组页面引用序列号和实存页数,显示LRU置换页的过程,能统计和报告LRU置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率. -
检鬼外用: 实验代码及说明: #include "stdio.h" #include "stdlib.h" void CopyL(int Sour[],int Dist[] ,int x); //数组Sour复制到数组Dist,复制到x个数 void SetDI(int DiscL[]); //随机生成磁道数 void Print(int Pri[],int x); //打印输出数组Pri void DelInq(int Sour[...

凌海市18822408553: 在一个虚拟存储器中,主存容量400B,划分为4页,采用LRU 页面置换算法 -
检鬼外用: (1)0 ,2,1,6,2,4,4,1,0,1 (2)LRU算法 0 ,2,1,6,2,4,4,1,0,1 0: 0, 0, 0,0,0 ,4,4,4,4,4 1: 2,2,2, 2, 2,2,2, 2,2 2: 1,1,1, 1,1, 1 ,1, 1 3 : 6,6, 6, 6, 6, 0, 0 (3)由上可知:虚地址流对应的实页面依次为:0,1,2,3,1,0,0,2,3,2 则实地址为:0*100+22=22,1*100+14=114,2*100+46=246,3*100+18=318,等等 (4)命中率:1-6/10=0.4 (5)书上有详解

凌海市18822408553: 一个程序的页面走向,FIFO和LRU页面置换算法
检鬼外用: #include"stdio.h" #include"stdlib.h" #include"time.h" void FIFO(void); void LRU(void); char a; int m=4,n=12,i,y[12]={1,2,3,4,1,2,5,1,2,3,4,5}; /*m为物理块数,n为要访问的页面数*/ typedef struct page{ int num; int time; }Page; Page x[10]; int ...

凌海市18822408553: LRU页面淘汰算法 -
检鬼外用: LRU算法 最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的.由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰.LRU的实现(需要“堆栈”支持) 可利用一个特殊的栈来保存当前使用的各个页面的页面号.每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶.因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号.

凌海市18822408553: C++实现LRU算法 -
检鬼外用: http://wenwen.sogou.com/z/q709884910.htm 这是别人之前问的额,你可以参考一下~~~

凌海市18822408553: LRU 页面置换算法 -
检鬼外用: 问题是很简单的,只是代码写起来比较费劲.比较的结果就是Belady现象,也就是随着增加分配给作业的内存块数,反而增加了缺页次数,提高了缺页率.

凌海市18822408553: 页面置换算法FIFO 、LRU求缺页中断次数 -
检鬼外用: (1) FIFO 1 2 3 4 1 2 5 1 2 3 4 5 ---------------------------------------- 1 2 3 4 1 2 5 5 5 3 4 4 1 2 3 4 1 2 2 2 5 3 3 该行是怎么算出来的? 1 2 3 4 1 1 1 2 5 5 该行是怎么算出来的? ---------------------------------------- 缺页中断次数=9 FIFO是这样的:3个内存块构...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网