欢迎来到天天文库
浏览记录
ID:18673677
大小:47.00 KB
页数:9页
时间:2018-09-21
《页面置换算法代码实现(完整版)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验原理:在内存运行过程中,若其所要访问的页面不在内存而需要把他们调入内存,但内存已经没有空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。但应将那个页面调出,需根据一定的算法来确定。通常,把选择换出页面的算法成为页面置换算法。置换算法的好坏,将直接影响到系统的性能。一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面置换出,或者把那些在较长时间内不会在访问的页面调出。目前存在着许多种置换算法(如FIFO,OPT,LRU),他们都试图更接近理论上的目标。实验目的:1.
2、熟悉FIFO,OPT和LRU算法2.比较三种算法的性能优劣实验内容:写出FIFO,OPT和LRU算法的程序代码,并比较它们的算法性能。实验步骤:代码如下:#include#defineM4//物理页数#defineN20//需要调入的页数typedefstructpage{intnum;inttime;}Page;//物理页项,包括调入的页号和时间Pagemm[M];//4个物理页intqueue1[20],queue2[20],queue3[20];//记录置换的页intK=0,S=0,T=0;//置换页数组的标识intp
3、os=0;//记录存在最长时间项//初始化内存页表项及存储内存情况的空间voidINIT(){inti;for(i=0;imax){max=mm[i].time;pos=i;}}returnpos;}//检查最长时间不使用页面intlongesttime(intfold){inti;intmax=-1;for(i=fold;i
4、max){max=mm[i].time;pos=i;}}returnpos;}//检查某页是否在内存intEquation(intfold){inti;for(i=0;i5、d)returni;}return-1;}//检查物理内存是否已满,-1表满,其他不满intCheck(){inti;for(i=0;i6、m=fold;mm[c].time=0;}queue1[K++]=fold;}for(i=0;i7、d;}}voidLRU(intfold){inti;inta,b;intp;a=Equation(fold);if(a!=-1)//页已在内存{//把此项移动到链表最后一项if(a==3)//此项已经在最后,不需要做任何改动return;else{p=Equation(-1);if(p==-1)//链表是满的{for(;a<3;a++)mm[a].num=mm[a+1].num;mm[3].num=fold;}elseif(p<=3)//链表不满{for(;a8、old;}}}else{b=Check();if(b!=-1)//不满mm[b].num=fold;else{for(i=0;i<3;i++)mm[i].num=m
5、d)returni;}return-1;}//检查物理内存是否已满,-1表满,其他不满intCheck(){inti;for(i=0;i6、m=fold;mm[c].time=0;}queue1[K++]=fold;}for(i=0;i7、d;}}voidLRU(intfold){inti;inta,b;intp;a=Equation(fold);if(a!=-1)//页已在内存{//把此项移动到链表最后一项if(a==3)//此项已经在最后,不需要做任何改动return;else{p=Equation(-1);if(p==-1)//链表是满的{for(;a<3;a++)mm[a].num=mm[a+1].num;mm[3].num=fold;}elseif(p<=3)//链表不满{for(;a8、old;}}}else{b=Check();if(b!=-1)//不满mm[b].num=fold;else{for(i=0;i<3;i++)mm[i].num=m
6、m=fold;mm[c].time=0;}queue1[K++]=fold;}for(i=0;i7、d;}}voidLRU(intfold){inti;inta,b;intp;a=Equation(fold);if(a!=-1)//页已在内存{//把此项移动到链表最后一项if(a==3)//此项已经在最后,不需要做任何改动return;else{p=Equation(-1);if(p==-1)//链表是满的{for(;a<3;a++)mm[a].num=mm[a+1].num;mm[3].num=fold;}elseif(p<=3)//链表不满{for(;a8、old;}}}else{b=Check();if(b!=-1)//不满mm[b].num=fold;else{for(i=0;i<3;i++)mm[i].num=m
7、d;}}voidLRU(intfold){inti;inta,b;intp;a=Equation(fold);if(a!=-1)//页已在内存{//把此项移动到链表最后一项if(a==3)//此项已经在最后,不需要做任何改动return;else{p=Equation(-1);if(p==-1)//链表是满的{for(;a<3;a++)mm[a].num=mm[a+1].num;mm[3].num=fold;}elseif(p<=3)//链表不满{for(;a8、old;}}}else{b=Check();if(b!=-1)//不满mm[b].num=fold;else{for(i=0;i<3;i++)mm[i].num=m
8、old;}}}else{b=Check();if(b!=-1)//不满mm[b].num=fold;else{for(i=0;i<3;i++)mm[i].num=m
此文档下载收益归作者所有