博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最佳(Optimal)置换算法模拟
阅读量:7104 次
发布时间:2019-06-28

本文共 1454 字,大约阅读时间需要 4 分钟。

hot3.png

定义

       最佳(Optimal)置换算法是指,其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。

算法过程

       现举例说明如下。

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

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

       进程运行时,先将7,0,1 三个页面装入内存。以后,当进程要访问页面2 时,将会产生缺页中断。此时OS根据最佳置换算法,将选择页面7 予以淘汰。这是因为页面0 将作为第5 个被访问的页面,页面1 是第14 个被访问的页面,而页面7 则要在第18 次页面访问时才需调入。下次访问页面0时,因它已在内存而不必产生缺页中断。当进程访问页面3时,又将引起页面1 被淘汰;因为,它在现有的1,2,0 三个页面中,将是以后最晚才被访问的。下图所示出了采用最佳置换算法时的置换图。由图可看出,采用最佳置换算法发生了6 次页面置换。

利用最佳页面置换算法时的置换图

最佳(Optimal)置换算法模拟源代码

package pageturning;import java.util.ArrayList;import java.util.List;public class Optimal {	/**	 * 内存块的个数	 */	public static final int N = 3;	/**	 * 内存块数组	 */	private Object[] array = new Object[N];	//内存块中元素的个数	private int size;	//元素i未来longest[i]个单位时间后将被使用	private int[] longest = new int[N];			//private Object[] procList;	public Optimal() {	}	/**	 * 判断内存区是否为空	 * @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
输入
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1时,结果如下:
7        
7        0        
7        0        1        
2        0        1        
2        0        1        
2        0        3        
2        0        3        
2        4        3        
2        4        3        
2        4        3        
2        0        3        
2        0        3        
2        0        3        
2        0        1        
2        0        1        
2        0        1        
2        0        1        
7        0        1        
7        0        1        
7        0        1        

转载于:https://my.oschina.net/verynix/blog/366016

你可能感兴趣的文章
jsp通过include指令引入html乱码的解决方法
查看>>
中文传值火狐、google浏览器无问题,但IE有乱码问题的解决
查看>>
源码编译安装httpd
查看>>
MySQL基础操作
查看>>
知物由学 | 你真的了解网络安全吗?
查看>>
【董天一】IPFS vs Filecoin: 开发者该如何选择
查看>>
在 CentOS 7 上搭建 KVM 虚拟化平台和基础管理
查看>>
ios逆向之:dump应用的头文件
查看>>
解决mysql:The server quit without updating PID file
查看>>
网络实验要求
查看>>
linux7 ntp 开机不自动启动
查看>>
做一次面向对象的体操:将 JSON 字符串转换为嵌套对象的一种方法
查看>>
高可用Redis服务架构分析与搭建
查看>>
论JVM爆炸的几种姿势及自救方法
查看>>
Tomcat远程debug
查看>>
Java的BIO,NIO和AIO的区别于演进
查看>>
核心标签库-------------------二
查看>>
人工智能的就业替代效应
查看>>
生成树理论内容
查看>>
AJPFX总结正则表达式的概述和简单使用
查看>>