操作系统之全局页面替换策略算法

简介: 本文章适用于本科院校学生期末速成操作系统中存储管理的全局页面替换策略的相关算法,也适用于计算机学院老师教学板书参考使用。

本文章适用于本科院校学生期末速成操作系统中存储管理的全局页面替换策略的相关算法,也适用于计算机学院老师教学板书参考使用。


在多道程序正常运行的过程中,属于不同进程的页面被分散存放在内存页框中,当发生缺页异常时,如果已无空闲页框,系统要选择一个驻留页面进行淘汰。在此讨论的是所有驻留页面都可作为置换对象的情况,而不管页面所属进程的全局页面置换算法。


本文以一道例题讲解三种算法:

在一个请求分页虚存管理系统中,一个程序运行的页面走向是:

1,2,3,4,2,1,5,6,2,1,2,3,7,6,3

分别用OPT、FIFO、LRU算法,对于分配给程序4个页框的情况,求出缺页异常次数和缺页中断率。


首先,我们可以画出这样的一个框,上面是程序运行的页面走向,下面是四行即四个页框,最下面一行是是否缺页,缺页即打√,不缺页就打×。

什么是缺页?

页框里没这个数字就是缺页,有这个数字就是不缺页

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1
页框 2 2 2 2
页框3 3 3
页框4 4
是否缺页


然后我们可以看到接下来的两个数字2和1都是在页框里有的数字,也就是说不缺页,就不需要替换(因为已经有了,如果没有,就需要替换),所以直接照着写就可以了:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1
页框2 2 2 2 2 2
页框3 3 3 3 3
页框4 4 4 4
是否缺页 × ×


↑↑↑后两种算法直接跳至此阶段↑↑↑

重点来了,这时候出现了一个5!那这个5应该怎么进入页框里呢?也就是该把已经在页框里的1,2,3,4哪个替换掉呢?这时候就需要看看我们OPT算法的核心思想了:当要调入新的一页而淘汰旧的一页时,选择淘汰未来不再使用的页,或距现在最长时间后才访问的页。所以我们看上面的运行的页面走向,发现4这个数字在后面都没有出现过,那我们就可以把4这个数字替换成5。如图所示:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1
页框 2 2 2 2 2 2 2
页框3 3 3 3 3 3
页框4 4 4 4 5
是否缺页 × ×

好家伙,又出现了一个6,这个时候要把页框里的1,2,3,5哪个替换掉呢?还是看上面的运行的页面走向,看一下哪个数字是距现在最长时间后才访问的!2,1,2,3,7,6,3,发现1,2,3在后面都有访问,5没有,所以又要把5给替换掉(5太惨了,刚来了又要走了),如图:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1 1
页框2 2 2 2 2 2 2 2
页框 3 3 3 3 3 3 3
页框4 4 4 4 5 6
是否缺页 × ×


后面的2,1,2,3都是页框里有的数字,所以我们照填就可以了,如图:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1 1 1 1 1 1
页框2 2 2 2 2 2 2 2 2 2 2 2
页框3 3 3 3 3 3 3 3 3 3 3
页框4 4 4 4 5 6 6 6 6 6
是否缺页 × × × × × ×


然后OPT算法中最大的问题来了,出现了个7,那把谁替换成7呢?我们先看最上面,有6和3,没有1和2,那是把1替换成7还是把2替换成7呢?我也不知道,因为程序页面引用串是无法预知的,不可能对程序的运行过程做出精准断言,也就是说后面的运行页面是随机的,谁也不知道哪个页面是距现在最长时间后才访问的页,所以不知道用哪个去替换。


OPT算法的缺点如上所说,计算机没有预知未来的能力,而OPT想要通过预知未来回天改命是不行的。OPT算法也只能作为一个理论算法。

那下面我们来看看先进先出页面替换算法(FIFO

二、先进先出页面替换算法

核心思想:基于程序总是按线性顺序来访问物理空间这一假设,总是淘汰最先调入内存的页面,即淘汰在内存中驻留时间最长的页面,认为驻留时间最长的页不再使用的可能性较大。

简单来说就是谁先进入页框,然后遇到缺页的情况了,就把先进入页框的数字给替换掉。

表格的情况如下:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1
页框2 2 2 2 2 2
页框3 3 3 3 3
页框4 4 4 4
是否缺页 × ×


这个时候,5出现了,那么应该把谁替换成5呢?因为是1先进来的,所以把1给替换掉。如图:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 5 5
页框2 2 2 2 2 2 2 6
页框3 3 3 3 3 3 3
页框4 4 4 4 4 4
是否缺页 × ×


后面的2又回来了(刚走又叫我回来),这个时候看表格发现是3最先进入页框里的,就把3替换成2,如图:


页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 5 5 5
页框2 2 2 2 2 2 2 6 6
页框3 3 3 3 3 3 3 2
页框4 4 4 4 4 4 4
是否缺页 × ×


以此类推,最后的结果如图所示:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 5 5 5 5 5 3 3 3 3
页框2 2 2 2 2 2 2 6 6 6 6 6 7 7 7
页框3 3 3 3 3 3 3 2 2 2 2 2 6 6
页框4 4 4 4 4 4 4 1 1 1 1 1 1
是否缺页 × × × ×


三、最近最少使用页面替换算法

核心思想:最近最少使用页面替换算法淘汰的页面在最近一段时间内最久未被访问的那一页,它是基于程序局部性原理来考虑的,认为那些刚被使用过的页面可能还要被立即使用,而那些在较长时间内未被使用的页面可能不会立即使用。


前面两种算法在运行页面走向中是从左往右看的,这个算法是从右往左看的,简单来说,就是从右往左看,哪个在页框里的数字距当前要替换的数字越远,就替换掉它,如图所示:

当前表格的情况如下:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1
页框2 2 2 2 2 2
页框3 3 3 3 3
页框4 4 4 4
是否缺页 × ×


当5出现了,就在最上面的运行页面走向从右往左看,分别是1,2,4,3,2,1,可见在页框里的1,2,3,4中3离5最远,所以就把3给替换掉,此时的表格如下:


页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1
页框2 2 2 2 2 2 2
页框3 3 3 3 3 5
页框4 4 4 4 4
是否缺页 × ×


那现在6呢?还是老方法,从右往左看,页框中1,2,5,4谁离6最远?6前面是5,1,2,4,看样子是4离的最远,那就把4替换掉!如表格所示:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1 1
页框2 2 2 2 2 2 2 2
页框3 3 3 3 3 5 5
页框4 4 4 4 4 6
是否缺页 × ×


后面2,1,2都是在页框里的,那我们就照着写:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1 1 1 1 1
页框2 2 2 2 2 2 2 2 2 2 2
页框3 3 3 3 3 5 5 5 5 5
页框4 4 4 4 4 6 6 6 6
是否缺页 × × × × ×


这个时候出现了3,从右往左看,3的前面是2,1,2,6,5,怎么有两个2?出现两个2怎么算?只算第一个出现的,也就是2,1,6,5,所以我们把5给替换掉。

注意重点:


当出现多个相同的数字在前面的时候,只看第一个

如表格所示:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1 1 1 1 1 1
页框2 2 2 2 2 2 2 2 2 2 2 2
页框3 3 3 3 3 5 5 5 5 5 3
页框4 4 4 4 4 6 6 6 6 6
是否缺页 × × × × ×


以此类推。

最终的结果如表格所示:

页面走向 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3
页框1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 6
页框2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
页框3 3 3 3 3 5 5 5 5 5 3 3 3 3
页框4 4 4 4 4 6 6 6 6 6 7 7 7
是否缺页 × × × × × ×


缺页异常次数

缺页异常次数就是看下面有多少是缺页的,也就是看多少个√,例如上面这个表格(LRU算法),出现的√有9个,那就是缺页异常9次

缺页中断率

缺页中断率=缺页异常次数/总次数

总次数就是一共有多少个页面走向,还是看上面的这个表格(LRU算法)

一共有15个页面走向,所以缺页中断率等于=9/15=3/5

本例题来自书

操作系统教程(第5版)费翔林 骆斌 编著

P248页 应用题第1题

感谢大家浏览,谢谢

相关文章
|
1月前
|
算法 调度 UED
探索操作系统的心脏:调度算法的奥秘与影响
【10月更文挑战第9天】 本文深入探讨了操作系统中至关重要的组件——调度算法,它如同人体的心脏,维持着系统资源的有序流动和任务的高效执行。我们将揭开调度算法的神秘面纱,从基本概念到实际应用,全面剖析其在操作系统中的核心地位,以及如何通过优化调度算法来提升系统性能。
|
1天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
操作系统作为计算机系统的核心,其进程管理和调度策略对于系统性能和用户体验至关重要。本文将通过直观的代码示例和浅显易懂的语言,带领读者了解操作系统如何有效管理进程以及常见的进程调度算法。我们将从进程的基本概念出发,逐步深入到进程状态、进程控制块(PCB)的作用,最后探讨不同的调度算法及其对系统性能的影响。无论您是初学者还是有一定基础的开发者,都能从中获得有价值的信息。
|
16天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
38 3
|
16天前
|
安全 网络协议 Linux
Linux操作系统的内核升级与优化策略####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统内核升级的重要性,并详细阐述了一系列优化策略,旨在帮助系统管理员和高级用户提升系统的稳定性、安全性和性能。通过实际案例分析,我们展示了如何安全有效地进行内核升级,以及如何利用调优技术充分发挥Linux系统的潜力。 ####
37 1
|
21天前
|
算法
虚拟内存的页面置换算法有哪些?
【10月更文挑战第25天】不同的页面置换算法各有优缺点,在实际应用中,操作系统会根据不同的应用场景和系统需求选择合适的页面置换算法,或者对算法进行适当的改进和优化,以平衡系统的性能、开销和资源利用率等因素。
42 5
|
21天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度策略
【10月更文挑战第29天】本文将带领读者深入探讨操作系统中的核心组件之一——进程,并分析进程管理的重要性。我们将从进程的生命周期入手,逐步揭示进程状态转换、进程调度算法以及优先级调度等关键概念。通过理论讲解与代码演示相结合的方式,本文旨在为读者提供对进程调度机制的全面理解,从而帮助读者更好地掌握操作系统的精髓。
31 1
|
26天前
|
算法 大数据 Linux
深入理解操作系统之进程调度算法
【10月更文挑战第24天】本文旨在通过浅显易懂的语言,带领读者深入了解操作系统中的进程调度算法。我们将从进程的基本概念出发,逐步解析进程调度的目的、重要性以及常见的几种调度算法。文章将通过比喻和实例,使复杂的技术内容变得生动有趣,帮助读者建立对操作系统进程调度机制的清晰认识。最后,我们还将探讨这些调度算法在现代操作系统中的应用和发展趋势。
|
17天前
|
算法 调度 UED
深入浅出操作系统调度策略
【10月更文挑战第33天】在数字时代的心脏,操作系统扮演着至关重要的角色。本文将探讨操作系统的核心功能之一——进程调度策略的设计与影响。我们将从理论到实践,通过浅显易懂的语言和具体代码示例,揭示如何通过不同的调度算法来优化系统性能和用户体验。无论你是技术新手还是资深开发者,这篇文章都将为你提供新的视角和深入的理解。
|
1月前
|
算法 调度 UED
深入理解操作系统的进程调度算法
【10月更文挑战第7天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。它不仅影响系统的性能和用户体验,还直接关系到资源的合理分配。本文将通过浅显易懂的语言和生动的比喻,带你一探进程调度的秘密花园,从最简单的先来先服务到复杂的多级反馈队列,我们将一起见证算法如何在微观世界里编织宏观世界的和谐乐章。
|
1月前
|
边缘计算 算法 调度
探究操作系统的心脏:调度算法的进化与影响
【10月更文挑战第2天】 本文深入探讨了操作系统中核心组件——调度算法的历史演变、关键技术突破及其对现代计算的影响。通过详细回顾从单任务到多任务、实时系统及分布式计算环境下调度算法的发展,文章揭示了这些算法如何塑造我们的数字世界,并对未来的趋势进行了展望。不同于传统的摘要,本文特别聚焦于技术细节与实际应用的结合点,为读者提供一幅清晰的技术演进蓝图。
49 4
下一篇
无影云桌面