请求页式管理缺页中断模拟设计--FIFO、OPT
大作业用先进先出(FIFO)页面调度算法处理缺页中断

实验四 用先进先出(FIFO )页面调度算法处理缺页中断1.实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。
2.实验预备知识页式存储管理中的地址转换的方法;页式虚拟存储的缺页中断处理方法。
3.实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所作工作进程测试。
假定主存64KB ,每个主存块1024字节,作业最大支持到64KB ,系统中每个作业分得主存块4块。
4.提示与讲解页式存储管理中地址转换过程很简单,假定主存块的大小为2n 字节,主存大小为2m'字节和逻辑地址m 位,则进行地址转换时,首先从逻辑地址中的高m-n 位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m'-n 位,最后从逻辑地址中取得低n 位放入物理地址的低n 位就得到了物理地址,过程如图1所示。
图1 页式存储管理系统地址转换示意图地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程图如图2所示(实验中假定主存64KB ,每个主存块1024字节,逻辑地址即n=10,m'=16,物理地址中块号6位、块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位、页内地址10位)。
在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。
页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。
详解页式管理置换算法FIFO_LRU_OPT

页式管理OPT、LRU、FIFO置换算法详解指令:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6若内存最多容纳4个页面,则……一、OPT(理想型淘汰)算法该算法无法实现。
置换规则:(1)淘汰内存中以后不再访问的页面;(2)如果没有(1),则淘汰将要访问指令之后的将来最迟被访问的指令的页面。
分析:(1)当访问5时,内存1,2,3,4,发生第5次中断,淘汰不再访问的4,换入5,内存1,2,3,5;(2)当访问6时,内存1,2,3,5,发生第6次中断,淘汰不再访问的5,换入6,内存1,2,3,6;(3)当访问7时,内存1,2,3,6,发生第7次中断,由于之后的指令(1、2、3、6)都是现在内存页面都存在的指令,无法淘汰,但可以根据指令访问顺序,先淘汰将来最迟被访问的1,换入7,置换后的内存7,2,3,6;(4)当访问1时,内存7,2,3,6,发生第8次中断,淘汰不再访问的7,换入1,内存1,2,3,6;即OPT算法一共会出现8次缺页中断。
二、LRU(最近最久未使用)算法该算法利用堆栈实现,每次访问都调整堆栈中页面顺序。
把被访问页面从栈移出再压入栈顶。
置换规则:(1)栈顶始终为最新访问过的页面;(2)栈底始终为最近最久未被访问的页面;(3)访问存在的页面要调到栈顶。
分析:(1)访问第5个指令2时,由于内存页面中已经存在2,所以不置换,但调整2在栈中顺序,即将2调到栈顶,其它页面依次后置。
调整前内存4,3,2,1,调整后内存2,4,3,1;(2)访问第7个指令5时,发生第5次中断,原内存1,2,4,3,淘汰栈底3,栈顶调入5,调整后内存5,1,2,4;(3)访问第8个指令6时,发生第6次中断,原内存5,1,2,4,,淘汰栈底4,栈顶调入6,调整后内存6,5,1,2;……即LRU算法一共会出现10次缺页中断。
三、FIFO(先进先出)算法该算法利用队列实现。
FIFO与LRU的区别是FIFO遇到内存中存在的页面不需要调换页面顺序。
操作系统(第三版)孙钟秀主编 课后习题4应用题参考答案

CH4 应用题参考答案1 在一个请求分页虚拟存储管理系统中,一个程序运行的页面走向是:1、2、3、4、2、1、5、6、2、1、2、3、7、6、3、2、1、2、3、6。
分别用FIFO、OPT和LRU算法,对分配给程序3个页框、4个页框、5个页框和6个页框的情况下,分别求出缺页中断次数和缺页中断率。
答:只要把表中缺页中断次数除以20,便得到缺页中断率。
2 在一个请求分页虚拟存储管理系统中,一个作业共有5页,执行时其访问页面次序为:(1) 1、4、3、1、2、5、1、4、2、1、4、5。
(2) 3、2、1、4、4、5、5、3、4、3、2、1、5。
若分配给该作业三个页框,分别采用FIFO和LRU面替换算法,求出各自的缺页中断次数和缺页中断率。
答:(1) 采用FIFO为9次,9/12=75%。
采用LRU为8次,8/12=67%。
(2) 采用FIFO和LRU均为9次,9/13=69%。
3 一个页式存储管理系统使用FIFO、OPT和LRU页面替换算法,如果一个作业的页面走向为:(1) 2、3、2、1、5、2、4、5、3、2、5、2。
(2) 4、3、2、1、4、3、5、4、3、2、1、5。
(3 )1、2、3、4、1、2、5、1、2、3、4、5。
当分配给该作业的物理块数分别为3和4时,试计算访问过程中发生的缺页中断次数和缺页中断率。
答:(1) 作业的物理块数为3块,使用FIFO为9次,9/12=75%。
使用LRU为7次,7/12=58%。
使用OPT为6次,6/12=50%。
作业的物理块数为4块,使用FIFO为6次,6/12=50%。
使用LRU为6次,6/12=50%。
使用OPT为5次,5/12=42%。
(2) 作业的物理块数为3块,使用FIFO为9次,9/12=75%。
使用LRU为10次,10/12=83%。
使用OPT为7次,7/12=58%。
作业的物理块数为4块,使用FIFO为10次,10/12=83%。
使用LRU为8次,8/12=66%。
OPT、FIFO、LRU算法的实现

OPT、FIFO、LRU算法的实现⼀、实验⽬的1. 了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中⼏种基本页⾯置换算法的基本思想和实现过程,并⽐较它们的效率。
2. 了解程序设计技术和内存泄露的原因⼆、实验内容模拟实现请求页式存储管理的⼏种基本页⾯置换算法最佳淘汰算法(OPT)先进先出的算法(FIFO)最近最久未使⽤算法(LRU)三、实验原理1. 虚拟存储系统UNIX中,为了提⾼内存利⽤率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进⾏;⼀个进程只需将其⼀部分(段或页)调⼊内存便可运⾏;还⽀持请求调页的存储管理⽅式。
当进程在运⾏中需要访问某部分程序和数据时,发现其所在页⾯不在内存,就⽴即提出请求(向CPU发出缺中断),由系统将其所需页⾯调⼊内存。
这种页⾯调⼊⽅式叫请求调页。
为实现请求调页,核⼼配置了四种数据结构:页表、页框号、访问位、修改位、有效位、保护位等。
2. 页⾯置换算法当CPU接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转⼊缺页中断处理程序。
该程序通过查找页表,得到该页所在外存的物理块号。
如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调⼊内存,然后修改页表。
如果内存已满,则须按某种置换算法从内存中选出⼀页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调⼊,修改页表。
利⽤修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。
整个页⾯的调⼊过程对⽤户是透明的。
最佳淘汰算法(OPT):选择永不使⽤或在未来最长时间内不再被访问的页⾯予以替换。
先进先出的算法(FIFO):选择在内存中驻留时间最久的页⾯予以替换。
最近最久未使⽤算法(LRU):选择过去最长时间未被访问的页⾯予以替换。
3. ⾸先⽤srand( )和rand( )函数定义和产⽣指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。
(1)通过随机数产⽣⼀个指令序列,共320条指令。
操作系统页面置换算法(opt,lru,fifo,clock)实现

操作系统页⾯置换算法(opt,lru,fifo,clock )实现选择调出页⾯的算法就称为页⾯置换算法。
好的页⾯置换算法应有较低的页⾯更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页⾯先调出。
常见的置换算法有以下四种(以下来⾃操作系统课本)。
1. 最佳置换算法(OPT)最佳(Optimal, OPT)置换算法所选择的被淘汰页⾯将是以后永不使⽤的,或者是在最长时间内不再被访问的页⾯,这样可以保证获得最低的缺页率。
但由于⼈们⽬前⽆法预知进程在内存下的若千页⾯中哪个是未来最长时间内不再被访问的,因⽽该算法⽆法实现。
最佳置换算法可以⽤来评价其他算法。
假定系统为某进程分配了三个物理块,并考虑有以下页⾯号引⽤串: 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淘汰……依此类推,如图3-26所⽰。
从图中可以看出⾤⽤最佳置换算法时的情况。
可以看到,发⽣缺页中断的次数为9,页⾯置换的次数为6。
图3-26 利⽤最佳置换算法时的置换图2. 先进先出(FIFO)页⾯置换算法优先淘汰最早进⼊内存的页⾯,亦即在内存中驻留时间最久的页⾯。
该算法实现简单,只需把调⼊内存的页⾯根据先后次序链接成队列,设置⼀个指针总指向最早的页⾯。
但该算法与进程实际运⾏时的规律不适应,因为在进程中,有的页⾯经常被访问。
图3-27 利⽤FIFO 置换算法时的置换图这⾥仍⽤上⾯的实例,⾤⽤FIFO 算法进⾏页⾯置换。
进程访问页⾯2时,把最早进⼊内存的页⾯7换出。
然后访问页⾯3时,再把2, 0, 1中最先进⼊内存的页换出。
页式虚拟存储管理FIFO、LRU和OPT页面置换算法

目录1 需求分析 (2)1.1 目的和要求 (2)1.2 研究内容 (2)2 概要设计 (2)2.1 FIFO算法 (3)2.2 LRU算法 (3)2.3 OPT算法 (3)2.4 输入新的页面引用串 (3)3 详细设计 (4)3.1 FIFO(先进先出)页面置换算法: (4)3.2 LRU(最近最久未使用)置换算法: (4)3.3 OPT(最优页)置换算法 (4)4 测试 (5)5 运行结果 (5)6 课程设计总结 (9)7 参考文献 (10)8 附录:源程序清单 (10)1 需求分析1.1 目的和要求在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。
1.2 研究内容模拟实现页式虚拟存储管理的三种页面置换算法(FIFO(先进先出)、LRU (最近最久未使用)和OPT(最长时间不使用)),并通过比较性能得出结论。
前提:(1)页面分配采用固定分配局部置换。
(2)作业的页面走向和分得的物理块数预先指定。
可以从键盘输入也可以从文件读入。
(3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。
2 概要设计本程序主要划分为4个功能模块,分别是应用FIFO算法、应用LRU算法、应用OPT算法和页面引用串的插入。
1.1各模块之间的结构图2.1 FIFO 算法该模块的主要功能是对相应页面引用串进行处理,输出经过FIFO 算法处理之后的结果。
2.2 LRU 算法该模块的主要功功能是对相应的页面引用串进行处理,输出经过LRU 算法处理之后的结果。
2.3 OPT 算法该模块的主要功功能是对相应的页面引用串进行处理,输出经过OPT 算法处理之后的结果。
2.4 输入新的页面引用串该模块的主要功能是用户自己输入新的页面引用串,系统默认的字符串是0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,用户可以自定义全新的20个数字页面引用串。
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)。
概述fifo,opt,lru算法

概述fifo,opt,lru算法一、算法简介FIFO(FirstInFirstOut,先进先出)、OPT(OptimalPageReplacement)和LRU(LeastRecentlyUsed)算法是三种常见的页面替换算法,用于计算机中的虚拟内存管理。
这些算法在处理内存中数据块的替换时,需要考虑内存的容量、程序的需求以及数据的历史访问情况等因素。
二、算法原理1.FIFO算法:此算法将页面按照进入的顺序依次存放在内存中。
当有新的页面需要被加载时,如果内存中没有该页面,就需要从磁盘上加载。
当所有的页面都按照进入的顺序被加载完毕后,再按照同样的顺序将页面从内存中逐出,以腾出空间存放新的页面。
这种算法简单易行,但过于依赖页面的进入顺序,如果页面进入的顺序不合理,可能会导致频繁的页面替换。
2.OPT算法:此算法在每次需要加载新页面时,会根据一些准则(如最大错误率、最小错误率、最坏情况等)选择一个最优的页面进行替换。
相比于FIFO算法,OPT算法能更好地适应不同的页面访问情况,从而减少页面的替换频率。
然而,由于需要考虑到各种复杂的因素,OPT算法的实现难度相对较高。
3.LRU算法:此算法将最近最少使用的页面替换出内存,以腾出空间存放新的页面。
当有新的页面需要被加载时,如果内存中没有该页面,就需要从磁盘上加载。
而在加载完成后,会将该页面标记为最近最少使用的状态。
这种算法能够有效地提高内存的使用效率,减少页面的替换次数。
三、应用场景这三种算法在许多实际应用场景中都有应用,如操作系统中的虚拟内存管理、缓存系统等。
不同的应用场景可能需要不同的算法来满足特定的需求,如对于需要频繁访问的页面,可能更适合使用LRU算法;而对于访问模式较为固定的场景,可能更适合使用OPT算法。
四、总结FIFO、OPT和LRU算法是虚拟内存管理中常用的页面替换算法,它们各自具有不同的原理和应用场景。
在实际应用中,需要根据具体的需求和场景选择合适的算法,以实现最优的内存管理效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计题目请求页式管理缺页中断模拟设计--FIFO、OPT学院计算机科学与技术专业计算机科学与技术班级0806班姓名张军指导教师孙玉芬2011 年 1 月20 日课程设计任务书学生姓名:张军专业班级:计算机0806指导教师:孙玉芬工作单位:计算机科学与技术学院题目: 请求页式管理缺页中断模拟设计--FIFO、OPT初始条件:1.预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存储管理等概念,并体会和了解缺页和页面置换的具体实施方法。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.实现指定淘汰算法。
能够处理以下的情形:⑴能够输入给作业分配的内存块数;⑵能够输入给定的页面,并计算发生缺页的次数以及缺页率;⑶缺页时,如果发生页面置换,输出淘汰的页号。
2.设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名: 2011年 1月20日系主任(或责任教师)签名: 2011年 1月20日请求页式管理缺页中断模拟设计——FIFO、OPT1课程设计目的与功能1.1设计目的结合《操作系统》所学内存页式管理章节,掌握虚拟内存设计的重要性,熟悉和掌握请求分页式存储管理的实现原理,通过分析、设计和实现页式虚拟存储管理缺页中断的模拟系统,重点掌握当请求页面不在内存而内存块已经全部被占用时的替换算法(主要通过FIFO和OPT实现),并考察替换算法的评价指标——缺页次数和缺页率,得到淘汰的页面次序。
高级语言设计并实现出的结果程序要能够很好地显示页面调入和替换详细信息。
1.2初始条件及可发环境1.2.1初始条件1.预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存储管理等概念,并体会和了解缺页和页面置换的具体实施方法。
2.实践准备:掌握一种计算机高级语言的使用。
1.2.2开发环境(1)使用系统:Windows XP(2)使用语言:C++(3)开发工具:Visual C++ 6.01.3功能实现设计的结果程序能实现FIFO、OPT算法模拟页式存储管理缺页中断,主要能够处理以下的情形:(1) 用户能够输入给定分配的内存块数;(2) 用户输入给定的页面,并计算发生缺页的次数、缺页率及淘汰页面次序;(3) 程序可随机生成页面序列,或用户输入;2需求分析及设计说明2.1需求分析由于纯页式存储管理提高了内存的利用效率,但并不为用户提供虚存,并且会产生磁盘碎片问题。
用户程序将受到物理内存大小的限制。
而虚存的存储管理技术——请求分页存储管理技术和请求分段技术,则很好的解决了这个问题。
该设计虚拟实现请求分页管理(只实现FIFO和OPT)。
请求分页系统是在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。
它允许只装入部分页面的程序和数据,便启动运行。
以后,再通过调页功能和页面置换功能,陆续把即将要运行的页面调入内存,同时把暂时不运行的页面换出到外存上,置换时以页面为单位。
实现将程序正在运行时所需的但尚未在内存的页面调入内存,再将内存中暂时不用的页面从内存置换到外存磁盘上。
为了实现请求分页技术,页表应增加相应的内容,反映该页是否在内存,在外存的位置,和在内存的时间的长短。
请求分页中的页表如表1:表1各字段说明如下:状态位:指示该页是否已调入内存。
访问字段:记录本页在被访问的次数,或记录最近已有多长时间未被访问。
修改位:表示该页面在调入内存后是否被修改过。
若未被修改,在替换该页时就不需要再将该页写回到外存上,以减少系统的开销和启动磁盘的次数;若已被修改,则必须将该页重写到外存上,以保证外存中所保留的始终是最新副本。
外存地址:指出该页在外存上的地址,通常是物理块号。
在本设计中模拟FIFO、OPT系统的实现中,只需要用到虚拟页号,物理块号和中断位。
页表可用一个结构体的数组实现。
请求分页的具体实现过程如图1图1请求分页流程图2.2设计说明2.2.1算法分析在进程运行过程中,若其所要访问的页面不在内存,需要把它们调入内存,但内存已无空闲已空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区。
但应将哪个页面调出,必须根据替换算法来确定。
该设计采用的是常见置换算法中的先进先出(FIFO)、理想型淘汰算法OPT(Optimal Replacement Algorithm)。
详细算法原理如下:FIFO(先进先出算法)基本思想:总是选择在内存驻留时间最长的一页将其淘汰,因为最早调入内存的页,不再被使用的可能性比近期调入内存的大。
该算法实现简单,只需要把一个进程调入内存的页面,按先后次序连结成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
但是该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如有全局变量、常用函数,例程等的页面,FIFO算法并不能保证这些页面不被淘汰。
使用FIFO替换算法效率比较低,可能会比理想型算法要多出一倍。
低的原因是:基于处理器按线性顺序访问地址空间这一假设。
事实上,许多时候,处理器不是按线性顺序访问地址空间的。
例如,执行循环结构的程序段。
使用FIFO算法时,在未给进程或作业分配足够它所需要的页面数时,有时会出现分配的页面数增,缺页次数反而增加的现象(Belady现象)。
例如针对请求序列:1 2 3 4 1 2 5 1 2 3 4 5,若分配3个可用内存块,使用FIFO算法,一共会缺页9次,缺页率:75%;而如果分配4个可用内存块,则一共会缺页10次,缺页率:83.3%。
OPT(理想型淘汰算法)基本思想:当要调入一新页而必须淘汰一旧页时,所淘汰的页是以后不再使用的,或者是以后相当长的时间内不会使用的。
采用理想型替换算法,通常可保证获得最低的缺页率。
但是由于人们目前无法预知一个进程在内存的若干个页面中,哪个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但是在模拟设计中,由于是事先给定一个页面序列,即知道各个时刻以前和以后的页面出现情况,所以可实现该算法。
在实际系统中,虽无法实现理想型淘汰算法,但是可用它来评价其他替换算法。
2.2.2数据结构模拟设计时,页表没项记录的数据类型用结构体定义。
整该页表用数组模拟。
结构体有三个成员:int page_num 表示页面号;int memory_num表示页面所对应的内存块号;int is_in_memory是存在状态位标志,表示页面是否在内存,0表示不在内存,1表示在内存。
在每一个算法函数中都要初始化页表,否则,后面的算法会受前面算法结果的影响。
struct page{int page_num; //表示页面号int memory_num; //表示页面所对应的内存块号int is_in_memory;//是存在状态位标志,表示页面是否在内存,0 表示不在内存,1表示在内存};page page_table[初始值];for(int i=0;i<10;i++) //初始化页表:{page-table[i].page_num=i;page_table[i].memory_num=-1; //初始化,内存块号为-1,即没在内存块中。
page_table[i].is_in_memory =0; //初始化时,各页面均不在内存}页面请求序列:int *page_array= new int[inputSize]。
内存在程序中模拟内存存放页面号:int *memory=new int[memorySize]2.2.3函数实现Control()函数是class control的构造函数,用来初始化页表、内存(调用initial()函数)。
提示并接受用户输入等待调入页面数page_size,可用物理块数memory_size,并随机生成请求页面,或用户自己输入。
然后调用FIFO()、OPT()函数实现按不同替换算法调入页面进内存。
void FIFO()函数实现先进先出的替换算法调入页面。
void OPT()函数实现理想型替换算法。
3程序的主要模块说明3.1 control类封装内存管理3.1.1 FIFO替换算法实现伪函数void control::FIFO(){control::init(); 初始化页表等do{if(当前页在内存)else(当前页不在内存,直接加载进入物理块){缺页累积;加载当前页进入内存;修改页表置当前页在页表的是否在内存标志为1。
将该页在内存的位置对应。
}}while(内存物理块没有加载满);//内存物理块已经加载满了;for(剩下的页面循环){if(当前页在内存)else(当前页不在内存){缺页累积。
替换页面;修改页表置当前页在页表的是否在内存标志为1。
将该页在内存的位置对应。
利用算法得到下次替换的物理块号。
}}输出缺页次,缺页率,淘汰页面次序。
}3.1.2 OPT替换算法实现伪函数void control::OPT(){control::init();//初始化页表等for(对每个页表循环处理){for(检查每个物理块){if (如果该页在内存物理块中)置判别标志为1}if(如果该页不在内存,并且物理快放满){缺页累加并权值数组每个记录元素清零for(物理块每个元素检查){for(从该页后面的那个页开始计算权值)权值累加;}得到最大权值所在的物理块,即是下次需要替换的页替换该页,加入内存}if(该页不在内存,并且内存物理块没有满){缺页累加直接加载进内存}}输出缺页次、缺页率和淘汰页号次序。
}3.2 main函数利用页式管理control类建立一个对象,来实现FIFO、OPT。
4使用说明及运行分析4.1使用说明及运行运行程序根据提示输入调入页面数和可使用的物理块数,再选择是用户输入还是计算机随机产生页面号。
观察页面调度过程,处理完各页面后,统计并显示缺页次数、缺页率和淘汰页面号次序。
4.2测试实例和运行结果4.2.1 FIFO算法输入给定的页面数:10输入给作业分配内存的物理块数:3随机生成页面请求序列,如图2:5 7 3 8 8 0 5 4 5 2图2运行结果如图3 图34.2.2 OPT算法输入给定的页面数:10输入给作业分配内存的物理块数:3随机生成页面请求序列,如图4:7 8 2 6 7 8 1 5 6 5图4运行结果如图5 图54.3结论与分析从运行结果看出程序能满足模型设计的要求,提示用户对请求序列的大小和可用内存数量进行限制,并提示用户输入请求序列号,或系统随机生成序列,按照不同的替换算法处理并且显示请求页面的调入和替换情况。