使用C语言怎么编写一个页面置换算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联公司网站设计,为客户量身定制各类网站建设业务,包括企业型、电子商务型、响应式网站、行业门户型等各类网站,实战经验丰富,成功案例众多。以客户利益为出发点,创新互联公司网站制作为客户规划、按需策划设计符合企业需求、带有营销价值的网络建站方案认真对待每一个客户,我们不用口头的语言来吹擂我们的优秀,超过千家的成功案例见证着我们的成长。操作系统实验
页面置换算法(FIFO、LRU、OPT)
概念:
1.很好置换算法(OPT)(理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
2.先进先出置换算法(FIFO):是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性较大。
3.最近最久未使用(LRU)算法:这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。
题目:
编写一个程序,实现本章所述的FIFO、LRU和最优页面置换算法。首先,生成一个随机的页面引用串,其中页码范围为0-9.将这个随机页面引用串应用到每个算法,并记录每个算法引起的缺页错误的数量。实现置换算法,一遍页面帧的数量可以从1~7。
#include#include #include int numbers[20]={7,0,1,2, 0,3,0,4, 2,3,0,3, 2,1,2,0, 1,7,0,1};//本地数据,与课本一致,方便测试 int nums=0;//输入栈的个数,为了方便使用, int stack[20][7]={10}; void begin(); void randomnum();//用于产生随机数 void init();//初始化 void FIFO();//FIFO算法 void LRU();//LRU算法 void OPT();//最优页面置换算法(OPT) void print();//输出 int main() { begin(); FIFO(); LRU(); OPT(); return 0; } void begin()//开始菜单界面 { int i,j,k; printf("请输入页面帧的数量(1-7):"); scanf("%d",&nums); for(k=0;;k++) { printf("是否使用随机数产生输入串(0:是,1:否)"); scanf("%d",&j); if(j==0) { randomnum(); break; } else if(j==1) { break; } else { printf("请输入正确的选择!\n"); } } printf("页面引用串为:\n"); for(i=0;i<20;i++) { printf("%d ",numbers[i]); } printf("\n"); init(); } void randomnum()//如果需要使用随机数生成输入串,调用该函数 { srand(time(0));//设置时间种子 for(int i = 0; i < 20; i++) { numbers[i] = rand() % 10;//生成区间0`9的随机页面引用串 } } void init()//用于每次初始化页面栈中内容,同时方便下面输出的处理 { int i,j; for(i=0;i<20;i++) for(j=0;j max) { max=seq[q]; k=q; } } stack[i][k]=numbers[i]; sum++; } else { //页面栈中有需要插入的数字,无需变化,替换的优先级也不需要变化 } } printf("\n"); printf("OPT算法:\n"); print(); printf("缺页错误数目为:%d\n",sum); }
运行结果截图:
关于使用C语言怎么编写一个页面置换算法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。