操作系统页面置换算法之最近最少使用算法(LRU)
2016-08-03 17:17
489 查看
LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。
下面以java语言模拟实现LRU算法,其中,引用串中不包含0号页号。
代码如下:
import java.util.LinkedList;
import java.util.List;
public class LRU {
public static void main(String[] args) {
int framesize = 5;//帧数量
int[] s = { 1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3, 7, 6, 3, 2, 1, 2, 3, 6 };//引用串
int[] is = new int[s.length];
for (int i = 0; i < s.length; i++)
is[i] = 0;
int aa[][] = new int[s.length][framesize];
List<Integer> q = new LinkedList<Integer>();
int count = 0;
for (int i = 0; i < framesize; i++)
q.add(0);
for (int i = 0; i < s.length; i++) {
if (q.contains(new Integer(s[i]))) {
q.remove(new Integer(s[i]));
q.add(new Integer(s[i]));
} else {
q.remove(0);
q.add(new Integer(s[i]));
count++;
is[i] = 1;
}
int j = 0;
for (Integer v : q)
aa[i][j++] = v;
}
for (int i = 0; i < framesize; i++) {
for (int j = 0; j < s.length; j++) {
System.out.print(aa[j][i] + " ");
}
System.out.println();
}
System.out.println();
for (int i = 0; i < s.length; i++) {
System.out.print(is[i] + " ");
}
System.out.println();
System.out.println("total : " + count);
}
}
执行结果如下:
0 0 0 0 0 0 3 4 4 4 4 5 6 1 1 1 7 7 7 7
0 0 0 1 1 3 4 2 1 5 5 6 1 2 2 7 6 6 6 1
0 0 1 2 3 4 2 1 5 6 6 1 2 3 7 6 3 3 1 2
0 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3
1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
============================
1 1 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0
total : 8
其中,等号上方每一列代表队列,0表示空闲帧。等号下方1代表发生页面置换,0代表未发生页面置换。
下面以java语言模拟实现LRU算法,其中,引用串中不包含0号页号。
代码如下:
import java.util.LinkedList;
import java.util.List;
public class LRU {
public static void main(String[] args) {
int framesize = 5;//帧数量
int[] s = { 1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3, 7, 6, 3, 2, 1, 2, 3, 6 };//引用串
int[] is = new int[s.length];
for (int i = 0; i < s.length; i++)
is[i] = 0;
int aa[][] = new int[s.length][framesize];
List<Integer> q = new LinkedList<Integer>();
int count = 0;
for (int i = 0; i < framesize; i++)
q.add(0);
for (int i = 0; i < s.length; i++) {
if (q.contains(new Integer(s[i]))) {
q.remove(new Integer(s[i]));
q.add(new Integer(s[i]));
} else {
q.remove(0);
q.add(new Integer(s[i]));
count++;
is[i] = 1;
}
int j = 0;
for (Integer v : q)
aa[i][j++] = v;
}
for (int i = 0; i < framesize; i++) {
for (int j = 0; j < s.length; j++) {
System.out.print(aa[j][i] + " ");
}
System.out.println();
}
System.out.println();
for (int i = 0; i < s.length; i++) {
System.out.print(is[i] + " ");
}
System.out.println();
System.out.println("total : " + count);
}
}
执行结果如下:
0 0 0 0 0 0 3 4 4 4 4 5 6 1 1 1 7 7 7 7
0 0 0 1 1 3 4 2 1 5 5 6 1 2 2 7 6 6 6 1
0 0 1 2 3 4 2 1 5 6 6 1 2 3 7 6 3 3 1 2
0 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3
1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
============================
1 1 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0
total : 8
其中,等号上方每一列代表队列,0表示空闲帧。等号下方1代表发生页面置换,0代表未发生页面置换。
相关文章推荐
- 自适应Lru(最近最少使用)算法
- 最近最少使用(LRU)算法模拟--LeastRecentPage
- LRU最近最少使用算法
- C++模拟操作系统最近最少使用算法(LRU),acm
- LRU算法,最近最少使用算法
- 自适应Lru(最近最少使用)算法
- leetcode LRU Cache(高级缓存的最近最少使用算法实现)
- LRU算法,最近最少使用算法
- LRU(最近最少使用页面置换算法)淘汰算法
- LRU-最近最少使用算法
- 缓存淘汰算法--LRU算法【最近最少使用算法LRU置换策略适用于热点数据比较多的场景】
- 【python学习笔记】3:LRU(最近最少使用页面置换)算法
- LRU(最近最少使用页面置换算法)淘汰算法
- LRU(最近最少使用算法) / MRU(最近最常使用算法)
- 最近最久未使用页面淘汰算法———LRU算法(java实现)
- LeetCode: LRU Cache 最近最少使用算法 缓存设计
- 晦涩的翻译LRU (Least Recently Used) - 最近最少使用?
- Python实现的最近最少使用算法
- Java实现LRU(最近最少使用)缓存
- 物理读之LRU(最近最少被使用)的深入解析 推荐