操作系统中的LRU置换算法的实现(java实现)

深入理解分布式技术 - 缓存过期策略&手写LRU 文章目录Pre页面置换算法内存淘汰策略缓存过期策略如何实现一个 LRU 缓存 Pre 缓存使用的是内存资源,而内存资源是非常宝贵的,要用有限的服务器资源支撑更多的业务,就必须让那些访问频率不高的缓存删除掉,为新的缓存腾出内存空间。 这里我们一起来看一下,缓存失效有哪些策略。 页面置换算法 我们从一开始就提到,缓存技术在计算机系统设计中有着非常广泛的应用,对应到操作系统中,就是缓存页面的调度算法。 在操作系统中,文件的读取会先分配一定的页面空间,也就是我们说的 Page,使用页面的时候首先去查询空间是否 阅读详情

在学习操作系统这本书的时候,我们使用的是汤小丹老师的《计算机操作系统》接下来我将会使用java语言去实现内部代码。

LRU算法

LRU算法全程为Least Recently Used置换算法,最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做出的决策。

假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:

7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1

当进程第一次对页面2进行访问时,由于页面7是最近最久未访问的,故将它置换出去。当进程第一次对页面3进行访问时,第一页称为最远最久未使用的页,故将它换出。以此类推。

 

以下是源代码实现部分:

package chapter02;
public class P176LRU {
    //查找元素是否在数组中存在
    public static int paramExist(int[] place,int param){
        for (int i = 0; i < place.length; i++) {
            if(place[i]==param)
                return i;
        }
        //不为空
        return -1;
    }

    //查找元素是否在数组中存在
    public static void ChangePlaceCount(int[] placeIndex,int NotNeedIndex){
        for (int i = 0; i < placeIndex.length; i++) {
            if(i==NotNeedIndex)
                placeIndex[i]=0;
            else
                placeIndex[i]++;
        }
    }

    //获取最大距离值
    public static int getMaxIndexOfCount(int[] place,int[] placeCount){
        int maxCount = placeCount[0];
        int maxIndex = 0;
        for(int i = 0;i<placeCount.length;i++){
            if(placeCount[i]>maxCount){
                maxCount = placeCount[i];
                maxIndex = i;
            }
        }
        return maxIndex;
    }
    public static void main(String[] args) {
        int[] block = new int[]{7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};
        int max = block.length;
        int[] place = new int[]{-1,-1, -1};
        int[] placeCount = new int[]{max,max,max};
        for (int index = 0; index < block.length; index++) {
            //假设元素存在则不需要进行任何操作
            int exitsIndex = paramExist(place,block[index]);
            if(exitsIndex!=-1){
                //当前existIndex需要清零,其他的需要进行++
                ChangePlaceCount(placeCount,exitsIndex);
                continue;
            }
            //元素不存在,即为-1
            else {
                int maxIndex = getMaxIndexOfCount(place,placeCount);
                place[maxIndex] = block[index];
                ChangePlaceCount(placeCount,maxIndex);
                for (int param : place) {
                    System.out.print(param + " ");
                }
                System.out.println();
            }
        }
    }
}

实验结果:

"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" 
7 -1 -1 
7 0 -1 
7 0 1 
2 0 1 
2 0 3 
4 0 3 
4 0 2 
4 3 2 
0 3 2 
1 3 2 
1 0 2 
1 0 7 

Process finished with exit code 0

 

 

虚拟内存管理的页面置换模拟演练 本文还有配套的精品资源,点击获取 简介:操作系统页面置换模拟涉及虚拟内存管理和硬件资源优化。物理内存不足时,操作系统使用硬盘空间扩展内存,并执行页面置换以腾出空间。页面置换算法,如FIFO、LRU和LFU,对于理解和优化系统性能至关重要。在Java中,可以使用链表和哈希表等数据结构模拟页面置换过程,分析算法性能差异。提供文件包含源代码、实验报告和数据样本,有助于深入理解虚拟... 阅读详情

相关推荐

页面置换算法的模拟实现

用Java语言实现页面置换算法

2301_79794414的博客 1108

【操作系统】页面置换算法

页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置换算法。页面置换算法的好坏,将直接影响系统的性能。 一个好的页面置换算法,应做到减少页面置换的频率。尽量将以后不会用到的或较长时间不会使用的页面给置换出。 下面介绍几种常用的页面置换算法。 ...

liushall 1万+

保姆级教程:在Ubuntu 20.04上从源码编译Apollo自动驾驶平台(含GPU环境配置)

本文提供了一份详细的Ubuntu 20.04上从源码编译Apollo自动驾驶平台的保姆级教程,包括GPU环境配置、Docker部署和编译构建等关键步骤。通过实战经验和避坑指南,帮助开发者高效完成Apollo平台的编译和验证,适用于自动驾驶技术研究和应用开发。

weixin_30876945的博客 407

页面置换算法

最佳置换算法 最佳置换算法是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。 缺点:由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。   举例: 假定系统为某...

月雲之霄的博客 2806

视频教程-SAP S4 HANA FICO COPA 获利能力分析-ERP

SAP S4 HANA FICO COPA 获利能力分析 从业超过8年的SA...

weixin_33456805的博客 1442

S4 Hana SD -信贷管理 - 02

在S4版本中,客户的信用管理数据在事务代码BP维护,业务伙伴角色是UKM000。在维护过程中,我们并不能直接输入信贷控制范围这个组织架构,而是需要输入一个信用段,并且在信用段的维度下去维护相应信用管理数据。对于信用段,可以分为主信用段(信用段是0000)和其他临时信用段,我们可以通过配置把次级信用段的客户信贷负债汇总到主信用段。当然,在后台也有配置,会把信用段和信贷控制范围这两者进行关联.3.2SPROIMG > 财务供应链管理 > 信用管理 > 信贷风险监视 > 主数据 > 创建信用段。

weixin_46525734的博客 1965

操作系统之内存管理_页面置换算法(C++实现LRU)

一、问题描述 场景: 假定系统为某进程分配了3个物理块,并考虑有页面号引用串{7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1}。 若采用LRU算法进行页面置换,如上图所示,进程第一次对页面2访问时,将最近最久未被访问的页面7置换出去,然后再访问3时,将最近最久未使用的页面1置换出去。 现采用C++实现LRU,模拟上述过程 二、C++实现LRU 1.预备知识 (1)LRU : Least Recently Used 最近最少使用 (2

南七行者的博客 2632

VS2019 C# MySQL 学生信息增删改查(一、增删)

VS2019 C# MySQL 学生信息增删改查 由于刚刚学习VS2019,入手的第一个例子是编写一个简单的增删改查。这里,我以学生信息为例,进行详细的过程描述以及代码实现。 一、 新建一个Windows窗体应用程序 1、创建新项目界面,如下图所示。 2、更改项目名称,当然不修改也可以。我这里的是“StudentInfoSystem”;项目存放位置路径根据自己需要进行更改;“将解决方案和项目放在同一目录中”前面的勾选框,选不选都可以;点击“创建”,如下图所示。 二、前期准备工作 1、将Form1属性中

青哥 1万+

页面置换算法--

页面置换算法:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。 常见的页面置换算法: 最佳置换算法(OPT):这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法的基本思想是:其所选...

Sweet77 2138

uniapp APP端:蓝牙报错writeBLECharacteristicValue:fail property not support(uni.writeBLECharacteristicVal)

uni-app 蓝牙fail property not support、发现不了服务特征值的问题、突然发现微信蓝牙小秘密,使用uni-app编译成安卓APP后报错writeBLECharacteristicValue:fail property not support,发现不了服务特征值,uniApp APP调用蓝牙API发送指令过快导致,uniapp 蓝牙 writeBLECharacteristicValue property_not_support iOS Android BLE GATT 特征值写入

✅ 精选推荐文章 2943

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 778

操作系统实验3页面置换算法

地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。 1.最佳置换算法(OPT)(理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后...

wylululu的博客 4558

深度强化学习在足式机器人中的应用 (一):基础原理与仿真环境

我们将首先深入探讨其背后的核心挑战与技术栈,然后详细推导机器人学和强化学习的基本数学原理,特别是剖析在机器人控制领域表现卓越的PPO算法。下面的独立Python脚本展示了Isaac Gym的基本API用法,加载一个Go1机器人(假设URDF已准备好),并让它执行一个简单的预设动作(正弦波运动),以此来熟悉仿真流程。:代码的核心是直接操作GPU上的PyTorch张量,避免了CPU和GPU之间的数据拷贝,这是实现高性能的关键。:所有计算(如伪策略中的正弦波计算)都应该是向量化的,一次性为所有。

VectorShift的博客 228

操作系统页面置换算法Java实现(LFU,OPT,LRU,LFU,CLOCK)

操作系统页面置换算法Java实现(LFU,OPT,LRU,LFU,CLOCK)

ngczx的博客 1823

2025年数学建模国赛高教社杯A题、B题、C题、D题、E题详细思路和代码 模型||插值与拟合

核心思想:构造一个精确通过所有已知离散数据点(xi, yi)的函数y = f(x),并以此函数来估算或预测未知点的值。基本假设:我们认为已知的数据点是100%精确、无误差的(或者误差可忽略不计),比如理论计算值、高精度仪器测量值等。我们的目标是“还原”或“重建”出点与点之间的真实函数关系。关键特征精确性:曲线或曲面必须穿过每一个样本点。局部性:插值结果严重依赖于局部数据点的分布和数值。用途:用于“补全”数据、填充缺失值、进行函数近似等。常见方法多项式插值:拉格朗日插值、牛顿插值。

2201_76125261的博客 802

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

操作系统之虚拟存储管理 java python 实现 最优(Optimal)置换算法 先进先出(FIFO)页面置换算法 LRU(Least Recently Used)置换算法

虚拟存储 实验内容:模拟请求分页虚拟存器管理技术中的硬件地址变换、缺页中断以及页式淘汰算法,处理缺页中断。 实验目的:清楚认识请求分页管理。 最佳(Optimal)置换算法 其所选择的被淘汰页面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。 采用最佳置换算法,可保证获得最低的缺页率。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBqPit9W-1639662420975)(虚拟存储.assets/image-20211216091344590.png

SKPrimin的博客 5060

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

操作系统之三种页面置换算法(OPT,FIFO,LRU)--Java实现

页面置换算法的定义: 程序运行过程中,有时要访问的页面不在内存中,而需要将其调入内存。但是内存已经无空闲空间存储页面,为保证程序正常运行,系统必须从内存中调出一页程序或数据送到磁盘对换区,此时需要一定的算法来决定到低需要调出那个页面。通常将这种算法称为“页面置换算法”。 页面置换算法有三种:分别是最佳置换算法、先进先出置换算法、最近最久未使用置换算法 其中最好的是最佳置换算法,但最佳置换算法只是个理想化模型,缺页率最高的是先进先出置换算法。 最佳置换算法的原理:每次从物理块内选择未来最长时间不被访问或者以后

weixin_44976835的博客 9995

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

操作系统页面置换法FIFO,LRU,OPT调度算法Java实现

操作系统页面置换法FIFO,LRU,OPT调度算法Java实现

Faker__的博客 2964

fifo页面置换算法java_操作系统页面置换算法(opt,lru,fifo,clock)实现

#include #include#include#include#include#include#include#define N 200using namespacestd;int page[N];//页面引用号int block[N];//物理块,内存int dist[N][N];//表示第i次访问内存的时候,内存中的页面j 在以后被访问的最小时间int n;//页面引用号个数int m;/...

weixin_39524882的博客 541

Java中LRU的实现

前言 LRU,全程Least Recently Used,即最近最久未使用算法,用于操作系统的页面置换算法,以及一些常见的框架。其原理实质就是当需要淘汰数据时,会选择那些最近没有使用过的数据进行淘汰,换句话说,当某数据被访问时,就把其移动到淘汰队列的队首(也就是最不会被淘汰的位置) 实现 基于这样的原则,我们就可以着手实现了。不过Java已经为我们提供了一个现成的模板,我们站在巨人的肩膀上,可以参...

weixin_34417635的博客 5414

LRU算法——从原理到手撕

背景—页面置换 操作系统中对物理内存的管理采取分页、多级页表的方式。 当CPU访问的页面不在物理内存时,便会产生一个缺页中断,请求操作系统将所缺页从磁盘调度到物理内存中。 此时若物理内存已满,则需要从物理内存中选出一个页面,调度到磁盘中, 然后将需要用到的页面放到物理内存中,实现页面置换。

weixin_45651194的博客 913

c语言页面调度lru,python模拟页面调度LRU算法

所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。这个题为京东2015年笔试考题,主要考察对LRU算法的理解代码如下n = int(input())def LRU(pages, maxNum):temp = []times = 0fo...

weixin_39695490的博客 607

操作系统 页面置换算法实现

操作系统 页面置换算法实现 import java.util.Scanner; public class page_change { final int M=3; final int N=20; class block { int iPageNum; //物理块里存储的页面号 int iBlockFlag; //在三种算法中用到的标记。例如在FIFO中为在内存中的时间 public block(int iPa

I_still_like_you的博客 463

基于LinkedHashMap实现一个LRU算法的Cahce对象

LRU是什么?按照英文的直接原义就是Least Recently Used,最近最久未使用法,它是按照一个非常著名的计算机操作系统基础理论得来的:最近使用的页面数据会在未来一段时期内仍然被使用,已经很久没有使用的页面很有可能在未来较长的一段时间内仍然不会被使用。基于这个思想,会存在一种缓存淘汰机制,每次从内存中找到最久未使用的数据然后置换出来,从而存入新的数据!它的主要衡量指标是使用的时间,附加指...

solo的博客 448

LRU(JAVA简洁版)

一、算法介绍 最近最久未使用(Least Recently Used LRU)算法是⼀种缓存淘汰策略,它是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。该算法的思路是,发生缺页中断时,将最近一段时间内最久未使用的页面置换出去。 从程序运行的原理来看,最近最久未使用算法是比较接近理想的一种页面置换算法,这种算法既充分利用了内存中页面调用的历史信息,又正确反映了程序的局部问题。 虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。 ..

上山的人 1万+

[原创]LRU算法的简单实现(基于Java链表)

[原创]LRU算法的简单实现(基于Java链表) 最近最久未使用(LRU,Least Recently Used)算法,是操作系统中一种常用的页面置换策略。 例如下图,对于序列 {1, 8, 1, 7, 8, 2, 7, 2, 1, 8, 3, 8, 2, 1, 3, 1, 7, 1, 3, 7} 最终留在缓存中的页面是2,1,3,7. 今天使用链表简单实现了一下,我的思路是,在页...

u014645508的博客 1070
上一篇: 操作系统中的最佳置换Optimal算法的实现(java实现)
下一篇: 数据结构-树-获取深度(Java语言)
夜石
博客等级 码龄10年 89粉丝 136原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值