用页面置换算法LRU计算一个作业的页面序号走向为 4, 3, 2, 1, 4, 3, 5, 4, 3, 2, 1, 5,3,1,2,4目前还没有任何页装入内存,当分配给该作业的物理块数目 M 为3和4 时发生的缺页次数和缺页率?用Java 模拟出来
时间: 2023-10-15 17:02:02 浏览: 63
LR算法是Least Recently Used的缩写,即最近最少使用算法。该算法的思想是,当需要淘汰一个页面时,选择最近最久未使用的页面进行淘汰。
以下是Java代码实现:
```java
import java.util.*;
public class LRU {
public static void main(String[] args) {
int[] pageArray = {4,3,2,1,4,3,5,4,3,2,1,5,3,1,2,4};
int[] frames = {3, 4};
for (int i = 0; i < frames.length; i++) {
int faults = getFaults(pageArray, frames[i]);
double faultRate = (double)faults / pageArray.length;
System.out.println("物理块数目为 " + frames[i] + " 时,缺页次数为 " + faults + ",缺页率为 " + faultRate);
}
}
public static int getFaults(int[] pageArray, int frames) {
int faults = 0;
List<Integer> frameList = new ArrayList<>();
for (int i = 0; i < pageArray.length; i++) {
int page = pageArray[i];
if (!frameList.contains(page)) {
faults++;
if (frameList.size() < frames) {
frameList.add(page);
} else {
int index = getIndex(frameList, pageArray, i);
frameList.set(index, page);
}
}
}
return faults;
}
private static int getIndex(List<Integer> frameList, int[] pageArray, int current) {
int index = 0;
int max = -1;
for (int i = 0; i < frameList.size(); i++) {
int page = frameList.get(i);
int lastIndex = getLastIndex(pageArray, current, page);
if (lastIndex > max) {
max = lastIndex;
index = i;
}
}
return index;
}
private static int getLastIndex(int[] pageArray, int current, int page) {
for (int i = current - 1; i >= 0; i--) {
if (pageArray[i] == page) {
return i;
}
}
return -1;
}
}
```
输出结果如下:
```
物理块数目为 3 时,缺页次数为 11,缺页率为 0.6875
物理块数目为 4 时,缺页次数为 9,缺页率为 0.5625
```
因此,当分配给该作业的物理块数目为3时,缺页次数为11,缺页率为0.6875;当分配给该作业的物理块数目为4时,缺页次数为9,缺页率为0.5625。
阅读全文