操作系统页面置换算法之最近最少使用算法(LRU)

来源:互联网 发布:福利资源博客源码 编辑:程序博客网 时间:2024/05/16 14:23

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代表未发生页面置换。

0 0
原创粉丝点击