请求页式储存管理_LRU

本文详细探讨了请求页式存储管理中的Least Recently Used(LRU)替换算法。通过实例分析,解释了LRU如何选择最近最少使用的页面进行替换,以及它在操作系统内存管理中的应用。同时,文章还涉及了LRU在Java实现中的关键点和常见问题。
摘要由CSDN通过智能技术生成

Java版-请求页式储存管理_LRU

package 请求页式储存管理_LRU;

public class LRU {

    public static  void main(String[] args) {
        int a[] = {5123, 5123, 1068, 2159, 231, 3589, 984, 4568, 2984, 3542};//5,5,1,2,0,3,0,4,2,3
        int[] num = transform(a);
        System.out.println("指令地址的页号为:");
        outarrary(num);
        System.out.println();
        Lru(num);
    }

    //把指令地址转换为页号
    public static int[] transform(int a[]) {
        int[] num = new int[a.length];
        for (int i = 0; i < a.length; i++) {
            num[i] = a[i] / 1024;
        }
        return num;
    }
    //输出数组
    public static void outarrary(int arr[]){
        for (int i = 0; i <arr.length ; i++) {
            if (arr[1] == -1){
                System.out.println(arr[0]+" "+"空"+" "+"空");
                break;
            } else  if (arr[2] == -1){
                System.out.println(arr[0]+" "+arr[1]+" "+"空");
                break;
            }else {
                System.out.print(arr[i] + " ");
            }
        }
    }

    //找到最小下标
    public static int Min(int A, int B, int C){
        int min = 0;
        if (A<B){
            min = A;
        }
        else {min = B ;}
        if (min > C){
            min = C;
        }
        return min;
    }

    public static void Lru(int num[]) {
        int[] array = new int[3];
        int que=0;//缺页数
        for (int i = 0; i < num.length; i++) {
            //没有装满的情况
            if (i == 0) {
                array[0] = num[0];
                array[1] = -1;
                array[2] = -1;
                System.out.printf("%-2s%-2s%-2s",array[0],"空","空");
                que++;
            }  else {//从第i=1个开始判断是否存在
                for (int k = 0; k < array.length; k++) {
                    if (num[i] == array[k]) {//如果存在 直接输出页表
                        System.out.println();
                        outarrary(array);
                        break;//跳出当前for循环(第i个数值在页表里存在)
                    }else if (k == 2) {//现在的num值array里没有
                        if(array[1]==-1){//第二个为空
                            array[1] = num[i];
                            System.out.printf("%-2s%-2s%-2s",array[0],array[1],"空");
                            que++;
                        }else if (array[2]==-1){//第三个为空
                            array[2] = num[i];
                            System.out.println();
                            System.out.printf("%-2s%-2s%-2s",array[0],array[1],array[2]);
                            que++;
                        }else {  // array里3个值放满了 替换掉最久未使用的  同时缺页数+1
                            System.out.println();
                            que++;//缺页数+1
                            //通过下标 从 i-1 往前
                            int A = -1;int B=-1;int C=-1;
                            for (int j = i-1; j >=0; j--) {
                                if (array[0]==num[j] &&(A<j)){ A = j;}
                                if (array[1]==num[j]&&(B<j)){ B = j;}
                                if (array[2]==num[j]&&(C<j)){ C = j; }
                            }
                            //替换掉下标最小的
                            int min = Min(A,B,C);
                            for (int j = 0; j <array.length ; j++) {
                                if (array[j]==num[min]){
                                    array[j]=num[i];
                                    outarrary(array);
                                }
                            }}
                    }
                }
            }
        }
        System.out.println();
        System.out.println("缺页率为:");
        System.out.println(que+"/"+num.length);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值