LRU页面调度算法的实现

用Java实现操作系统的页面调度算法--LRU

      页面调度算法--LRU,即按照最近最早使用的原则来调页。下面的例子是页块数为3,页面访问序列为20的LRU,返回的是缺页率。
原理:先把页块分别标记为0,1,2,其中0表示最近最早使用的。每进行一次调页时,首先遍历页块,
如果命中,那么就把页块标记大于命中页块标记的页标记--,并当前页块标记为2,表示这是最新调用的。
如果不命中,那么就把页块标记为0的页找出来,并赋值为当前页面访问的值。并且把页块标记大于命中页块标记的页标记--,并当前页块标记为2,表示这是最新调用的。

public class LRU_algorithm {

        static int[]a={1,2,5,6,0,3,6,5,3,6,5,6,0,4,2,7,0,4,3,5};
static int[][]b=new int[3][2];
static int count=0;
public static void main(String[] args) {
// TODO 自动生成的方法存根
        LRU();
        System.out.println(count);
        System.out.println("缺页率为"+(count+0.0)/20);
}

   public static void LRU(){
b[0][0]=a[0];b[0][1]=0;                                              //页块数为3,最早的页标记为0
b[1][0]=a[1];b[1][1]=1;                            
b[2][0]=a[2];b[2][1]=2;                                              //最近调用的页标记为2
count=3;                                                                   //缺页次数,页块数为3
for(int i=3;i<20;i++){                                                 //输入的页面访问序列为20
int flags=0;                                                       //判断哪个页是最近最早使用的
for(int j=0;j<3;j++){
if(b[j][0]==a[i]){                                         //如果命中,那么标记变为2,break
for(int r=0;r<3;r++){
 if(b[j][1]<b[r][1]) b[r][1]--;               //让比当前命中的页号大的标记--,说明新的一轮来了,改变标记                           
}
b[j][1]=2;
break;
}
if(b[j][1]==0){                                          //找出最近最早使用的页,其标记为0;
flags=j;
}
if(j==2){                                                  //如果不命中,那么就取之前找出的最近最早使用的页替换,并标记为2,缺页数++

b[flags][0]=a[i];

for(int r=0;r<3;r++){
  if(b[flags][1]<b[r][1]) b[r][1]--;       //调页,让比当前命中的页号大的标记--,说明新的一轮来了,改变标记                           
}

b[flags][1]=2;
count++;
}
}
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值