【操作系统】第六章:页面置换算法(Part2:全局页面置换算法)

简介: 【操作系统】第六章:页面置换算法(Part2:全局页面置换算法)

目录


  • 全局页面置换算法
  • 工作集和常驻集
  • 工作集页置换算法
  • 缺页率页面置换算法
  • 抖动问题


正文


全局页面置换算法


工作集和常驻集


局部页面置换算法都针对一个程序/进程来进行操作的,然而OS可以同时执行多个程序,如果每一个程序都采取一个固定的局部页面置换算法会带来一些问题,所以我们引入全局页面置换算法。

image.png

程序的访问特征是可变的,可能一开始需要的内存比较多,中间可能需要的很少,结束时又很多,也就说对物理内存的需求是可变的。而前面的局部页面置换算法都有一个大前提:分配的物理页帧是固定的。

由于OS可以同时跑多个程序,那么这时候如果给每一个程序分配一个固定的物理页帧,就限制了程序的灵活性。我们想要根据程序进行的不同阶段,动态分配给其不同的物理内存大小。这就是我们全局页面置换算法要考虑到的。

接下来要介绍的所有算法,都基于一个大前提。

如果一个算法要有效,那么我们需要这个程序具有局部性。程序局部性原理越好,LRU/clock算法就会产生更少的缺页次数。所以我们想要表现和分析局部性——工作集

56ab52fdbdf3708007c742c7175ab894_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

image.png

image.png

起始时间是t1,△是从过去到现在一固定长度。表示了程序在不同运行阶段对内存访问特点的展现,t2的工作集的局部性就很好,t1相对于t2的局部性稍差,但是仍然具有一定的局部性。

下图便于理解:

image.gif

image.png


工作集在执行过程中会随着程序执行的特点而变化。可能一开始访问的页不具有局部性,但是到访问到一定区域他的工作集大小也会比较稳定。

6969280a666d75ebc614ede5a050908f_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

常驻是常驻内存的意思,常驻集是当前时刻正在运行的程序驻留在内存中的页面集合。如果说工作集体现了运行中程序在运行过程中在对页面访问的属性,是程序本身的固有属性;常驻集是OS和计算机系统给应用程序分配的物理页-空间的大小,以及采取的页面置换算法来决定到底将哪些页面放入内存。工作集表示要访问的页面有哪些,这些页面有可能不在内存中,这是和常驻集的最大不同。我们希望工作集的页都在常驻集里,一旦工作集中某些页不在常驻集,就会产生缺页中断,所以我们希望这两个集合尽量是重叠的,这样会使得缺页率较小。OS在程序运行时可以分配的常驻集大小是不定的,分配的物理页不是越多越好,可能当物理页多到一定程度时,意义不大了,此时我们想将多余的页分配给其他程序,动态调整物理页大小使得整体的缺页率较低。只要整体缺页次数少,则整体系统性能就会高。


工作集页置换算法


b4c9dfc22b2b63344dff10bc04f1237d_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

工作集窗口里的页代表当前这段时间内被访问的页,如果其中的页需要替换时,需要替换不在工作集中的页;随着程序执行,窗口在挪动,评议过程中某个页不再在国工作集窗口内,则这个页也需要丢掉,并不是一定要等到缺页时再置换出去。

看一个例子:【个人感觉用链表理解更加容易】

db2477f78c8994f1d5887467733c6dee_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

工作集窗口τ=4

阶段 工作集窗口内容
0

4ec169bb166440b2ea4f5bbd167ba08f_20200421110759453.png

1

378e21e8c5a3ae2690d1710768cc8655_20200421110948118.png

2 bd881351e9e6af69fcfcf9d54206e6a9_20200421111027841.png
3

20591b9ebf0749fd93333bfb052b8e2c_20200421111127863.png

4

5e434cd69ce5a436568ad3eae229184e_20200421112230423.png

5

0758712de83bdedb585eb06b1c9960f5_2020042111224559.png

6

4c1574d8cc79364a8c6d28951eb85d86_20200421112306543.png

7

cd41d974a30d5c910d27b6aed89e6eb2_20200421112320310.png

8

ac9a695ea00caff179d7a085181b2840_20200421112337691.png

9

6bf7a2be989048e92ff824962842179f_20200421112356276.png

10

29cf0ee152545ddf0110e8efb8f7f631_20200421112407154.png

它和前面的局部页面替换算法相比,最大的变化是取决于工作集窗口。所以超出窗口的老页被换出,保证物理内存中始终有足够多的页存在,给其他运行的程序提供更多的内存,从而减少页面置换次数。从整个系统的层面上减少缺页率。


缺页率页面置换算法


81c9b0cac9a507045660c544a15c0ffc_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

image.png

64fd7bb976f307f72eba944befa48f3a_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

若运行程序缺页率高我们会增加工作集,希望他访问的页尽量在内存中,可以降低缺页率。如果缺页率过低,意味着可能分配的内存比较多,则可以减少工作集来减少程序需要的物理页面(意味着常驻集也被减少),使得每个程序的缺页率保持在一个合理的范围内。整体系统的性能从而平衡地提高。

60a2c0de0d7df0dfdd019a00cf55a777_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

T是一个阈值,如果缺页与上次缺页之间的时间间隔是大的,则说明缺页率低,应该减少工作集空间。如果缺页与上次缺页之间的时间间隔是小的,说明缺页率高,应该增加工作集空间。

例子:设阈值T=2。工作集窗口τ=4

fbb7faab21214b95ad654e03c7917a43_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

image.png

与工作集页置换算法的必须在分配的物理空间满时才替换出去相比,该算法即便空间不满在满足一定条件是也会清理一部分空间。从而整体来说使得一些经常访问的页驻留在内存中,对于OS而言,要应对多个正在运行的程序,那么采取全剧页替换算法要优于局部页替换算法。


抖动问题


5d085e53f4b8defc0ef4d923bb22c5bb_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

简单来说,如果常驻集包含于工作集,也就意味着在访问内存时,需要频繁进行页面置换,从而增大开销与运行速度。我们需要一个合适的常驻集,尽量使二者一致,这样产生的缺页就会很少且并发程序可以更多。

1d685cef237e44aa45a6d105ad74c531_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

x轴:有多少程序在跑

y轴:CPU利用率

一般情况下CPU利用率是比较高的,但是如果在某段时间内进行大量页面换入换出,使得程序进程变慢,CPU利用率大量降低。

分析图标,随着同时执行的程序增多,内存很快就用完了,然后会产生大量缺页,OS需要大量的换入换出操作或者中断处理操作。因为频繁执行IO操作,这时候所有的CPU时间都去用来做置换页面的操作,程序利用率大大降低,机器越来越慢。

因此我们希望能将其维持在峰值,找到一个平衡点。我们希望两个缺页产生的平均时间MTBF完成一次缺页的中断服务的时间PFST尽量相等,二者比值越大意味着缺页频度低,此时CPU大部分时间用于跑程序。随着后来程序增多,缺页次数越来越多。在NIO-balance点,并发执行的程序个数比较多且系统整体利用率比较高。OS可以根据当前CPU利用率来动态调整应该让系统里放多少程序,只要个数合适,就可以领内存抖动现象得到改善。即便只有一个程序运行,如果占据内存足够多,那么也有可能产生抖动现象。

我们希望通过OS管理,整个系统利用率高且跑的程序尽量多。


目录
相关文章
|
17天前
|
算法 调度 UED
探索操作系统的心脏:调度算法的奥秘与影响
【10月更文挑战第9天】 本文深入探讨了操作系统中至关重要的组件——调度算法,它如同人体的心脏,维持着系统资源的有序流动和任务的高效执行。我们将揭开调度算法的神秘面纱,从基本概念到实际应用,全面剖析其在操作系统中的核心地位,以及如何通过优化调度算法来提升系统性能。
|
3天前
|
算法 大数据 Linux
深入理解操作系统之进程调度算法
【10月更文挑战第24天】本文旨在通过浅显易懂的语言,带领读者深入了解操作系统中的进程调度算法。我们将从进程的基本概念出发,逐步解析进程调度的目的、重要性以及常见的几种调度算法。文章将通过比喻和实例,使复杂的技术内容变得生动有趣,帮助读者建立对操作系统进程调度机制的清晰认识。最后,我们还将探讨这些调度算法在现代操作系统中的应用和发展趋势。
|
19天前
|
算法 调度 UED
深入理解操作系统的进程调度算法
【10月更文挑战第7天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。它不仅影响系统的性能和用户体验,还直接关系到资源的合理分配。本文将通过浅显易懂的语言和生动的比喻,带你一探进程调度的秘密花园,从最简单的先来先服务到复杂的多级反馈队列,我们将一起见证算法如何在微观世界里编织宏观世界的和谐乐章。
|
25天前
|
边缘计算 算法 调度
探究操作系统的心脏:调度算法的进化与影响
【10月更文挑战第2天】 本文深入探讨了操作系统中核心组件——调度算法的历史演变、关键技术突破及其对现代计算的影响。通过详细回顾从单任务到多任务、实时系统及分布式计算环境下调度算法的发展,文章揭示了这些算法如何塑造我们的数字世界,并对未来的趋势进行了展望。不同于传统的摘要,本文特别聚焦于技术细节与实际应用的结合点,为读者提供一幅清晰的技术演进蓝图。
42 4
|
1月前
|
算法 调度 UED
探索操作系统的心脏:进程调度算法
【9月更文挑战第32天】在数字世界的每一次心跳中,都隐藏着一个不为人知的英雄——进程调度算法。它默默地在后台运作,确保我们的命令得到快速响应,应用程序平稳运行。本文将带你走进操作系统的核心,一探进程调度的奥秘,并通过代码示例揭示其背后的智慧。准备好跟随我一起深入这趟技术之旅了吗?让我们开始吧!
|
2月前
|
算法 调度
操作系统的心脏:深入解析进程调度算法
本文旨在深入探讨现代操作系统中的核心功能之一——进程调度。进程调度算法是操作系统用于分配CPU时间片给各个进程的机制,以确保系统资源的高效利用和公平分配。本文将详细介绍几种主要的进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)以及优先级调度(PS)。我们将分析每种算法的基本原理、优缺点及其适用场景。同时,本文还将讨论多级反馈队列(MFQ)调度算法,并探讨这些算法在实际应用中的表现及未来发展趋势。通过深入解析这些内容,希望能够为读者提供对操作系统进程调度机制的全面理解。
|
15天前
|
算法
有哪些页面置换算法?
页面置换算法(Page Replacement Algorithms)在计算机操作系统中用于管理虚拟内存。
|
27天前
|
存储 算法 C语言
MacOS环境-手写操作系统-17-内存管理算法实现
MacOS环境-手写操作系统-17-内存管理算法实现
28 0
|
20天前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
3月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。