《2022年页面置换算法代码实现.docx》由会员分享,可在线阅读,更多相关《2022年页面置换算法代码实现.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 试验原理:在内存运行过程中,假设其所要拜访的页面不在内存而需要把他们调入内存,但内存已经没有闲暇空间时,为了保证该进程能正常运行,系统必需从内存中调出一页程序或数据送磁盘的对换区中;但应将那个页面调出, 需依据肯定的算法来确定;通常,把挑选换出页面的算法成为页面置换算法;置换算法的好坏,将直接影响到系统的性能;一个好的页面置换算法, 应具有较低的页面更换频率;从理论上讲, 应将那 些以后不再会拜访的页面置换出, 或者把那些在较长时间内不会在拜访的页面调出;目前存在着很多种置换算法如 论上的目标;试验目的:FIFO,OPT,LRU ,他们都试图更
2、接近理1熟识 FIFO,OPT 和 LRU 算法 2比较三种算法的性能优劣 试验内容:写出 FIFO,OPT 和 LRU 算法的程序代码,并比较它们的算法性能;试验步骤:代码如下:#include #define M 4 /物理页数#define N 20 /需要调入的页数typedef struct page int num; int time; Page; /物理页项,包括调入的页号和时间Page mmM; /4 个物理页名师归纳总结 - - - - - - -第 1 页,共 9 页精选学习资料 - - - - - - - - - int queue120,queue220,queue32
3、0;/记录置换的页 int K=0,S=0,T=0; /置换页数组的标识 int pos=0;/记录存在最长时间项/初始化内存页表项及储备内存情形的空间 void INIT int i; fori=0;iM;i+ mmi.num =-1; mmi.time =0; /取得内存中存在时间最久的位置 int GetMax int max=-1; int i; fori=0;i max max=mmi.time ; pos=i; return pos; /检查最长时间不使用页面 int longesttimeint fold 名师归纳总结 - - - - - - -第 2 页,共 9 页精选学习资料
4、 - - - - - - - - - int i; int max=-1; fori=fold;iN;i+ ifmm0.num.=i mm0.time+; ifmm1.num.=i mm1.time+; ifmm2.num.=i mm2.time+; ifmm3.num.=i mm3.time+; fori=0;imax max=mmi.time; pos=i; return pos; /检查某页是否在内存 int Equationint fold int i; fori=0;iM;i+ ifmmi.num = fold 名师归纳总结 - - - - - - -第 3 页,共 9 页精选学习资
5、料 - - - - - - - - - return i; return -1; /检查物理内存是否已满 ,-1 表满,其他不满 int Check int i; fori=0;iM;i+ ifmmi.num = -1 return i; return -1; /先进先出 void FIFOint fold int i; int a,b,c; a=Equationfold; /页已存在 ifa .= -1 /页不存在 else b=Check; /内存仍有闲暇 ifb .= -1 mmb.num = fold; 名师归纳总结 - - - - - - -第 4 页,共 9 页精选学习资料 - -
6、 - - - - - - - /内存已满,需要置换 else c=GetMax; mmc.num = fold; mmc.time = 0; queue1K+=fold; fori=0;iM;i+ ifmmi.num .= -1 mmi.time +; void OPTint fold int a,b,c; a=Equationfold; ifa = -1/ 页不在内存 b=Check; /内存仍有闲暇 ifb .= -1 mmb.num = fold; /内存已满,需要置换 else c=longesttimefold; mmc.num = fold; 名师归纳总结 - - - - - -
7、-第 5 页,共 9 页精选学习资料 - - - - - - - - - mmc.time = 0; queue3T+=fold; void LRUint fold int i; int a,b; int p; a=Equationfold; ifa .= -1/ 页已在内存 /把此项移动到链表最终一项 ifa=3/ 此项已经在最终,不需要做任何改动 return; else p=Equation-1; ifp=-1/ 链表是满的 for;a3;a+ mma.num=mma+1.num; mm3.num=fold; else ifp=3/链表不满 for;ap-1;a+ mma.num=mma
8、+1.num; 名师归纳总结 - - - - - - -第 6 页,共 9 页精选学习资料 - - - - - - - - - mma.num=fold; else b=Check; ifb.=-1/ 不满 mmb.num=fold; else fori=0;i3;i+ mmi.num=mmi+1.num; mm3.num=fold; queue2S+=fold; void main int AN,BN; int i; INIT; printf 请依次输入 %d 个页面号: n,N; fori=0;iN;i+ scanf%d,&Ai; 名师归纳总结 - - - - - - -第 7 页,共 9
9、 页精选学习资料 - - - - - - - - - /FIFO fori=0;iN;i+ Bi=Ai; fori=0;iN;i+ FIFO Bi ; printfFIFO 的; printf 调入队列为: ; fori=0;iK;i+ printf%3d,queue1i; printfn 缺页次数为: %6dn 缺页率: %nn,K,floatK/N; /LRU INIT; fori=0;iN;i+ Bi=Ai; fori=0;iN;i+ LRU Bi ; printfLRU 的; printf 调入队列为: ; fori=0;iS;i+ printf%3d,queue2i; printfn 缺页次数为: %6dn 缺页率: %nn,S,floatS/N; /OPT 名师归纳总结 - - - - - - -第 8 页,共 9 页精选学习资料 - - - - - - - - - INIT; fori=0;iN;i+ Bi=Ai; fori=0;iN;i+ OPT Bi ; printfOPT 的; printf 调入队列为: ; fori=0;iT;i+ printf%3d,queue3i; printfn 缺页次数为: %6dn 缺页率: %nn,T,floatT/N; 名师归纳总结 - - - - - - -第 9 页,共 9 页