先进先出缓存算法(FIFO)

您所在的位置:网站首页 fifo页面调度 先进先出缓存算法(FIFO)

先进先出缓存算法(FIFO)

#先进先出缓存算法(FIFO)| 来源: 网络整理| 查看: 265

题目

操作系统中的虚拟内存管理系统可采用先进先出算法的方式缓存。 当请求的内存页不在缓存中。且缓存已满时,应从缓存中删除保存时间最长的页面, 从而为请求页面腾出空间,如果缓存未满,可直接将请求页面添加到缓存中, 给定的页面最多只应在缓存中出现一次。 构造FIFO类的构造方法为countCacheMiss。 该方法输入包括一个整数max_cache_size,和一个页面请求数组page_requests, 要求方法返回缓存未命中数的总数。

思考

可以为每个页面设置一个变量来记录在缓存中的时长,题目又要求页面不重复, 考虑用HashMap的键值对处理,key表示缓存中页面编号,value表示时长。 对于每一个页面请求,先判断是不是存在于缓存, 若存在是则将缓存内所有页面时长+1; 否则, 

若缓存 max) { max = entry1.getValue().intValue(); key = entry1.getKey().intValue(); } } // 移除页面 pages.remove(key); System.out.println(key + "被移除!"); } // 就把当前缓存列表中页面的时间加1; for (Entry entry : pages.entrySet()) { Integer value = entry.getValue(); entry.setValue(Integer.valueOf(value.intValue() + 1)); } // 将新的请求页面加入缓存列表中并将其请求次数设置为0 System.out.println(Integer.valueOf(page_req[j]) + "存入缓存!"); pages.put(Integer.valueOf(page_req[j]), Integer.valueOf(0)); // 统计缺页次数 count++; System.out.println("当前未命中次数为:" + count); } // // 输出当前的缓存信息 System.out.println("当前的缓存信息为:"); for (Entry entry : pages.entrySet()) { Integer value = entry.getValue(); Integer key = entry.getKey(); System.out.print(key + " 在缓存中,保存时间:" + value + "\t"); } System.out.println(); } return count; } public static void main(String[] args) { // test 1 int maxsize = 2; int[] page_reg1 = { 1, 2, 1, 3, 1, 2 }; int count = FIFO(maxsize, page_reg1); System.out.println("未命中总数为:" + count); System.out.println("——————————————————————————————————"); // test 2 maxsize = 3; int[] page_reg2 = { 7, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0 }; count = FIFO(maxsize, page_reg2); System.out.println("未命中总数为:" + count); System.out.println("——————————————————————————————————"); // test 3 maxsize = 2; int[] page_reg3 = { 2, 3, 1, 3, 2, 1, 4, 3, 2 }; count = FIFO(maxsize, page_reg3); System.out.println("未命中总数为:" + count); System.out.println("——————————————————————————————————"); } }

输出

//1未命中缓存! //1存入缓存! //当前未命中次数为:1 //当前的缓存信息为: //1 在缓存中,保存时间:0 //2未命中缓存! //2存入缓存! //当前未命中次数为:2 //当前的缓存信息为: //1 在缓存中,保存时间:1 2 在缓存中,保存时间:0 //1命中缓存! //1 当前的保存时间:2 2 当前的保存时间:1 //3未命中缓存! //1被移除! //3存入缓存! //当前未命中次数为:3 //当前的缓存信息为: //2 在缓存中,保存时间:2 3 在缓存中,保存时间:0 //1未命中缓存! //2被移除! //1存入缓存! //当前未命中次数为:4 //当前的缓存信息为: //1 在缓存中,保存时间:0 3 在缓存中,保存时间:1 //2未命中缓存! //3被移除! //2存入缓存! //当前未命中次数为:5 //当前的缓存信息为: //1 在缓存中,保存时间:1 2 在缓存中,保存时间:0 //未命中总数为:5 //—————————————————————————————————— //7未命中缓存! //7存入缓存! //当前未命中次数为:1 //当前的缓存信息为: //7 在缓存中,保存时间:0 //1未命中缓存! //1存入缓存! //当前未命中次数为:2 //当前的缓存信息为: //1 在缓存中,保存时间:0 7 在缓存中,保存时间:1 //2未命中缓存! //2存入缓存! //当前未命中次数为:3 //当前的缓存信息为: //1 在缓存中,保存时间:1 2 在缓存中,保存时间:0 7 在缓存中,保存时间:2 //0未命中缓存! //7被移除! //0存入缓存! //当前未命中次数为:4 //当前的缓存信息为: //0 在缓存中,保存时间:0 1 在缓存中,保存时间:2 2 在缓存中,保存时间:1 //3未命中缓存! //1被移除! //3存入缓存! //当前未命中次数为:5 //当前的缓存信息为: //0 在缓存中,保存时间:1 2 在缓存中,保存时间:2 3 在缓存中,保存时间:0 //0命中缓存! //0 当前的保存时间:2 2 当前的保存时间:3 3 当前的保存时间:1 //4未命中缓存! //2被移除! //4存入缓存! //当前未命中次数为:6 //当前的缓存信息为: //0 在缓存中,保存时间:3 3 在缓存中,保存时间:2 4 在缓存中,保存时间:0 //2未命中缓存! //0被移除! //2存入缓存! //当前未命中次数为:7 //当前的缓存信息为: //2 在缓存中,保存时间:0 3 在缓存中,保存时间:3 4 在缓存中,保存时间:1 //3命中缓存! //2 当前的保存时间:1 3 当前的保存时间:4 4 当前的保存时间:2 //0未命中缓存! //3被移除! //0存入缓存! //当前未命中次数为:8 //当前的缓存信息为: //0 在缓存中,保存时间:0 2 在缓存中,保存时间:2 4 在缓存中,保存时间:3 //3未命中缓存! //4被移除! //3存入缓存! //当前未命中次数为:9 //当前的缓存信息为: //0 在缓存中,保存时间:1 2 在缓存中,保存时间:3 3 在缓存中,保存时间:0 //2命中缓存! //0 当前的保存时间:2 2 当前的保存时间:4 3 当前的保存时间:1 //1未命中缓存! //2被移除! //1存入缓存! //当前未命中次数为:10 //当前的缓存信息为: //0 在缓存中,保存时间:3 1 在缓存中,保存时间:0 3 在缓存中,保存时间:2 //2未命中缓存! //0被移除! //2存入缓存! //当前未命中次数为:11 //当前的缓存信息为: //1 在缓存中,保存时间:1 2 在缓存中,保存时间:0 3 在缓存中,保存时间:3 //0未命中缓存! //3被移除! //0存入缓存! //当前未命中次数为:12 //当前的缓存信息为: //0 在缓存中,保存时间:0 1 在缓存中,保存时间:2 2 在缓存中,保存时间:1 //未命中总数为:12 //—————————————————————————————————— //2未命中缓存! //2存入缓存! //当前未命中次数为:1 //当前的缓存信息为: //2 在缓存中,保存时间:0 //3未命中缓存! //3存入缓存! //当前未命中次数为:2 //当前的缓存信息为: //2 在缓存中,保存时间:1 3 在缓存中,保存时间:0 //1未命中缓存! //2被移除! //1存入缓存! //当前未命中次数为:3 //当前的缓存信息为: //1 在缓存中,保存时间:0 3 在缓存中,保存时间:1 //3命中缓存! //1 当前的保存时间:1 3 当前的保存时间:2 //2未命中缓存! //3被移除! //2存入缓存! //当前未命中次数为:4 //当前的缓存信息为: //1 在缓存中,保存时间:2 2 在缓存中,保存时间:0 //1命中缓存! //1 当前的保存时间:3 2 当前的保存时间:1 //4未命中缓存! //1被移除! //4存入缓存! //当前未命中次数为:5 //当前的缓存信息为: //2 在缓存中,保存时间:2 4 在缓存中,保存时间:0 //3未命中缓存! //2被移除! //3存入缓存! //当前未命中次数为:6 //当前的缓存信息为: //3 在缓存中,保存时间:0 4 在缓存中,保存时间:1 //2未命中缓存! //4被移除! //2存入缓存! //当前未命中次数为:7 //当前的缓存信息为: //2 在缓存中,保存时间:0 3 在缓存中,保存时间:1 //未命中总数为:7 //——————————————————————————————————



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3