实现页面置换的算法(OPT,FIFO,LRU)Java版

OPT算法

定义:OPT(最佳置换算法):从主存中移出永远不再需要的页面,如果没有这样的页面存在,那就选择最长时间不需要访问的页面,来保证最低的缺页率。

import java.util.*;

public class OPT {
	private static List<Integer> new_list = new ArrayList<Integer>();//定义一个缓存容器,备用
	private static int temp = 0;//定义每次置换时需要替换的元素序列号

	public void O(int[] seq,int pages) {
		int page_break = 0;//定义断页次数
		LinkedList<Integer> list = new LinkedList<Integer>();//定义一个缓存容器
		for (int i = 0; i < seq.length; i++) {
			if (!list.contains(seq[i])) {//如果list不包含访问序列需要访问的序列号时,包含则跳过
				if (list.size() != pages) {//当物理块未满时
					list.addLast(seq[i]);//追加到此列表的末尾
					page_break++;//断页加一
				}else {//如果物理块满了
					int flag = list.indexOf(index(seq,list,i));//此返回值为需要替换的序列号
					list.remove(flag);//删除这个元素
					list.addLast(seq[i]);// 追加最后一个新元素
					page_break++;// 置换,断页加一
				}
			}
		}
		//输出结果
		System.out.println("断页次数:" + page_break + "
断页中断率:" + page_break * 1.0 / seq.length);
	}
	//此方法主要是寻找需要替换的序列号,参数分别表示为访问序列号,物理块所装的序列号,当前要访问的序列号
	//temp和new_list均为静态变量,因为在进行下一次的调用时,上一次的值会保留下来,这样有利于比较值的大小
	public static int index(int[] seq, LinkedList<Integer> list, int num) {
		int value=0;//定义返回值
		//该for循环
  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值