




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
通达学院课程设计I报告(2018/2019学年 第2学期)题 目:页 面 置 换 算 法 专 业计算机科学与技术学 生 姓 名班 级 学 号指 导 教 师指 导 单 位计算机学院日 期2019.5.13-5.23指导教师成绩评定表学生姓名班级学号专业计算机科学与技术评分内容评分标准优秀良好中等差平时成绩认真对待课程设计,遵守实验室规定,上机不迟到早退,不做和设计无关的事设计成果设计的科学、合理性功能丰富、符合题目要求 界面友好、外观漂亮、大方程序功能执行的正确性程序算法执行的效能设计报告设计报告正确合理、反映系统设计流程文档内容详实程度文档格式规范、排版美观验收答辩简练、准确阐述设计内容,能准确有条理回答各种问题,系统演示顺利。评分等级指导教师简短评语指导教师签名日期备注评分等级有五种:优秀、良好、中等、及格、不及格页面置换算法一、 课题内容和要求通过实现页面置换的四种算法,理解虚拟存储器的概念、实现方法,页面分配的总体原则、进程运行时系统是怎样选择换出页面的,并分析四种不同的算法各自的优缺点是哪些。以下算法都要实现:1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。4) 最不经常使用算法(LFU)设计要求:1、编写算法,实现页面置换算法;2、针对内存地址引用串,运行页面置换算法进行页面置换;3、算法所需的各种参数由输入产生(手工输入或者随机数产生);4、输出内存驻留的页面集合,缺页次数以及缺页率;二、需求分析通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法及最不经常使用算法LFU的实现方法。通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换的缺页次数和缺页率,及每次缺页时物理块中存储!(1)输入的形式页面序列物理块数 、页面数 、页面序列(2)输出的形式驻留页面集合 、 缺页数 、 缺页率注:如果命中用 * 表示,为空用 -1 表示(3)程序所能达到的功能模拟先进先出FIFO、最佳置换OPI、最近最久未使用LRU页面置换算法和最不经常使用算法LFU的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。三、概要设计 说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。int mSIZE; /*物理块数*/int pSIZE; /*页面号引用串个数*/static int memery10=0; /*物理块中的页号*/static int page100=0; /*页面号引用串*/static int temp10010=0; /*辅助数组*/*置换算法函数*/void FIFO();void LRU();void OPT();void LFU();/*输出格式控制函数*/void print(unsigned int t);流程图如下:图1FIFO算法是最简单的页面置换算法。FIFO页面置换算法为每个页面记录了调到内存的时间,当必须置换页面时会选择最旧的页面。注意,并不需要记录调入页面的确切时间,可以定义一个数,来管理所有的内存页面。置换是队列的首个页面。然后加1,当这个数达到物理块数的值了,清零从头开始。LRU使用最近的过去作为不远将来的近似,那么可以置换最长时间没有使用的页。这种方法称为最近最少使用算法。LRU 置换将每个页面与它的上次使用的时间关联起来。当需要置换页面时,LRU选择最长时间没有使用的页面。这种策略可当作在时间上向后看而不是向前看的最优页面置换OPT是用一维数组page存储页面号序列,memery是存储装入物理块中的页面。数组next记录物理块中对应页面的最后访问时间。每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。若物理块中的页面都不再使用,则每次都置换物理块中第一个位置的页面。LFU是用一个一维数组time记录每个物理块被访问的次数,当物理块满且发生置换的时候,将最小的time数组上位置的数置换出来,如果一样就置换第一个数。四、详细设计 1、输出格式控制函数:void print(unsigned int t) int i,j,k,l; int flag; for(k=0;k=(pSIZE-1)/30;k+) /k为行数 for(i=30*k;(ipSIZE)&(i30*(k+1);i+) /开头字符串输出 if(i+1)%30=0)|(i+1)%30)&(i=pSIZE-1) printf(%dn,pagei); else printf(%d ,pagei); for(j=0;jmSIZE;j+) /历次置换情况输出 for(i=0;i=j) /物理块未占满的情况 printf( |%d|,tempij); else printf( | |); for(i=2+30*k;(ipSIZE)&(i30*(k+1);i+) for(flag=0,l=0;lmSIZE;l+) if(tempil=tempi-1l) flag+; if(flag=mSIZE) /*页面在物理块中*/ printf( |*|); else printf( |%d|,tempij); if(i%30=0) continue; printf(n); printf(-n); printf(缺页次数:%dtt,t); printf(缺页率:%.2f%n,(float)t/pSIZE*100); printf(-n);2、FIFO算法:void FIFO() int memery10=-1,-1,-1,-1,-1; int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/ for(i=0;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; if(k=mSIZE) /*如果不在物理块中*/ count+; /*计算换出页*/ memerymax=pagei; max+; if(max=mSIZE) max=0; for(j=0;jmSIZE;j+) tempij=memeryj; printf(FIFO算法:); print(count);3、LRU算法:void LRU() int memery10=-1,-1,-1,-1,-1; int flag10=0; /*记录页面的访问时间*/ int i,j,k,m,c=0; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/ for(i=0;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; else flagj=i; /*刷新该页的访问时间*/ if(k=mSIZE) /*如果不在物理块中*/ count+; /*计算换出页*/ if(memerymSIZE-1=0) memeryc=pagei; flagc=i; c+; else max=flag0flag1?0:1; for(m=2;mmSIZE;m+) if(flagmflagmax) max=m; memerymax=pagei; flagmax=i; /*记录该页的访问时间*/ for(j=0;jmSIZE;j+) tempij=memeryj; printf(LRU算法:); print(count);4、OPT算法:void OPT() int memery10=-1,-1,-1,-1,-1; int next10=0; /*记录下一次访问时间*/ int i,j,k,l,m,c=0; int max; /*记录换出页*/ int count=0; /*记录置换次数*/ for(i=0;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; if(k=mSIZE) /*如果不在物理块中*/ count+; if(memerymSIZE-1=0) memeryc=pagei; c+; else /*得到物理快中各页下一次访问时间,l最大的被替换*/ for(m=0;mmSIZE;m+) for(l=i+1;l=next1?0:1; for(m=2;mnextmax) max=m; memerymax=pagei; for(j=0;jmSIZE;j+) tempij=memeryj; printf(OPT算法:); print(count);5、LFU算法:void LFU() int memery10=-1,-1,-1,-1,-1; int time10=0; /*记录访问次数*/ int i,j,k,l,m,c=0; int max; /*记录换出页*/ int count=0; /*记录置换次数*/ for(i=0;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; else timej+; if(k=mSIZE) /*如果不在物理块中*/ count+; if(memerymSIZE-1=0) memeryc=pagei; timec+; c+; else /*计算换出页,次数少的被置换*/ max=time0=time1?0:1; for(m=2;mmSIZE;m+) if(timemtimemax) max=m; memerymax=pagei; for(j=0;jmSIZE;j+) tempij=memeryj; printf(LFU算法:); print(count);五、测试数据及其结果分析测试数据:(1)页面个数:10最小物理块数:3页面序列:1 2 1 2 6 8 2 4 1 3(2)页面个数:20最小物理块数:3页面序列:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1数据一截图:图2图3数据二截图:图4图5六、调试过程中的问题(1)算法缺陷问题1、原来代码规定了前mSIZE个数据是直接放入数组的,但是通过多组数据的测试发现当前mSIZE个数据中有重复的数据时,算法并不能判定命中,而是判定缺页,这显然是错误的。于是重新思考数据放入问题,认为只有第一个数据可以直接放入,从第二个开始就要进行循环判断,于是对四项算法进行改进,加入一个物理块数组最后一个值是否为初始值的判断条件进行循环解决了问题。2、最初物理块数组的初始值是定为0,之前是通过判断物理块数组的最后一个值是否为初值判断是否进行置换的,但是当数据中有0值就会干扰这个判断条件,思考页面号为0也是客观存在的,所以这又是一个bug。然后我就令初值为-1,页面号为负当然是不可能的,可是当我把赋值0改为-1,再运行时,又出现两个算法计算出错。经过多次排查,我认为算法主体是正确的,最终发现是因为赋初始值出错的问题。因为赋0时,数组整体都为0,但赋-1时只是第一个数据是-1,而不是数组全体。这是一个低级错误,最后我通过对数组全体赋值-1解决了问题。(2)输出界面问题输出界面我是通过一个输出格式控制函数来控制,这方面的问题比较难以发现,因为输出结果出错,我一般对算法函数进行排查,忽略了输出控制函数。1、一开始如果命中我是用空格来代替,发现并不直观。于是我将空格改为 |*| ,这样既和数据集合统一了,观察也更加直观。还有就是物理块未被全部占用时,页面集合会有-1产生,虽说是正确的,但我觉得不太美观,于是我加了一段代码,把-1用 | | 代替,这样看上去就能知道物理块未被全部占用。2、当页面号数过大时,输出的页面集合缺失,经过查找错误,发现是换行控制条件有问题,经过增加换行的列数解决了这个问题。七、参考文献和查阅的资料1、/view/1277.html (C语言中文网)2、操作系统教程人民邮电出版社八、程序设计总结这个程序的主要思想就是要实现换页、怎么样输出淘汰的序列、计算缺页次数和缺页率。在程序中主要就是将在访问串中将来再也不出现的或是在离当前最远的位置上出现的页淘汰掉。当距离相等的时候就比较使用的次数,淘汰使用次数较少的那页。该过程共有四个页面置换算法函数及输出格式控制的函数,当主函数调用任意其中函数时来实现其算法。通过这次课程设计的实践,我能够熟练的掌握一些关于内存分配管理的一些算法。而在实现FIFO算法后,由于没能掌握LRU算法的过程导致实现时花了很多时间。在调试的过程中也出现的大多是关于内存分配和数组地址越界的问题,比如关于循环时各个数的递增,还有就是显示给个数组的内容等问题。就因为这些问题,多次造成了淘汰序列出错。在以后的实验中我会注意的。本次实验我也更加体会到模块化的重要性,当输出出错时,逐模块排查不仅提高了效率,也节省了精力。九、源代码附录#include #include int mSIZE; /*物理块数*/int pSIZE; /*页面号引用串个数*/static int memery10=0; /*物理块中的页号*/static int page100=0; /*页面号引用串*/static int temp10010=0; /*辅助数组*/*置换算法函数*/void FIFO();void LRU();void OPT();void LFU();/*输出格式控制函数*/void print(unsigned int t);void main() int i,k; system(color 0E); printf(请输入物理块数(M=10) :); scanf(%d,&mSIZE); printf(请输入页面号数(P=100):); scanf(%d,&pSIZE); puts(请依次输入页面号引用串(连续输入,无需隔开):); for(i=0;ipSIZE;i+) scanf(%1d,&pagei); system(cls); system(color 0F); FIFO(); LRU(); OPT(); LFU();void print(unsigned int t) int i,j,k,l; int flag; for(k=0;k=(pSIZE-1)/30;k+) /k为行数 for(i=30*k;(ipSIZE)&(i30*(k+1);i+) /开头字符串输出 if(i+1)%30=0)|(i+1)%30)&(i=pSIZE-1) printf(%dn,pagei); else printf(%d ,pagei); for(j=0;jmSIZE;j+) /历次置换情况输出 for(i=0;i=j) /物理块未占满的情况 printf( |%d|,tempij); else printf( | |); for(i=2+30*k;(ipSIZE)&(i30*(k+1);i+) for(flag=0,l=0;lmSIZE;l+) if(tempil=tempi-1l) flag+; if(flag=mSIZE)/*页面在物理块中*/ printf( |*|); else printf( |%d|,tempij); if(i%30 = 0) continue; printf(n); printf(-n); printf(缺页次数:%dtt,t); printf(缺页率:%.2f%n,(float)t/pSIZE*100); printf(-n);/*先进先出页面置换算法*/void FIFO() int memery10=-1,-1,-1,-1,-1; int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/ for(i=0;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; if(k=mSIZE) /*如果不在物理块中*/ count+; /*计算换出页*/ memerymax=pagei; max+; if(max=mSIZE) max=0; for(j=0;jmSIZE;j+) tempij=memeryj; printf(FIFO算法:); print(count);/*最近最久未使用置换算法*/void LRU() int memery10=-1,-1,-1,-1,-1; int flag10=0; /*记录页面的访问时间*/ int i,j,k,m,c=0; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/ for(i=0;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; else flagj=i; /*刷新该页的访问时间*/ if(k=mSIZE) /*如果不在物理块中*/ count+; /*计算换出页*/ if(memerymSIZE-1=-1) memeryc=pagei; flagc=i; c+; else max=flag0flag1?0:1; for(m=2;mmSIZE;m+) if(flagmflagmax) max=m; memerymax=pagei; flagmax=i; /*记录该页的访问时间*/ for(j=0;jmSIZE;j+) tempij=memeryj; printf(LRU算法:); print(count);void OPT() int memery10=-1,-1,-1,-1,-1; int next10=0; /*记录下一次访问时间*/ int i,j,k,l,m,c=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《幼儿教师招聘》考前冲刺测试卷包及参考答案详解【夺分金卷】
- 有用的企业面试题库及1套完整答案详解
- 教师招聘之《幼儿教师招聘》综合提升试卷及答案详解【新】
- 2025内蒙古呼伦贝尔陆港国际有限公司招聘递补笔试备考及答案详解(新)
- 教师招聘之《幼儿教师招聘》综合检测模拟卷及答案详解【夺冠系列】
- 2025呼伦贝尔农垦那吉屯农牧场招聘考试练习及答案详解(夺冠)
- 2025内蒙古呼伦贝尔陆港国际有限公司招聘递补笔试备考(含答案详解)
- 第四单元 可能性 巩固测试卷(含答案) 人教版五年级数学上册
- 投资协议书的标准格式
- 在线支付系统接口集成合作协议
- 甘肃省工程勘察设计收费指导标准2022版(全过程工程咨询)
- 《第1节 细胞是生命活动的基本单位》教学设计和导学案
- CRRT治疗原理、模式选择
- 植物的生物节律与生物钟
- 糖厂榨季安全培训课件
- 财务管理与能源管理
- 妊娠早期胎儿染色体非整倍体的无创产前检测主要内容
- 学生会文体部部门招新
- 工程经济学(第6版)全套教学课件
- 植物的生物钟与时间感知
- 盾构施工同步注浆及二次注浆方案
评论
0/150
提交评论