代码
package package1;
import java.util.Arrays;
public class alg {
//判断tar是否在nums中
public static boolean isIn(int[] nums, int tar) {
for (int n : nums) {
if (tar == n) {
return true;
}
}
return false;
}
public static void fifo(int[] list){
/** * list使用页列表 * 加入前三个 * 判断是否存在 * 不存在去去掉 * 存在下一个 */
System.out.println("------------ 先进先出页面置换算法-------------------");
int[] contain = new int[3];
float times = 0;
for(int i = 0; i < 3; i++){
contain[i] = list[i];
}
for(int i = 3; i < list.length; i++){
if(!isIn(contain, list[i])){
times++;
contain[0] = contain[1];
contain[1] = contain[2];
contain[2] = list[i];
System.out.println("缺页中断- " + "导入:" + list[i] + " 已有:" + Arrays.toString(contain));
}
}
System.out.println("次数:" + times + " 中断率:" + (times/20));
}
public static void lru(int[] list){
System.out.println("------------ 最近最久未使用置换算法-------------------");
int[] contain = new int[3];
float times = 0;
for(int i = 0; i < 3; i++){
contain[i] = list[i];
}
for(int i = 3; i < list.length; i++){
if(!isIn(contain, list[i])){
times++;
contain[0] = contain[1];
contain[1] = contain[2];
contain[2] = list[i];
System.out.println("缺页中断- " + "导入:" + list[i] + " 已有:" + Arrays.toString(contain));
}else{
if(list[i] == contain[0]){
int t = contain[0];
contain[0] = contain[1];
contain[1] = contain[2];
contain[2] = t;
}else if(list[i] == contain[1]){
int t = contain[1];
contain[1] = contain[2];
contain[2] = t;
}
}
}
System.out.println("次数:" + times + " 中断率:" + (times/20));
}
public static int optAided(int[] con,int[] list,int k){
int[] a = {
-1,-1,-1};
for(int i = k;i < list.length; i++){
int t = -1;
for(int j = 0; j < con.length; j++){
if(con[j] == list[j]){
t = j;
break;
}
}
if(t != -1){
if(a[t] == -1){
a[t] = i;
}
}
}
int t = -1;
int r = -1;
for(int i = 0; i < a.length; i++){
if(con[i] == -1)
continue;
if(t == -1){
t = con[i];
r = i;
}
else{
if(t < con[i]){
t = con[i];
r = i;
}
}
}
return r;
}
public static void opt(int[] list){
/** * */
System.out.println("------------ 最佳置换算法-------------------");
int[] contain = new int[3];
float times = 0;
for(int i = 0; i < 3; i++){
contain[i] = list[i];
}
for(int i = 3; i < list.length; i++){
if(!isIn(contain, list[i])){
times++;
int t = optAided(contain, list, i);
if(t == -1){
contain[2] = list[i];
}else{
contain[t] = list[i];
}
System.out.println("缺页中断- " + "导入:" + list[i] + " 已有:" + Arrays.toString(contain));
}
}
System.out.println("次数:" + times + " 中断率:" + (times/20));
}
public static void main(String[] args) {
int[] list = {
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
System.out.println(list.length);
fifo(list);
lru(list);
opt(list);
}
}
结果