java实现页面置换算法实验报告_Java语言实现模拟页面置换算法-Read.doc

Java语言实现模拟页面置换算法-Read.doc

前言

在存储管理当中,页面置换算法通常可分为两种:一种基于进程驻留集大小不变;另一种基于驻留集大小可变。在驻留集大小不变的页面置换算法当中,常用的算法主要有:FIFO、OPT 、LRU。本文讨论的对象是FIFO、LRU算法。

在进程运行过程中,若所要访问的页面不在内存中,需要调入页面时,选择内存中的那个物理页面将其调出。通常只能在局部性原理指导下,把不再使用的页面调出。如何选择调度策略即页面置换算法至关重要,置换算法的好坏,直接影响着系统的性能,因此我们有必要将常见的FIFO和LRU两种算法进行比较,分析性能。

一、设计目的

了解页面置换的概念;理解页面置换的算法加深对页面置换算法的理解。

二、设计内容

编程实现FIFO和LRU页面算法。可以通过随机数产生新的页面,计算缺页次数和缺页率、置换次数和置换率。

页面置换算法原理

1) 先进先出算法(First In First Out),总选择作业中最先进入内存的一页淘汰。较早调入的页往往是经常被访问的页,这些页在FIFO算法下被反复调入和调出。只有在线性顺序访问地址空间时才是理想的,否则效率不高。在未给进程或作业分配足够的页面数时,缺页次数反而增加,从而产生Belady现象,

2) 最近最久不用的页面置换算法(Least Recently Used Replacement),当需要置换一页面时,选择在最近一段时间内最久不使用的页面予以淘汰。此算法通过周期性的对“引用位”进行检测,并利用它来记录一个页面自上次访问以来所经历的时间T;淘汰时,选择T为最大的页。选择内存中最久未使用的页面被置换。这是局部性原理的合理近似,性能接近最佳算法。但由于需要记录页面使用时间的先后关系,硬件开销太大。

四、 页面置换算法设计

1) FIFO算法

A. 算法简述:

① 开始时,因为内存中没有放有页面,所以先将insertPageNumber[](存放要调入的页面,数组大小为pageNumber(页面数))中的一个页面调入内存并放入pageNumberM[](存放调入内存的页面,数组大小为memBlock(物理块数))中;

② 如果insertPageNumber[]中的页面还没有访问完,则从insetPageNumber[]中调入新的页面。否则进入步骤④。如果该页面不在内存中存在,则将pageNumberM[memBlock]中最先进入内存的那个页面调出,然后将新页面放入。进入步骤③。

③ 返回到步骤②。

④ 结束,退出。

B. 算法流程图如下:

FIFO流程图

Y

N

N

N

Y

N

Y

Y

N

Y

LRU算法

A. 原理简述

① 开始时,因为内存中没有放有页面,所以先将insertPageNumber[](存放要调入的页面,数组大小为pageNumber(页面数))中的一个页面调入内存并放入pageNumberM[](存放调入内存的页面,数组大小为memBlock(物理块数))中;

② 如果insertPageNumber[]中的页面还没有访问完,则从insetPageNumber[]中调入新的页面。否则进入步骤④。如果该页面不在内存中存在,则通过访问flagArray[],获得数组元素最大值对应的数组下标index1,然后将新页面放入pageNumber[index1]中。进入步骤③。

③ 返回到步骤②。④ 结束,退出。

Y

N

N

Y

N

Y

五、结果显示

七、 心得体会

FIFO算法当需要置换页面时,主要通过置换最早进入内存的页面从而达到先进先出的目的。

LRU算法当需要置换页面时,主要通过置换进入内存中最久没有被访问的页面而达到最近最久未使用的目的。在这个程序中我只是通过一个标志数组来存储未被访问的次数。

在这个课程设计依据计算出的缺页次数和缺页率、置换次数和置换率,来论证FIFO算法与LRU算法的效果区别,通过测试可以看到对于调入页面的一般情况下LRU算法的置换次数明显的比FIFO算法的置换次数要少,但由于LRU算法是“向前看”的,而页面过去和未来的走向之间并无必然的联系。所以LRU算法与FIFO算法的缺页次数之间并无区别。

1. 通过本次课程设计,加深了对操作系统的页面置换有了一定的了解,并能够用高级语言进行模拟演示。通过查阅相关资料基本掌握了JAVA应用程序编写的基本方法。使用Java编程极大的减少了代码量,直观的界面设计,不仅便于实现而且简化了编码,便于集中精力到主算法的编写上。

2. 两种页面置换算法FIFO和LRU理解起来相当容易,但在实际

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验题目:页面置换算法(请求分页) 二、实验目的: 进一步理解父子进程之间的关系。 1) 理解内存页面调度的机理。 2) 掌握页面置换算法实现方法。 3) 通过实验比较不同调度算法的优劣。 4) 培养综合运用所学知识的能力。 页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度的机制,在模拟实现FIFO、LRU等经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。 三、实验内容及要求 这是一个综合型实验,要求在掌握父子进程并发执行机制和内存页面置换算法的基础上,能综合运用这两方面的知识,自行编制程序。 程序涉及一个父进程和两个子进程。父进程使用rand()函数随机产生若干随机数,经过处理后,存于一数组Acess_Series[]中,作为内存页面访问的序列。两个子进程根据这个访问序列,分别采用FIFO和LRU两种不同的页面置换算法对内存页面进行调度。要求: 1) 每个子进程应能反映出页面置换的过程,并统计页面置换算法的命中或缺页情况。 设缺页的次数为diseffect。总的页面访问次数为total_instruction。 缺页率 = disaffect/total_instruction 命中率 = 1- disaffect/total_instruction 2)将为进程分配的内存页面数mframe 作为程序的参数,通过多次运行程序,说明FIFO算法存在的Belady现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值