《2022年操作系统LRU页面置换算法 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统LRU页面置换算法 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、#include /头文件#include / #include /产生随机数所需要的头文件main() int pagen; int memoryn; /可用内存块数为memoryn,页面长度为pagen,int choose; /3=memoryn=5.15=pagen=20 printf(*页*面*置*换*算*法*n); printf(nn 请输入您要求的内存块数量(范围为3 至 5) : ); scanf(%d,&memoryn); if(memoryn5) printf(nn 对不起,您的输入有误,请重新输入:); scanf(%d,&memoryn); printf(nn 请输入您
2、要求的页面长度(范围为8 至 10) :); scanf(%d,&pagen); if(pagen10) printf(nn 对不起,您的输入有误,请重新输入:); scanf(%d,&pagen); /从用户处获取内存块与页面长度/*/ short times5=0,0,0,0,0; /时间轴数组short pagenumber20; /控制页面走向数组short pagememory5=88,88,88,88,88; /物理块数组int i,n; /控制变量为i printf(nnn由您所确定的页面走向为:); for(i=0;ipagen;i+) scanf(%d,&pagenumber
3、i); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - printf(n); int want=0; /want 为缺页数int now; /中断数/控制变量为i pagememory0=pagenumber0;/ 对第一个物理块进行赋值printf( 第 %2d 步:,i=1); for(i=0;imemoryn;i+) printf( %2d,pagememoryi); printf(n); for(i=1;ipagen;i
4、+) if(pagememory0!=pagenumberi) pagememory1=pagenumberi; now=i+1; break; /对第二个物理块进行赋值printf( 第 %2d 步:,now); for(i=0;imemoryn;i+) printf( %2d,pagememoryi); printf(n); for(i=2;ipagen;i+) if(pagememory0!=pagenumberi)&(pagememory1!=pagenumberi) pagememory2=pagenumberi; now=i+1; break; /对第三个物理块进行赋值want=3
5、; /此时可以将缺页值暂定为3 printf( 第 %2d 步:,now); for(i=0;imemoryn;i+) printf( %2d,pagememoryi); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - printf(n); if(memoryn=4) for(i=3;ipagen;i+) if(pagememory0!=pagenumberi)&(pagememory1!=pagenumberi) &(page
6、memory2!=pagenumberi) pagememory3=pagenumberi; now=i+1; want=4; break; printf( 第 %2d 步:,now); for(i=0;imemoryn;i+) printf( %2d,pagememoryi); printf(n); /如果为四个物理块,则为第四个物理块赋值if(memoryn=5) for(i=3;ipagen;i+) if(pagememory0!=pagenumberi)&(pagememory1!=pagenumberi) &(pagememory2!=pagenumberi) pagememory3
7、=pagenumberi; now=i+1; want=4; break; printf( 第 %2d 步:,now); for(i=0;imemoryn;i+) printf( %2d,pagememoryi); printf(n); for(i=4;ipagen;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - if(pagememory0!=pagenumberi)&(pagememory1!=pagenumberi
8、) &(pagememory2!=pagenumberi) &(pagememory3!=pagenumberi) pagememory4=pagenumberi; now=i+1; want=5; break; /如果为五个物理块,则为第四个物理块赋值printf( 第 %2d 步:,now); for(i=0;imemoryn;i+) printf( %2d,pagememoryi); printf(n); int needchange; /页面置换发生时要进行置换的物理块块号int mn=memoryn; / 为时间轴赋初值所用到的物理块数int max; /最大的时间值int j; /
9、控制变量i.j for(i=0;imemoryn;i+) mn-; timesi=mn; /给时间轴数组设定初值for(j=now;jpagen;j+) if(pagenumberj!=pagememory0)&(pagenumberj!=pagememory1) &(pagenumberj!=pagememory2) &(pagenumberj!=pagememory3) &(pagenumberj!=pagememory4) if(times0=times1) max=times1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
10、- - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - else max=times0; if(max=times2) max=times2; if(max=times3) max=times3; if(max=times4) max=times4; /确定时间轴数组里储存的最大时间for(i=0;imemoryn;i+) if(max=timesi) needchange=i; break; /提取出最大时间也就是先进入的页面所对应的物理块号pagememoryneedchange=pagenumberj; for(i=0;imemory
11、n;i+) if(i=needchange) timesi=0; else timesi+; /更新时间轴want+; /缺页数进行自增运算printf( 第 %2d 步:,j+1); for(i=0;imemoryn;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - printf( %2d,pagememoryi); printf(n); else for(i=0;imemoryn;i+) if(pagenumberj=pagememoryi) timesi=0; else timesi+; /出线相同页面只把时间轴自增一,不做其他操作 printf(nn LRU 页面置换次数为: %dn,want); system(pause); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -