1、页面置换算法操作系统课程设计报告题目: 页面置换算法 院 系:班 级: 姓 名学 号: 指导教师 页面置换算法设计报告一、概述通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。 二、设计的基本概念和原理基于一个虚拟存储区和内存工作区,设计下述算法并计算访问命中率。 1、基本概念1、先进先出的算法(FIFO)2、最近最久未使用算法(LRU)3、缺页次数:置换页面的次数4、缺页率=置换页面的次数/总页面2、基本原理1、先进先出的算法(FIFO):优先淘汰最早进入的页面,亦即在内存中驻
2、留时间最久的页面。2、最近最久未使用算法(LRU):选择最近最长时间未访问过的页面予以淘汰。三、总体设计数据结构:const int DataMax=100;const int BlockNum = 10;int DataShowBlockNumDataMax; / 用于存储要显示的数组bool DataShowEnableBlockNumDataMax; / 用于存储数组中的数据是否需要显示int DataDataMax; / 保存数据int BlockBlockNum; / 物理块int countBlockNum; / 计数器int N ; / 页面个数int M;/最小物理块数int
3、ChangeTimes;void DataInput(); / 输入数据的函数void DataOutput();void FIFO(); / FIFO 函数void LRU(); / LRU函数算法流程:(1)请输入最小物理块数(2)请输入页面的个数(3)请输入页面访问序列:(4)菜单选择算法流程图: 四、详细设计#include #include using namespace std;const int DataMax=100;const int BlockNum = 10;int DataShowBlockNumDataMax; / 用于存储要显示的数组bool DataShowEna
4、bleBlockNumDataMax; / 用于存储数组中的数据是否需要显示int DataDataMax; / 保存数据int BlockBlockNum; / 物理块int countBlockNum; / 计数器int N ; / 页面个数int M;/最小物理块数int ChangeTimes;void DataInput(); / 输入数据的函数void DataOutput();void FIFO(); / FIFO 函数void LRU(); / LRU函数/*int main() DataInput(); int menu; while(true) cout* 菜单选择 *en
5、dl; cout*endl; cout* 1-FIFO *endl; cout* 2-LRU *endl; cout* 0-EXIT *endl; cout*menu; switch(menu) case 1: FIFO(); break; case 2: LRU(); break; default: break; if(menu!=1&menu!=2&menu!=3) break; /*/void DataInput() ifstream myfile (a.txt); if(!myfile) cout Unable to open myfile; coutM; coutN; cout请输入
6、页面访问序列:endl; for(int i=0; iDatai;void DataOutput() int i,j; for(i=0; iN; i+) / 对所有数据操作 coutDatai ; coutendl; for(j=0; jM; j+) cout ; for(i=0; iN; i+) / 对所有数据操作 if( DataShowEnableji ) coutDataShowji ; else cout ; coutendl; cout缺页次数: ChangeTimesendl; cout缺页率: ChangeTimes*100/N%endl;void FIFO() int i,j
7、; bool find; int point; int temp; / 临时变量 ChangeTimes = 0; for(j=0; jM; j+) for(i=0; iN; i+) DataShowEnableji = false; / 初始化为false,表示没有要显示的数据 DataShowji=-1; Blockj=-1; for(i=0; iM; i+) counti = 0; for(i=0; iN; i+) / 对有所数据操作 / 增加count for(j=0; jM; j+) countj+; coutcountj ; coutendl; find = false; / 表示
8、块中有没有该数据 for(j=0; j M ) / 因为i是从0开始记,而M指的是个数,从1开始,所以i+1 /获得要替换的块指针 temp = 0; for(j=0; jM; j+) if( temp countj ) temp = countj; point = j; / 获得离的最远的指针 else point = i; / 替换 Blockpoint = Datai; countpoint = 0; / 更新计数值 / 保存要显示的数据 for(j=0; jM; j+) DataShowji = Blockj; DataShowEnableiM?(j=i?j:i):ji = true;
9、 / 设置显示数据 / 输出信息 cout endl; cout endl; DataOutput();void LRU() int i,j; bool find; int point; int temp; / 临时变量 ChangeTimes = 0; for(j=0; jM; j+) for(i=0; iN; i+) DataShowEnableji = false; / 初始化为false,表示没有要显示的数据 DataShowji=-1; Blockj=-1; / 初始化为false,表示没有要显示的数据 for(i=0; iM; i+) counti = 0 ; for(i=0; i
10、N; i+) / 对有所数据操作 / 增加count for(j=0; jM; j+) countj+; find = false; / 表示块中有没有该数据 for(j=0; j M ) / 因为i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1 /获得要替换的块指针 temp = 0; for(j=0; jM; j+) if( temp countj ) temp = countj; point = j; / 获得离的最远的指针 else point = i; / 替换 Blockpoint = Datai; countpoint = 0; / 保存要显示的数据 for(j
11、=0; jM; j+) DataShowji = Blockj; DataShowEnableiM?(j=i?j:i):ji = true; / 设置显示数据 / 输出信息 cout endl; cout endl; DataOutput();5、测试与数据分析测试数据:3207 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 16、完成的情况、简要的使用说明完成情况:编写了先进先出的算法(FIFO)、最近最久未使用算法(LRU),得到了正确的结果使用说明:根据提示输入数据,可以得到书上的结果。7、结果分析运行程序选择1结果如下:运行程序选择2结果如下:8、总结在设计页
12、面置换程序的过程中,我遇到过许多问题,可是也学到了很多东西。本程序的设计实现主要是用C+语言实现,通过对程序算法的设计优化、输出显示的格式设计、输入过程中的异常处理等一些设计过程中的问题的考虑解决,在C+学习上也有了很大的进步。程序设计过程中开始遇到的最大的问题是算法的结构设计问题,课本上只给了设计要求及简单的算法,要真正实现还需要考虑很多方面。在算法的数据结构设计上考虑了很长时间。在程序设计中先后参考了很多网络资料,也参考了一些别人写的的程序,对一些算法的优越性等也作了一些考虑。此外考虑最多的就是异常错误处理的设计。一个好的程序必须能在各种环境下都有其相应的处理方式。C+语言明显要比c语言好
13、很多,其输入输出流就要比c的输入输出好用很多.其次就是函数的重载,让我的程序代码减少了很多。方便了设计。这次课程设计时间很紧,而且考试与课程设计夹杂在一起,所以选择了一个较为简单的课题,但是对于cpu进程调度算法还是认真的看了下,发现时间片轮转算法实现起来不难,最大的难点是进程排队非常麻烦,需要在执行过程中个动态的变化,动态的接受新资源的提交,想要模拟出来难度会非常大。所以请老师谅解。谢谢老师的指导。接下来还有考试,我要加油!九、参考资料 1 汤子瀛 梁红兵 哲凤屏 汤子灜.计算机操作系统(第三版).西安:西安电子科技大学出版社,2007.5. 2 谭浩强. C+面向对象程序设计.北京:清华大学出版社,2006.01.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1