(完整word版)页面置换算法实验报告_第1页
(完整word版)页面置换算法实验报告_第2页
(完整word版)页面置换算法实验报告_第3页
(完整word版)页面置换算法实验报告_第4页
(完整word版)页面置换算法实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、综合性实验报告专业 年级班级:课程名称操作系统指导教师学号姓名实验地点实验时间项目名称页匍置换算法实验类型综合性一、实验目的1.学习常见的4种页面置换算法:最佳置换算法(OPT ,先进先出页面置换算 法(FIFO),最近最久未使用页面算法(LRU ,最少使用置换算法(LFU 。 2.编写函数并计算输出上述各种算法的命中率。二、总体设计(设计原理、设计方案及流程等)设计原理:OPT页面置换算法OPT所选择被淘汰的页面是已调入内存,且在以后永不使用的,或是在最长时间内不再被访问的页面。因此如何找出这样的页面是该算法的关键。可为每个页面设置一个步长变量,其初值为一足够大的数,对于不在内存的页面,将其

2、值重置为零,对于位于内存的页面,其值重置为当前访问页面与之后首次出现该页面时两者之间的距离,因此该值越大表示该页是在最长时间内不再被访问的页面,可以选择其作为换出页面。FIFO页面置换算法FIFO总是选择最先进入内存的页面予以淘汰,因此可设置一个先进先出的忙页帧队列,新调入内存的页面挂在该队列的尾部,而当无空闲页帧时,可从该队列首部取下一个页帧作为空闲页帧,进而调入所需页面。LRU页面置换算法LRU是根据页面调入内存后的使用情况进行决策的,它利用“最近的过去”作为“最近的将来”的近似,选择最近最久未使用的页面予以淘汰。该算法主要借助于页面结构中的访问时间time来实现,time记录了一个页面上

3、次的访问时间,因此,当须淘汰一个页面时,选择 处于内存的页面中其time值最小的页面,即最近最久未使用的页面予以淘汰。LFU页面置换算法LFU要求为每个页面配置一个计数器(即页面结构中的counter ), 一旦某页被访问,则将其计数器的值加1,在需要选择一页置换时,则将选择其计数器值最小的页面,即内存中访 问次数最少的页面进行淘汰。设计流程:1 .通过随机数产生一个指令序列,共320条指令。2 .指令序列变换成页地址流3 .计算并输出下述各种算法在不同内存容量下的命中率。4 .在主函数中生成要求的指令序列,并将其转换成页地址流;在不同的内存容量下调用上述函数使其计算并输出相应的命中率。三、实

4、验步骤(包括主要步骤、代码分析等)主要代码:1.页面结构typedef structint pn, pfn, counter, time; pl_type ;pl_type pltotal_vp;其中pn为页面号(页号),pfn为页帧号(物理块号),counter为一个周期内访问该 页面的次数,time为访问时间;pltotal_vp 为页面结构数组,由于共有 320条指令,每 页可装入10条指令,因此虚页长 total_vp 的值为32。将此结构封装到Pahg.h文件中。2.页帧控制结构struct pfc_structint pn, pfn;struct pfc_struct *next;

5、typedef struct pfc_struct pfc_type;pfc_type pfctotal_vp, *freepf_head, *busypf_head, *busypf_tail;其中pfctotal_vp定义用户进程的页帧控制结构数组,在该实验中,用户内存工作区是动态变化的,最多可达到用户进程的虚页数目,即32个物理块。*freepf_head为空闲页帧头的指针*busypf_head为忙页帧头的指针*busypf_tail忙页帧尾的指针讲此结构封装到PageControl.h 头文件中。3.主要函数 void initialize(int):初始化函数该函数主要对页面结构数

6、组pl和页帧结构数组 pfc进行初始化,如置页面结构中的页面号pn,初始化页帧号 pfn为空,访问次数 counter为0,访问时间time为-1 ;同样对页 帧数组进行初始化,形成一个空闲页帧队列。(2) void OPT(int):(3) void FIFO(int):(4) void LRU(int):(5) void LFU(int):void FIFO(int total_pf)计算使用最佳页面算法时的命中率计算使用先进先出页面置换算法时的命中率计算使用最近最久未使用页面置换算法时的命中率计算使用最少使用置换算法时的命中率/*先进先出页面置换算法*/int i,j;pfc_type

7、*p;initialize(total_pf);busypf_head=busypf_tail=NULL;for(i=0;i<total_instruction;i+)if(plpagei.pfn=INVALID)/*页面失效 */diseffect=diseffect+1;if(freepf_head=NULL)/*无空闲页帧 */p=busypf_head->next;plbusypf_head->pn.pfn=INVALID; /将忙页帧队首页面作为换出页面freepf_head=busypf_head;freepf_head->next=NULL;busypf_

8、head=p; /忙页帧头指针后移p=freepf_head->next; / 有空闲页帧freepf_head->next=NULL;freepf_head->pn=pagei; /*将所需页面调入空闲页帧*/plpagei.pfn=freepf_head->pfn;if(busypf_tail=NULL) /*若忙页帧队列为空,则将其头尾指针都指向刚调入页面所在的页帧*/busypf_head=busypf_tail=freepf_head;else / 否则,将刚调入页面所在的页帧挂在忙页帧队列尾部 busypf_tail->next=freepf_head

9、;busypf_tail=freepf_head; freepf_head=p; / 空闲页帧头指针后移 printf("FIFO:%6.4f ",1-(float)diseffect/320); void LRU(int total_pf)/*最近最久未使用页面置换算法*/int i,j;int min,minj,present_time;initialize(total_pf);present_time=0;for(i=0;i<total_instruction;i+)if(plpagei.pfn=INVALID) /*页面失效 */diseffect+;if(f

10、reepf_head=NULL) /*无空闲页帧 */min=32767;for(j=0;j<total_vp;j+) /*if(min>plj.time && plj.pfn!=INVALID)找出位于内存且time值最小的页面作为置换页面*/ min=plj.time; minj=j; freepf_head=&pfcplminj.pfn; plminj.pfn=INVALID;plminj.time=-1;freepf_head->next=NULL;plpagei.pfn=freepf_head->pfn; / plpagei.time=

11、present_time; / freepf_head=freepf_head->next; /腾出一个单元有空闲页面,改为有效修改页面的访问时间减少一个free 页面 elseplpagei.time=present_time; /命中则修改该单元的访问时间present_time+; printf("LRU:%6.4f ",1-(float)diseffect/320);void OPT(int total_pf) /*最佳页面置换算法*/int i,j,max,maxpage,d,disttotal_vp;initialize(total_pf);for(i=0

12、;i<total_instruction;i+) if(plpagei.pfn=INVALID) /*页面失效 */ diseffect+;if(freepf_head=NULL) /* 无空闲页面 */ for(j=0;j<total_vp;j+) if(plj.pfn!=INVALID)所有位于内存页面的距离变量赋一足够大的数distj=32767; else /不在内存的页面变量则置为0distj=0; d=1; /*对于位于内存且在当前访问页面之后将再次被访问的页面,dist重置为当前页面与之后首次出现该页面时两者之间的距离*/for(j=i+1;j<total_in

13、struction;j+) if(plpage皿pfn!=INVALID && distpagej=32767) distpagej=d;d+; max=-1; /查找dist变量值最大的页面作为换出页面 for(j=0;j<total_vp;j+)if(max<dist)max=distj; maxpage=j; freepf_head=&pfcplmaxpage.pfn; /腾出一个单元freepf_head->next=NULL; plmaxpage.pfn=INVALID; plpagei.pfn=freepf_head->pfn; /有

14、空闲页面,改为有效freepf_head=freepf_head->next; /减少一个 free 页面 printf("OPT:%6.4f ",1-(float)diseffect/320); void LFU(int total_pf)/*最少使用页面置换算法*/ int i,j,min,minpage;initialize(total_pf);for(i=0;i<total_instruction;i+)if(plpagei.pfn=INVALID) /页面失效diseffect+;if(freepf_head=NULL) / 无空闲页帧min=3276

15、7;for(j=0;j<total_vp;j+) /查找位于内存且访问次数最少的页面作为换出页面if(min>plj.counter&&plj.pfn!=INVALID)min=plj.counter;minpage=j;plj.counter=0;freepf_head=&pfcplminpage.pfn; /腾出一个单元plminpage.pfn=INVALID; freepf_head->next=NULL; plpagei.pfn=freepf_head->pfn; /有空闲页面,改为有效plpagei.counter+; /增加页面访问

16、次数freepf_head=freepf_head->next; /减少一个 free 页else plpagei.counter+; / 命中增加页面访问次数 printf("LFU:%6.4f ",1-(float)diseffect/320);将上述函数写成头文件的格式封装在Memory.h头文件中,由主函数 main调用使用。运行结果打开linux虚拟机,用vim编辑器打开代码进行修改和调整。用g+编译器进行编译运,如图所示:rootlo c日I h st: r探作系统/叁合牲塞若文件编耨查看第终端标签帮助时rootwlocalhcsl 窈合性实验# g q

17、inain niain.cp口Memory.h: In 此欣心,h:33: Me侬. h ; 41 ; 肥gn . h ; 44 :constructor: :CMemary,:)':警告:当转换到51(从警告;当转换到inf 警告:当箱换到inffloat JBt门。自L )时门ci日I .)时rootftlocalhost 棠合性实臆作./matnFIFO : - I -'(J: FIFO: FIR: FIFO: FIFO, FIFO: FtFO: - I 70: Fl阳 FIFO: FI FC : FIFO: - I -(J i FIFO: FIFO: 7I -0: FI

18、FO: FIFO: FIFO: FIFO: FIFO: FIFO: FIR:; |;0J FIFO: FIFO: FIFO: 门【S.O.54375LRL: ,0,553125LRU: ,0.57B125LRU: ,O.5S125LRU: .O.59375LRL: ,0,6125LRU!.0.625LRU:,O.6375LRU: .0.65LRL: ,O.O9375LRU: ,O.6S6B75LRU: ,O.7C3125LRU; .O.715625LRI: ,O.71B75LRUs ,0.759375LRU: ,0.759375LRU: .O.759375LRU: .0.S03125LRU:

19、,0.803125LRli ,0.S03125LRU: .0.83125LRL: .0,B34375LRL: ,0.S375LRU:,0.B625LRU: .0.B78125LRU: -0,S90625LRI: ,0.fi90625LRU! .O.9LRU:0.543750FI: 0.56250PT: 0.578I250PT: 0.593750PTJ 0.60PT: 0,6156250PT1 0.643750PT: 04656250PT: 0.66250FT: 0,6S43750PT: 0.6900250PT: Q.7092T50PT: 0.72B1250FIJ 0.7406250PUO.75

20、OPT: 04768750: 0t775OPT: 0.793750PT: O.0125OPT: 0.8250PT: 04H8125OFT: 0,a468750PT: 0.8593750PT: 0.8718750PT: 0.8781250PT! 0,8843750PT: 0.88750PT:。.丽 6K7sop1 : 0.90PI:0.9S4375LFUJ O,98125LFU1 O.97B125LFU: O.975LFU: O.97IS75LFC: 0.96B75LFU: 0.965625LFU: 0-9625LFL: 0.959375LFU: 0,95e25LF(J: 0.953125LFU: 0-95LFU; O-94

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论