Belady现象

Belady现象:


采用FIFO算法时,如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象

Belady现象的描述:一个进程P要访问M个页,OS分配N(N<M)个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N).当N增大(且N小于M)时,PE(S, N)时而增大,时而减小。
FIFO是最早出现的页置换算法之一。Belady现象的原因是FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的,因而FIFO并不是一个好的置换算法。
belady和抖动并不完全一样。

 

维基百科给出的示例:

 

Page Requests:    3     2     1     0     3     2     4     3     2     1     0     4

Newest Page:       3     2     1     0     3     2     4     4     4     1     0     0

                                    3     2     1     0     3     2     2     2     4     1     1

Oldest Page:                      3     2     1     0     3     3     3     2     4     4

                              ×    ×    ×     ×    ×     ×     ×                 ×    ×   

 

Page Requests:    3     2     1     0     3     2     4     3     2     1     0     4

Newest Page:       3     2     1     0     0     0     4     3     2     1     0     4

                                    3     2     1     1     1     0     4     3     2     1     0

                                           3     2     2     2     1     0     4     3     2     1

Newest Page:                            3     3     3     2     1     0     4     3     2

                               ×    ×    ×     ×                  ×     ×     ×     ×     ×    ×

 

 页框从3个增加到4个 但缺页从9个增加到10个

### Belady现象概述 当采用某些页面置换算法时,可能会遇到一种反直觉的现象:增加分配给进程的物理页框数量反而导致缺页中断次数增多。这种异常行为被称为Belady现象[^1]。 #### 发生条件 并非所有的页面置换算法都会引发此现象。研究表明,在FIFO(先进先出)页面替换策略下最容易观察到这一特性。而LRU(最近最少使用)、OPT(最优)等其他常见算法则不会表现出此类异常情况。 #### 原理分析 造成该现象的原因在于特定的工作集模式与所使用的页面置换算法之间的不匹配。对于具有循环访问特征的工作负载而言,如果工作集中存在周期性的重复部分,则随着分配更多内存空间,这些额外的空间可能被用于存储那些即将被淘汰但仍属于当前活跃集合内的页面副本。这使得真正需要加载的新数据不得不驱逐掉一些实际上很快又要再次访问的数据项,从而增加了整体的缺页率。 ```python def simulate_belady_anomaly(page_requests, frame_count): page_table = [] fault_counter = 0 for i in range(len(page_requests)): current_page = page_requests[i] if current_page not in page_table: if len(page_table) >= frame_count: # Remove the oldest page (FIFO behavior) del page_table[0] page_table.append(current_page) fault_counter += 1 return fault_counter ``` 上述Python函数模拟了一个简单的场景来展示如何通过改变`frame_count`参数影响缺页错误的数量变化趋势,进而验证Belady现象的存在可能性。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值