烟台大学操作系统课程设计页面置换算法

上传人:F****n 文档编号:100246982 上传时间:2019-09-22 格式:DOCX 页数:13 大小:589.52KB
返回 下载 相关 举报
烟台大学操作系统课程设计页面置换算法_第1页
第1页 / 共13页
烟台大学操作系统课程设计页面置换算法_第2页
第2页 / 共13页
烟台大学操作系统课程设计页面置换算法_第3页
第3页 / 共13页
烟台大学操作系统课程设计页面置换算法_第4页
第4页 / 共13页
烟台大学操作系统课程设计页面置换算法_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《烟台大学操作系统课程设计页面置换算法》由会员分享,可在线阅读,更多相关《烟台大学操作系统课程设计页面置换算法(13页珍藏版)》请在金锄头文库上搜索。

1、烟台大学计算机与控制工程学院计算机操作系统课程设计报告题目:页面置换算法班级 计165姓名 王承乾学号 4日期 2018-7-3指导教师 翟一鸣实验地点 计算机与控制工程学院实验室一、实验内容页面置换算法:淘汰掉内存中的某些页为必须进入内存的页面腾出空间的策略。最优算法(OPT):从内存中移出以后不再使用的页面,如果没有这样的页面,则选择以后最长时间内不需要访问的页面。先进先出算法(FIFO):总是先淘汰那些驻留在内存时间最长的页面,即先进入内存的页面先被置换掉。最近最久未使用算法(LRU):当需要置换一页时,选择最近一段时间最久未使用的页面予以淘汰。设计程序模拟先进先出(FIFO)置换算法,

2、最佳(OPT)置换算法和最近最少用(LRU)置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。程序的设计主要是测试先进先出FIFO,最佳置换OPT和最近最少用LRU页面置换算法的效率以及过程。二、实验目的使用系统函数以及c语言的相关语句实现页面置换的三个算法三、实验环境开发环境:Windows编译环境:gcc,g+开发软件:Codeblocks 16.01四、设计思路和流程图(一)程序总体控制(二)FIFO

3、算法实现(三)OPT算法实现(四)LRU算法实现五、结论左上:FIFO和数据输入右上:OPT算法左下:退出右下:LRU算法六、感想通过对页面置换算法模拟程序的程序设计,让我对虚拟页式存储管理有了更深的了解。刚开始拿到这个题目觉得很难,不知道该怎么下手,因为是自己第一次用C语言编写操作系统程序。当时搞懂了页面置换的思想以后,对编程就有了一定的思路。经过几天的编写,程序也最终编写出来了。但是却遇到了许多困难,程序的调试也出现了许多的错误。经过几次上机操作,在老师的指导和帮助下,程序最终还是完成了。通过这次的程序设计,让我对C语言有了更深一步的了解和认识,编程能力也有了提高,我认到学好计算机要重视实

4、践操作,只有真正动手了才知道自己还有那些不足之处。老师的耐心指导是我这次程序设计得以成功完成的重要筹码,如果没有老师的知道,单凭我一人之力肯定无法完成的。所以,在此,我要感谢我的知道老师。然后我们组与组之间的相互交流也是我成功完成这次设计的重要原因。总之,团结就是力量。思考才能促人进步。七、源代码/6,5,4,3,2,1,5,4,3,6,5,4,3,2,1,6,5#include#define pageNum 17#define memoryNum 4typedef struct itemint num;/页号int time;/等待时间,LRU算法必须变量Pro;void print(Pro

5、 *page);/打印当前主存中的页面int Search(int num,Pro *memory);/在页面集memory1中查找num1,如果找到,返回其在memory1中的下标,否则返回-1void fifo();void opt();void lru();int i;int curmemory;/当前调入内存中的页面个数int misscount;/缺页次数double missRate;/缺页率char c;/得到用户的输入字符,来选择相应的置换算法Pro page1000; /页面结构体Pro memory1000; /内存结构体int main() printf(系统分配给作业的

6、主存中的页面数:%d 输入内存页面数:%dn,pageNum,memoryNum);for (i=0; ipageNum; i+)printf(tip %d page is:, i);scanf(%d,&pagei.num);pagei.time = 0;/等待时间开始默认为0while(1) for (i=0; imemoryNum; i+)/初始化内存中页面memoryi.num=-1;/页面为空用-1表示memoryi.time=-1;printf(*n);printf(*f:FIFO*n);printf(*o:OPT*n);printf(*l:LRU*n);printf(*e:退出界面

7、*n);printf(*请选择操作,输入f,o,l,e*n);printf(*n);getchar();scanf(%c, &c);curmemory=0;if(c=f)/FIFO页面置换 fifo();else if(c=o)/OPT页面置换算法 opt();else if(c=l)/LRU页面置换算法 lru();else if(c=e) return 0; else printf(请再次输入n);return 0;void print(Pro *memory)/打印当前的页面int j;for (j = 0; jmemoryNum; j+)/将内存中的页面全部读出,共4页 printf(

8、%d , memoryj.num); printf(n);/在页面集memory1中查找num,如果找到,返回其在memory中的下标,否则返回-1int Search(int num,Pro *memory)int j;for (j=0; jmemoryNum; j+)if (num = memoryj.num) /如果在内存中找到该页面,返回内存的位置标号return j;return -1; /如果没找到的话,返回-1void fifo() misscount=0; printf(FIFO页面缺页情况: n); for(i=0; ipageNum; i+) /判断17次 if (Sear

9、ch(pagei.num, memory)0) /若在内存中没有找到该页面,则search函数返回-1 misscount+; /缺页次数增加 memorycurmemory.num=pagei.num; /将当前内存中页面修改,读入页面流想要进入内存的页面 print(memory); /打印一条换页的内存记录 printf(发生缺页中断n); curmemory=(curmemory+1)%memoryNum; /找出最先进入内存的页面吗,cur指的是内存的位置 missRate=(float)misscount/pageNum; printf(缺页次数:%d 缺页率: %.2fn, mi

10、sscount, missRate);void opt() misscount = 0; /缺页数置0 curmemory = 0; /当前指针指向内存第0块 printf(OPT页面缺页情况: n); for (i=0; ipageNum; i+) /遍历所有的页面流 if(Search(pagei.num, memory)0)/若在内存中没有找到该页面 /找出未来最长时间内不再被访问的页面 int tem; int opt = 0; for (int k=0; kmemoryNum; k+) if (memoryk.num=-1) curmemory=k; break; tem=0; /页面k在未来tem时间内不会出现 int j; for (j=i+1; jopt) opt = tem; curmemory = k; break; else tem+; if (j=pageNum) opt=tem; curmemory=k; break; misscount+; m

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号