设计四:页面置换

设计目的:

加深对请求页式存储管理实现原理的理解,掌握页面置换算法。

设计内容:

设计一个程序,有一个虚拟存储区和内存工作区,实现下述三种算法中的任意两种,计算访问命中率(命中率=1-页面失效次数/页地址流长度)。附加要求:能够显示页面置换过程。

算法包括:先进先出的算法(FIFO)、最少使用算法(LFU)、最近未使用算法(NUR)

该系统页地址流长度为320,页面失效次数为每次访问相应指令时,该指令对应的页不在内存的次数。

程序首先用srand()和rand()函数分别进行初始化、随机数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。

通过随机数产生一个指令序列。共320条指令,指令的地址按下述原则生成:

(1)50%的指令是顺序执行的。

(2)25%的指令是均匀分布在前地址部分。

(3)25%的指令是均匀分布在后地址部分。

具体的实施方法如下:

在【0,319】的指令地址之间随机选取一起点m。

顺序执行一条指令,即执行地址为m+1的指令。

在前地址【0,m+1】中随机选取一条指令并执行,该指令的地址为m’。

顺序执行一条指令,其地址为m’+1。

在后地址【m’+2,319】中随机选取一条指令并执行。

重复步骤(1)-(5),直到320次指令。

将指令序列变换为页地址流。

设:

页面大小为1KB。

用户内存容量4页到32页。

用户虚存容量为32KB。

在用户虚存中,按每K存放10条指令虚存地址,即320条指令在虚存中的存放方式为:

第0条~9条指令为第0页(对应虚存地址为【0,9】)。

第10条~19条指令为第1页(对应虚存地址为【10,19】)。

……

第310条~319条指令为第31页(对应虚拟地址为【310,319】)。

按以上方式,用户指令可组成32页。

计算每种算法在不同内存容量下的命中率。

import java.util.Random;
public class Hello {  public static void main(String[] args){int order=320;           //指令数int [] c=new int[order];     //地址访问顺序int [] b=new int[order];     //页面访问顺序int memory=16;            //内存容量int lose=0;         //页面失效次数double hit_rate=0;  //命中率int i,j,k;int count1=0;int count2=0;int m1,m2,m3;Random rand = new Random();
/System.out.println("产生的随机数为:");for(i=0;;i++){m1=rand.nextInt(320);     //在0--319之间随机产生一个数c[count1]=m1+1;System.out.print(c[count1]+" ");count1++;count2++;if(count1==order)break;if(count2==32){System.out.print("\n");count2=0;}m2=rand.nextInt(m1+1);    //在0--m1+1之间随机产生一个数c[count1]=m2+1;System.out.print(c[count1]+" ");count1++;count2++;if(count1==order)break;if(count2==32){System.out.print("\n");count2=0;}m3=rand.nextInt(320-m2-2)+m2+2;    //在m2+2--319之间随机产生一个数c[count1]=m3+1;System.out.print(c[count1]+" ");count1++;  count2++;if(count1==order)break;if(count2==32){System.out.print("\n");count2=0;}}System.out.print("\n");
///System.out.println("访问页面的顺序为:");count2=0;for(i=0;i<order;i++){b[i]=c[i]/10;System.out.print(b[i]+" ");count2++;if(count2==32){System.out.print("\n");count2=0;}}System.out.print("\n");
/////       for(memory=4;memory<=32;memory++){System.out.println("页面进入内存的步骤为:");Queue queue=new Queue();  for(i=0;i<order;i++){if((queue.L-queue.F)==memory){    //如果内存满了,就淘汰最早进入内存的页面,否则直接进入内存for(j=queue.F;j<queue.L;j++){if(b[i]==queue.a[j])break;}if(j==queue.L){          //如果没有命中,先进去的页面就先出来lose++;queue.out();queue.come(b[i]);}}else{for(j=queue.F;j<queue.L;j++){if(b[i]==queue.a[j])break;}if(j==queue.L){          //如果没有命中,页面进入内存lose++;queue.come(b[i]);}}for(k=queue.F;k<queue.L;k++)System.out.print(queue.a[k]+"  ");System.out.print("\n");}
/       System.out.println("页面失效次数为:"+lose);hit_rate=1-(lose/320.0);System.out.println("命中率="+hit_rate);lose=0;hit_rate=0;//       }}
}
class Queue{      //队列int a[]=new int[10000];int F=0;int L=0;void come(int num){if(L>=999)System.out.println("队满");a[L]=num;L++;    }void out(){if(F>L)System.out.println("队空");F++;}int isexit() {if(L>F)return 1;elsereturn 0;}void exchange(int i){int t;t=a[F];a[F]=a[i];a[i]=t;}
}

置换过程太长,这里就不截图了,想要看的自己运行一下程序。

JAVA 页面置换先进先出算法(FIFO)相关推荐

  1. (C语言实现)页面置换——先进先出算法(FIFO)

    一.设计目的: 加深对请求页式存储管理实现原理的理解,掌握页面置换算法中的先进先出算法. 二.设计内容 设计一个程序,有一个虚拟存储区和内存工作区,实现下述三种算法中的任意两种,计算访问命中率(命中率 ...

  2. 计组之存储系统:7、Cache替换算法(随机算法RAND、先进先出算法FIFO、近期最少使用LRU、最近不经常使用LFU)

    7.Cache替换算法 思维导图 存在的问题 替换算法解决的问题 Cache替换算法 随机算法(RAND) 先进先出算法(FIFO) 近期最少使用(LRU) 最近不经常使用(LFU) 思维导图 存在的 ...

  3. 请求分页置换算法——先进先出算法(FIFO)

    先进先出算法 1.策略 2.例题 3.先进先出算法的不足 4.练习题 1.策略 将内存中的页按装入内存真的先后顺序排列,淘汰时,选择最先进入内存的页 2.例题 一个进程在运行过程中依次访问的页号(也称 ...

  4. OS 页面置换算法(OPT,FIFO,LRU)颠簸/抖动

    介绍 置换算法 置换算法(replacement algorithm)又称为淘汰算法.替换算法,用于确定页面的调出原则. 在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发 ...

  5. 页面置换算法 FIFO和LRU 及各自的命中率

    (1) 先进先出算法FIFO:该算法的实质是选择作业中在主存驻留时间最长的一页淘汰,这种算法容易实现,例如分配一个作业的存储块数为m,则只需建立一张m个元素的队列表Q(0).Q(1).-.Q(m-1) ...

  6. 页面置换算法——C/C++实现 [ OTP, FIFO, LRU, LFU + 开源代码 + 详细解析]

    ⌛️ 文章目录 零.运行结果图 一.最佳置换算法(OPT) 二.先进先出算法(FIFO) 三.最近最久未使用算法(LRU) 四.最不经常使用算法(LFU) 五.完整代码 -- C语言版本 六.完整代码 ...

  7. 2020-11-22(操作系统——页面置换算法)

    当内存中的页面满了之后,需要的数据又在磁盘虚拟内存中,可以使用页面置换算法将需要的页置换到物理内存中.下面先介绍几种局部页面置换算法,其针对一个进程而言的页面置换. 一.局部页面置换算法 1.最优页面 ...

  8. 一文讲懂页面置换算法,带例题详解

    目录 ​什么是页面置换算法? ​缺页中断次数和页面置换次数 ​啥子是缺页? ​啥子是中断? ​啥子是缺页中断? ​缺页中断次数 ​最佳置换算法OPT和先进先出置换算法FIFO ​最佳置换算法OPT ​ ...

  9. 操作系统实验(五):c实现几种页面置换算法

    1.[实验目的] 加深对页面置换算法的理解. 掌握几种页面置换算法的实现方法. 通过实验比较各种置换算法的优劣. 2.[实验内容] 1.参考用C语言实现的先进先出算法FIFO的代码,实现最佳置换算法O ...

最新文章

  1. nginx和squid配合搭建的web服务器前端系统
  2. 【赠书】图神经网络优质书籍,送你3本进行学习
  3. 《Redis官方文档》Redis调试指南
  4. Go语言编程:Go语言实现快速排序算法
  5. 聊聊时间管理,不是多人运动那种
  6. mybatis调用oracle存储过程例子.
  7. 初步计算机技术的书,计算机控制技术务书.doc
  8. 157 判断字符串是否没有重复字符
  9. 12个Flex常用功能代码
  10. Leetcode刷题笔记(部分非原创)(1-20题)
  11. 【MATLAB中UIGETFILE函数的用法】
  12. ArcCatalog中通过ArcSDE向Oracle数据库中导入数据
  13. 使用sap BO sap BO报表制作财务三栏明细账
  14. unison实现文件双向同步
  15. 个人推荐一款并发测试工具
  16. 7z和winrar命令行压缩方法
  17. 基于OpenCV实现的灰度图幻影坦克
  18. Pandas二次学习- 回炉重造(进阶)
  19. Linux命令+shell脚本大全:处理数据文件
  20. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/practi

热门文章

  1. 使用python中的requests爬取软科大学排名并存储在本地MySql数据库
  2. png格式的图片体积太大怎么办?如何压缩png图片?
  3. 栈(stack)简单实现,系统栈是如何保存函数调用信息的?
  4. Android - Broadcast
  5. 测试流程和测试用例设计方法
  6. 特征工程7种常用方法
  7. 什么是特征工程?如何进行特征工程?超详细解读
  8. app闪退之-- GL error: Out of memory!
  9. STC8H单片机I2C协议驱动OLED 的困惑
  10. Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程