河南师范大学计算机与信息技术学院实验报告
}
freepf_head=freepf_head->next; //减少一个free 页面
else
pl[page[i]].time=present_time; //命中则修改该单元的访问时间
present_time++;
}
printf(\}
void NUR(int total_pf) /* 最近未使用页面置换算法 */ {
int i,j,dp,cont_flag,old_dp;
initialize(total_pf); dp=0;
for(i=0;i if(pl[page[i]].pfn==INVALID) /*页面失效*/ { diseffect++; if(freepf_head==NULL) /*无空闲页帧*/ { 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) {/* 若内存中所有页面扫描完毕未找到访问位为0的页面,将内存中 所有页面的访问位置0 */ } freepf_head=&pfc[pl[dp].pfn]; //腾出一个单元 } } for(j=0;j pl[j].counter=0; 河南师范大学计算机与信息技术学院实验报告 } pl[dp].pfn=INVALID; freepf_head->next=NULL; } pl[page[i]].pfn=freepf_head->pfn; //有空闲页面,改为有效 freepf_head=freepf_head->next; //减少一个free 页面 else pl[page[i]].counter=1; //命中则将访问位置1 if(i%clear_period==0) //清零周期到,将所有访问位清零 { for(j=0;j pl[j].counter=0; } } } void OPT(int total_pf) /* 最佳页面置换算法 */ { int i,j,max,maxpage,d,dist[total_vp]; initialize(total_pf); for(i=0;i { if(pl[page[i]].pfn==INVALID) /*页面失效*/ { diseffect++; if(freepf_head==NULL) /*无空闲页面*/ { for(j=0;j /* 对于位于内存且在当前访问页面之后将再次被访问的页面,dist重置为当前页 面与之后首次出现该页面时两者之间的距离 */ for(j=i+1;j if(pl[j].pfn!=INVALID)//所有位于内存页面的距离变量赋一足够大的数 dist[j]=32767; printf(\ else //不在内存的页面该变量则置为0 dist[j]=0; 河南师范大学计算机与信息技术学院实验报告 } } if(pl[page[j]].pfn!=INVALID && dist[page[j]]==32767) dist[page[j]]=d; d++; max=-1; //查找dist变量值最大的页面作为换出页面 for(j=0;j freepf_head=&pfc[pl[maxpage].pfn]; //腾出一个单元 freepf_head->next=NULL; pl[maxpage].pfn=INVALID; if(max max=dist[j]; maxpage=j; } } pl[page[i]].pfn=freepf_head->pfn; //有空闲页面,改为有效 freepf_head=freepf_head->next; //减少一个free 页面 printf(\} void LFU(int total_pf) /* 最少使用页面置换算法 */ { int i,j,min,minpage; 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; //减少一个free 页面 } else pl[page[i]].counter++; //命中增加页面访问次数 } printf(\} 六、源程序 见电子稿(文件名ymzh.c); 七、运行结果 本实验的运行结果如下图所示(以OPT、FIFO、LRU为例): 从上述结果可知,随着内存页面数的增加,三种算法的访问命中率逐渐增大。在内存页面数为4~25个页面之间时,三种算法的命中率大致在56%至88%之间变化,但是,OPT算法和其他两种 河南师范大学计算机与信息技术学院实验报告 算法之间的差别一般在6~12个百分点左右。在内存页面为25~32个页面时,由于用户进程的所有指令基本上都已装入内存,从而命中率增加较大,各种算法之间的差别不大。 比较上述三种算法,OPT算法的命中率最高,LRU算法和FIFO算法的命中率则较为接近。 八、自我评析与总结 (可参考以下内容:) 1.总的自我打分。 2.你认为你完成的作业哪些地方做得比较好或比较出色。 3.差距与局限,什么地方做得不太好,或什么地方可以做得更好,进一步的工作。 4.从本作业得到的收获。对编写与调试过程中经验教训的总结。 5.完成本题的其他方法。 6.对实验题的评价和改进意见。 九、参考文献 1.《计算机操作系统教程系统解答与实验指导》第2版,张尧学编著,清华大学出版社,2000年出版 2.《计算机操作系统》修订版,汤子瀛等编著,西安电子科技大学出版社,2003年6月出版 十、教师评语: 搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新小学教育操作系统 - --存储管理实验报告 (2)全文阅读和word下载服务。
相关推荐: