操作系统中分页的必要性

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

我们是否曾经想过为什么相应的操作系统通常会使用分页?它实际上是一个解决内存管理中一个大问题的聪明办法。

假设我们同时运行多个程序——可能是一个浏览器、一个视频播放器和一个文本编辑器。它们每个都需要内存来运行,但系统必须确保它们不会相互干扰。这就是分页发挥作用的地方。

众所周知,“分页”将计算机内存划分为称为“”的小型、固定大小的块。而不是一次性将整个程序加载到内存中,只加载需要的页,从而有效地节省空间,也允许多个程序即使在运行大型程序时也能流畅运行。

  • 例如,让我们想象一下我们正在读书,但不是带着整本书,而是只带着我们正在阅读的那些页。这正是分页的工作方式:只有需要的部分保留在内存中,其余部分则在磁盘上等待。

更多时候,这种特殊的方法还能保护每个程序不干扰其他程序的内存区域,保持系统的稳定和安全。

分页是什么意思?

众所周知,相应的分页是操作系统用于管理数据如何在计算机硬盘(二次存储)与其 RAM(主内存)之间移动的一种方法。操作系统不是一次性将整个程序加载到内存中,而是将其分解成更小的、大小相等的块,称为页。 这些页使得存储和管理内存更有效率。

Need for paging in the Operating system

现在,让我们将内存视为一堆盒子,每个盒子大小相同。所有这些盒子都称为“”。当一个程序被分解成页时,每个页都放入其中一个帧中。关键在于,程序的一个页恰好适合内存的一个帧。

  • 使用分页的主要目标之一是避免需要找到大块的空闲内存来容纳整个程序。相反,任何可用的帧都可以使用,无论它在内存中的位置如何。这将避免内存碎片,并更好地利用可用空间。
  • 并非程序的所有部分都会立即加载到内存中。操作系统只会加载当前最需要的那些页。其余的则存储在硬盘上,直到需要时才加载。这可以节省空间并保持系统流畅运行。
  • 页和帧的大小必须相同,以便它们能够完美地匹配。虽然帧的实际大小可能因操作系统而异,但为了确保正确的映射,页和帧之间的大小一致性始终保持。
  • 总之,分页有助于操作系统更有效地利用内存,提高性能,并使同时运行多个程序变得更加容易,而不会耗尽内存或降低效率。

在我们深入探讨操作系统中为何需要分页之前,让我们先了解一下内存的不同管理方式。内存管理是操作系统如何处理和组织计算机内存,尤其是在同时运行多个程序时。

内存管理技术主要分为两大类

  • 连续内存分配
  • 非连续内存分配

现在让我们更详细地看一下每一种。

连续内存分配

这是最简单的内存管理方法之一。顾名思义,它主要涉及将单个连续的内存块分配给一个进程。所以,如果一个程序需要 200MB 的 RAM,操作系统必须在内存中找到一个 200MB 的连续区域来放置它。内存不能分散——它必须全部集中在一个地方。

Need for paging in the Operating system

连续内存分配进一步分为两种类型

  • 固定大小分区

在这种方法中,主内存被划分为固定大小的区域或块。所有这些分区可以大小相同,也可以大小不同。当一个程序运行时,它主要被分配到其中一个分区。

此方法有一些规则

  • 分区不重叠。
  • 程序必须完全适合一个分区才能运行。
  • 程序在其整个执行过程中必须停留在同一个分区中。

问题?

如果一个进程比它被分配的分区小,那么在这种情况下,剩余的内存就会被浪费。这种浪费称为内部碎片,即由于分区太大而无法容纳进程,导致已分配内存内部浪费了空间。

  • 动态分区:现在,为了解决内部碎片问题,主要引入了动态分区。在这里,内存不是提前划分的。相反,当一个程序到达时,操作系统会创建一个与该程序大小完全匹配的分区。

动态分区的缺点

  • 动态分区的主要缺点是外部碎片。虽然压缩可以消除这一点,正如我们之前讨论过的,但压缩会使系统效率低下。
  • 我们需要找到一种机制,能够以更优化的方式将进程加载到分区中。

但有一个陷阱。

随着时间的推移,当程序被加载和从内存中移除时,它们会留下各种空隙。所有这些空隙都分散在内存的各个地方。即使总的可用内存对于新程序来说足够大,它也可能被分成小块,无法作为一个大块使用。这就是所谓的“外部碎片”,即有足够的内存,但它们不是集中在一个地方。为了修复外部碎片,操作系统可以执行一种称为“压缩”的操作,它会移动内存来填补空隙。但压缩被认为是耗时的,并且需要大量的 CPU 资源,这会减慢所有速度。

非连续内存分配

然而,为了克服连续方法的局限性,引入了非连续内存分配技术。这允许一个程序存储在内存的不同位置,而不是一个大块。这里的两种主要技术是

Need for paging in the Operating system

我们将重点介绍分页,它有助于解决内部和外部碎片问题。

分页的必要性

现在让我们考虑一个大小为 2 MB 的进程 P1 和主内存,主内存被划分为三个分区。在这三个分区中,有两个是大小为 1 MB 的空洞。

P1 需要 2 MB 的主内存空间才能加载。我们有两个 1 MB 的空洞,但它们不是连续的。

虽然主内存中有 2 MB 的空间以这些空洞的形式可用,但这些空洞在它们变得连续之前都是无用的,这是一个需要解决的严重问题。

我们需要某种机制,能够将一个进程存储在内存的不同位置。

分页的思路是将进程分成页,以便我们可以将它们存储在内存的不同空洞中。

Need for paging in the Operating system

在操作系统中使用分页的优点

分页主要被认为是一种内存管理技术,操作系统有效地利用它来处理程序如何使用物理内存。它还带来了一些重要的好处,有助于系统更平稳、更高效地运行。

1. 减少外部碎片

  • 众所周知,“分页”有助于避免内存管理中最主要的问题之一,即“外部碎片”。在传统的内存分配中,程序通常需要一个大的连续内存块,随着内存的填充,这可能很难找到。
  • 分页通过将内存和程序都划分为称为“”的固定大小的块来解决这个问题。所有这些页都可以加载到物理内存的任何可用空间中,即使该空间是分散的。这种灵活性减少了内存浪费,并允许更有效地使用系统的 RAM。

2. 提高内存使用率

  • 分页通常允许操作系统有效地只将程序中必需的部分加载到内存中。其余部分可以保留在磁盘上,直到需要为止。这项技术在运行大型应用程序或同时运行多个程序时特别有用。
  • 操作系统会跟踪哪些页被最频繁地使用,并尽量将它们保留在内存中。很少使用的页会被移到磁盘,这加快了处理速度,并减少了 CPU 等待数据加载的时间。

3. 简化内存管理

  • 通常,借助分页,内存管理变得更加简单。与跟踪程序每个部分存储在物理内存的哪个位置不同,操作系统只需要知道哪些页当前在内存中。
  • 这也降低了复杂性,使系统更稳定,管理起来更有效率。它还有助于多任务处理,因为操作系统可以通过简单地控制页面在任务之间进行切换。

4. 使交换更有效

  • 借助分页,内存交换变得更快、更精确。操作系统可以交换单个页面,而不是将整个进程移入和移出内存。
  • 它通常选择最近最少使用的页面,这有助于将重要数据保留在内存中。这提高了性能并减少了系统负载。

5. 实现虚拟内存

  • 分页是虚拟内存系统的关键部分。它允许每个进程使用自己的独立地址空间,即使计算机没有足够的物理内存来容纳所有进程。
  • 操作系统在后台处理磁盘和 RAM 之间的页面交换,使得内存似乎比实际存在的更多。

分页的缺点

虽然分页是操作系统中管理内存的一种有用方法,但它也有一些缺点。这些问题通常不会抵消好处,但了解它们仍然很重要。

1. 系统开销增加

  • 分页增加了操作系统的额外工作。它必须不断跟踪哪些页当前在内存中,哪些页存储在磁盘上。
  • 这个过程会消耗额外的资源,并可能减慢速度,尤其是在使用旧的或速度较慢的硬盘驱动器的计算机上。

2. 页面错误会减慢速度

  • 当系统尝试访问当前不在内存中的页面时,会发生页面错误,因此必须从磁盘检索它。如果这种情况偶尔发生,问题不大。
  • 但如果页面错误发生得太频繁,计算机的运行速度会明显变慢,尤其是在多任务处理或运行大型程序时。

3. 更复杂的系统设计

  • 分页使得操作系统的内存管理部分更加复杂。
  • 设计和管理页表、处理页面错误以及确保一切顺利运行需要更高级的规划和仔细的实现。当涉及分页时,调试问题也可能更困难。

下一个主题带示例的分页