什么是按需分页和预分页?

2025 年 7 月 12 日 | 11 分钟阅读

根据虚拟内存的概念,在给定时间执行任何进程时,不需要将整个进程加载到主内存中。如果仅在特定时间将部分页面加载到主内存中,则可以高效地执行该进程。但是,这里的问题是,我们如何预先决定选择哪些页面加载到主内存中以执行进程。这意味着在特定时间哪些页面应该存在于主内存中,哪些不应该存在。

为了解决这个问题,操作系统中存在一个按需分页的概念。这个概念指出,我们不应该在需要之前将任何页面加载到主内存中,或者将所有页面保存在辅助内存中直到需要它们。相反,在预分页中,操作系统会提前猜测进程需要哪些页面,并将它们预加载到内存中。

预分页的概念用于减少进程启动时发生的大量页面错误,其基本策略是在进程引用它们之前,将所有需要同时使用的页面加载到内存中。

操作系统中的按需分页是什么?

按需分页是一种在虚拟内存系统中使用的技术,其中页面仅在 CPU 需要或请求时才加载到主内存中。因此,它也被称为**_惰性交换器_**,因为页面的交换仅在 CPU 需要时才进行。虚拟内存通常通过按需分页实现。

在按需分页中,寻呼机只将那些必要的页面加载到内存中,而不是交换整个进程。因此,按需分页避免了将无论如何都不会使用的页面读入内存,从而减少了交换时间和所需的物理内存量。

按需分页如何工作?

What are Demand Paging and Pre-paging

按需分页系统依赖于页表实现,因为页表有助于将逻辑内存映射到物理内存。页表中实现了位运算符来指示页面是否正常(有效或无效)。所有有效页面都存在于**_主内存_**中,而无效页面存在于**_辅助内存_**中。现在所有进程都继续访问所有页面,然后会发生以下事情,例如:

  1. 尝试当前访问页面。
  2. 如果页面正常(有效),则所有处理指令正常工作。
  3. 如果发现任何页面无效,则会出现页面错误问题。
  4. 现在确定内存引用在辅助内存中是否存在有效引用。如果不存在,则进程终止,否则所需的页面被分页加载。
  5. 现在执行磁盘操作以将所需页面提取到**_主内存_**中。

按需分页的示例

假设我们必须执行一个包含四个页面 P0、P1、P2 和 P3 的进程 P。目前,在页表中,我们有页面 P1 和 P3。

What are Demand Paging and Pre-paging
  1. 如果 CPU 想要访问进程 P 的页面 P2,它将首先在页表中搜索该页面。
  2. 由于页表不包含此页面,因此这将是一个**_陷阱_**或**_页面错误_**。一旦生成陷阱,控制权就转到操作系统,并发生上下文切换。
  3. 操作系统将把进程置于等待/阻塞状态。操作系统现在将在后备存储器或辅助内存中搜索该页面。
  4. 然后,操作系统将从后备存储器中读取该页面,并将其加载到主内存中。
  5. 接下来,操作系统将相应地更新页表条目。
  6. 最后,从操作系统收回控制权,并恢复进程的执行。

因此,每当发生页面错误时,操作系统都会遵循这些步骤,并将所需页面加载到内存中。

因此,每当发生页面错误时,如上述步骤 2 到 6 所示。处理页面错误所需的时间称为**_页面错误服务时间_**。

**有效内存访问时间:** 当执行任何进程时,页面错误率为 **'p'** 时,有效内存访问时间计算如下:

有效内存访问时间 = (p)*(s) + (1-p)*(m)

其中

  • p 是页面错误率。
  • s 是页面错误服务时间。
  • m 是主内存访问时间。

注意:EAT 与页面错误率成正比。

操作系统按需分页如何影响系统性能?

通过允许多个程序同时运行并降低程序所需的内存量,按需分页可以提高系统性能。但是,如果实施不当,可能会出现性能问题。当程序需要主内存中不存在的组件时,它们会暂停,因为操作系统必须从硬盘驱动器中检索它,这需要时间。这可能会导致延迟,并且如果内存不足,系统可能需要更频繁地交换页面,这将降低性能。

操作系统按需分页常用算法

一种称为按需分页的内存管理策略仅在需要时才将程序组件加载到内存中。如果程序需要一个目前不在内存中的页面,系统会从硬盘中检索该页面。这个过程由多种算法控制。

  • **FIFO:** 先进先出(FIFO)方法使用内存中最旧的页面替换新页面。它很简单,但如果页面频繁进出交换,可能会导致颠簸。
  • **LRU:** 最近最少使用(LRU)方法替换最长时间未使用的页面。尽管实现起来更困难,但它比 FIFO 更有效地减少了颠簸。
  • **LFU:** 最近最不常用(LFU)选项交换使用频率最低的页面。虽然它减少了颠簸,但它需要额外监视页面使用频率。
  • **MRU:** 最近最常使用(MRU)方法替换最近使用的页面。它比 LRU 简单,但它不能很好地减少颠簸。
  • **随机:** 随机选择一个页面进行替换。尽管实现简单,但性能不可预测。

虚拟内存管理如何影响按需分页?

使用按需分页,操作系统根据需求在辅助存储和主内存之间交替内存页面。页面错误是当程序需要不在内存中的页面时,操作系统检索该页面的过程。按需分页通过使操作系统有效使用虚拟内存来提高整体系统性能,这对虚拟内存管理具有重要影响。

它的主要好处是它降低了所需的物理内存量,允许更大的程序和更多的应用程序同时运行。但是,按需分页确实存在一些缺点。由于操作系统必须从辅助存储中检索页面,因此页面错误机制可能会导致程序执行延迟。优化页面替换算法可以减少这种延迟。

按需分页的优点

以下是操作系统中按需分页的优点,例如:

  • 它提高了多道程序的程度,因为许多进程可以同时存在于主内存中。
  • 内存使用更高效,因为通过这种机制,即使进程大小大于主内存大小,也可以执行,因为我们不会一次加载整个页面。
  • 我们有权对**_虚拟内存_**进行扩展。
  • 如果任何程序大于物理内存,它有助于在不进行碎片整理的情况下运行此程序。
  • 分区管理更简单。
  • 它在**_分时系统_**中更有用。
  • 它对**_多道程序_**的级别没有限制。
  • 消除外部碎片。
  • 易于交换所有页面。

按需分页的缺点

以下是操作系统中按需分页的一些缺点,例如:

  • 用于处理页面错误的处理器开销和表数量大于简单的页面管理技术。
  • 内部碎片化的可能性更大。
  • 它的内存访问时间更长。
  • 页表长度寄存器(PTLR)对**_虚拟内存_**有限制。
  • 页映射表需要额外的内存和**_寄存器_**。

操作系统中的预分页是什么?

**预分页**用于克服按需分页的一个主要缺点。**_按需分页_**的一个主要缺点是许多页面错误,这些错误可能在进程开始执行时就发生。这种情况是由于尝试将初始局部性加载到内存中造成的,同样的情况可能会反复出现。

What are Demand Paging and Pre-paging

例如,当一个进程被换出后重新启动时,它的所有页面都存在于磁盘上,因此每个页面都必须通过其自身的页面错误重新加载到主内存中以执行进程,这是最坏的情况。

如果系统使用**_工作集模型_**,则会为每个进程在其工作集中维护一个页面列表。如果进程因缺少空闲帧或 I/O 等待而被挂起,则进程的工作集不会丢失。当进程恢复时,在进程再次开始执行之前,整个工作集会重新加载到内存中。

What are Demand Paging and Pre-paging

上图显示 CPU 只引用或请求了一个页面,但操作系统**_预分页_**了三个额外的页面。操作系统会尝试预测处理器接下来需要哪些页面,并主动将这些页面加载到主内存中。

预分页的主要优点是,当进程引用连续地址时,它可以节省时间。在这种情况下,操作系统很容易猜测并加载适当的页面,而且由于猜测许多页面正确的可能性很高,因此会发生更少的页面错误。

What are Demand Paging and Pre-paging

预分页可能并非总是有益。预分页的优点基于一个简单问题的答案:实施预分页的成本是否小于处理相应页面错误的成本。可能的情况是,预分页加载到内存中的大量页面并未被使用。这个概念的缺点是,如果预加载的页面未使用,则会浪费时间和内存等资源。

预分页的优点

在操作系统中,预分页具有以下优点,例如:

  • 当使用大型连续结构时,它节省时间。考虑一个进程请求连续地址的示例。在这种情况下,操作系统可以猜测接下来的页面。而且,如果猜测正确,将发生更少的页面错误,并且有效内存访问时间将增加。

预分页的缺点

预分页也有以下缺点,例如:

  • 如果这些预分页的页面未使用,则会浪费时间和内存。

按需分页与预分页的区别

在按需分页中,只有执行程序所需的页面才会被加载到主内存中。当程序需要其他页面时,它会将未使用的页面从主内存中换出,并将所需的页面换入。因此,即使可用空间不足以将整个程序加载到主内存中,也允许它执行程序。按需分页引起的问题之一是页面错误,这是由于在主内存中找不到所需页面而导致的,因此需要进行交换。

在预分页中,除了因页面错误而请求的页面之外,还会加载其他页面。这些页面的选择是基于常见的访问模式,特别是对于辅助内存设备。以下是按需分页和预分页之间的一些更多区别,例如:

请求分页预分页
任何页面都不会被加载到主内存中,除非进程当前正在引用它。所有需要同时使用的页面都会被加载到内存中,但在进程实际引用它们之前。
页面错误数量显著高。在某些特定情况下,页面错误数量可能会减少。
加载页面所需的时间在任何情况下都不能减少。当进程引用连续地址时,加载页面所需的时间会减少。
加载到主内存中的页面肯定会被使用。加载到主内存中的页面可能被使用,也可能不被使用。
不会浪费资源,因为页面按需加载。会浪费资源,因为页面很可能未使用。

总结

按需分页和预分页是操作系统内存管理的两种实用方法。按需分页通过仅在必要时加载页面来帮助节省内存使用,但也可能因频繁的页面错误而导致延迟。预分页根据预期的访问模式提前加载页面,以尽量减少这些延迟。如果预测正确,预分页可以提高性能,尽管按需分页使用的内存较少。大多数现代系统通过结合两者成功地平衡了速度和内存使用。

常见问题

是否可以同时使用按需分页和预分页?

确实,操作系统能够并且经常同时使用这两种方法。它们使用按需分页加载必要的页面,并使用预分页加载可能很快被访问的更多相关页面。这种混合策略旨在在执行速度和内存效率之间取得平衡。

哪一个会导致更多的初始页面错误?

由于按需分页只在页面被访问时才加载,因此它通常会导致更多的初始页面错误。这可能会导致早期执行滞后,特别是如果需要快速加载大量页面。预分页试图通过提前加载预期页面来避免这种情况,如果准确,则可以降低早期错误。

预分页是什么意思?

预分页是操作系统使用的一种技术,通过预测哪些页面很快就会被需要,提前将内存页面加载到内存中,甚至在进程请求它们之前。通过这样做,可以减少执行期间发生的页面错误数量。如果猜测准确,则可以避免延迟,从而提高性能。另一方面,如果操作不当,会导致加载额外的页面,浪费处理时间和内存。

描述按需分页。

按需分页是一种内存管理技术,它不会将程序的页面加载到物理内存中,直到它们在操作中被特别需要。因此,程序加载速度更快,并且使用的 RAM 更少,因为只有必要的部件才会被加载到内存中。当操作系统从辅助存储中检索所需的页面(因为它不在内存中)时,会发生页面错误。

在什么情况下按需分页优于预分页?

通常,当系统内存受限或程序行为高度动态且不确定时,按需分页更受青睐。在这些情况下,预分页可能会加载大量不必要的页面,导致开销。因为按需分页确保只加载所需的页面,所以它使用的内存更少,尤其是在多个进程争用相同内存量的情况下。预分页最常见的问题是什么?


下一个主题Arc-操作系统