Java版-请求页式储存管理_LRU
package 请求页式储存管理_LRU;
public class LRU {
public static void main(String[] args) {
int a[] = {5123, 5123, 1068, 2159, 231, 3589, 984, 4568, 2984, 3542};
int[] num = transform(a);
System.out.println("指令地址的页号为:");
outarrary(num);
System.out.println();
Lru(num);
}
public static int[] transform(int a[]) {
int[] num = new int[a.length];
for (int i = 0; i < a.length; i++) {
num[i] = a[i] / 1024;
}
return num;
}
public static void outarrary(int arr[]){
for (int i = 0; i <arr.length ; i++) {
if (arr[1] == -1){
System.out.println(arr[0]+" "+"空"+" "+"空");
break;
} else if (arr[2] == -1){
System.out.println(arr[0]+" "+arr[1]+" "+"空");
break;
}else {
System.out.print(arr[i] + " ");
}
}
}
public static int Min(int A, int B, int C){
int min = 0;
if (A<B){
min = A;
}
else {min = B ;}
if (min > C){
min = C;
}
return min;
}
public static void Lru(int num[]) {
int[] array = new int[3];
int que=0;
for (int i = 0; i < num.length; i++) {
if (i == 0) {
array[0] = num[0];
array[1] = -1;
array[2] = -1;
System.out.printf("%-2s%-2s%-2s",array[0],"空","空");
que++;
} else {
for (int k = 0; k < array.length; k++) {
if (num[i] == array[k]) {
System.out.println();
outarrary(array);
break;
}else if (k == 2) {
if(array[1]==-1){
array[1] = num[i];
System.out.printf("%-2s%-2s%-2s",array[0],array[1],"空");
que++;
}else if (array[2]==-1){
array[2] = num[i];
System.out.println();
System.out.printf("%-2s%-2s%-2s",array[0],array[1],array[2]);
que++;
}else {
System.out.println();
que++;
int A = -1;int B=-1;int C=-1;
for (int j = i-1; j >=0; j--) {
if (array[0]==num[j] &&(A<j)){ A = j;}
if (array[1]==num[j]&&(B<j)){ B = j;}
if (array[2]==num[j]&&(C<j)){ C = j; }
}
int min = Min(A,B,C);
for (int j = 0; j <array.length ; j++) {
if (array[j]==num[min]){
array[j]=num[i];
outarrary(array);
}
}}
}
}
}
}
System.out.println();
System.out.println("缺页率为:");
System.out.println(que+"/"+num.length);
}
}