页面置换算法的模拟实现二.docx
- 文档编号:18380288
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:14
- 大小:76.53KB
页面置换算法的模拟实现二.docx
《页面置换算法的模拟实现二.docx》由会员分享,可在线阅读,更多相关《页面置换算法的模拟实现二.docx(14页珍藏版)》请在冰点文库上搜索。
页面置换算法的模拟实现二
页面置换算法的模拟实现二
专业班级:
计算机
学生姓名:
张三
学号:
指导教师:
日期:
一、设计目的2
二、设计题目2
2.1设计内容2
2.2设计要求2
三、相关知识2
四、设计过程3
4.1OPT(最佳置换算法)3
4.2LFU4
五、设计思想5
六、完整代码5
七、实验结果12
八、总结..…14
九、参考文献14
一、设计目的操作系统是计算机教学中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。
操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。
一个精心设计的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。
由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。
要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。
进一步巩固和复习操作系统的基础知识。
培养学生结构化程序、模块化程序设计的方法和能力。
提高学生调试程序的技巧和软件设计的能力。
提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
二、设计题目:
页面置换算法模拟程序
2.1设计内容
根据设计要求实现对页面置换算法的模拟
2.2设计要求
设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率。
用C语言实现,要求设计主界面以灵活选择某算法,且以下算法都要实现
1.最佳淘汰算法(OPT)
2.最少访问页面算法(LFU)
三.相关知识:
3.1虚拟存储器的引入:
局部性原理:
程序在执行时在一较短时间内仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域,它主要表现在以下两个方面:
时间局限性和空间局限性。
3.2虚拟存储器的定义:
虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
3.3虚拟存储器的实现方式:
分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页面形式虚拟存储系统。
请求分段系统,它是在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。
四.设计过程
4.1OPT(最佳置换算法)
设计原理:
需要进行页面置换,把内存中以后一段时间都不使用或是使用时间离现在最远的页面换出。
流程图
4.2
LFU页面置换算法
内存数据初始化,物理块0 time[m]=m+1 五.设计思想: 选择置换算法,先输入所有页面号,为系统分配物理块,依次进行置换: OPT基本思想: 是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。 数组next[mSIZE]记录物理块中对应页面的最后访问时间。 每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。 【特别声明】若物理块中的页面都不再使用,则每次都置换物理块中第一个位置的页面。 LFU基本思想: LFU即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。 但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。 六.完整代码 #include #include #include /*全局变量*/ intqueye=O;〃记录缺页次数 intmSIZE;/*物理块数*/ intpSIZE;/*页面号引用串个数*/ staticintmemery[1O]={O};/*物理块中的页号*/ staticintpage[1OO]={O};/*页面号引用串*/ staticinttemp[1OO][1O];/*辅助数组*/ /*载入数据*/ voiddownload() { printf("\nFinish.\n载入成功,按任意键进入置换算法选择界面: >>>");getch(); } /*显示设计者信息*/ voiddesignBy() { printf("课题: 页面置换算法\n"); printf("学号: 2O1112O2O75\n"); printf("姓名: 周涛\n"); } voidbegin() { for(inti=0;i<100;i++) for(intj=0;j<10;j++) { memery[j]=-1;temp[i][j]=-1; } } voidprint(unsignedintt) { inti,j,p;for(p=0;p {printf("%d",page[p]); }printf("\n");for(j=0;j for(i=0;i {if(temp[i][j]==-1)printf(""); elseprintf("|%d|",temp[i][j]); }printf("\n"); }; printf("\n"); printf("缺页次数: %d\t\t",queye); printf("缺页率: %d/%d\n",queye,pSIZE);printf("置换次数: %d\t\t",t); printf("访问命中率: %d%%\n",(pSIZE-queye)*100/pSIZE);printf("\n"); } /*最佳置换算法*/voidOPT() {begin();queye=0; intnext[10]={0};/*记录下一次访问时间*/inti,j,l,m; intt=-1,n=-1; intmax;/*记录换出页*/ intcount=0;/*记录置换次数*/for(i=0;i { for(j=0;j if(memery[j]==-1) { t=j;break; } }for(j=0;j {if(memery[j]==page[i])//找到相同物理块,{ n=j; } } 次访 if(t==-1)//说明没有空闲物理块找到/*得到物理快中各页下问时间*/ { for(m=0;m { for(l=i+1;l next[m]=l; } /*计算换出页*/max=next[0]>=next[1]? 0: 1;for(m=2;m if(n==-1)//没有相同物理块 { if(t! =-1)//而且有空闲物理块 { memery[t]=page[i];t=-1; for(j=0;j temp[i][j]=memery[j];queye++; } else/没有空闲物理块 {memery[max]=page[i];count++;for(j=0;j } } else//有相同物理块 { n=-1; } }print(count); 数分界 } /********************************** voidLFU() { begin(); queye=0; intflag[10]={0};/*记录页面的访问次数*/ inti,j,m; intt=-1,n=-1; intmin; intcount=0;/*记录置换次数*/ for(i=0;i { for(j=0;j if(memery[j]==-1) { t=j;break; } } for(j=0;j { if(memery[j]==page[i])//找到相同物理块, {n=j;flag[j]++; } }if(t==-1)//说明没有空闲物理块找到 { min=flag[0] 1: 0; for(m=2;m } if(n==-1) { if(t! =-1)//而且有空闲物理块{memery[t]=page[i];t=-1; for(j=0;j temp[i][j]=memery[j];queye++; } else { memery[min]=page[i];count++; for(j=0;j temp[i][j]=memery[j];queye++; } } else { n=-1; } }print(count); } 函数分界 voidmain() { inti,k,code;intflag1,flag2; //system("color0A"); designBy(); printf("请按任意键进行初始化操作\n"); printf(">>>"); getch(); system("cls"); //system("color0B"); do {printf("请输入物理块的个数(M<=10): ");scanf("%d",&mSIZE); flag1=0; if(mSIZE>10||mSIZE<0) { printf("输出错误! ! ! ! 请重新输入\n");flag1=1;} }while(flag1==1); do { printf("请输入页面号引用串的个数(P<=100): ");scanf("%d",&pSIZE); flag2=0; if(pSIZE<0||pSIZE>100) { printf("输出错误! ! ! ! 请重新输入\n"); flag2=1; } }while(flag2==1); printf("请依次输入页面号引用串\n");for(i=0;i download();system("cls"); //system("color0E"); do{ puts("输入的页面号引用串为: ");for(k=0;k { printf("%d",page[k]); } printf("*************************\n"); printf("*请选择页面置换算法: \t\t\t*\n"); printf("*\n"); printf("*1.最佳(OPT)2.最少使用(LFU)3.退出! ! \n"); printf("*\n"); printf("请选择操作: []\b\b"); scanf("%d",&code);switch(code) { case1: OPT(); break; case2: LFU(); break; case3: system("cls");//system("color0A"); designBy();/*显示设计者信息后退出*/ printf("谢谢使用页面置换算法演示器! \n"); exit(0); default: printf("输入错误,请重新输入: "); } printf("按任意键重新选择置换算法: >>>"); getch(); system("cls"); }while(code! =4); getch(); } 七.实验结果 运行环境——VisualC++6.0 1.按任意键进行初始化: 2.载入数据: 3.进入置换算法选择界面: 4.两种算法演示结果: 八.总结 通过这次课程设计,不仅让我了解了两种页面置换算法,即OPT(最 佳置换)算法、LFU(最不经常使用)算法。 同时使我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握。 通过努力,两个页面置换算法程序都已经完成。 让我们不但对专业知识有了更深的理解,更使的自己认识到实践的重要性,理论、实践相结合才能达到很好的学习效果,特别是程序语言的学习。 九.参考文献 1.谭浩强.《C语言程序设计》.清华大学出版社,2005.11 2. 西安电子 《操作系统实验教程》张丽芬,刘利雄,王全玉编著 3.汤小丹,梁红兵,哲凤屏,汤子瀛.《计算机操作系统》 科技大学出版社,2007.5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面 置换 算法 模拟 实现