深入理解【缺页中断】及FIFO、LRU、OPT这三种置换算法

简介:   缺页中断(英语:Page fault,又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障等)指的是当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。

 

1. 缺页中断

  在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存时,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。 
  缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤: 
  1. 保护CPU现场 
  2. 分析中断原因 
  3. 转入缺页中断处理程序进行处理 
  4. 恢复CPU现场,继续执行 
  但是缺页中断时由于所要访问的页面不存在与内存时,有硬件所产生的一种特殊的中断,因此,与一般的中断存在区别: 
   1. 在指令执行期间产生和处理缺页中断信号 
   2. 一条指令在执行期间,可能产生多次缺页中断 
   3. 缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令

2. 页面置换算法

  进程运行过程中,如果发生缺页中断,而此时内存中有没有空闲的物理块是,为了能够把所缺的页面装入内存,系统必须从内存中选择一页调出到磁盘的对换区。但此时应该把那个页面换出,则需要根据一定的页面置换算法(Page Replacement Algorithm)来确定。

2.1 最佳置换(Optimal, OPT)

2.1.1 基本思想

  置换以后不再被访问,或者在将来最迟才回被访问的页面,缺页中断率最低。但是该算法需要依据以后各业的使用情况,而当一个进程还未运行完成是,很难估计哪一个页面是以后不再使用或在最长时间以后才会用到的页面。所以该算法是不能实现的。但该算法仍然有意义,作为很亮其他算法优劣的一个标准。

2.1.2 算例

  采用固定分配局部置换的策略,嘉定系统为某进程在内存中分配了3个物理块,页面访问顺序为2、3、2、1、5、2、4、5、3、2、5、2。假定系统未采用预调页策略,即未事先调入任何页面。进程运行时,一次将2、3、1三个页面调入内存,发生3次缺页中断。当第一次访问页面5时,产生第4次缺页中断,根据OPT算法,淘汰页面1,因为它在以后不会在使用了;第5次缺页中断时,淘汰页面2,因为它在5、3、2三个页面中,是在将来最迟才会被页面访问的页面。以此类推: 
  注意:第4次中断时将最后不会访问的1剔除,将最后才访问的3放入最下面的内存块中,以后的调度过程中,最后不会访问或最后才被访问的页面总是放在最下面的内存块中。内存块从上到下依次存放最先访问的页面。 
  中断次数为6,缺页中断率为6/12*100% = 50%。

P: 2 3 2 1 5 2 4 5 3 2 5 2
M=3 2 2 2 2 2 5 5 3 5 5 2 2
    3 3 3 5 3 3 5 4 2 5 5
        1 3 2 4 4 3 4 4 4
F=5 Y Y   Y Y   Y     Y    

2.2 先进先出置换算法(First In First Out, FIFO)

2.2.1 基本思想

  置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按照进入内存的先后次序排列成队列,从队尾进入,从队首删除。但是该算法会淘汰经常访问的页面,不适应进程实际运行的规律,目前已经很少使用。

2.2.2 算例

  仍然以OPT算例为例子。 
  中断次数为6,缺页中断率为9/12*100% = 75%。

P: 2 3 2 1 5 2 4 5 3 2 5 2
M=3 2 3 3 1 5 2 4 4 3 3 5 2
    2 2 3 1 5 2 2 4 4 3 5
        2 3 1 5 5 2 2 4 3
F=9 Y Y   Y Y Y Y   Y     Y

2.2.3 Belady异常

  一般来说,分配给进程的物理块越多,运行时的缺页次数应该越少,使用FIFO时,可能存在相反情况,分配4个物理块的缺页竟然比3个物理块的缺页次数还多! 
  例如:进程访问顺序为0、2、1、3、0、2、4、0、2、1、3、4。 
  M=3时,缺页中断9次。缺页中断率9/12*100% = 75%。

P: 0 2 1 3 0 2 4 0 2 1 3 4
M=3 0 2 1 3 0 2 4 4 4 1 3 3
    0 2 1 3 0 2 2 2 4 1 1
      0 2 1 3 0 0 0 2 4 4
F=9 Y Y Y Y Y Y Y     Y Y  

  M=4时,缺页中断10次。缺页中断率10/12*100% = 83.3%。

P: 0 2 1 3 0 2 4 0 2 1 3 4
M=4 0 2 1 3 3 3 4 0 2 1 3 4
    0 2 1 1 1 3 4 0 2 1 3
      0 2 2 2 1 3 4 0 2 1
        0 0 0 2 1 3 4 0 2
F=10 Y Y Y Y     Y Y Y Y Y Y

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

2.3.1 基本思想

  置换最近一段时间以来最长时间未访问过的页面。根据程序局部性原理,刚被访问的页面,可能马上又要被访问;而较长时间内没有被访问的页面,可能最近不会被访问。 
  LRU算法普偏地适用于各种类型的程序,但是系统要时时刻刻对各页的访问历史情况加以记录和更新,开销太大,因此LRU算法必须要有硬件的支持。

2.3.2 算例

  仍然以OPT算例为例子。 
  中断次数为6,缺页中断率为7/12*100% = 58.3%。

P: 2 3 2 1 5 2 4 5 3 2 5 2
M=3 2 3 2 1 5 2 4 5 3 2 5 2
    2 3 2 1 5 2 4 5 3 2 5
        3 2 1 5 2 4 5 3 3
F=7 Y Y   Y Y   Y   Y Y    

  堆栈实现LRU: 
  系统使用特殊的堆栈来存放内存中每一个页面的页号。每当访问一页时就调整一次,即把被访问页面的页号从栈中移出再压入栈顶。因此,栈顶始终是最新被访问页面的页号,栈底始终是最近最久未被访问的页号。当发生缺页中断时,总是淘汰栈底页号所对应的页面。 
  

参考

  1. 温静,计算机操作系统原理,武汉大学出版社.

目录

 

 

 
谋胆并重
目录
相关文章
|
18天前
|
算法
时钟置换算法
【10月更文挑战第25天】时钟置换算法是一种简单而有效的页面置换算法,它通过使用位标志和环形链表的结构,在一定程度上平衡了算法的复杂性和性能表现。虽然它存在一些局限性,但通过改进和与其他算法的结合,可以在不同的系统环境中发挥重要作用,提高虚拟内存管理的效率和系统的整体性能。
49 8
|
18天前
|
机器学习/深度学习 算法 数据挖掘
提高时钟置换算法的性能
【10月更文挑战第25天】通过上述一种或多种方法的综合应用,可以在不同程度上提高时钟置换算法的性能,使其更好地适应各种复杂的系统环境和应用场景,提高虚拟内存管理的效率和系统的整体性能。
35 5
|
18天前
|
算法
虚拟内存的页面置换算法有哪些?
【10月更文挑战第25天】不同的页面置换算法各有优缺点,在实际应用中,操作系统会根据不同的应用场景和系统需求选择合适的页面置换算法,或者对算法进行适当的改进和优化,以平衡系统的性能、开销和资源利用率等因素。
40 5
|
1月前
|
算法
有哪些页面置换算法?
页面置换算法(Page Replacement Algorithms)在计算机操作系统中用于管理虚拟内存。
|
3月前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
191 1
|
3月前
|
算法 程序员
理解操作系统内存管理:页面置换算法全解析
大家好,我是小米,热爱分享技术的大哥哥!今天聊的是操作系统中的页面置换算法。它解决的是内存满载时,如何选择合适的页面移出以腾出空间的问题。主要有三种算法:FIFO(先进先出),简单但性能不佳;LRU(最近最久未使用),考虑时间局部性,性能较好但实现较复杂;OPT(最佳置换),理论上最优但无法实际应用。这些算法各有千秋,在实际应用中需根据场景选择最合适的方案。希望这能帮大家更好地理解内存管理的核心机制!
160 2
|
4月前
|
缓存 算法 前端开发
前端 JS 经典:LRU 缓存算法
前端 JS 经典:LRU 缓存算法
97 0
|
5月前
|
存储 缓存 算法
LRU(Least Recently Used)算法原理
LRU(Least Recently Used)算法原理
68 0
|
6月前
|
缓存 算法 Java
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
|
29天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。