sb.append(“本次页面走向,页框中已经存在!\n”);
sb.append(“目前物理页框中页面走向为:”);
for (Integer i : pageFrame) {
// System.out.print(i + " ");
sb.append(i + " ");
}
sb.append(“\n---------------------------------------\n”);
count++;
continue;
}
// 判断物理页框有无空位
for (int i = 0 ; i < frameNum ; i++){
if (pageFrame[i] == null){
isEmpty = true;
break;
}else{
isEmpty = false;
}
}
// 本次页面走向,物理页框中不存在,且有空位,按顺序放入
if (isExist == false && isEmpty == true){
for (int i = 0; i < frameNum; i++) {
if (pageFrame[i] == null) { // 物理页框中有空位则放入
pageFrame[i] = page[count];
break; // 从头开始找,找到一个空位即可
}
}
}
// 实现 FIFO 算法
// 本次页面走向,物理页框中不存在,且物理页框中没有空位了
if (isExist == false && isEmpty == false){
// 此时的 pageFrame[helpNum%frameNum] 为淘汰页面
stack.push(pageFrame[helpNum%frameNum]); // 淘汰页面入栈
// System.out.println(“本次淘汰页面:” + pageFrame[helpNum%frameNum]);
sb.append(“本次淘汰页面:” + pageFrame[helpNum%frameNum] + “\n”);
pageFrame[helpNum%frameNum] = page[count]; // 先进先出
helpNum++;
}
if (isMiss == true){ // 计算缺页次数
pageMissNum++;
}
// System.out.print(“目前物理页框中页面走向为:”);
sb.append(“目前物理页框中页面走向为:”);
for (Integer i : pageFrame) {
// System.out.print(i + " ");
sb.append(i + " ");
}
// System.out.println();
sb.append(“\n---------------------------------------\n”);
count++;
}
// System.out.println();
sb.append(“\n”);
System.out.println(“缺页次数:” + pageMissNum + “次”);
System.out.println("一共调用: " + pageNum + “次”);
System.out.println(“缺页中断率:” + pageMissNum1.0/pageNum100 + “%” );
System.out.print(“淘汰页面:”);
for (Integer integer : stack) {
System.out.print(integer + " ");
}
return sb.toString();
}
public static void main(String[] args) {
FIFO fifo = new FIFO();
String s = fifo.fifoRun(3, “2 3 2 1 5 2 4 5 3 2 5 2”);
System.out.println(s);
}
}
package com.yusael.pagereplace;
import java.util.Stack;
public class LRU {
public int frameNum; // 分配给该作业的物理页框数
public Integer[] pageFrame; // 物理页框
public int pageNum; // 作业的页面走向总次数
public Integer[] pages; // 作业的页面走向
public Stack stack = new Stack<>(); // 存放淘汰页面的栈
public int pageMissNum = 0; // 缺页次数</