`
qq_24665727
  • 浏览: 121676 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

LRU-最少使用页面置换算法

阅读更多

      LRULeast Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。

可以用一个特殊的栈来保存当前正在使用的各个页面的页面号。当一个新的进程访问某页面时,便将该页面号压入栈顶,其他的页面号往栈底移,如果内存不够,则将栈底的页面号移除。这样,栈顶始终是最新被访问的页面的编号,而栈底则是最近最久未访问的页面的页面号。

        如输入以下序列时:4,7,0,7,1,0,1,2,1,2,6

        结果为:

4        
4        7        
4        7        0        
4        0        7        
4        0        7        1        
4        7        1        0        
4        7        0        1        
4        7        0        1        2        
4        7        0        2        1        
4        7        0        1        2        
7        0        1        2        6        

 

 

   Java代码实现LRU算法如下:

import java.util.ArrayList;  
import java.util.List;  
  
  
public class LRU {  
    /** 
     * 内存块的个数 
     */  
    public static final int N = 5;  
    /** 
     * 内存块数组 
     */  
    Object[] array = new Object[N];  
    private int size;  
      
    public LRU() {  
    }  
    /** 
     * 判断内存区是否为空 
     * @return 
     */  
    public boolean isEmpty() {  
        if(size == 0) {  
            return true;  
        } else {  
            return false;  
        }  
    }  
    /** 
     * 判断内存区是否达到最大值 
     * @return 
     */  
    public boolean isOutOfBoundary() {  
        if(size >=N) {  
            return true;  
        } else {  
            return false;  
        }  
    }  
    /** 
     * 查找元素o在数组中的位置 
     * @param o 
     * @return 
     */  
    public int indexOfElement(Object o) {  
        for(int i=0; i<N; i++) {   
            if(o == array[i]) {  
                return i;  
            }  
        }  
        return -1;  
    }     
    /** 
     * 有新的数据o需要申请内存 
     * @param o 
     * @return 移出内存区的数据 
     */  
    public Object push(Object o) {  
        int t = -1;  
        if(!isOutOfBoundary() && indexOfElement(o) == -1){  
            array[size] = o;  
            size ++;  
        } else if(isOutOfBoundary() && indexOfElement(o) == -1){  
            for(int i=0; i<size-1; i++) {  
                array[i] = array[i+1];                
            }  
            array[size-1] = o;  
        } else {  
            t = indexOfElement(o);  
            for(int i=t; i<size-1; i++) {  
                array[i] = array[i+1];  
            }  
            array[size-1] = o;  
        }  
        if( -1 == t) {  
            return null;  
        } else {  
            return array[t];  
        }  
    }  
    /** 
     * 输出内存区中的各数据 
     */  
    public void showMemoryBlock() {  
        for(int i=0; i<size; i++) {  
            System.out.print(array[i] + "\t");  
        }  
    }  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        Integer iter[] = {4,7,0,7,1,0,1,2,1,2,6};  
        LRU lru = new LRU();  
        for(int i=0; i<iter.length; i++) {  
            lru.push(iter[i]);  
            lru.showMemoryBlock();  
            System.out.println();  
        }  
    }  
  
}  

     LRU算法也可以用于一些实际的应用中,如你要做一个浏览器,或类似于淘宝客户端的应用的就要用到这个原理。大家都知道浏览器在浏览网页的时候会把下载的图片临时保存在本机的一个文件夹里,下次再访问时就会,直接从本机临时文件夹里读取。但保存图片的临时文件夹是有一定容量限制的,如果你浏览的网页太多,就会一些你最不常使用的图像删除掉,只保留最近最久使用的一些图片。这时就可以用到LRU算法 了,这时上面算法里的这个特殊的栈就不是保存页面的序号了,而是每个图片的序号或大小;所以上面这个栈的元素都用Object类来表示,这样的话这个栈就可以保存的对像了。

 

转自:http://blog.csdn.net/luoweifu/article/details/8297084

 

0
3
分享到:
评论
1 楼 wangyunhom 2016-09-06  
push方法返回的不是移除去的对象吧? 移除的应该是前面和现在要插入的一样的对象,移除的就是现在插入的对象 o ,而不是array[t] 对象

相关推荐

    用C++实现LRU页面置换算法

    使用LRU算法实现页面置换算法。LRU算法基于一种假设,长期不使用的数据,在未来的使用性也不大。因此,当数据占用内存达到一定的阙值时,我们要移除最近最少使用的数据。LRU算法中,使用了一种有趣的数据结构,叫做...

    由链表实现的存储管理 先出页面置换算法、最近最少使用LRU页面置换算法、最佳置换算法

    本主题聚焦于通过链表实现的存储管理,特别是涉及了三种重要的页面置换算法:先出(FIFO)页面置换算法、最近最少使用(LRU)页面置换算法和最佳(OPT)置换算法。 首先,内存分配与回收是存储管理的基础。当一个新...

    虚拟内存——页面置换算法1

    4. **时钟页面置换算法(Clock Page Replacement Algorithm)**:时钟算法是LRU和FIFO的折衷方案,使用访问位跟踪页面访问状态。发生缺页时,从指针开始检查访问位为0的页面进行替换。周期性地清零访问位,降低实现...

    操作系统 课程设计 页面置换算法FIFO和 LRU

    本课程设计项目专注于两种常见的页面置换算法:FIFO(先进先出)和LRU(最近最少使用)。这两种算法都是为了在主存空间不足时决定哪些页面应该被换出到磁盘,以便腾出空间加载新的页面。 **FIFO页面置换算法**: ...

    FIFO、OPT、LRU页面置换算法实验代码和截图

    LRU(Least Recently Used)页面置换算法是一种基于最近最少使用的页面置换算法。该算法会将最近最少使用的页面移除,以腾出空间供其他页面使用。这种算法的优点是可以减少页面错误率,但缺点是实现难度高。 实验...

    LRU 页面置换算法 最近最久未使用 源代码 c/c++

    ### LRU页面置换算法详解与C/C++实现 在计算机科学中,页面置换算法是操作系统内存管理中的一个重要组成部分,主要用于解决虚拟内存环境下的页面调度问题。其中,“最近最少使用”(Least Recently Used,简称LRU)...

    LRU页面置换算法

    LRU(Least Recently Used,最近最少使用)页面置换算法是一种常用的内存管理策略,它用于解决在有限的物理内存中管理大量虚拟内存页的问题。当内存不足时,LRU算法会淘汰那些最近最少使用的页面,以腾出空间供新...

    页面置换算法(fifo,lru,opt) C语言编写

    在这个C语言实现的项目中,我们主要关注三种常见的页面置换算法:FIFO(先进先出)、LRU(最近最少使用)和OPT(最佳页面置换)。下面将详细解释这三种算法的工作原理以及它们在C语言编程中的实现。 1. FIFO(先进...

    操作系统存储管理页面置换算法(OPT FIFO LRU LFU)完整代码

    操作系统课程设计作品,请求分页存储管理的页面置换算法模拟。共四种:FIFO\LRU\LFU\OPT 。在VC环境下运行完全成功。 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验...

    操作系统页面置换算法之-LRU(最近最少未使用)

    LRU页面置换算法 操作系统 大作业 郑州大学软件学院 含有详细注释

    页面置换算法FIFO:先进先出 NUR: 最近未使用算法

    综上所述,页面置换算法如FIFO、NUR、LFU和LRU等,都是根据不同的页面使用策略来决定何时替换页面,以达到最优的内存利用率。实际操作系统中,通常会采用更复杂的算法,如LRU-K,以适应各种不同的工作负载和应用场景...

    页面置换算法(FIFO,LRU,OPT)

    根据给定的文件标题、描述、标签以及部分内容,本文将详细介绍页面置换算法中的三种常见算法:先进先出(FIFO)、最近最少使用(LRU)和最佳置换算法(OPT),并探讨它们在操作系统内存管理中的应用。 ### 页面置换...

    操作系统实验三页面置换算法实验报告.docx

    该实验报告主要介绍了操作系统中的页面置换算法实验,涵盖了 FIFO、Optimal 和 LRU 等三种常见的页面置换算法。实验报告中还提供了实验源码,展示了如何使用 C 语言实现这些算法。 知识点一:页面置换算法 页面...

    编写程序实现虚拟存储管理中OPT,FIFO,LRU页面置换算法

    根据给定文件的信息,我们可以详细地探讨一下在虚拟存储管理中如何实现三种主要的页面置换算法:Optimal (OPT), First-In First-Out (FIFO), 和 Least Recently Used (LRU)。此外,我们还会简要提及Clock置换算法,...

    基于C语言实现的两种常见页面置换算法(OPT,LRU)

    根据设计要求实现对页面置换算法的模拟以及 进程状态转换的模拟。 1.根据自己输入 物理块数量,访问页面总数,要访问的页面号,  2.然后选择所需的置换算法 OPT,LRU 二选一. 计算过程,并得出 缺页次数,缺页率,...

    FIFO,LRU,LFU页面置换算法模拟程序.zip

    本资源包含的是一个针对三种常见页面置换算法的模拟程序:FIFO(先进先出)、LRU(最近最少使用)和LFU(最不经常使用)。通过这个程序,用户可以直观地理解这些算法的工作原理和性能差异。 **FIFO(先进先出)页面...

    最近最少使用(LRU)置换算法

    最近最久未使用(LRU) 选择最后一次访问时间距离当前时间最长的一页并淘汰之 LRU软件实现 设置一个页号栈, 当一个页面被访问时,就立即将它的页号压入页号栈,并检查页号栈中是否有与刚压入栈顶的相同的页号,若...

    操作系统 程实现请求分页存储管理页面Optimal、FIFO、LRU置换算法

    本实验旨在通过实际编程实现请求分页存储管理中的三种页面置换算法:最优置换算法(Optimal)、先进先出置换算法(FIFO)以及最近最少使用置换算法(LRU),帮助学生深入理解和掌握虚拟存储管理的核心概念和技术。...

    操作系统LRU页面置换算法

    操作系统中的LRU(Least Recently Used)页面置换算法是内存管理的一种关键策略,它在处理物理内存有限而程序需要访问的页面数量超过内存容量时发挥作用。LRU算法的基本思想是:最近最少使用的页面最有可能在未来一...

    页面置换算法(FIFO算法,LRU算法)

    页面置换算法(FIFO算法,LRU算法) 页面置换算法是操作系统中的一种重要机制,用于处理虚拟存储管理中的缺页中断。页面置换算法的主要目的是从内存中选择一页页面替换到外存中,以便腾出空间来存储新的页面。在这...

Global site tag (gtag.js) - Google Analytics