1、实验四页面置换算法代码一实验四页面置换算法模拟(2)一.题目要求:设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程, 并计算访问命中率:要求设计主界面以灵活选择某算法,且以下算法都要实现1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再 被访问的页面换出。2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留 时间最久的页面予以淘汰。3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。4) 最不经常使用算法(LFU)实验目的:1、 用C语言编写OPT FIFO、LRU LFU四种置换算法2、 熟悉内存分页管理策略。3、
2、了解页面置换的算法。4、 掌握一般常用的调度算法。5、 根据方案使算法得以模拟实现。6、 锻炼知识的运用能力和实践能力。3.相关知识:1 虚拟存储器的引入:局部性原理:程序在执行时在一较短时间内仅限于某个部分;相应的,它所 访问的存储空间也局限于某个区域, 它主要表现在以下两个方面:时间局限性和 空间局限性。2.虚拟存储器的定义:虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行 扩充的一种存储器系统。3.虚拟存储器的实现方式:分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换 功能所形成的页面形式虚拟存储系统。请求分段系统,它是在分段系统的基础上,增加了请求调
3、段及分段置换功能 后,所形成的段式虚拟存储系统。4.页面分配:平均分配算法,是将系统中所有可供分配的物理块,平均分配给各个进程。按比例分配算法,根据进程的大小按比例分配物理块。考虑优先的分配算法,把内存中可供分配的所有物理块分成两部分:一部分 按比例地分配给各进程;另一部分则根据个进程的优先权,适当的增加其相应份 额后,分配给各进程。5.页面置换算法:常用的页面置换算法有 OPT FIFO、LRU Clock、LFU PBA等。4.设计思想:选择置换算法,先输入所有页面号,为系统分配物理块,依次进行置换:OPT基本思想:是用一维数组pagepSIZE存储页面号序列,memerymSIZE是存储
4、装入物理 块中的页面。数组nextmSIZE记录物理块中对应页面的最后访问时间。每当发 生缺页时,就从物理块中找出最后访问时间最大的页面, 调出该页,换入所缺的页面。【特别声明】若物理块中的页面都不再使用,则每次都置换物理块中第一个位置的页面。FIFO基本思想:是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的, 所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页。或者借助辅助数 组timemSIZE记录物理块中对应页面的进入时间,每次需要置换时换出进入时 间最小的页面。LRU基本思想:是用一维数组pagepSIZE存储页面号序列,memerymSIZE是存储装入物理 块中的
5、页面。数组flag1O标记页面的访问时间。每当使用页面时,刷新访问 时间。发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的 页面。5.流程图:如下页所示六.源代码:如下页所示【使用C语言】#i nclude #in elude vconi o.h#i nclude /*全局变量*/int mSIZE; /* 物理块数 */int pSIZE; /* 页面号引用串个数*/static int memery10=0; /* 物理块中的页号 */ static int page100=0; /* 页面号引用串 */static int temp10010=0; /* 辅助数组 */*
6、置换算法函数*/void FIFO();void LRU();void OPT();/*辅助函数*/void print(un sig ned int t);void desig nBy();void dow nl oad();void mDelay (un sig ned int Delay);/*主函数*/ void mai n()int i,k,code;system(color 0A);desig nBy();printf(丨请按任意键进行初始化操作 n);printf( 1 n);printf( );getch();system(cls);system(color 0B);print
7、f( 请输入物理块的个数(M=10):);sca nf(%d,&mSIZE);printf( 请输入页面号引用串的个数(P=100):);sca nf(%d,&pSIZE);puts(请依次输入页面号引用串(连续输入,无需隔开):);for(i=0;ivpSIZE;i+)sca nf(%1d,&pagei);dow nl oad();system(cls);system(color 0E);doputs(输入的页面号引用串为:);for(k=0;kv=(pSIZE-1)/20;k+)for(i=20*k;(ipSIZE )&(i);/getch();system(cls);while (cod
8、e!=4);getch();/*载入数据*/void dow nl oad()int i;system(color 0D);prin tf( i 1 n);printf(丨正在载入数据,请稍候! I n); prin tf( 1 1 n);prin tf(Loadi ng.n);prin tf( O);for(i=0;i51;i+)prin tf(b);for(i=0;i););prin tf(nFi ni sh.n 载入成功,按任意键进入置换算法选择界面:getch();/*设置延迟*/void mDelay (un sig ned int Delay)un sig ned int i;fo
9、r(;Delay0;Delay-)for(i=0;i124;i+)prin tf( b);/*显示设计者信息*/void desig nBy()printf( i n);printf(丨 页面置换算法n);printf( | n);void print(un sig ned int t)int i,j,k,l;int flag;for(k=0;k=(pSIZE-1)/20;k+)for(i=20*k;(ipSIZE )&(i20*(k+1);i+)if(i+1)%20=0)|(i+1)%20)&(i=pSIZE-1) prin tf(%dn,pagei);elseprin tf(%d ,pag
10、ei);for(j=0;jmSIZE;j+)for(i=20*k;(imSIZE+20*k)&(i=j)prin tf( |%d|,tempij);elseprin tf( | |); for(i=mSIZE+20*k;(ipSIZE)&(i20*(k+1);i+) for(flag=0,l=0;lmSIZE;l+) if(tempil=tempi-1l) flag+;if(flag=mSIZE)/* 页面在物理块中*/printf();elseprin tf( |%d|,tempij);/*每行显示20个*/if(i%20=0)con ti nue;prin tf(n);prin tf(-
11、n);printf(缺页次数:%dtt,t+mSIZE);printf(缺页率:d/%dn,t+mSIZE,pSIZE);printf(置换次数:%dtt,t);printf(访问命中率:%d%n,(pSIZE-(t+mSIZE)*100/pSIZE);printf( n);/*计算过程延迟*/void compute。int i;printf(正在进行相关计算,请稍候);for(i=1;i20;i+)mDelay(15);if(i%4=0)prin tf(bbbbbb bbbbbb);elseprin tf( O);for(i=0;i+30;pri ntf(b);for(i=0;i+30;p
12、ri ntf(” );for(i=0;i+30;pri ntf(b);/*先进先出页面置换算法*/void FIFO()int memery10=0;int time10=0; /* 记录进入物理块的时间*/int i,j,k,m;int max=0; /* 记录换出页*/int count=0; /* 记录置换次数*/*前mSIZE个数直接放入*/for(i=0;imSIZE;i+)memeryi=pagei;timei=i;for(j=0;jmSIZE;j+) tempij=memeryj;for(i=mSIZE;ipSIZE;i+)/*判断新页面号是否在物理块中*/for(j=0,k=0
13、;jmSIZE;j+)if(memeryj!=pagei)k+;if(k=mSIZE) /* 如果不在物理块中*/coun t+;/*计算换出页*/max=time0time1?0:1;for(m=2;mmSIZE;m+) if(timemtimemax) max=m;memerymax=pagei;timemax=i; /* 记录该页进入物理块的时间*/for(j=0;jmSIZE;j+)tempij=memeryj;elsefor(j=0;jmSIZE;j+)tempij=memeryj;compute();prin t(co un t);/*最近最久未使用置换算法*/void LRU()
14、int memery10=0;int flag10=0; /* 记录页面的访问时间*/int i,j,k,m;int max=0; /* 记录换出页*/int count=0; /* 记录置换次数*/*前mSIZE个数直接放入*/for(i=0;imSIZE;i+)memeryi=pagei;flagi=i;for(j=0;jmSIZE;j+) tempij=memeryj;for(i=mSIZE;ipSIZE;i+)/*判断新页面号是否在物理块中*/for(j=0,k=0;jmSIZE;j+)if(memeryj!=pagei)k+;elseflagj=i; /* 刷新该页的访问时间*/if
15、(k=mSIZE) /* 如果不在物理块中*/coun t+;/*计算换出页*/max=flag0vflag1?0:1; for(m=2;mmSIZE;m+) if(flagmvflagmax) max=m;memerymax=pagei;flagmax=i; /* 记录该页的访问时间*/for(j=0;jmSIZE;j+) tempij=memeryj;elsefor(j=0;jmSIZE;j+) tempij=memeryj;compute();prin t(co un t);/*最佳置换算法*/void OPT()int memery10=0;int next10=0; /* 记录下一次
16、访问时间*/int i,j,k,l,m;int max; /* 记录换出页*/int count=0; /* 记录置换次数*/*前mSIZE个数直接放入*/for(i=0;imSIZE;i+)memeryi=pagei;for(j=0;jmSIZE;j+) tempij=memeryj;for(i=mSIZE;ipSIZE;i+)/*判断新页面号是否在物理块中*/for(j=0,k=0;jmSIZE;j+)if(memeryj!=pagei)k+;if(k=mSIZE) /* 如果不在物理块中*/coun t+;/*得到物理快中各页下一次访问时间*/for(m=0;mmSIZE;m+)for(
17、l=i+1;l=next1?0:1;for(m=2;mn extmax)max=m;/*下一次访问时间都为pSIZE,则置换物理块中第一个*/memerymax=pagei;for(j=0;jmSIZE;j+)tempij=memeryj;else for(j=0;jmSIZE;j+)tempij=memeryj;compute();prin t(co un t);七.参考文献:1.严蔚敏,吴伟民数据结构清华大学出版社,2005.112谭浩强.C语言程序设计.清华大学出版社,2005.113.于帆,赵妮.程序设计基础(C语言版).清华大学出版社,2006.114.汤小丹,梁红兵,哲凤屏,汤子瀛.计算机操作系统.西安电子科技大 学出版社,2007.5欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议, 策划案计划书,学习资料等等打造全网一站式需求
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1