操作系统(OS)中的内存管理

2025年4月13日 | 阅读 5 分钟

在本文中,我们将详细了解内存管理。

什么是内存管理?

内存是计算机中用于存储数据的重要部分。它的管理对计算机系统至关重要,因为计算机系统中可用的主内存量非常有限。在任何时候,都有许多进程在争夺它。此外,为了提高性能,通常会同时执行多个进程。为此,我们必须将多个进程保留在主内存中,因此更重要的是有效地管理它们。

Memory Management

内存管理的作用

以下是内存管理在计算机系统中的重要作用:

  • 内存管理器用于跟踪内存位置的状态,无论是空闲还是已分配。它通过提供抽象来处理主内存,以便软件感知到分配给了它大量的内存。
  • 内存管理器允许内存量较小的计算机执行比可用内存量大的程序。它通过使用交换(swapping)的概念,在主内存和辅助内存之间来回移动信息来实现这一点。
  • 内存管理器负责保护分配给每个进程的内存不被另一个进程损坏。如果不能保证这一点,系统可能会出现不可预测的行为。
  • 内存管理器应支持进程之间的内存空间共享。因此,两个程序可以驻留在相同的内存位置,尽管是在不同的时间。

内存管理技术

内存管理技术可分为以下几类:

  • 连续内存管理方案
  • 非连续内存管理方案
Memory Management

连续内存管理方案

在连续内存管理方案中,每个程序都占用一个连续的存储位置块,即具有连续地址的内存位置集合。

单连续内存管理方案

单连续内存管理方案是最简单的内存管理方案,用于早期计算机系统。在此方案中,主内存被划分为两个连续的区域或分区。操作系统通常驻留在其中一个分区(通常在低内存区域),用户进程加载到另一个分区。

单连续内存管理方案的优点

  • 实现简单。
  • 易于管理和设计。
  • 在单连续内存管理方案中,一旦加载了进程,它将获得完整的处理器时间,并且不会被其他处理器中断。

单连续内存管理方案的缺点

  • 由于进程不太可能使用所有可用的内存空间,因此会因未使用的内存而造成内存空间浪费。
  • CPU 保持空闲,等待磁盘将二进制映像加载到主内存中。
  • 如果程序太大而无法完全适应可用的主内存空间,则无法执行。
  • 它不支持多道程序设计,即它不能同时处理多个程序。

多分区

单连续内存管理方案效率低下,因为它限制计算机一次只能执行一个程序,从而导致内存空间和 CPU 时间的浪费。通过多道程序设计(允许一个以上程序并发运行)可以克服 CPU 使用效率低下的问题。要在两个进程之间切换,操作系统需要将两个进程都加载到主内存中。操作系统需要将可用主内存划分为多个部分,以便将多个进程加载到主内存中。这样,多个进程就可以同时驻留在主内存中。

多分区方案有两种类型:

  • 固定分区
  • 动态分区

固定分区

在固定分区内存管理方案或静态分区中,主内存被划分为几个固定大小的分区。这些分区可以是相同的大小,也可以是不同的大小。每个分区可以容纳一个进程。分区的数量决定了多道程序设计的程度,即内存中的最大进程数。这些分区在系统生成时创建,之后保持固定。

固定分区内存管理方案的优点

  • 实现简单。
  • 易于管理和设计。

固定分区内存管理方案的缺点

  • 该方案存在内部碎片。
  • 分区的数量在系统生成时指定。

动态分区

动态分区是为了克服固定分区方案的问题而设计的。在动态分区方案中,每个进程在加载处理时仅占用其所需的内存量。只要整个物理内存被耗尽或剩余空间不足以容纳请求的进程,就会为请求的进程分配内存。在此方案中,使用的分区是可变大小的,并且分区的数量未在系统生成时定义。

动态分区内存管理方案的优点

  • 实现简单。
  • 易于管理和设计。

动态分区内存管理方案的缺点

  • 该方案也存在内部碎片。
  • 分区的数量在系统分段时指定。

非连续内存管理方案

在非连续内存管理方案中,程序被分成不同的块,并加载到内存的不同部分,这些部分不一定彼此相邻。该方案可以根据块的大小以及块是否驻留在主内存中来分类。

什么是分页?

分页是一种消除主内存连续分配需求的内存管理技术。在此技术中,主内存被划分为固定大小的物理内存块,称为帧(frame)。帧的大小应与页(page)的大小相同,以最大化主内存并避免外部碎片。

分页的优点

  • 页减少了外部碎片。
  • 实现简单。
  • 内存效率高。
  • 由于帧的大小相等,交换变得非常容易。
  • 它用于更快地访问数据。

什么是分段?

分段是一种消除主内存连续分配需求的内存管理技术。在此技术中,主内存被划分为可变大小的物理内存块,称为段(segment)。它是基于程序员组织程序的方式。通过分段内存分配,每个作业被分成几个不同大小的段,每个段对应一个模块。函数、子程序、堆栈、数组等是此类模块的例子。