页面淘汰算法实验报告.
lru页面淘汰算法
lru页面淘汰算法摘要:1.LRU 页面淘汰算法的定义2.LRU 页面淘汰算法的工作原理3.LRU 页面淘汰算法的优缺点4.LRU 页面淘汰算法的应用实例正文:一、LRU 页面淘汰算法的定义LRU(Least Recently Used,最近最少使用)页面淘汰算法是一种常用的内存管理策略,主要用于虚拟内存和页面替换算法中。
当内存中的页面数量不足以容纳新的页面时,LRU 算法会根据页面的使用频率来选择一个或多个页面进行替换,从而为新页面腾出空间。
二、LRU 页面淘汰算法的工作原理LRU 算法的核心思想是,将最近最少使用的页面替换出去。
具体来说,LRU 算法会维护一个页面访问顺序列表,每次访问一个页面时,将该页面在列表中的位置移动到列表的头部。
当需要进行页面替换时,LRU 算法会从列表的头部开始查找,找到第一个在访问顺序中位于尾部的页面进行替换。
三、LRU 页面淘汰算法的优缺点1.优点:LRU 算法能有效地反映页面的使用频率,将最近最少使用的页面替换出去,从而提高内存的利用率。
同时,LRU 算法实现简单,无需额外的数据结构支持。
2.缺点:LRU 算法对于某些页面访问模式可能存在一定的不公平性,例如访问顺序固定的页面序列。
此外,在页面访问顺序发生逆转时,LRU 算法可能会产生较多的页面替换。
四、LRU 页面淘汰算法的应用实例LRU 算法广泛应用于操作系统、数据库管理系统、浏览器缓存等领域。
例如,在操作系统中,LRU 算法可以用于虚拟内存的页面替换,从而提高内存的利用率;在数据库管理系统中,LRU 算法可以用于缓存策略,提高查询效率;在浏览器缓存中,LRU 算法可以用于页面缓存策略,提高网页加载速度。
总结:LRU 页面淘汰算法是一种简单有效的内存管理策略,能够根据页面的使用频率进行页面替换,提高内存的利用率。
页面置换算法实验报告_4
页面置换算法实验报告院系:****************学院班级:***********姓名:***学号:************一、实验题目: 页面置换算法二. 实验目的:1.用C语言编写OPT、FIFO、LRU三种置换算法。
2.熟悉内存分页管理策略。
3.了解页面置换的算法。
4.掌握一般常用的调度算法。
5.根据方案使算法得以模拟实现。
6.锻炼知识的运用能力和实践能力。
三. 实验内容及要求:设计一个虚拟存储区和内存工作区, 编程序演示下述算法的具体实现过程, 并计算访问命中率:要求设计主界面以灵活选择某算法, 且以下算法都要实现1) 最佳置换算法(OPT): 将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。
2) 先进先出算法(FIFO):淘汰最先进入内存的页面, 即选择在内存中驻留时间最久的页面予以淘汰。
3) 最近最久未使用算法(LRU): 淘汰最近最久未被使用的页面。
四、实验结果初始化结果1, 先进先出(FIFO)算法实验结果:2, 最近最久未使用(LRU)算法实验结果: 3, 最佳使用法(OPT)实验结果:五、实验总结选择置换算法, 先输入所有页面号, 为系统分配物理块, 依次进行置换:OPT基本思想:是用一维数组page[]存储页面号序列, memery[]是存储装入物理块中的页面。
数组next[]记录物理块中对应页面的最后访问时间。
每当发生缺页时, 就从物理块中找出最后访问时间最大的页面, 调出该页, 换入所缺的页面。
若物理块中的页面都不再使用, 则每次都置换物理块中第一个位置的页面。
FIFO基本思想:是用队列存储内存中的页面, 队列的特点是先进先出, 与该算法是一致的, 所以每当发生缺页时, 就从队头删除一页, 而从队尾加入缺页。
或者借助辅助数组time[]记录物理块中对应页面的进入时间, 每次需要置换时换出进入时间最小的页面。
LRU基本思想:是用一维数组page[]存储页面号序列, memery[]是存储装入物理块中的页面。
页面置换算法实验报告
页面置换算法实验报告
一、实验内容
本次实验主要围绕页面置换算法进行,以实验课本的实例介绍,采用FIFO页面置换算法对后面提到的参数进行置换,最终得出页面置换的结果和比较所得结果。
二、实验步骤
(一) 熟悉FIFO算法
首先是要了解FIFO页面置换算法,FIFO全称(First In First Out),按页面进入内存的顺序来替换相应内存页面,先进先出,将先进入内存的页面先替换出去。
(二) 阅读实验课本
在阅读实验课本之前要先熟悉实验书上所介绍的FIFO算法,然后在实验书上找出需要做的实验,并对实验环境和表格进行观察,掌握实验的基本内容。
(三) 开始页面置换
在开始实验之前,熟悉实验环境,根据实验书上的参数,首先模拟进程分配内存,根据FIFO算法去进行计算,根据上表中的参数去比较,最后得出最终结果。
(四) 在本次实验的补充
这次实验中,可以把FIFO的概念应用到实际应用中,也可以模拟不同情况,例如改变页面的大小,观察不同页面置换算法的结果,实验出最合适的结果。
三、实验结论
本次实验是为了了解FIFO页面置换算法,实验出最终的结果,最后得出页面置换的结果及比较结果。
操作系统fifo算法模拟实验总结
FIFO算法模拟实验总结操作系统中的页面置换算法是为了有效管理计算机内存空间而设计的。
FIFO (First-In, First-Out)是最简单和最常见的页面置换算法之一。
通过对FIFO算法进行模拟实验,我们可以更好地理解其工作原理,评估其性能,并进一步探讨其局限性和优化方向。
重要观点1.FIFO算法的基本原理:FIFO算法按照页面进入内存的先后顺序进行置换,即最早进入内存的页面将最先被淘汰。
这一原理确保了页面的公平访问,但可能导致较低的缓存命中率。
2.页面置换的开销问题:无论使用哪种页面置换算法,都需要进行页面调度和数据迁移,这涉及到CPU和内存之间频繁的数据传输。
因此,算法的开销也需考虑在内。
3.缺页中断的处理:当CPU请求的页面不在内存中时,会发生缺页中断。
FIFO算法需要将最早进入内存的页面替换出去,为新页面腾出位置来处理缺页中断。
这需要涉及读取磁盘上的页面数据,带来了较高的I/O开销。
4.FIFO算法的局限性:FIFO算法没有考虑页面的重要性和访问频率,只单纯按照进入内存的顺序进行页面置换。
这种简单的先进先出策略可能会导致较低的缓存命中率和较大的开销。
关键发现通过对FIFO算法进行模拟实验,我们得出了一些关键发现:1.FIFO算法的缓存命中率与页面引用模式密切相关。
在连续引用的页面中,若页面较大且请求频繁,FIFO算法的缓存命中率可能会较低。
2.长作业更容易导致缺页中断。
FIFO算法可能更频繁地替换长时间运行的作业所需的页面,因为长作业往往具有更大的作业集。
3.FIFO算法对缓存容量的依赖。
当缓存容量较大时,FIFO算法可以维持较高的命中率。
然而,当缓存容量有限时,FIFO算法的性能可能急剧下降。
进一步思考通过对FIFO算法模拟实验的总结,我们可以进一步思考如下问题:1.如何提高FIFO算法的性能?可以尝试引入更智能的页面置换算法,如LRU(Least Recently Used)算法,根据页面的访问频率和重要性进行置换,以提高缓存命中率。
先进先出页面置换算法实验报告电子版
验
内
容
先进先出页面置换算法,该算法淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
实
验
步
骤
#include "stdafx.h"
#include<stdio.h>
#define M 20
#define N 3
void FIFO(int a[N],int b[M])
{
int i,j,k;
}
printf("\n"); }
s=k*1.0/M;
printf("中断次数为:%d\n",k);
printf("缺页率为:%f\n",s);
}
void main()
{int a[N]={0,0,0};
int b[M]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
FIFO(a,b);
}
研
究
与
探
讨
通过实验更加了解了各种页面置换算法之间的区别。在实验中,不知道如何来选择是否要置换,后想到可以另加一个数组存0,1,用以标记是否发生缺页中断。
int c[M]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
float s;
for(i=0;i<N;i++)
{
a[i]=b[i];
for(j=0;j<=i;j++)
{
printf("%d ",a[j]);
}
printf("\n");
}
k=N;
实验4
三.实验原理
1最佳置换算法:哪一个页面在将来最迟被访问,就置换它。
2先进先出置换算法:选择最早进入主存的页面淘汰。
3最近最久未使用置换算法:淘汰没有使用的时间最长的页
四.实验内容及要求
实验内容:
问题描述:
设计程序模拟先进先出FIFO和最佳置换OPI页面置换算法的工作过程。假设内存中分配给每个进程的物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。
教师评语:
1)上机前认真复习页面置换算法,熟悉FIFO,OPI二种页面分配和置换算法的过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。
五.结果分析
1 FIFO和Optimal的结果如图1-1
图1-1
2 LRU结果如图1-2
图1-2
程序要求如下:
1)利用先进先出FIFO和最佳置换OPI二种页面置换算法模拟页面访问过程。
2)模拟二种算法的页面置换过程,给出每个页面访问时的内存分配情况。
3)输入:物理块数m,页面个数n,页面访问序列P1, … ,Pn,算法选择1-FIFO,2-OPI。
4)输出:每种算法的缺页次数和缺页率。
实验要求:
沈阳工程学院
学生实验报告
实验室名称:信息工程系608实验室
实验课程名称:计算机操作系统
实验项目名称:虚拟内存页面置换算法
班级:计专本122姓名:鲍岩学号:**********
实验日期:2013年月日实验台编号:46
C语言 页面淘汰算法 OPT FIFO LRU CLOCK
《操作系统原理》上机作业(报告)作业:页面淘汰算法作业编号 6 题目页面淘汰/置换算法作业要求【题目要求】通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
针对一个页框,根据实验数据,以OPT算法为参考,研究FIFO页面淘汰算法、LRU页面淘汰以及CLOCK算法针对同一批实验数据的缺页率,以及研究在不同页框设置下的各算法缺页率表现情况。
页面引用序列为:4, 3, 2, 1, 4, 3, 5, 4, 3, 2, 1, 5(1)固定分配局部置换情况下,驻留集大小为3,针对该内存页面引用序列模拟各算法的运行过程,并计算缺页率。
(2)模拟驻留集大小为4和5的情况下各算法的运行过程和缺页率。
其菜单如下:*************内存分配和回收***********=================================0. 退出1. OPT算法实现2. LRU算法实现3. FIFO算法实现4. CLOCK算法5. 显示缺页率对比表=================================【实习要求】可选编程语言:C/C++/Java/C#/Python;实现在同一个程序文件中(C/C++);请适当注释;【实现提示】所需变量N:程序执行需要访问的页面数Msize:内存中可容纳的页数lack:在一次页面走向序列中用来统计缺页次数rate:缺页次数/总页数变量声明如下图所示:队列结构页面引用序列pages[N]和内存容量Memory[m]均用简单的数据结构线性表实现,其声明如图所示:【选做内容】改进型CLOCK算法实现。
构造一个页面引用序列,并出现Belady现象。
报告正文(运行屏幕截图及源代码)一.截图。
二.附录。
#include"stdio.h"#define N 30 //最大页数static int Msize; //内存容页数static int lacknum; //缺页数static int pages[N] = {4,3,2,1,4,3,5,4,3,2,1,5};static int memery[10];void Initial(){int i;for(i = 0; i < 10; i++){memery[i] = 0;}lacknum = 0;}int To_left(int index, int page) //计算之前的本页到现在已经多久了{int i = index - 1;while(i>=0){if(pages[i] == page)。
虚拟页面管理实验报告(3篇)
第1篇一、实验目的1. 理解虚拟存储器的概念和作用。
2. 掌握分页式存储管理的基本原理和地址转换过程。
3. 熟悉几种常见的页面置换算法,并比较其优缺点。
4. 通过实验,加深对虚拟存储器管理机制的理解。
二、实验内容1. 模拟分页式存储管理中的地址转换过程。
2. 比较几种常见的页面置换算法:FIFO、LRU、LFU和OPT。
三、实验原理虚拟存储器是一种将内存和磁盘结合使用的存储管理技术,它允许程序使用比实际物理内存更大的地址空间。
虚拟存储器通过将内存划分为固定大小的页(Page)和相应的页表(Page Table)来实现。
1. 分页式存储管理分页式存储管理将内存划分为固定大小的页,每个页的大小相同。
程序在运行时,按照页为单位进行内存访问。
分页式存储管理的主要优点是内存碎片化程度低,便于实现虚拟存储器。
2. 页面置换算法当内存中没有足够的空间来存放新请求的页面时,需要将某个页面从内存中移除,这个过程称为页面置换。
以下介绍几种常见的页面置换算法:(1)FIFO(先进先出):优先淘汰最早进入内存的页面。
(2)LRU(最近最少使用):优先淘汰最近最少被访问的页面。
(3)LFU(最不频繁使用):优先淘汰最不频繁被访问的页面。
(4)OPT(最佳置换):优先淘汰未来最长时间内不再被访问的页面。
四、实验步骤1. 模拟分页式存储管理中的地址转换过程(1)创建一个模拟内存的数组,表示物理内存。
(2)创建一个模拟页表的数组,用于存放虚拟页号和物理页号之间的映射关系。
(3)模拟进程对内存的访问,将访问的虚拟页号转换为物理页号。
2. 比较几种常见的页面置换算法(1)创建一个模拟进程的数组,包含访问的虚拟页号序列。
(2)对每个页面置换算法,模拟进程的运行过程,记录缺页中断次数。
(3)计算不同页面置换算法的缺页率,并比较其性能。
五、实验结果与分析1. 分页式存储管理中的地址转换过程实验结果表明,分页式存储管理能够有效地将虚拟地址转换为物理地址,实现虚拟存储器。
页面置换
昆明理工大学信息工程与自动化学院学生实验报告(2011 —2012学年第二学期)课程名称:操作系统开课实验室:442 2012 年 5 月 8 日一、实验目的编写一个程序实现页面调度算法,重点对先进先出算法和最近最少使用算法实现程序运行结果。
置换算法(replacement algorithm)又称为淘汰算法,用于确认页面的调出原则。
置换算法的设计既要考虑效果,又要考虑开销。
通过自己编程来实现页面调度算法,进一步理解页面调度算法的概念及含义,提高对页面调度算法的认识,同时提高自己的动手实践能力。
加深我们对主存与辅助存储器统一管理、逻辑地址与物理地址转换、部分装入和部分替换问题的理解,同时,有利于我们对虚拟存储技术的理解。
二、实验原理与步骤(1)需求分析:了解基本原理,确定程序的基本功能,查找相关资料,画出基本的数据流图;(2)概要设计:确定程序的总体结构、模块关系和总体流程;(3)详细设计:确定模块内部的流程和实现算法;(4)上机编码和调试;(5)运行测试;(6)编写实验报告。
程序设计思想:先进先出调度算法根据页面进入内存的时间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。
本算法实现时需要将页面按进入内存的时间先后组成一个队列,每次调度队首页面予以淘汰。
最近最少使用算法:淘汰最后一次访问时间距离当前时间间隔最长的页面。
与前面所述算法进行比较后会发现:最近最少使用算法的实现开销是很大的,必须有硬件支持,若完全有软件实现其速度至少会降低90%。
2.程序流程图:三上机环境Microsoft Visual C++ 6.0四程序及运行结果注:程序在“程序代码”文件夹中。
五、实验结果、分析和结论置换算法(replacement algorithm)又称为淘汰算法,用于确认页面的调出原则。
置换算法的设计既要考虑效果,又要考虑开销。
这个实验我主要是在VC环境中实现最佳算法和先进先出算法。
通过此次的实验,我更加了解了全局替换策略,了解到先进先出页面替换算法总是淘汰最先调入主存的页面,淘汰在主存中驻留时间最长的页面。
一种量化的页面淘汰算法
Ab ta tLRU-ki n ft emo twi ey a pid p g -e lcme tag rt msi h d r p r t g s se n sr c : so eo h s d l p l a erpa e n lo i e h n temo en o eai y tmsa d n d tb s y tm s Ho v r aa aes se . we e ,wi heice n fte n mb r o eo d r trg e ie a ig dfee tra - i t t n rme to h u e fs cn ay so a ed vcs h vn i rn e dwrt h f e s e d h y tm ,t ed a ak o RU- h t n ytefe u n yo e e tp g eee csi a e t c o n Op e p e si t es se n h rwb c fL kt a l rq e c frc n a erfrn e stk n i oa c u tt r — o h n
dc h o a e n t e n a u u e i o n p I hs p p r u n i t n ag rt m a d EL itt eh t g s i h e r f t r s c mi g u . n t i a e ,a q a tz i l o i p ao h n me RUK s p o o e o i r p sd f r
mo e i c m nyu e r y tm i i ee t id f eo d r trg e i sd mo sr t h t RU 尼i j s a d ls o mo l sd f s se w t df r n n s c n ay so a ed v e e n t e t a L - s u t o a h f k o s c a s
页面置换算法实验报告
一、实验目的通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
二、实验内容基于一个虚拟存储区和内存工作区,设计下述算法并计算访问命中率。
1、最佳淘汰算法(OPT)2、先进先出的算法(FIFO)3、最近最久未使用算法(LRU)4、简单时钟(钟表)算法(CLOCK)命中率=1-页面失效次数/页地址流(序列)长度三、实验原理UNIX中,为了提高内存利用率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进行;一个进程只需将其一部分(段或页)调入内存便可运行;还支持请求调页的存储管理方式。
当进程在运行中需要访问某部分程序和数据时,发现其所在页面不在内存,就立即提出请求(向CPU发出缺中断),由系统将其所需页面调入内存。
这种页面调入方式叫请求调页。
为实现请求调页,核心配置了四种数据结构:页表、页帧(框)号、访问位、修改位、有效位、保护位等。
当CPU接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。
该程序通过查找页表,得到该页所在外存的物理块号。
如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。
如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。
利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。
整个页面的调入过程对用户是透明的。
四、算法描述本实验的程序设计基本上按照实验内容进行。
即使用srand( )和rand( )函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。
(1)通过随机数产生一个指令序列,共320条指令。
指令的地址按下述原则生成:A:50%的指令是顺序执行的B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分具体的实施方法是:A:在[0,319]的指令地址之间随机选取一起点mB:顺序执行一条指令,即执行地址为m+1的指令C:在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’D:顺序执行一条指令,其地址为m’+1E:在后地址[m’+2,319]中随机选取一条指令并执行F:重复步骤A-E,直到320次指令(2)将指令序列变换为页地址流设:页面大小为1K;用户内存(页帧)容量为4页~32页;用户虚存容量为32K。
页面淘汰算法实验报告概述
操作系统实验报告课题:页面淘汰算法专业:班级:学号:姓名:年月日目录一实验目的……………………………………………………错误!未定义书签。
二实验要求 (3)三背景知识 (3)四总体设计 (4)五详细设计……………………………………………………错误!未定义书签。
六运行结果分析 (9)七心得体会 (13)八参考文献 (14)附:源代码 (15)一、实验目的本实验主要对操作系统中请求分页式内存管理及其应用的一些关键算法进行模拟。
学生通过设计与实现Clock算法,能够加强对相应理论的理解,并对了解操作系统内部的基本处理原理与过程也有很多益处。
利用简单的数据结构,模拟实现操作系统中的页面置换机制,通过写程序模拟实现上述三种内存页面置换算法,使学生进一步掌握内存页面置换的方法。
对操作系统中内存的管理有一个实践上的认识。
1、用C语言编写OPT、FIFO、LRU三种置换算法。
2、熟悉内存分页管理策略。
3、了解页面置换的算法。
4、掌握一般常用的调度算法。
5、根据方案使算法得以模拟实现。
6、锻炼知识的运用能力和实践能力。
二、实验要求●设计随机页面序号产生程序,并说明随机的性能和其性能可能对算法的影响●编写页面淘汰算法(FIFO、OPT、LRU)●结果数据的显示或提取●结果数据的分析几点说明:●设计并绘制算法流程,附加说明所需的数据结构●如何标记时间的先后、最久的将来、最久未被使用●描述Clock算法的基本原理、必要的数据结构、算法执行流程图、编码实现。
1)初始化:输入作业可占用的总页框数,初始化置空。
2)输入请求序列:输入一个作业页号访问请求序列,依次占用相应页框,直至全部占用;3)Clock算法:当页框全部占用后,对于后续新的页号访问请求,执行Clock 算法,淘汰1个页面后装入新的页号。
4)显示当前分配淘汰序列:显示淘汰的页号序列。
三、背景知识:在操作系统当中,在进程运行过程中,若其访问的页面不在内存中而需把他们调入内存,但内存已无空闲空间时,为了保证该进程能够正常的运行,系统必须从内存中调出一页程序或数据送到磁盘的兑换区中,但是应该是哪个页面被调出,需根据一定的算法来确定。
页面淘汰算法
页面淘汰算法1. 引言在现代科技发展迅猛的时代,网页成为人们获取信息、交流、娱乐的主要途径之一。
然而,随着互联网的快速发展,页面数量的快速增长也给用户体验带来了很大的挑战。
为了提供更好的用户体验,页面淘汰算法应运而生。
2. 页面淘汰算法的定义和意义页面淘汰算法是一种根据用户需求和行为对网页进行排序和筛选的算法技术。
其主要目的是将用户最有可能需要的页面展示在搜索结果的前面,同时排除冗余、垃圾或过时的页面,提高用户体验和信息的准确性。
页面淘汰算法的重要性在于它能够为用户提供更加精准、有用的搜索结果。
它能够避免用户在海量信息中迷失,节省用户的时间和精力。
通过淘汰那些不再被人们关注的、过时的页面,也可以为互联网资源的高效利用提供保障。
3. 传统页面淘汰算法的缺点传统页面淘汰算法主要基于页面的静态特征(如关键词匹配、网页排名等)来进行排序和筛选,存在一些明显的缺点:3.1 主观性较强:传统算法主要依赖人工制定的规则和关键词匹配等因素,容易受到个人主观意识和商业利益的影响,导致搜索结果的准确性和公正性存在一定局限性。
3.2 难以适应用户个性化需求:传统算法往往无法充分考虑用户个性化需求,导致搜索结果的个性化程度较低,不能很好地满足用户的具体需求。
3.3 对新兴内容的处理困难:传统算法主要基于历史数据和统计规律,对于新兴话题或者特定领域的内容处理能力较弱,无法及时给出相关的搜索结果。
4. 基于机器学习的页面淘汰算法为了克服传统页面淘汰算法的缺点,近年来,研究者们开始运用机器学习和数据挖掘等技术来开发更加智能和高效的页面淘汰算法。
4.1 数据驱动:基于机器学习的页面淘汰算法主要通过对大量的用户行为数据进行分析和学习,实现对用户需求的准确预测和页面的个性化推荐。
4.2 模型构建:基于机器学习的页面淘汰算法通过构建各种模型,如深度神经网络模型、协同过滤模型等,对用户行为进行建模和预测,从而实现对页面的准确排序和筛选。
页面淘汰算法实验报告
操作系统实验报告课题:页面淘汰算法专业:班级:学号:姓名:年月日目录一实验目的 (3)二实验要求 (3)三背景知识 (3)四总体设计 (4)五详细设计 (7)六运行结果分析 (9)七心得体会 (13)八参考文献 (14)附:源代码 (15)一、实验目的本实验主要对操作系统中请求分页式内存管理及其应用的一些关键算法进行模拟。
学生通过设计与实现Clock算法,能够加强对相应理论的理解,并对了解操作系统内部的基本处理原理与过程也有很多益处。
利用简单的数据结构,模拟实现操作系统中的页面置换机制,通过写程序模拟实现上述三种内存页面置换算法,使学生进一步掌握内存页面置换的方法。
对操作系统中内存的管理有一个实践上的认识。
1、用C语言编写OPT、FIFO、LRU三种置换算法。
2、熟悉内存分页管理策略。
3、了解页面置换的算法。
4、掌握一般常用的调度算法。
5、根据方案使算法得以模拟实现。
6、锻炼知识的运用能力和实践能力。
二、实验要求●设计随机页面序号产生程序,并说明随机的性能和其性能可能对算法的影响●编写页面淘汰算法(FIFO、OPT、LRU)●结果数据的显示或提取●结果数据的分析几点说明:●设计并绘制算法流程,附加说明所需的数据结构●如何标记时间的先后、最久的将来、最久未被使用●描述Clock算法的基本原理、必要的数据结构、算法执行流程图、编码实现。
1)初始化:输入作业可占用的总页框数,初始化置空。
2)输入请求序列:输入一个作业页号访问请求序列,依次占用相应页框,直至全部占用;3)Clock算法:当页框全部占用后,对于后续新的页号访问请求,执行Clock 算法,淘汰1个页面后装入新的页号。
4)显示当前分配淘汰序列:显示淘汰的页号序列。
三、背景知识:在操作系统当中,在进程运行过程中,若其访问的页面不在内存中而需把他们调入内存,但内存已无空闲空间时,为了保证该进程能够正常的运行,系统必须从内存中调出一页程序或数据送到磁盘的兑换区中,但是应该是哪个页面被调出,需根据一定的算法来确定。
fifo页面淘汰算法总结(共5篇)
fifo页面淘汰算法总结第1篇假设虚拟内存的地址是16位,页面大小为1K,则进程的大小为 2 16 = 64 K B2^{16}=64KB 216=64KB分页个数 = 进程的大小页面的大小 = 逻辑地址表示的大小页面的大小 = 2 16 B 1 K B = 2 6 页分页个数=\frac{进程的大小}{页面的大小}=\frac{逻辑地址表示的大小}{页面的大小}=\ frac{2^{16B}}{1KB}=2^{6}页分页个数=页面的大小进程的大小=页面的大小逻辑地址表示的大小=1KB216B=26页因此页号P占用前6位,页内偏移量W=16-6=10位。
每一个页表项占用2B,因此页表存储空间需要 2 6 ∗ 2 B = 128 B 2^6*2B=128B 26∗2B=128B页面结构以及页表项设计如下:算法流程如下:具体实现如下:算法流程如下:具体实现如下:算法流程如下:其中调用了randBool()函数,随机的生成0或者1,其具体实现如下算法规则:选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。
假定系统为某进程分配了三个物理块,并考虑有以下页面访问序列: [7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1] 进程运行时,先将7, 0,1三个页面依次装入内存。
进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。
然后,访问页面0时,因为已在内存中所以不必产生缺页中断。
访问页面3时又会根据最佳置换算法将页面1淘汰……依此类推。
算法流程图如下:OPT算法具体实现如下:算法规则:在发生页面替换时,被替换的对象应该是最早进入内存的。
仍然采用上述的例子,此时页面置换过程如下表所示FIFO算法流程图如下所示:FIFO页面置换算法具体实现如下:初始化设置m=8,e=8,s=10; 页框数=3,访问序列长度=20;选择算法2:先进先出淘汰算法置换过程算法规则:在发生页面替换时,被替换的页面应该满足,在之前的访问队列中,该对象截止目前未被访问的时间最长。
页面淘汰算法课程设计
页⾯淘汰算法课程设计实验代码如下:#include#include#include#define MemPageCount 4 //内存物理块数⽬#define InstructionCount 20 //指令页⾯数⽬struct page{int serial; //页⾯号int time; //时间计数}mempage[MemPageCount];int main(){int i,j,k,m,n; //指令页⾯集合,可以考虑让页⾯指令集合随机⽣成int instruction[InstructionCount];int mem_counter; //内存页⾯集合计数器int switch_counter; //置换次数int switch_flag; //置换的位置标志int lost_counter; //缺页次数int exist_flag; //判断是否已经在内存中的标志int distance[MemPageCount];//⽤于标记内存中已有页⾯哪个是最久的将来不使⽤的srand(time(NULL)); /*time(NULL)是得到当前时间,srand()是取⼀个种⼦好⽣成随机数*/ for(n=0;n instruction[n]=rand()%10;printf("当前随机⽣成的页⾯号为:\n");for(n=0;nprintf(" %d",instruction[n]);printf("\n");switch_counter=0;mem_counter=0;switch_counter=0;lost_counter=0;switch_flag=0;exist_flag=0;printf("\n请选择算法: 0、结束1、FIFO算法2、OPT算法3、LRU算法:"); scanf("%d",&m);printf("置换顺序依次为:\n");switch(m){case 1:for(i=0;imempage[i].serial=-1;mempage[i].time=0;}//依次调⼊新的指令页⾯,如果内存页⾯满且新页⾯不存在,则置换页⾯for(i=0;i{for(j=0;jif(mempage[j].serial==instruction[i]){exist_flag=1;break;}}//如果内存中没有该页⾯,执⾏缺页和置换步骤if(exist_flag!=1){//内存页⾯集合未满,缺页不置换if(mem_countermempage[mem_counter].serial=instruction[i];mempage[mem_counter].time=0;mem_counter=mem_counter+1;}else{ //缺页且发⽣置换//取得最先进⼊的页⾯在memepage中的位置for(j=1;jif(mempage[switch_flag].timeswitch_flag=j;}mempage[switch_flag].serial=instruction[i]; //置换页⾯mempage[switch_flag].time=0;switch_counter=switch_counter+1;}lost_counter=lost_counter+1;for(j=0;jprintf("%d ",mempage[j].serial);}printf("| ");} //end if(exist_flag!=1)for(j=0;jmempage[j].time=mempage[j].time+1;}exist_flag=0;}printf("\n缺页次数:%d 次、",lost_counter);printf("置换次数:%d 次\n",switch_counter);break;case 2:for(i=0;imempage[i].serial=-1;mempage[i].time=0;}//依次调⼊新的指令页⾯,如果内存页⾯满且新页⾯不存在,则置换页⾯for(i=0;i for(j=0;jif(mempage[j].serial==instruction[i]){exist_flag=1;break;}mempage[mem_counter].time=0;mem_counter=mem_counter+1;}else{ //缺页且发⽣置换for(j=0;jdistance[j]=9999;}for(j=0;j//记录下内存页⾯中,再次被使⽤的距离for(k=i+1;kif(instruction[k]==mempage[j].serial){distance[j]=k;break;}}}switch_flag=0;//寻找未来最长时间内不被使⽤的页⾯在mempage中的位置//即寻找distance最⼤值for(k=1;kif(distance[switch_flag]switch_flag=k;}mempage[switch_flag].serial=instruction[i];switch_counter=switch_counter+1;}lost_counter=lost_counter+1;for(j=0;jprintf("%d ",mempage[j].serial);}printf("| ");}// if(exist_flag!=1)exist_flag=0;printf("\n缺页次数:%d 次、",lost_counter);printf("置换次数:%d 次\n",switch_counter);break;case 3:for(i=0;imempage[i].serial=-1;mempage[i].time=0;}//依次调⼊新的指令页⾯,如果内存页⾯满且新页⾯不存在,则置换页⾯for(i=0;i for(j=0;jif(mempage[j].serial==instruction[i]){exist_flag=1;mempage[j].time=0; //如果在内存中,time 值置为零,表⽰刚刚被使⽤过break;}}if(exist_flag!=1){ //如果内存中没有该页⾯,执⾏缺页和置换步骤if(mem_countermempage[mem_counter].serial=instruction[i];mempage[mem_counter].time=0;mem_counter=mem_counter+1;}else{ //缺页且发⽣置换switch_flag=0;for(j=1;jif(mempage[switch_flag].timeswitch_flag=j;}mempage[switch_flag].serial=instruction[i];mempage[switch_flag].time=0;switch_counter=switch_counter+1;}lost_counter=lost_counter+1;for(j=0;jprintf("%d ",mempage[j].serial);printf("| ");}//if(exist_flag!=1)exist_flag=0;for(j=0;jmempage[j].time=mempage[j].time+1;}}printf("\n缺页次数:%d 次、",lost_counter); printf("置换次数:%d 次\n",switch_counter); break;}}while(m!=0);return 0;}。
最长时间未使用页面淘汰算法
最近最久未使用者淘汰算法交通计算机翟高寿最近最久未使用者淘汰算法LRU❑基本思想以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存❑评价适用于各种类型的程序,性能较好,但需要较多的硬件支持7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 7 7 7 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 1 1 1 3 3 3 2 2 2 2 2 2 2 2 2 7 7 7某进程分配获得三个物理块缺页中断次数为9次,缺页率45%页面访问序列内存页面分布情况页面预先装入最近最久未使用者淘汰算法举例说明最近最久未使用者淘汰算法硬件支持——移位寄存器B# R R7 R6 R5 R4 R3 R2 R1 R01 0 1 0 1 0 0 1 02 1 0 1 0 1 1 0 03 0 0 0 0 1 1 0 04 0 1 1 0 1 0 1 15 1 1 0 1 0 1 1 06 0 0 1 0 1 0 1 17 0 0 0 0 0 1 1 18 0 1 1 0 1 1 0 1最近最久未使用者淘汰算法硬件支持 —— 栈44 7 470 7 4 07 0 471 7 0 4 10 1 7 4 01 0 7 412 1 0 7 4 21 2 0 7 4 12 1 0 7 4 26 2 1 0 76某进程分配获得五个物理块页面访问序列知行合一,开拓进取!最近最久未使用者淘汰算法■。
实验3-页面调度算法
实验报告院(系):专业班级:学号:姓名:实验地点:实验日期:课程名称实验项目名称实验学时实验类型计算机操作系统页面调度算法 2 验证型一、实验目的及要求通过本实验可以加深理解有关虚拟存储器的工作原理,进一步体会和了解页面替换算法的具体实现方法。
二、实验环境PC /Windows系统/Visual C++6.0三、实验内容①实现三种算法:先进先出;OPT;LRU②页面序列从指定的文本文件(TXT文件)中取出③输出:第一行:每次淘汰的页面号,第二行:显示缺页的总次数四、实验步骤1.先进先出(FIFO)置换算法的思路该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
该算法实现简单,只需把一个进程已调入内存的页面,按照先后次序连接成一个队列,并设置一个替换指针,使它总指向最老的页面。
2.最近久未使用(LRU)置换算法的思路最近久未使用置换算法的替换规则,是根据页面调入内存后的使用情况来进行决策的。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面中其时间值最大的进行淘汰。
3.最佳(OPT)置换算法的思路其所选择的被淘汰的页面,将是以后不使用的,或者是在未来时间内不再被访问的页面,采用最佳算法,通常可保证获得最低的缺页率。
4、流程图如下图所示:五、调试过程 程序结构分析:程序共有以下九个部分:int findSpace(void);//查找是否有空闲内存int findExist(int curpage);//查找内存中是否有该页面开始 取一条指令取指令中访问的页号=>L查 页 表页标记=1?形成绝对地址是“存”指令?置L 页修改标记“1”输出绝对地址输出“*页号”有后继指令?取一条指令结 束J:=P[k]J 页的修改标记输出“OUTj ”输出“INL ”P[k]:=L k:=(k+1) mod m修改页面是否是 否否(产生缺页中断)是否int findReplace(void);//查找应予置换的页面void display(void);//显示void FIFO(void);//FIFO算法void LRU(void);//LRU算法void OPT(void);//OPT算法;void BlockClear(void);//BLOCK清空,以便用另一种方法重新演示int main() //主程序六、实验结果及分析程序源代码:#include <iostream.h>#define Bsize 3#define Psize 20struct pageInfor{int content;//页面号int timer;//被访问标记};class PRA{public:PRA(void);int findSpace(void);//查找是否有空闲内存int findExist(int curpage);//查找内存中是否有该页面int findReplace(void);//查找应予置换的页面void display(void);//显示void FIFO(void);//FIFO算法void LRU(void);//LRU算法void Optimal(void);//OPTIMAL算法void BlockClear(void);//BLOCK恢复pageInfor * block;//物理块pageInfor * page;//页面号串private:};PRA::PRA(void){int QString[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};block = new pageInfor[Bsize];for(int i=0; i<Bsize; i++){block[i].content = -1;block[i].timer = 0;}page = new pageInfor[Psize];for(i=0; i<Psize; i++){page[i].content = QString[i];page[i].timer = 0;}}int PRA::findSpace(void){for(int i=0; i<Bsize; i++)if(block[i].content == -1)return i;//找到空闲内存,返回BLOCK中位置return -1;}int PRA::findExist(int curpage){for(int i=0; i<Bsize; i++)if(block[i].content == page[curpage].content)return i;//找到内存中有该页面,返回BLOCK中位置return -1;}int PRA::findReplace(void){int pos = 0;for(int i=0; i<Bsize; i++)if(block[i].timer >= block[pos].timer)pos = i;//找到应予置换页面,返回BLOCK中位置return pos;}void PRA::display(void){for(int i=0; i<Bsize; i++)if(block[i].content != -1)cout<<block[i].content<<" "; cout<<endl;}void PRA::Optimal(void){int exist,space,position ;for(int i=0; i<Psize; i++){exist = findExist(i);if(exist != -1){ cout<<"不缺页"<<endl; }else{space = findSpace();if(space != -1){block[space] = page[i];display();}else{for(int k=0; k<Bsize; k++)for(int j=i; j<Psize; 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();}}}}void PRA::LRU(void){int exist,space,position ;for(int i=0; i<Psize; i++){exist = findExist(i);if(exist != -1){cout<<"不缺页"<<endl;block[exist].timer = -1;//恢复存在的并刚访问过的BLOCK中页面TIMER为-1}else{space = findSpace();if(space != -1){block[space] = page[i];display();}else{position = findReplace();block[position] = page[i];display();}}for(int j=0; j<Bsize; j++)block[j].timer++;}}void PRA::FIFO(void){int exist,space,position ;for(int i=0; i<Psize; i++){exist = findExist(i);if(exist != -1){cout<<"不缺页"<<endl;}else{space = findSpace();if(space != -1){block[space] = page[i];display();}else{position = findReplace();block[position] = page[i];display();}}for(int j=0; j<Bsize; j++)block[j].timer++;//BLOCK中所有页面TIMER++ }}void PRA::BlockClear(void){for(int i=0; i<Bsize; i++){block[i].content = -1;block[i].timer = 0;}}void main(void){cout<<"|----------页面置换算法----------|"<<endl;cout<<"|---power by kangyan(1318064008)---|"<<endl;cout<<"|-------------------------------------|"<<endl;cout<<"页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1"<<endl; cout<<"----------------------------------------------------"<<endl;cout<<"选择<1>应用Optimal算法"<<endl;cout<<"选择<2>应用FIFO算法"<<endl;cout<<"选择<3>应用LRU算法"<<endl;cout<<"选择<0>退出"<<endl;int select;PRA test;while(select){cin>>select;switch(select){case 0:break;case 1:cout<<"Optimal算法结果如下:"<<endl;test.Optimal();test.BlockClear();cout<<"----------------------"<<endl;break;case 2:cout<<"FIFO算法结果如下:"<<endl;test.FIFO();test.BlockClear();cout<<"----------------------"<<endl;break;case 3:cout<<"LRU算法结果如下:"<<endl;test.LRU();test.BlockClear();cout<<"----------------------"<<endl;break;default:cout<<"请输入正确功能号"<<endl;break;}}}实验截图如下图所示:<—键入1选择运行LRU算法的置换<—初始化信息:3个页块,20个页面号引用串<—存入前三个页,有空闲内存,无需置换<—3,4页已经在内存中无需再写入<—因为3是最久的页面所以将其置换下面原理相同<—所有命中的页面数<—命中率0.5七、总结页面置换算法的思想可以说比较简单,易懂,但是在实现的时候,也遇到了很多的问题,比如说在找空闲物理块的时候,起初我是比较物理块是否等于0,若为0,则直接把页面放入,后来发现不论什么时候都是把0替换出去,才恍然大悟,既然页面标号有0,就不能用0来表示空闲物理块,后来就换成用-1来表示物理块空闲了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验报告课题:页面淘汰算法专业:班级:学号:姓名:年月日目录一实验目的……………………………………………………错误!未定义书签。
二实验要求 (3)三背景知识 (3)四总体设计 (4)五详细设计……………………………………………………错误!未定义书签。
六运行结果分析 (9)七心得体会 (13)八参考文献 (14)附:源代码 (15)一、实验目的本实验主要对操作系统中请求分页式内存管理及其应用的一些关键算法进行模拟。
学生通过设计与实现Clock算法,能够加强对相应理论的理解,并对了解操作系统内部的基本处理原理与过程也有很多益处。
利用简单的数据结构,模拟实现操作系统中的页面置换机制,通过写程序模拟实现上述三种内存页面置换算法,使学生进一步掌握内存页面置换的方法。
对操作系统中内存的管理有一个实践上的认识。
1、用C语言编写OPT、FIFO、LRU三种置换算法。
2、熟悉内存分页管理策略。
3、了解页面置换的算法。
4、掌握一般常用的调度算法。
5、根据方案使算法得以模拟实现。
6、锻炼知识的运用能力和实践能力。
二、实验要求●设计随机页面序号产生程序,并说明随机的性能和其性能可能对算法的影响●编写页面淘汰算法(FIFO、OPT、LRU)●结果数据的显示或提取●结果数据的分析几点说明:●设计并绘制算法流程,附加说明所需的数据结构●如何标记时间的先后、最久的将来、最久未被使用●描述Clock算法的基本原理、必要的数据结构、算法执行流程图、编码实现。
1)初始化:输入作业可占用的总页框数,初始化置空。
2)输入请求序列:输入一个作业页号访问请求序列,依次占用相应页框,直至全部占用;3)Clock算法:当页框全部占用后,对于后续新的页号访问请求,执行Clock 算法,淘汰1个页面后装入新的页号。
4)显示当前分配淘汰序列:显示淘汰的页号序列。
三、背景知识:在操作系统当中,在进程运行过程中,若其访问的页面不在内存中而需把他们调入内存,但内存已无空闲空间时,为了保证该进程能够正常的运行,系统必须从内存中调出一页程序或数据送到磁盘的兑换区中,但是应该是哪个页面被调出,需根据一定的算法来确定。
通常,我们把这一类的算法称为“页面置换算法”,页面置换算法执行效率的高低,往往直接影响到操作系统的性能。
内存页面置换算法:1、<1> 先进先出调度算法(FIFO)先进先出调度算法根据页面进入内存的时间先后选择淘汰页面。
本算法实现时需要将页面按进入内存的时间先后组成一个队列,每次置换掉最早进入的页面。
这是最早出现的置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面换出,予以淘汰。
该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。
<2>最近最久未使用的置换算法(LRU)最近最久未使用的置换算法,是根据页面调入内存后的使用情况进行决策的。
由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU 置换算法是选择最近最久未使用的页面予以淘汰。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
<3> 最佳置换算法(OPT)最佳置换算法是可以说的一种理想的页面置换算法,它是由Belady于1966 年提出的一种理论上的算法。
其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。
采用最佳置换算法,通常可保证获得最低的缺页率。
但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用此算法来评价其它算法。
<4>时钟页面置换算法时钟页面置换算法是把所有的页面都保存在一个类似钟面的环形链表中,一个表针指向最老的页面,如图所示。
当发生缺页中断时,算法首先检查表针指向的页面,如果它的R位是0就淘汰该页面,并把新的页面插入这个位置,然后把表针前移一个位置;如果R位是1就清除R位并把表针前移一个位置,重复这个过程直到找到了一个R位为0的页面为止。
四、总体设计●根据要求设计页面淘汰算法的活动图运行程序进入主页面,在正上方,已经通过随机生成函数生成了页面号,在其下方,显示可选项:0、退出程序1、FIFO算法2、OPT算法3、LRU算法。
根据需要,选择相应的法,程序自动生成页面淘汰的先后顺序,以及置换次数和缺页次数,并打印在下方,执行完以后,再次进入主页面,到输入0,退出程序。
●算法流程图FIFO算法流程图:新的指令页面内存中的所有页面time+1载入新页面time=0内存物理块集合已满?已在内存物理块中?内存中所有页面time+1选择time值最大的页面换出否否是是O PT算法流程图新的指令页面载入该页面内存物理块集合已满?已在内存物理块中?对内存中每个页面,向后遍历剩余指令集合,记录每个页面距离再次被利用的页面跨度否否是是选择跨度最大的页面换出L RU算法流程图:新的指令页面内存中的所有页面time+1载入新页面time=0内存物理块集合已满?已在内存物理块中?内存中所有页面time+1选择time值最大的页面换出否否是是该页面time=0五、详细设计(一)、设计思想1、最佳置换算法(OPT)用数组Temppages[]存储当前物理块中页面信息,数组TimeArry[]存储当前在物理块中的页面的获得内存时的时间,当页面不在内存中时,根据当前已获得物理块数的页面在所有的页面当中将来不在请求内存或者很少请求内存的情况进行置换2、先进先出算法(FIFO)用数组Temppages[]存储当前物理块中页面信息,变量temp记录内存中物理块页面置换状态,每进行一次置换,页面置换状态变化,便于下一次的置换。
3、最近最久未使用算法(LRU)用数组Temppages[]存储当前物理块中页面信息,数组TimeArry[]存储当前在物理块中的页面的获得内存时的时间,当页面不在内存中时,选择TimeArry[]数组中值最小并且对应物理块中的页面进行置换。
(二)、设计步骤首先根据程序要求,我们分别定义两个宏,用以存放我们的物理块数目以及页面数目,再定义一个结构体,用以物理块的存储,代码如下:#define MemPageCount 4#define InstructionCount 20struct page{int serial; //页面号int time; //时间计数}mempage[MemPageCount];其次,建立主函数,根据程序需要,定义相应的变量,建立switch语句,用以算法的选择,部分定义如下:int i,j,k,m,n; //指令页面集合,可以考虑让页面指令集合随机生成int instruction[InstructionCount];int mem_counter; //内存页面集合计数器int switch_counter; //置换次数最后,根据算法流程图,实现相应算法的代码编写。
(三)、算法流程设计主函数流程:STEP1:输入分配的页框数,页面访问次数和要访问的页面号序列STEP2:内存页面初始化。
内存中页面的数据结构为单循环链表,含有页号值yehao和访问位值a。
开始时页号均为-1,访问位为0.STEP3:测试数据。
具体算法是依要访问的页面号,调用find()函数查找是否已经存在于内存中。
若存在,则修改其访问位为1.若不存在,触发缺页中断,调用tihuan()函数。
最后,打印当前内存状态。
如此循环直至测试串都访问完毕。
1)主要函数实现a)Makenode(double)函数:用于初始化一个节点。
b)Find(double)函数:依据输入的页号,查询内存中是否已存在此页面。
若存在返回值1,不存在返回值0.c)Tihuan(double)函数:在发生缺页中断时,时钟指针查找访问位为0的页面进行替换,指针扫过的页面访问位置0,新加入的页面访问位置1。
替换后指针下移。
d)Print_state()函数:打印当前内存中存在的页面的状态以及当前时钟指针所指向的页面位置。
2)测试数据估计输入:输入分配的页框数3输入页面访问次数15输入要访问的页面号序列3 4 2 6 4 3 7 4 3 6 3 4 8 4 6输出(仅最后一项):3)结果分析以下是clock算法对应输入页面号序列3 4 2 6 4 3 7 4 3 6 3 4 8 4 6的分析表六、运行结果分析:a)开始界面2、采用随机数产生的结果2、采用自定义页面信息产生结果自定义页面数为:15 物理块数为:4页面序列为:1 2 3 4 5 6 7 8 9 4 5 6 7 0 8根据结果,我们不难发现,OPT算法,是三种算法中性能最好的,它的置换次数最少,LRU次之,,不过性能最差的还是FIFO,由于缺页率=缺页次数/总的页面数,所以我们不难发现,随着物理块数的增加,缺页率都相应有所增加,但是OPT算法的增加较为明显,即产生了belady现象。
七、心得体会:这次课程设计,让我对算法的编写更加的熟练,同时更加了解页面置换的相关算法,也提高了我对算法设计的严密性,对以后的程序设计有很大帮助。
我们不仅对常用的算法进行了编写,还对一些理想的算法也进行了编写,并且通过适当的方法,得以了验证。
就该程序而言,随机性使得程序出现了更多的可能性,为我们验证算法提供很大的方便,电脑自动分配,大大的节约了我们的时间,但是我们通过实验不难发现,如果所设的页面项目过大,也会影响我们算法的性能执行效率。
对我们所涉及的算法,让我有很大的感触。
在FIFO 算法中,无论有无发生缺页或者置换,都需要对每个在内存中的页面的time 值进行增加操作,以保持最先进入的那个页面的time 值是最大的;一个新进来的页面,其time值设置为0。
当然,该算法也可以通过队列结构来实现,利用队列的先进先出(FIFO)特性完成,无需设置time字段。
distance 用于记录内存物理块集合中每个页面距离再次被使用的页面跨度,缺省值为9999,如果某个页面在后续指令集合中不再出现,则用最大值9999 缺省取代;如果页面再次被使用,则两次使用所跨的页面数,为页面跨度。
用最大页面跨度表示以后永不使用或未来最长时间内不再被访问。
在LRU 算法中,无论是否发生缺页或者置换,除了命中(刚刚被访问过的页面)页面time 值清零之外,其它所有内存中的页面的time 值都加一,以保证最近刚刚被访问的页面的time 值最小,相应time 值最大的页面就是最近最久没有被访问的页面。