操作系统-页面淘汰算法LRU和FIFO(Java)

首先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运行的结果
在这里插入图片描述
如果有错误,欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值