页面置换算法及例题

一、页面置换算法

不适当的算法可能会导致进程发生“抖动”:即刚被换出的页很快又要被访问,需要将他重新调入,此时又需要再选一页调出。而此刚被调出的页面很快又被访问,又需将它调入,如此频繁地更换页面,以致一个进程在运行中把大部分时间都花费在页面置换工作上,我们称该进程发生了“抖动”。

一个好的页面置换算法应该具有较低地页面更换频率。从理论上讲,应将哪些以后不再会访问地页面换出,或把那些在较长时间内不会再访问的页面调出。目前已有多种置换算法,他们都试图更接近于理论上的目标。下面介绍几种常用的置换算法。

二、常用的页面置换算法

1.最佳(Optimal)置换算法

其所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,是理想化的算法(因为我们很难预知未来要访问哪些页面),可以用来评测其他实际应用算法的好坏。

2.先进先出(FIFO)置换算法

总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面给予淘汰(由于与页面的使用规律不符,可能是性能最差的算法)。

3.最近最久未使用LRU(Least Recently Used)置换算法

选择最近最久未使用的页面予以淘汰。

4.最少使用LFU(Least Frequently Used)置换算法

选择在最近时期使用最少的页面作为淘汰页(当使用次数相同时,谁最先来淘汰谁)。

5.Clocks置换算法

(1)简单的Clocks置换算法(最近未使用NRU(Not Recently Used)算法)

为每一页设置一个访问位,再将内存中所有页面通过指针链接成一个循环队列。当某页被访问时,其访问位置1。在选择某一页淘汰时,只需检查页的访问位。如果是0,就选择该页换出,若为1,则重新将他置0,暂不换出,给予该页第二次驻留内存的机会,再检查下一个页面。当检查到队列中最后一个页面时,若访问位仍为1,则再返回队首去检查第一个页面。

图为简单Clocks算法的流程示意图

(2)改进型Clocks置换算法

在简单型的基础上再增加一个修改位M,组合成四类页面:

①(A=0,M=0):表明该页最近既未被访问,又未被修改,是最佳淘汰页

②(A=0,M=1):表明该页最近未被访问,但已被修改,并不是很好的淘汰页

③(A=1,M=0):表明该页最近已被访问,但未被修改,该页有可能再被访问

④(A=1,M=1):表明该页最近已被访问且被修改,该页可能再被访问

算法执行过程可以总结如下:

<1>指针从当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A

<2>第一步失败,则进行第二轮扫描,寻找A=0且M=1的第二页页面,将所遇到的第一个这类页面作为淘汰页,在第二轮扫描期间,将所有扫描过的页面的访问位都置0

<3>第二步失败,则指针返回开始位置,并将所有访问位复0,重复第一步,若仍失败,再重复第二步,一定能找到被淘汰的页

三、页面置换算法举例

1.最佳分配置换算法

插入顺序

1

2

3

4

1

2

5

1

2

3

4

5

内存

1

1

1

1

1

1

1

1

1

3

3

3

 

2

2

2

2

2

2

2

2

2

4

4

 

 

3

4

4

4

5

5

5

5

5

5

是否缺页

+

+

+

+

 

 

+

 

 

+

+

 

 

 

 

 

 

 

 

 

 

 

 

理想条件下缺页次数为7次,缺页率为7/12

2.先进先出置换算法

插入顺序

1

2

3

4

1

2

5

1

2

3

4

5

内存

1

1

1

4

4

4

5

5

5

5

5

5

 

2

2

2

1

1

1

1

1

3

3

3

 

 

3

3

3

2

2

2

2

2

4

4

是否缺页

+

+

+

+

+

+

+

 

 

+

+

 

 

 

 

 

 

 

 

 

 

 

 

缺页次数为9次,缺页率为3/4

3.最久未使用置换算法

插入顺序

1

2

3

4

1

2

5

1

2

3

4

5

内存

1

1

1

4

4

4

5

5

5

3

3

3

 

2

2

2

1

1

1

1

1

1

4

4

 

 

3

3

3

2

2

2

2

2

2

5

是否缺页

+

+

+

+

+

+

+

 

 

+

+

+

 

 

 

 

 

 

 

 

 

 

 

缺页率次数为10次,缺页率为5/6

4.简单Clocks置换算法

插入顺序

1

2

3

4

1

2

5

1

2

3

4

5

内存

1

A=0

1

A=0

1

A=0

4

A=0

4

A=0

4

A=0

5

A=0

5

A=0

5

A=0

3

A=0

4

A=0

4

A=1

 

A=0

2

A=0

2

A=0

2

A=0

1

A=0

1

A=0

1

A=0

1

A=1

1

A=1

1

A=1

1

A=0

5

A=0

 

A=0

 

A=0

3

A=0

3

A=0

3

A=0

2

A=0

2

A=0

2

A=0

2

A=1

2

A=1

2

A=0

2

A=0

是否缺页

+

+

+

+

+

+

+

 

 

+

+

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

缺页次数为10次,缺页率为5/6

转载于:https://www.cnblogs.com/RB26DETT/p/10035804.html

好的,我很乐意为您介绍数字置换算法在虚拟内存中的应用,并提供一个例题来帮助理解。 页面置换算法是虚拟内存管理中的一个重要概念。它决定了当内存空间不足时,哪些页面应该被移出内存,为新的页面腾出空间。常见的页面置换算法包括: 1. 先进先出(FIFO)算法: 最早进入内存的页面最先被替换。 2. 最近最少使用(LRU)算法: 最长时间未被使用的页面被替换。 3. 最不常用(LFU)算法: 使用频率最低的页面被替换。 4. 最优(OPT)算法: 替换将来最长时间不会被使用的页面(理论最优,实际不可实现)。 下面我们来看一个具体的例题: 例题: 假设系统有3个物理页面,使用LRU页面置换算法。给定以下页面访问序列,请计算缺页次数和缺页率。 页面访问序列: 1, 3, 0, 3, 5, 6, 3, 1, 4, 6, 2, 1, 2, 0, 1, 7, 0, 1 解题步骤: 1. 初始化物理页面为空。 2. 依次处理每个页面访问: - 如果页面在物理页面中,更新其使用时间。 - 如果页面不在物理页面中,发生缺页: a. 如果物理页面未满,直接加载新页面。 b. 如果物理页面已满,替换最近最少使用的页面。 3. 统计总缺页次数。 4. 计算缺页率。 解答: 1. 初始化: 物理页面为空。 2. 依次处理: - 1: 缺页, 加载1 - 3: 缺页, 加载3 - 0: 缺页, 加载0 - 3: 命中 - 5: 缺页, 替换1 - 6: 缺页, 替换3 - 3: 缺页, 替换0 - 1: 缺页, 替换5 - 4: 缺页, 替换6 - 6: 缺页, 替换3 - 2: 缺页, 替换1 - 1: 缺页, 替换4 - 2: 命中 - 0: 缺页, 替换6 - 1: 缺页, 替换2 - 7: 缺页, 替换0 - 0: 缺页, 替换1 - 1: 缺页, 替换7 3. 统计: 总缺页次数为17次。 4. 计算缺页率: 17 / 18 = 94.4% 因此,在这个例题中,总缺页次数为17次,缺页率为94.4%。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值