先进先出页面置换算法java
时间: 2023-11-24 12:50:46 浏览: 39
以下是Java实现先进先出页面置换算法的代码:
```java
import java.util.*;
public class FIFO {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入物理块数:");
int M = sc.nextInt(); // 物理块数
System.out.print("请输入页面走向序列(用空格隔开):");
String[] input = sc.next().split(" "); // 页面走向序列
int[] pages = new int[input.length];
for (int i = 0; i < input.length; i++) {
pages[i] = Integer.parseInt(input[i]);
}
sc.close();
int[] memory = new int[M]; // 内存工作区
int[] pageFaults = new int[pages.length]; // 页面失效次数
int pointer = 0; // 内存工作区指针
for (int i = 0; i < pages.length; i++) {
boolean isPageFault = true;
for (int j = 0; j < M; j++) {
if (memory[j] == pages[i]) { // 命中
isPageFault = false;
break;
}
}
if (isPageFault) { // 未命中
memory[pointer] = pages[i];
pointer = (pointer + 1) % M;
pageFaults[i] = 1;
}
}
int pageFaultCount = 0; // 页面失效次数总和
for (int i = 0; i < pageFaults.length; i++) {
pageFaultCount += pageFaults[i];
}
double hitRate = 1 - (double) pageFaultCount / pages.length; // 命中率
System.out.println("命中率为:" + hitRate);
System.out.println("页面置换过程:");
for (int i = 0; i < pages.length; i++) {
System.out.print(pages[i] + " ");
if (pageFaults[i] == 1) {
System.out.print("F ");
} else {
System.out.print(" ");
}
for (int j = 0; j < M; j++) {
System.out.print(memory[j] + " ");
}
System.out.println();
}
}
}
```