您的位置:首页 > 其它

操作系统页面置换算法之最近最少使用算法(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代表未发生页面置换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: