java实现FIFO和LRU页面置换算法
来源:互联网 发布:安卓c语言编程工具 编辑:程序博客网 时间:2024/06/01 15:27
FIFO是内存管理的一种页面置换算法,FIFO(First Input First Output),即先进先出队列。例:在超市购物之后会提着我们满满的购物车来到收银台排在结账队伍的最后,眼睁睁地看着前面的客户一个个离开。这就是一种先进先出机制,先排队的客户先行结账离开。
LRU是内存管理的另一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。 LRU是Least Recently Used的缩写,即最近最久未使用,常用于页面置换算法,是为虚拟页式存储管理服务的。
JAVA实现如下(可以直接执行):
import java.util.Scanner;class wuli{int vlu;int falt; wuli(int vlu ){this.falt=-1;this.vlu=vlu;}}public class fifolru {int mun; //物理块数int yemianmun; //页面个数fifolru(int mun,int yemianmun) {this.mun=mun;this.yemianmun=yemianmun;}public static void fifo(wuli a[],int b[] ) { //------------------------------------------fifo------------System.out.println("+++++++++++++FIFO算法++++++++++++++++");int mun=0;int count=0;for(int q=0;q<a.length;q++) a[q]=new wuli (-2); //初始化对象 for(int q=0;q<b.length;q++) { if(count==a.length) { int f=0; //处理满的情况 for(int qq=0;qq<a.length;qq++) {if(a[qq].falt==b[q]) { System.out.println("*发现相同,不存入 "); f=1; break; }}if(f==0) { System.out.println("到达一个元素"+b[q]+"已经满,弹出第一个元素"+a[0].falt+" 末尾加入元素"+b[q]);mun++; for(int z=0;z<a.length-1;z++) { //前移 a[z].falt=a[z+1].falt; } a[a.length-1].falt=b[q]; //最后一个赋值 }continue; } int k=0;for(int qq=0;qq<a.length;qq++) { //处理未满情况if(a[qq].falt==b[q]) { System.out.println("发现相同,不存入 "); k=1; break;}}if(k==0){for(int z=0;z<a.length;z++) if(a[z].vlu==-2) //找到没用到的物理块{ a[z].falt=b[q]; a[z].vlu=0; mun++;count++;System.out.println("没有发现相同,存入 "); break;}}continue;}System.out.print("++++++++++结果物理块的值:"); //fifo结果for(int a1=0;a1<a.length;a1++) {System.out.print(a[a1].falt+" ");}System.out.println("++++++++++");System.out.println("++++++++++FIFO缺页次数:"+mun+"次 +++++++++++"); }public static void lru(wuli a[],int b[] ) { //------------------------------------------------lruSystem.out.println("++++++++++LRU算法++++++++++++");int mun=0;int count=0;for(int q=0;q<a.length;q++) a[q]=new wuli (-2); //初始化对象 for(int q=0;q<b.length;q++) { if(count==a.length) { //处理满的情况 int f=0; for(int qq=0;qq<a.length;qq++) {if(a[qq].falt==b[q]) { System.out.println("*发现相同,不存入,更新位置 "); int ji=qq; for(int s=qq;s>0;s--)a[s].falt=a[s-1].falt;a[0].falt=b[q]; f=1; break; }}if(f==0) { System.out.println("到达一个元素"+b[q]+"已经满,弹出最后一个元素"+a[a.length-1].falt+" 首部加入元素"+b[q]);mun++;for(int s=a.length-1;s>0;s--)a[s].falt=a[s-1].falt;a[0].falt=b[q]; }continue; } int k=0;for(int qq=a.length-1;qq>= 0;qq--) { //处理未满情况if(a[qq].falt==b[q]) { System.out.println("发现相同,不存入,更新位置 "); int ji=qq; while(a[ji-1].falt!=-1) { a[ji].falt=a[ji-1].falt ; ji--; } for(int z=a.length-1;z>=0;z--) if(a[z].vlu==-2) a[z+1].falt=b[q]; k=1; break;}}if(k==0){for(int z=a.length-1;z>=0;z--) if(a[z].vlu==-2) //找到没用到的物理块{ a[z].falt=b[q]; a[z].vlu=0; mun++;count++;System.out.println("没有发现相同,存入 ");break;}}continue;}System.out.print("++++++++++结果物理块的值:"); //lru结果for(int a1=0;a1<a.length;a1++) {System.out.print(a[a1].falt+" ");}System.out.println("++++++++++");System.out.println("++++++++++FIFO缺页次数:"+mun+"次 +++++++++++"); }public static void main(String arg[]) {Scanner input=new Scanner(System.in);System.out.println("请输入分配给程序的物理块数");int mun0=input.nextInt();wuli wulikuai[]=new wuli[mun0]; //物理块数组System.out.println("请输入页面流的个数");int mun1=input.nextInt();int yemianmun[]=new int[mun1]; //页面个数数组fifolru text=new fifolru(mun0, mun1);System.out.print("请顺序输入页面流");for(int a=0;a<yemianmun.length;a++) { int shuju = input.nextInt(); yemianmun[a]=shuju;}System.out.print("选择fifo算法,还是LRU算法。1——fifo,2——LRU,3——都选择");int key=input.nextInt();switch (key) {case 1:fifo(wulikuai, yemianmun);break;case 2:lru(wulikuai, yemianmun);break;case 3:fifo(wulikuai, yemianmun);lru(wulikuai, yemianmun);break;}}}
总结:具体的运行流程结果比较清楚了~就不多解释了,要是有bug请指教~
阅读全文
0 0
- java实现FIFO和LRU页面置换算法
- JAVA实现页面置换算法(OPT,FIFO,LRU)
- 关于FIFO和LRU页面置换算法的实现
- LRU 和 FIFO 页面置换算法
- LRU 和 FIFO 页面置换算法
- 转载:操作系统页面置换算法(opt,lru,fifo,clock)实现
- 操作系统页面置换算法(opt,lru,fifo,clock)实现
- 页面置换算法 FIFO和LRU 及各自的命中率
- 页面置换算法(FIFO,LRU,最佳,Clock)
- FIFO, LRU, OPT 页面置换算法
- 页面置换算法-FIFO、LRU、OPT
- 页面置换算法总结-FIFO-LRU-OPT
- FIFO,LRU,OPT页面置换算法
- 页面置换算法 FIFO,OPT,LRU
- 操作系统页面置换算法之FIFO,LRU
- LRU页面置换算法Java实现
- FIFO页面置换算法实现
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
- centos外网无法访问端口
- 设计一个有getMin的栈
- 组合数,快速幂,扩展欧几里得及其求逆元模板
- HTTP协议浅析(中):请求报文和响应报文
- GDB常用调试命令以及多进程多线程调试
- java实现FIFO和LRU页面置换算法
- unity UGUI scrollRect拖拽处理
- 欢迎使用CSDN-markdown编辑器
- 笨办法学python,前22练习总结
- opencv3.3+dnn+caffe深度学习来实现图片的分类识别
- 常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)
- NIO
- 浅谈JavaScript中的原型prototype
- 50道java基础编程(6~10)