存储管理算法java代码
代码
第一步:创建MemoryManage_Operation类
public class MemoryManage_Operation {private String[][] dataStrings = new String[33][4];//数据传递数组private int[] Addstream = new int[320];//地址流private int[] Addspage = new int[320];//页面流private int[] phyBlock = new int[32];//物理块数private Random random = new Random();//随机数private int blockNum;//内存块数private int npageNum;//缺页数临时变量private float rate;//缺页率private int tempK, tempG, tempF;//临时变量// 产生随机地址流和页面流public void setProduceAddstream(){int temp;for (int i = 0; i < 320; i+=3 ){ temp=random.nextInt(320) % 320 + 0;Addstream[i] = temp + 1;temp = random.nextInt(320) % (Addstream[i] + 1);Addstream[i+1] = temp + 1;temp = random.nextInt(320)%(319 - Addstream[i+1]) + (Addstream[i+1] + 1);if (i+2 >= 320){ break; } Addstream[i+2] = temp; }for (int i = 0; i < 320; i++){ Addspage[i] = Addstream[i] / 10; } } //用户内存及相关数据初始化private void initialization(){for (int i = 0 ; i < 32 ;i++){ phyBlock[i] = -1; }this.npageNum = 0;this.rate = 0;this.tempK = 0;this.tempG = -1;this.tempF = -1; }public void FIFO() {int[] time = new int[32]; //定义进入内存时间长度数组int max; //max表示进入内存时间最久的,即最先进去的initialization();for(int i = 0; i < blockNum ; i++)time[i]=i+1;for (int i = 0 ; i < 320; i++) {this.tempK = 0;for (int j = 0; j < blockNum; j++)if (phyBlock[j] == Addspage[i]){ //表示内存中已有当前要调入的页面this.tempG = j;break; }for (int j = 0; j < blockNum ;j++)if (phyBlock[j] == -1) {//用户内存中存在空的物理块this.tempF = j;break; }if (this.tempG != -1)this.tempG = -1;else { if (this.tempF == -1){//找到最先进入内存的页面max = time[0];for(int j = 0; j < blockNum ;j++)if(time[j] > max) {max = time[j];this.tempK = j; }phyBlock[tempK] = Addspage[i];time[tempK] = 0; //该物理块中页面停留时间置零npageNum++; //缺页数+1}else {phyBlock[tempF] = Addspage[i];time[tempF] = 0;npageNum++;tempF = -1; } }for (int j =0; j < blockNum && phyBlock[j] != -1; j++)time[j]++; //物理块中现有页面停留时间+1}this.rate = 1 - (float)npageNum / 320;dataStrings[blockNum][1] = this.rate+""; }public void LRU(){int[] time = new int[32];int max;initialization();for (int i = 0; i < blockNum ;i++)time[i] = i + 1;for (int i = 0; i < 320 ;i++){tempK=0;for (int j = 0;j < blockNum ; j++)if (phyBlock[j] == Addspage[i]){this.tempG = j;break; }for (int j = 0;j < blockNum ; j++)if (phyBlock[j] == -1){this.tempF = j;break; }if (this.tempG != -1){ time[tempG] = 0;this.tempG = -1; }else{if (this.tempF == -1){ max=time[0];for (int j = 0; j < blockNum ;j++)if (time[j] > max){ this.tempK = j;max=time[j]; }phyBlock[tempK] = Addspage[i];time[tempK] = 0;npageNum++; }else{ phyBlock[tempF] = Addspage[i];time[tempF] = 0;npageNum++;this.tempF = -1;} }for (int j = 0;j < blockNum && phyBlock[j] != -1 ; j++)time[j]++;}this.rate = 1 - (float)npageNum / 320;dataStrings[blockNum][2] = this.rate+"";}public void LFR(){ initialization();int[] time_lru = new int[32];int [] time = new int[32];int min,max_lru,t;for (int i = 0; i < blockNum; i++){ time[i]=0;time_lru[i]=i+1; }for (int i = 0;i < 320; i++){ this.tempK = 0;t=1;for (int j = 0; j < blockNum; j++)if (phyBlock[j] == Addspage[i]){this.tempG = j;break; }for (int j = 0; j < blockNum; j++)if (phyBlock[j] == -1){ this.tempF = j;break; }if (this.tempG != -1){ time_lru[tempG] = 0;this.tempG = -1; }else{ if (this.tempF == -1){if (i <= 20){//将最少使用的间隔时间定位个单位max_lru=time_lru[0]; //在未达到“一定时间”的要求时,先采用LRU进行页面置换for (int j = 0;j < blockNum; j++)if (time_lru[j] > max_lru) {this.tempK = j;max_lru = time_lru[j];}phyBlock[tempK] = Addspage[i];time_lru[tempK]=0;npageNum++;}else{ for (int j = 0;j < blockNum; j++) //计算一定时间间隔内物理块中的页面使用次数for (int h = i-1;h >= i - 1; h--)if (phyBlock[j] == Addspage[h])time[j]++;min=time[0];for (int j = 0; j < blockNum; j++)if (time[j] < min){min=time[j];this.tempK = j; }for (int j = 0;j < blockNum; j++) //应对出现页面使用次数同样少的情况if (time[j] == min)t++;if (t>1) {//若使用次数同样少,将次数相同的页面按照LRU进行页面置换max_lru=time_lru[tempK];for (int j =0; j < blockNum && time[j] == min ;j++)if (time_lru[j]>max_lru){this.tempK = j;max_lru=time_lru[j];} }phyBlock[tempK] = Addspage[i];time_lru[tempK] = 0;npageNum++;} }else{phyBlock[tempF] = Addspage[i];time_lru[tempF] = 0;npageNum++;tempF = -1;} }for (int j = 0; j < blockNum && phyBlock[j] != -1; j++)time_lru[j]++;}this.rate = 1 - (float)npageNum / 320;dataStrings[blockNum][3] = this.rate+"";}public int getBlockNum(){ return blockNum; }public void setBlockNum(int blockNum){ this.blockNum = blockNum; }public String[][] getDataStrings(){ return dataStrings; }public void setDataStrings(String[][] dataStrings){ this.dataStrings = dataStrings; } }
第二步:创建ManageSWT类
public class ManageSWT {public static void main(String[] args) {MemoryManage_Operation mOperation = new MemoryManage_Operation();mOperation.setProduceAddstream();String[][] tempStrings = new String[33][4];for (int i = 2; i <= 32; i++) {mOperation.setBlockNum(i);tempStrings[i][0] = i + "K";mOperation.FIFO();mOperation.LRU();mOperation.LFR();tempStrings[i][1] = mOperation.getDataStrings()[i][1];tempStrings[i][2] = mOperation.getDataStrings()[i][2];tempStrings[i][3] = mOperation.getDataStrings()[i][3];}System.out.print("物理块数"+" "+"先进先出的算法"+" "+"最近最少使用算法"+" "+"最少访问页面算法");for (int i = 2; i < 33; i++) {System.out.println("");for (int j = 0; j < 4; j++) {System.out.print(tempStrings[i][j]+" ");}}}
}
运行截图
存储管理算法java代码相关推荐
- 算法高级(13)-常见负载均衡算法Java代码实现
我们在分布式系统常见负载均衡算法中对负载均衡及负载均衡算法进行了介绍,接下来我们用代码对常见的几种算法进行实现. 本文讲述的是"将外部发送来的请求均匀分配到对称结构中的某一台服务器上&quo ...
- 冒泡算法java代码实现
冒泡排序是什么?我们先来看百度百科的介绍 冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的 ...
- Levenshtein Distance算法JAVA代码与示例图解
Levenshtein Distance莱文斯坦距离 指的是两个字串之间,由一个转成另一个所需的最少编辑操作次数.允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. Leven ...
- 缓存淘汰策略—LRU算法(java代码实现)
LRU 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高" ...
- 各种存储分配算法java代码实现_Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF...
1 概述 本文是利用Java实现操作系统中的四种动态内存分配方式 ,分别是:BF NF WF FF 分两部分,第一部分是介绍四种分配方式的概念以及例子,第二部分是代码实现以及讲解. 2 四种分配方式 ...
- 非对称加密——RSA算法JAVA代码实践
文章目录 说明 RSA加解密 测试代码 打印输出 说明 1:下面代码参考自<JAVA加密解密的艺术>,有部分修改,详见原理见原书 2:下面代码是RSA在JAVA中API级别的代码实现,具体 ...
- Dijkstra最短路径算法——java代码实现
具体的算法详解可以看这篇博客Dijkstra最短路径算法详解. 这里我利用.txt文件存储了有向加权图中顶点之间的连接关系以及边上的权重,文件格式如下: 代码所构造的有向加权图如下: package ...
- 插入排序的三种算法(Java代码实现)
目录 插入排序: 基本思想: 1:直接插入排序: 基本思想: 过程: 2:折半插入排序: 基本思想: 过程: 3:希尔排序: 基本思想: 过程: 插入排序: 基本思想: 每一趟将一个待排序的数,按照它 ...
- 低版本的Hadoop实现 Apriori 算法Java代码
Apriori 关联规则挖掘的一种算法,其逻辑简单,网上有很多关于算法逻辑的介绍,在此不再赘述.使用hadoop实现Apriori算法的核心在于,循环计算,在Map过程对候选项进行识别,Combine ...
最新文章
- 美国进入紧急状态:谷歌投入1700名工程师上阵抗疫,马斯克称车祸比新冠病毒危险...
- Altium Designer 18 怎么导出CAD文件
- 3706 teradata 语句报错_Teradata SQL
- 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝
- 如何抓取html请求,怎么获取请求头
- ios刻录软件_好用免费的剪辑软件神器可以剪辑、导出,让大家都变成为大师级!...
- 【多媒体技术】多媒体技术期末复习题
- 虚拟光驱下载安装和使用,Windows系统如何直接打开iso文件
- JEB2.2.7闪退
- Python语音基础操作--2.4语音信号生成
- 什么时候真正体会到了,磨刀不误砍柴工?
- Esp8266闪存文件系统LIttleFS
- 遇到PX Deq: reap credit等待事件
- 数据中台,什么是数据中台?
- php校园学校宿舍管理系统 php毕业设计题目课题选题 php毕业设计项目作品源码(3)班主任和宿舍管理员功能
- 在大厂呆过多年的35岁“大龄”程序猿,聊聊35岁以上的程序猿们都干什么去了
- Java断点调试 idea断点调试 debug教程
- Python pandas,index索引,修改索引,复合索引,将某列设为索引
- 计算机关闭状态有哪三种,电脑怎么退出安全模式有几种方法
- NSSCTF刷题wp——Crypto入门
热门文章
- AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)
- AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:10-09:55裴健教授《智能搜索:从工具到思维方式和心智》
- 成功解决NameError: name 'apply' is not defined
- OS_CORE.C(7)
- SQL Server 查找统计信息的采样时间与采样比例
- 知识图谱基础知识之四——知识图谱的典型应用
- ArcObject开发时,axtoolbarcontrol中一些添加的按钮是灰色的问题
- NAT的全然分析及其UDP穿透的全然解决方式
- [唐胡璐]Java操作Sql Server 2008数据库
- CentOS6安装redmine