页面置换算法 FIFO NUR LRU LFU.docx
- 文档编号:30636139
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:19
- 大小:264.32KB
页面置换算法 FIFO NUR LRU LFU.docx
《页面置换算法 FIFO NUR LRU LFU.docx》由会员分享,可在线阅读,更多相关《页面置换算法 FIFO NUR LRU LFU.docx(19页珍藏版)》请在冰豆网上搜索。
页面置换算法FIFONURLRULFU
编号09
学生实习报告
2011~2012学年第一学期
实习类别
科研训练
学生姓名
某某某
专业
软件开发与测试
学号
0913117XX
指导教师
陈占芳
学院
软件学院
2011年12月
起止周
17~18
周数
2
实习地点
软件学院专业实验室
实训目的:
操作系统是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要的实践环节。
主要任务是实现操作系统和相关系统软件的设计,其中涉及进程创建,同步,进程间的通信,存储管理,文件系统等操作系统概念。
实训要求:
1)对需要上机完成的题目进行认真分析,列出实验具体步骤,写出符合题目要求的程序清单,准备出调试程序使用的数据。
2)以完整的作业包的形式提交原始代码、设计文档和可运行程序。
课程设计报告字数不少于2000字。
实训进度安排及主要内容:
第一周:
查阅资料、总体设计
第二周:
详细设计、文档编写
成绩:
指导教师/带队教师(签字)
年月日
目录
第一章概述-2-
第二章设计基本原理-3-
第三章总体设计-5-
3.1分析算法结构-5-
3.2算法流程图-6-
3.2.1FIFO页面置换算法-6-
3.2.2LRU页面置换算法-7-
3.2.3LFU页面置换算法-8-
第四章详细设计-9-
4.1main函数-9-
4.2FIFO函数-9-
4.3LRU函数-10-
4.4NUR函数-11-
4.5LFU函数-12-
4.6initialize主函数-13-
第五章测试-14-
第六章总结-16-
第七章参考文献-16-
第一章概述
设计任务:
请求页式管理是一种常用的虚拟存储管理技术。
本设计通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
通过随机数产生一个指令序列,共320条指令。
指令的地址按下述原则生成:
①50%的指令是顺序执行的;
②25%的指令是均匀分布在前地址部分;
③25%的指令是均匀分布在后地址部分。
实施方法:
①在[0,319]的指令地址之间随机选取一起点m;
②顺序执行一条指令;
③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′;
④顺序执行一条指令,其地址为m′+1;
⑤在后地址[m′+2,319]中随机选取一条指令并执行;
⑥重复上述步骤②~⑤,直到执行320次指令。
将指令序列变换成为页地址流
设:
①页面大小为1K;
②用户内存容量为4页到32页;
③用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]);
第10条~第19条指令为第1页(对应虚存地址为[10,19]);
┇
第310条~第319条指令为第31页(对应虚存地址为[310,319])。
按以上方式,用户指令可组成32页。
计算并输出下述各种算法在不同内存容量下的命中率。
先进先出的算法(FIFO);
最近最少使用算法(LRu);
最少访问页面算法(LFu);
最近最不经常使用算法(NUR)。
第二章设计基本原理
(1).请求页式存储管理的实现原理请求页式管理的基本原理是将逻辑地址空间分成大小相同的页,将存储地址空间分块,页和块的大小相等,通过页表进行管理。
页式系统的逻辑地址分为页号和页内位移量。
页表包括页号和块号数据项,它们一一对应。
根据逻辑空间的页号,查找页表对应项找到对应的块号,块号乘以块长,加上位移量就行成存储空间的物理地址。
每个作业的逻辑地址空间是连续的,重定位到内存空间后就不一定连续了。
(2).各种页面置换算法的实现思想FIFO算法总是淘汰最先调入主存的页面,即淘汰在主存中驻留时间最长的页面,认为驻留时间最长的页不再使用的可能性较大。
LRU算法淘汰的页面是最近一段时间内最久未被访问的那一页,它是基于程序局部性原理来考虑的,认为那些刚被使用过的页面可能还要立即被使用,而那些在较长时间内未被使用的页面可能不会立即使用。
LFU即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。
但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
算法提示:
1.命中率=1-页面失效次数∕页地址流长度
在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
2.随机数产生办法
关于随机数产生办法,Windwos系统提供函数srand()和rand(),进行初始化和产生随机数。
例如:
#include
srand((unsigned)time(NULL));
语句可初始化一个随机数;
a[o]=10*rand()/32767*319+1;
a[1]=10*rand()/32767*a[o];
┇
语句可用来产生a[0]与a[1]中的随机数。
第三章总体设计
3.1分析算法结构
3.2算法流程图
3.2.1FIFO页面置换算法
3.2.2LRU页面置换算法
3.2.3LFU页面置换算法
第四章详细设计
4.1main函数
intmain()
{
intS,i;
srand((int)time(NULL));
S=(int)rand()%320;
for(i=0;i { a[i]=S; a[i+1]=a[i]+1; a[i+2]=(int)rand()%320; a[i+3]=a[i+2]+1; S=(int)rand()%320; } for(i=0;i { page[i]=a[i]/10; offset[i]=a[i]%10; 4.2FIFO函数 voidFIFO(inttotal_pf) { inti,j; pfc_type*p; initialize(total_pf); busypf_head=busypf_tail=NULL; for(i=0;i { if(pl[page[i]].pfn==INVALID) { diseffect+=1; if(freepf_head==NULL) { p=busypf_head->next; pl[busypf_head->pn].pfn=INVALID; freepf_head=busypf_head; freepf_head->next=NULL; busypf_head=p; } p=freepf_head->next; freepf_head->next=NULL; freepf_head->pn=page[i]; pl[page[i]].pfn=freepf_head->pfn; if(busypf_tail==NULL) busypf_head=busypf_tail=freepf_head; else { busypf_tail->next=freepf_head; busypf_tail=freepf_head; } freepf_head=p; } } printf("%6.4f\t",1-(float)diseffect/320); } 4.3LRU函数 voidLRU(inttotal_pf) { intmin,minj,i,j,present_time; initialize(total_pf);present_time=0; for(i=0;i { if(pl[page[i]].pfn==INVALID) { diseffect++; if(freepf_head==NUL) { min=32767; for(j=0;j if(min>pl[j].time&&pl[j].pfn! =INVALID) { min=pl[j].time; minj=j; } freepf_head=&pfc[pl[minj].pfn]; pl[minj].pfn=INVALID; pl[minj].time=-1; freepf_head->next=NUL; } pl[page[i]].pfn=freepf_head->pfn; pl[page[i]].time=present_time; freepf_head=freepf_head->next; } else pl[page[i]].time=present_time; present_time++; } printf("%6.4f\t",1-(float)diseffect/320); 4.4NUR函数 voidNUR(inttotal_pf) { inti,j,dp,cont_flag,old_dp; pfc_type*t; initialize(total_pf); dp=0; for(i=0;i { if(pl[page[i]].pfn==INVALID) { diseffect++; if(freepf_head==NUL) { cont_flag=TRUE;old_dp=dp; while(cont_flag) if(pl[dp].counter==0&&pl[dp].pfn! =INVALID) cont_flag=FALSE; else { dp++; if(dp==total_vp) dp=0; if(dp==old_dp) for(j=0;j pl[j].counter=0; } freepf_head=&pfc[pl[dp].pfn]; pl[dp].pfn=INVALID; freepf_head->next=NUL; } pl[page[i]].pfn=freepf_head->pfn; freepf_head=freepf_head->next; } else pl[page[i]].counter=1; if(i%clear_period==0) for(j=0;j pl[j].counter=0; } printf("%6.4f\t",1-(float)diseffect/320); } 4.5LFU函数 voidLFU(inttotal_pf) { inti,j,min,minpage; pfc_type*t; initialize(total_pf); for(i=0;i {if(pl[page[i]].pfn==INVALID) {diseffect++; if(freepf_head==NULL) {min=32767; for(j=0;j {if(min>pl[j].counter&&pl[j].pfn! =INVALID) { min=pl[j].counter; minpage=j; } pl[j].counter=0; } freepf_head=&pfc[pl[minpage].pfn]; pl[minpage].pfn=INVALID; freepf_head->next=NULL; } pl[page[i]].pfn=freepf_head->pfn; pl[page[i]].counter++; freepf_head=freepf_head->next; } else pl[page[i]].counter++; } printf("%6.4f\n",1-(float)diseffect/320); } 4.6initialize主函数 voidinitialize(inttotal_pf) { inti; diseffect=0; for(i=0;i { pl[i].pn=i;pl[i].pfn=INVALID; pl[i].counter=0;pl[i].time=-1; } for(i=1;i { pfc[i-1].next=&pfc[i];pfc[i-1].pfn=i-1; } pfc[total_pf-1].next=NUL;pfc[total_pf-1].pfn=total_pf-1; freepf_head=&pfc[0]; } 第五章测试 运行程序,如图: 第六章总结 两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。 在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 在此感谢我们的陈占芳老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次课程设计的每个实验细节和每个数据,都离不开老师您的细心指导。 而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。 同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。 第七章参考文献 Windows程序设计人民邮电出版社 操作系统清华大学出版社 C程序设计谭浩强著清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面置换算法 FIFO NUR LRU LFU 页面 置换 算法