首先FIFO:优先淘汰进入内存最早的页面
class fifo {
public fifo(List<Integer> list,int n) {
int[] nums=new int[n];
for(int k=0;k<n;k++) {
nums[k]=-1;
}
int i=0;
int count=0;
int sum=0;
for(int j=0;j<list.size();j++) {
int tmp=list.get(j);
int k=0;
for(k=0;k<n;k++) {
if(tmp==nums[k]) {
count++;
break;
}
}
if(k==n&& tmp!=nums[k-1]) {
nums[i%n]=tmp;
i++;
}
}
sum=list.size()-count;
System.out.println("缺页次数--"+sum);
}
}
很简单就是按照一定的顺序,代码写的很啰嗦。
然后 LRU,就是按照很朴素的思想 设置一个关键字每次取出最大的,如果有的话,就直接置成最小,这里的blog记录了页面值和在内存中待的时间数级。
class LRU{
public LRU(List<Integer> list,int n) {
List<blog> ans=new ArrayList<>();
int count=0;
int sum=list.size();
for(int i=0;i<n;i++) {
ans.add(new blog(-1,n-i));
}
for(int i=0;i<list.size();i++) {
Collections.sort(ans);
int tmp=list.get(i);
int j=0;
for(;j<n;j++) {
if(tmp==ans.get(j).value) {
for(int k=0;k<n;k++) {
int o=ans.get(k).getStatus();
o++;
ans.get(k).setStatus(o);
}
ans.get(j).setStatus(1);
count++;
break;
}
}
if(j==n&&ans.get(j-1).value!=tmp) {
for(int k=0;k<n;k++) {
int o=ans.get(k).getStatus();
o++;
ans.get(k).setStatus(o);
}
ans.get(n-1).setValue(tmp);
ans.get(n-1).setStatus(1);
}
}
sum-=count;
System.out.println("缺页次数为---"+sum);
}
}
这里贴出LRU运行的结果
如果有错误,欢迎指正。