• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: 其他
  • 标签:

资源简介

通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。

资源截图

代码片段和文件信息

import java.util.linkedList;

public class LRU {

    private linkedList stack;//模拟页面‘寄存器‘
    private int size;//寄存器大小表示一共可装入多少页面
    
    public LRU(int size) {
        stack = new linkedList<>();
        this.size = size;
    }

    //LRU算法简单实现返回一共未命中的次数
    public int lru(int[] pageNumbers)
    {
        if(size <= 0 || pageNumbers == null)
            throw new IllegalArgumentException(“illegal arugments“);
        
        if(pageNumbers.length <= size)
            return pageNumbers.length;
       
        int unhit = 0;
            
        for(int i = 0; i < pageNumbers.length; i++)
        {
            int index = isHit(pageNumbers[i]);
            if(index == -1)
            {
             unhit = processUnHit(pageNumbers[i] unhit);
             System.out.println(“  “+pageNumbers[i]+“  “+“缺页“);
            }
            else
            {
                ifHit(pageNumbers[i] index);
                System.out.println(“  “+pageNumbers[i]+“  “+“命中“);
            }
        }
        return unhit;
    }
    
    /**
     * 
     * @param pageNumber 判断 pageNumber是否hit
     * @return -1 表示 unhit 其他表示hit
     */
    private int isHit(int pageNumber){
        return stack.indexOf(pageNumber);
    }
    
    /**
     * 当栈未满时未命中的页面号直接入栈;栈满时需要替换页面先选中一个页面(栈底)删除然后Push新页面
     * @param pageNumber 未命中的页面号
     * @param count 当前未命中次数
     * @return 更新后的未命中的次数
     */
    private int processUnHit(int pageNumber int count){
        if(isFull())
            stack.removeLast();//删除最久未访问的页面
        stack.push(pageNumber);//放入最近访问的页面
        count++;//未命中的次数加1
        return count;
    }
    
    //命中更换
    private void ifHit(int pageNumber int index){
            stack.push(stack.remove(index));
    }
    
    //判断‘寄存器‘栈是否已经满了
    private boolean isFull()
    {
        if(stack.size() < size)
            return false;
        else
            return true;
    }
    
    //test
    public static void main(String[] args) {
        int[] pageNumbers = {47117245718};
        int size = 3;
        for(int i = 0; i < pageNumbers.length; i++)
         System.out.print(“  “+pageNumbers[i]+“  “);
        System.out.println();
        LRU lru = new LRU(size);
        System.out.println(“缺页率:“+lru.lru(pageNumbers)+“/“+pageNumbers.length);
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-11-11 14:06  squid\
     文件         301  2016-11-11 10:07  squid\.classpath
     文件         381  2016-11-11 10:07  squid\.project
     目录           0  2016-11-11 14:06  squid\.settings\
     文件         598  2016-11-11 10:07  squid\.settings\org.eclipse.jdt.core.prefs
     目录           0  2016-11-11 14:06  squid\bin\
     文件        2503  2016-11-11 11:37  squid\bin\LRU.class
     目录           0  2016-11-11 14:06  squid\src\
     文件        2712  2016-11-11 11:37  squid\src\LRU.java

评论

共有 条评论