实验报告5-页面调度

一、实现思路

实验报告5-页面调度

1、关于页面调度

页式虚拟存储器实现的一个难点是设计页面调度(置换)算法,即将新页面调入内存时,如果内存中所有的物理页都已经分配出去,就要按某种策略来废弃某个页面,将其所占据的物理页释放出来,供新页面使用。

2、衡量指标

衡量页面调度性能的指标有:缺页调度次数和缺页中断率、缺页置换率。缺页中断次数是缺页时发出缺页中断的次数;缺页中断率是缺页中断次数/总的页面引用次数100%;缺页调度次数是调入新页时需要进行页面调度的次数;缺页置换率=缺页调度次数/总的页面引用次数*100%。

3、LRU淘汰最近最少调度算法

先进先出调度算法没有考虑页面的使用情况,大多数情况下性能不佳。根据程序执行的局部性特点,程序一旦访问了某些代码和数据,则在一段时间内会经常访问他们,因此最近最少用调度在选择淘汰页面时会考虑页面最近的使用,总是选择在最近一段时间以来最少使用的页面予以淘汰。算法实现时需要为每个页面设置数据结构记录页面自上次访问以来所经历的时间。

二、实验步骤

1、PageSchedule类
public class PageSchedule {
    //页框数
    private Integer pageNum;
    //页面访问列表
    private List<Integer> pageList;
    //定义容器
    List<Integer> container = new LinkedList<>();
    //定义缺页率
    Integer pageMiss = 0;
​
    //构造函数,初始化页框数和页面访问列表
    public PageSchedule(Integer pageNum, List<Integer> pageList) {
        this.pageNum = pageNum;
        this.pageList = pageList;
    }
​
    //LRU淘汰最近最少使用页面的算法
    public void LRU(){
        System.out.println("LRU淘汰最近最少使用页面的算法");
        //遍历页面访问列表
        for (int i = 0; i < pageList.size(); i++) {
            //获取当前页
            Integer page = pageList.get(i);
            System.out.println("第"+ (i+1) +"次请求");
            System.out.print("\t请求前");
            //输出容器
            showContainer();
            System.out.print("\t请求的页面是:"+page+",");
            //缺页
            if (!container.contains(page)){
                //容器已满
                if (container.size() >= pageNum){
                    container.remove(0);
                }
                //将外存页面调入内存
                container.add(page);
                pageMiss++;
                System.out.println("缺页");
            }
            //命中
            else {
                container.remove(page);
                container.add(page);
                System.out.println("命中");
            }
            //输出容器
            System.out.print("\t请求后");
            showContainer();
        }
​
        //计算并格式化输出缺页率
        System.out.println(String.format("页框数为:%d,缺页中断次数为:%d,请页总次数为:%d,缺页率为:%.2f%%",
                pageNum,pageMiss,pageList.size(),100*pageMiss / (pageList.size() * 1.0)));
    }
​
    //格式化输出容器
    private void showContainer() {
        System.out.print("容器:");
        for (Integer page:container) {
            System.out.print(page + "  ");
        }
        System.out.println();
    }
}
2、Test测试类
public class Test {
    public static void main(String[] args) {
        //给定的初始参数
        int pageNum = 3;
        String pageListStr = "7,0,1,2,0,3,0,4,1,6,2,5,3";
        //将字符串转换为List
        List<Integer> pageList = new ArrayList<>();
        String[] strings = pageListStr.split(",");
        for (String str:strings) {
            pageList.add(Integer.parseInt(str));
        }
        //实例化页面调度类
        PageSchedule pageSchedule = new PageSchedule(pageNum,pageList);
        //调用LRU淘汰最近最少使用页面的算法
        pageSchedule.LRU();
    }
}
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇 士 Teacher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值