操作系统中的驻留集

2025年1月7日 | 阅读10分钟

引言

驻留集(Resident Set)是操作系统内存管理领域的核心概念。它指的是进程执行过程中当前RAM(随机存取存储器)中的一部分。换句话说,它是活跃进程已使用并已加载到主内存中的页面集合。

当执行程序时,机器代码和数据会被复制到内存中。由于物理驱动器内存和RAM容量有限,并非所有进程的部分都同时存储在RAM中。与主内存管理过程不同,操作系统使用不同的分配策略来处理主内存(RAM)和硬盘等辅助存储设备之间的数据传输。

驻留集的组成部分

操作系统中驻留集的几个组成部分如下:

  • 代码段:应用程序的类型表示其指令,并通过执行操作来运行。这些指令从存储页面中取出,由CPU执行。在给定的代码段中,进程代码在进程运行时通常保持不变,并由执行该程序的多个进程共享。
  • 数据段:在此区域存储程序的静态变量、全局变量以及与动态分配内存(堆)相关的其他部分。它集成了堆栈,因为它与局部变量一起用于保存函数调用信息。
  • 堆:是内存中用于动态分配内存块的区域。它在运行时分配和移除短期内存时,数据量会增多或减少。驻留集包括在RAM中驻留的所有堆区域,直到内存分配到其他地方。
  • 栈:栈是用于存储调用信息、局部变量和参数的私有空间。每次调用时,一个新帧被压入栈中;当函数结束时,该帧从栈中弹出。栈是一种线性结构,遵循“后进先出”LIFO原则。驻留集也包含当前被这些部分占用的物理内存位置。

与虚拟内存的关系

虚拟内存的引入及其与驻留集的关联是内在相连的。虚拟内存在内存管理中至关重要。它允许操作系统通过使用硬盘等辅助存储设备来存储所需的额外内存,从而解决系统物理RAM不足的问题。它允许计算使用大量的内存,这比通过RAM和存储磁盘之间数据的连续交换实际可用的内存要多。

  • 进程被带入主内存的内存是不完整的。即使进程的虚拟内存大部分被带入物理内存,它也不会同时被带入主内存。为了克服当进程请求不在物理RAM中的内存时的情况,操作系统采用按需分页交换技术,在需要时在磁盘和RAM之间交换内存页面。这使得驻留集可以根据运行进程和可用于进程注册的物理资源动态地增大或缩小。
  • 较大的驻留集的另一个重要因素是提高系统性能。驻留集容量越大,将有更多数据保留在物理RAM中,从而减少不必要的磁盘访问频率。然而,过度增长的驻留集可能导致内存利用率低下和进程之间的资源竞争。因此,进程可能会被中断或终止。另一方面,这可能导致驻留集过大,最终需要频繁进行磁盘访问,从而导致程序运行缓慢。

各种操作系统中的驻留集

所有操作系统中的内存管理系统都采用其自己的内存技术和算法,以尽可能优化驻留集。

Windows

Windows 计算机内存和海量存储与虚拟内存系统连接,其中只有所需页面按需分页进出。每个进程的虚拟地址空间都是基于页面的,并由特定的算法(LRU 或 MLRU 页面替换)管理,这些算法通过最后推入的页面的平均数量来管理进程。

  • Windows 使用一种称为驻留集大小优化技术来提升驻留集管理。在特定时间间隔内使用的进程工作内存页面的驻留集被称为工作集。Windows 关注每个进程的工作集,并根据内存需求和系统负载大小等不同参数动态调整驻留集大小。
  • 此外,Windows 支持内存分配技术,以确保顶级系统进程拥有足够的内存资源。它通过内存压缩高优先级页面系统等策略实现这一点,这些策略有助于内存使用和响应。

Linux

Linux 使用基于按需分页的内存分配,这就是访问虚拟内存空间的方式。因此,系统既灵活又耐用。逐出页面处理模块使用不同的页面替换方法,包括时钟(通常是第二次机会)算法和最近最少使用(LRU)算法,以精确管理驻留集。

  • Linux 内存管理的一个独特功能是实现了内存组(控制组),用于设置资源限制和管理内存分配以及其他进程。内存组允许管理员根据可用的内存资源和允许的内存使用情况对进程组进行排序。
  • Linux 还提供了多种选项和实用程序来帮助监控和改善内存使用,例如topfree 命令。这些工具的实用性体现在用户分析已安装进程大小的能力以及精确定位内存消耗程序的能力。

MacOS

MacOS,与 Linux 系列非常相似,都是基于 UNIX 操作系统构建的,因此在内存管理方面也存在相似之处。它利用按需分页和虚拟存储模型,高效地流式传输和管理虚拟内存块。

  • macOS 内存管理的一个重要优势是其实现了统一缓冲区缓存 (UBC) 机制,该机制结合了不同方面来提高性能。UBC 扮演着操作系统将文件数据移动或缓存到内存中并将其分发给高级进程的角色,这减少了磁盘 I/O 并全面提高了系统性能。
  • 除了内存压缩,macOS 还有一个功能,可以将页面交换到磁盘上。内存压缩算法对 RAM 中不活动的页面采用压缩状态。因此,它们占用较小的物理内存部分,并减少对较慢的基于磁盘的存储的依赖。
  • 它提供了使用活动监视器vm_stat 命令行实用程序来监控内存使用的选项。后者可用于检查运行进程的驻留集大小。

影响驻留集安排的原因

操作系统的驻留集占用空间受多种因素影响,如应用程序特性、系统内资源的动态修改以及所使用的编程语言类型。

1. 应用程序特性

  • 内存占用:应用程序的系统需求导致驻留集大小的增长。在小型设备上发现的单任务操作系统中,具有庞大代码库、巨大数据结构或高内存利用模式的应用程序将占用更多的物理内存空间。
  • 工作集:当前的内存访问时间框架将直接影响应用程序驻留集的频率。该集合是自上次间隔以来频繁访问的页面所在的内存部分。一个具有大型工作集需求的工作负载是一个超过 RAM 容量的池。在这种情况下,必须积极交换页面以为更多内存驻留到 RAM 中腾出空间。
  • 并发性和并行性:我们通常可以预期多线程多进程应用程序为每个线程或进程提供一个全新的驻留集。应用程序中并发性和并行性的程度评估了总驻留集大小,因为每个线程或过程都必须始终拥有其内存分配。

2. 系统资源

  • 物理内存大小:系统中受限的 RAM 容量决定了驻留集大小的缩减。如果物理内存是瓶颈,操作系统将根据进程优先级、内存使用模式和系统负载等策略分配内存。
  • 虚拟内存配置:虚拟内存的配置性质包括交换空间页面文件设置,这些对驻留集大小至关重要。虚拟内存对于 RAM 来说非常重要,它可以将经常使用的内存页面保留在磁盘中,并使其能够继续正常运行。虚拟内存管理有效地管理驻留集的能力会受到正确设置虚拟内存参数的影响。
  • 内存层次结构:在现代计算机体系结构中,存在多个级别的内存层次结构,即缓存内存、RAM辅助存储设备,包括硬盘或固态硬盘。数据可以缓存到更快的层中以优化延迟和性能,从而提高整体性能。

3. 动态变化

  1. 内存需求:由于工作负载修改、用户交互和系统活动,导致活动状态应用程序数量发生变化,因此同类型应用程序使用的静态内存的强度和数量也随之变化。系统操作系统具有内存管理技术,如按需分页页面替换算法,有助于应对这些变化并优化内存使用。
  2. 进程生命周期:进程的性质,从进程创建开始,是一个问题,因为它会影响驻留集大小。新进程分配内存以保存内存,而系统会释放未被任何进程使用的内存。良好的进程管理涉及事件的生命周期,因此内存使用效率变得至关重要。
  3. 资源争用:与其他协同运行的进程争用系统资源,以访问有限的资源,如CPU 时间、I/O 带宽内存,这会影响集合大小。CPU、RAM 或辅助存储等组件会相互竞争,并提供糟糕的内存分配,这可能导致实时任务无法有效执行。

监控和调整驻留集

1. 驻留集监控工具

  • 任务管理器 (Windows):任务管理器是 Windows 的原生进程监视器,提供执行进程的实时指示,包括其输出内存使用情况和设置大小。它允许我们识别内存记录应用程序并设置内存使用情况随时间变化的警告阈值。
  • Top (Linux/macOS):top是类 Unix 操作系统(如 Linux 和 MacOS)中的命令行程序,它显示系统正在运行的进程。它显示进程使用的系统内存量或驻留集大小。它显示有关系统资源利用率的信息,并且可以成为定位过度使用内存的进程的工具。
  • 活动监视器 (macOS):浏览 macOS 系统中的图形实用程序是活动监视器,它显示系统的深入信息,例如 CPU、内存、磁盘或网络使用情况。它使用户能够跟踪驻留集大小,并将因运行内存密集型应用程序而导致的任何性能问题归因于系统。
  • 性能监视器 (Windows):性能监视器是 Windows 系统附带的一组性能监视工具,通过许多指标(包括内存使用情况和驻留集大小)提供系统性能跟踪。据此,它可以提供用户定义的性能计数器,并且可以发送到日志数据库以供以后调试。

2. 优化驻留集大小的技术

  • 内存分析:内存分析工具可帮助分析应用程序的内存使用模式,并检测内存泄漏、无效不可重用内存分配以及过多的内存消耗。
  • 内存压缩:macOS 和 Windows 等操作系统采用一些内存压缩技术,通过利用 RAM 中不活动的页面进行压缩来减小驻留集大小。内存压缩技术减少了使用的物理内存中的页面数量,同时将频繁访问的页面推到内存堆栈的前面,从而释放主内存。
  • 虚拟内存配置:虚拟内存的配置,包括交换空间大小分页文件管理,必须正确设置以确保驻留集大小的适当增长。根据用户的工作负载和系统资源的可用性修改内存分配参数是节省内存使用和提高整个系统性能的有效方法。

对系统性能的影响

  • 资源利用率:优化驻留集大小可最大限度地提高利用率,因为操作系统可用的内存资源数量有限。最常访问的数据位于 RAM 中,因此,影响应用程序性能的磁盘访问次数显著减少。
  • 系统响应能力:平衡驻留集大小可增强系统快速响应并从内存中检索数据的能力,从而减少内存访问延迟。应用程序具有更好的访问时间;立即响应用户输入,并且几乎没有磁盘输入/输出延迟。
  • 稳定性和可靠性:监控和确定正确的驻留集大小有助于确保稳定性和可靠性,避免内存耗尽和内存不足错误等问题。完美的内存管理可避免关键系统操作因有限的内存资源而无法高效执行。
  • 可伸缩性:定义良好的驻留集大小是更有效伸缩的关键因素,服务器可以在不降低性能的情况下处理更密集的负载。通过根据系统负载的性质更改资源分配大小,系统可以根据所需资源的修改在动态路径上有效运行并保持稳定性能。