页面置换算法(java)

页面置换算法

  在一个请求分页系统中,分别采用最佳置换算法、先进先出置换算法、最近最久未使用置换算法(LRU)时,假如一个作业的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数M分别为3和4时,试计算在访问过程中所发生的缺页次数和缺页率,并比较所得结果。

实验步骤与记录

(一)准备阶段
  因为作业的页面走向是一串数字,因此可以定义一个数组 pageString[] 来储存将要发送请求的页号,同时还需要定义一个数组 inStore[] 作为分配给该作业的内存物理块以及定义一个变量times记录缺页次数。
  根据题目要求内存物理块数M分别为3和4,所以我构造了一个方法 setInStore() ,用来初始化内存物理块,并将内存物理块中的数值置为无实际含义的“-1”:
在这里插入图片描述
(二)置换方法实现阶段
1、最佳置换算法和最近最久未使用置换算法(LRU)
  分析发现这两种算法几乎相同,只是一个向后看,一个向前看,因此将两个算法的代码放在一起分析:
  以内存物理块数是3为例,进程运行时,内存未满时,先将4、3、2三个页面依次装入内存。
在这里插入图片描述
  内存满后,进程要访问页面,先判断该页是否在内存中,如果在内存中则不会产生缺页中断。
在这里插入图片描述
  如果不在内存则需要将内存中的页根据最佳置换方法置换出来。即由请求页在作业的页面走向( pageString[ ] )数组中的位置为起点,如果是“最佳置换算法”则分别计算当前内存中各页下次出现的距离(即由起点向后遍历 pageString[ ] 数组),而“LRU置换算法”则由起点向前遍历 pageString[ ] 数组,分别计算当前内存中各页到起点的距离(需注意的是将遍历结束后再也不出现的页号的距离置为最大值),这需要定义一个大小与内存物理块数相同的数组( num[ ] )来存放计算出来的距离。(这是两种算法唯一的不同点)
在这里插入图片描述
在这里插入图片描述
  比较距离的大小,将距离最远的替换出来。
在这里插入图片描述
2、先进先出置换算法(FIFO)
  内存空间未满时将请求页依次放入内存。内存满后,判断请求页是否在内存中,如果在内存则不产生缺页中断(此段代码与最佳算法相同),反之则产生缺页中断需要依据先进先出规则对内存中的页面进行置换。即将内存中最早进入的页换出。这需要数组( num[ ] )用来存放内存中各页面进入内存的先后顺序,内存中最早进入的页面的序号标记为“1”,第二早的标记为“2”,依次将内存中的页标记好,最后换出最早进入的页面(即序号标记为“1”的页)
在这里插入图片描述
(三)输出内存变化过程以及计算缺页次数和缺页率
1、构建一个方法( putInstore() )输出内存的当前状态
在这里插入图片描述
2、定义一个变量 times 作为访问过程中所发生的缺页次数,每发生一次缺页中断 times 就+1。然后根据“缺页率=缺页次数/进程总页面访问次数”构造一个方法( pagef() )计算缺页率。
在这里插入图片描述

运行结果

  当分配给该作业的物理块数为3时:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  当分配给该作业的物理块数为4时,最佳置换算法缺页中断次数为6,缺页率为0.5;先入先出算法缺页中断次数为10,缺页率为0.8333333;LRU置换算法缺页中断次数为8,缺页率为0.6666667。

代码文件下载

链接: https://download.csdn.net/download/qq_49101550/15482296

页面置换算法操作系统中用于管理内存的一种重要技术,它决定了在物理内存不够用时,将哪些页面从内存中调出,以便为新的页面腾出空间。常见的页面置换算法有以下几种: 1. 最佳适应算法(Optimal Algorithm):该算法是一种最理想的页面置换算法,它总是选择未来最长时间内不再被引用的页面进行置换。然而,由于无法预测未来的页面访问情况,实际中无法实现。 2. 先进先出算法(FIFO Algorithm):该算法是最简单的页面置换算法,它总是选择最早进入内存的页面进行置换。缺点是存在"Belady异常",即内存分配增加时,缺页中断反而会增加。 3. 最近最久未使用算法(LRU Algorithm):该算法是一种基于"局部性原理"的页面置换算法,它总是选择最近最久未使用的页面进行置换。这种算法较好地利用了程序的局部性特征,但实现较为复杂。 4. 时钟置换算法(Clock Algorithm):该算法基于环形链表实现,每个页面对应一个标志位。当页面被访问时,标志位置1;当需要置换页面时,从当前位置开始,找到第一个标志位为0的页面进行置换。如果找不到标志位为0的页面,则将所有标志位置为0,并再次进行搜索。 5. 最不常用算法(LFU Algorithm):该算法根据页面被访问的频率进行置换,总是选择使用次数最少的页面进行置换。这种算法适用于频繁访问某些页面的场景。 以上是常见的页面置换算法,每种算法都有其优缺点,选择哪种算法取决于具体应用场景和需求。在Java中,你可以根据需要实现这些算法,并应用于你的项目中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开朗小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值