请求页式管理缺页中断模拟设计--LRU、OPT
- 格式:doc
- 大小:307.00 KB
- 文档页数:14
课程设计题目请求页式管理缺页中断模拟设计--LRU、OPT 学院计算机科学与技术学院专业班级姓名指导教师吴利军2013 年 1 月16 日课程设计任务书学生姓名:指导教师:吴利军工作单位:计算机科学与技术学院题目: 请求页式管理缺页中断模拟设计--LRU、OPT初始条件:1.预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存储管理等概念,并体会和了解缺页和页面置换的具体实施方法。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.实现指定淘汰算法。
能够处理以下的情形:⑴能够输入给作业分配的内存块数;⑵能够输入给定的页面,并计算发生缺页的次数以及缺页率;⑶缺页时,如果发生页面置换,输出淘汰的页号。
2.设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日请求页式管理缺页中断模拟设计----LRU、OPT1 设计目的与功能1.1 设计目的巩固并加深对虚拟存储器、请求页式存储管理等概念的理解,掌握请求页式管理中的置换算法的基本思想。
并针对LRU(最近最久未使用页面置换算法),以及OPT(理想型淘汰算法)两种算法,利用高级语言,设计出相应的模拟程序。
结合设计的程序,在理论联系实际的基础上,分析各个页面置换算法的优缺点。
以及在对课程的整体把握上,提升对操作系统这门课程的全面认识。
1.2 设计功能本次课程设计需要实现LRU和OPT两种置换算法。
能够实现以下功能:1)能够输入给作业分配的内存块数;2)能够输入给定的页面,并计算发生缺页的次数以及缺页率;3)缺页时,如果发生页面置换,输出淘汰的页号。
2 设计需求分析2.1 需求分析2.1.1 请求页式管理的实现请求页式管理是在静态页式管理的基础上发展起来的,它允许只装入部分页面的程序和数据,便启动运行。
此后,再通过调页功能和页面置换功能,陆续把即将要运行的页面调入内存,同时把暂时不运行的页面换出到外存上,置换时以页面为单位。
为了能实现请求调页和置换功能,系统必须提供必要的硬件支持和相应的软件。
其中硬件支持包括:1)请求分页的页表机制,它是在纯分页的页表机制上增加若干项而形成的,作为请求分页的数据结构;2)缺页中断机构,当要访问的页面尚未调入内存时,便产生一缺页中断,以请求OS将所缺的页调入内存;3)地址变换机构,它同样是在纯分页地址变换机构的基础上形成的。
2.1.2 置换算法分析请求页式管理中的置换算法在内存中没有空闲页时被调用,它的目的是选出一个被淘汰的页面。
如果内存中有足够的空闲页面存放调入的页,则不必使用置换算法。
本次设计使用最近最久未使用页面置换算法(least recently used,LRU)和理想型淘汰算法(optional replacement algorithm,OPT)。
LRU置换算法:最近最久未使用页面置换算法(least recently used,LRU),该算法的基本思想是:当需要淘汰某一页时,选择离当前时间最近的一段时间内最久没有使用过的页先淘汰。
该算法的主要出发点是,如果某页被访问了,则它可能马上还要被访问,或者如果某页很长时间未被访问,则它在最近一段时间也不会被访问。
OPT置换算法:理想型淘汰算法(optional replacement algorithm,OPT),该算法淘汰在访问串中将来再也不出现的或者是在离当前最远的位置上出现的页,这样淘汰掉该页将不会造成因需要访问该页又立即把它调入的现象。
这种算法难以实现,因为它要求必须预先知道每一个进程的访问串。
2.2 数据结构及功能框图- - - - - - - - - - 基本数据变量说明- - - - - - - - - - - - -int input; //输入的页面数int num; //内存块允许装入页面数int *in; //准备调入的页面序列int *memory; //用来记录进入内存的页面信息struct page{int Pnumber; //页面的页号int Mnumber; //在内存中对应的块号int stayin; //是否在内存中};page Ptotal[N]; //对N个页面进行操作- - - - - - - - - - - 基本操作的函数原型说明- - - - - - - - - - - - -void LRU(); //实现LRU算法的函数void OPT(); //实现OPT算法的函数请求页式管理实现过程3 源程序的主要部分3.1 源程序简介本次设计中LRU以及OPT算法中页面置换的思想,分别对照页框的内容,向前查找最久未被使用的页面号和向后查找最后被使用的页面号,将其替换之。
在设计的思想上可以转化为以当前即将调入的页面为中心,LRU为向前查找离中心最远的页号,而OPT为向后查找离中心最远的页号。
3.2 源程序核心代码3.2.1 main函数代码main函数实现对各输入数据及待数据结构的初始化,以及通过选择来调用LRU或OPT算法。
伪代码如下:int main(){ ……//页号、块号、页面顺序的输入,以及初始化等工作。
while(true){ ……//部分全局变量的初始化工作,每次循环需重新开始char chose;cout<<"请您选择:1、LRU算法"<<endl;cout<<" 2、OPT算法"<<endl;cout<<" 3、退出"<<endl;cout<<"*********************************************"<<endl;cin>>chose;if(chose!='1'&&chose!='2')break;switch(chose){case '1':LRU();break;case '2':OPT();break;}cout<<"*********************************************"<<endl;}}3.2.2 LRU及OPT函数代码LRU和OPT的主要思想有许多共同之处,所以通过宏定义,来实现程序的共同功能。
程序中都是通过LO宏来实现的,区别在于传递的参数不同,即LRU函数调用getLRU()子函数。
而OPT函数调用getOPT()函数。
void LRU(){cout<<"LRU替换算法过程如下:"<<endl;LO(LRU); //通过LO宏,传递LRU给get##wname(int page),即getLRU(int page) }void OPT(){ cout<<"OPT替换算法过程如下:"<<endl;LO(OPT); ////通过LO宏,传递OPT给get##wname(int page),即getOPT(int page) }3.2.3 LO(wname)宏的代码LO宏是用来对LRU和OPT的置换进行公处理的,即在内存块未满,或者不需要发生置换时两者的代码是相同的,而唯一不同在于缺页中断处理函数,getLRU(int page)或者getOPT(int page)。
所以,通过宏定义,把不同的代码作为参数传递,来实现不同函数的功能。
伪代码如下:#define LO(wname)\int i,missTime=0,replace=0,full=0,page=0;\//i 为循环控制变量,missTime为缺页次数//replace代表置换的页框号full为控制变量,page为页面数do {\……//实现块未满时的页面分配,LRU和OPT相同}while(full!=num);\for( i=page;i<input;i++){\if(Ptotal[in[i]].stayin ==1){\cout<<in[i]<<"号页已在页框中,"<<endl;\}\else{missTime++;\replace=get##wname(i);\ //根据传递的参数不同,调度不同的函数,返回页框号……//进行页面替换}\cout<<endl<<"经统计:缺页次数:"<<missTime<<"次"<<"缺页率"<<double(missTime)/input*100<<"%"<<endl;\ //对缺页率进行输出3.2.4 getLRU和getOPT函数代码getLRU和getOPT函数是一种搜索算法,返回将要被替换的页框号,页框中的内容即为被替换的页号。
两个函数有一定的相似处,即getLRU函数为向前搜索,而getOPT为向后搜索,所以程序中用到get(symlx,symbly,symblz)宏,伪代码如下:int getLRU(int page){get(-,>=0,<); //get宏,传递的参数为-,>=0,<等return getNum; //返回页框号}int getOPT(int page){ get(+,<input,>); //get宏,传递的参数为+,<input,>等return getNum; //返回页框号}3.2.5 get(smblx,smbly,smblz)宏的代码getLRU和getOPT的搜索算法在思想上相似,即前者向前搜索页第一次出现的申请序号,而后者是向后搜索接下来第一次出现的申请序号,所以用get宏来对相同代码进行公操作,伪代码如下:#define get(smblx,smbly,smblz)\for(i=0;i<num;i++){\for(int j=0;j<10;j++){\if(Ptotal[j].Mnumber==i){\for(int t=page##smblx 1;t##smbly;t##smblx##smblx){\ //宏填充部分,填充内容如上……//向前或后找出该页第一次申请的序号for(i=0;i<num;i++){\if(get[i]##smblz get[getNum])\ //返回将要被置换的页号,存入到getNUM中getNum=i;\ }\4 测试4.1测试用例设计请求分页管理系统中,有一用户作业,它一次要访问的页的序列是:2 3 2 1 5 2 4 5 3 2 5 2 共12页,若分配给作业可以使用的主存空间供3个物理块,则LRU和OPT的置换算法的页面分配如下。