操作系统中的分页

2025年6月5日 | 12分钟阅读

在操作系统中,分页是一种存储机制,用于将进程以页(page)的形式从二级存储(secondary storage)检索到主内存(main memory)中。

分页背后的主要思想是将每个进程划分为多个页。主内存也将被划分为多个帧(frame)。

进程的一个页将存储在内存的一个帧中。这些页可以存储在内存的不同位置,但总是优先寻找连续的帧或空闲块。

进程的页只有在需要时才会被调入主内存,否则它们将驻留在二级存储中。

不同的操作系统定义了不同的帧大小。每个帧的大小必须相等。考虑到在分页中,页是映射到帧上的,因此页大小需要与帧大小相同。


OS Paging

示例

假设主内存大小为16KB,帧大小为1KB,那么主内存将被划分为16个1KB大小的帧的集合。

系统中有4个进程,即P1、P2、P3和P4,每个进程大小为4KB。每个进程被划分为1KB大小的页,以便一个页可以存储在一个帧中。

最初,所有帧都是空的,因此进程的页将以连续的方式存储。

帧、页以及两者之间的映射如下图所示。


OS Paging Example

假设一段时间后,P2和P4被移至等待状态。现在,有8个帧变为空闲,因此其他页可以加载到这些空闲位置。一个大小为8KB(8个页)的进程P5正在就绪队列中等待。

鉴于内存中有8个非连续的可用帧,并且分页提供了将进程存储在不同位置的灵活性。因此,我们可以将进程P5的页加载到P2和P4原来的位置。


OS Paging Example 2

内存管理单元 (MMU)

内存管理单元(MMU)的目的是将逻辑地址转换为物理地址。逻辑地址是CPU为每个页生成的地址,而物理地址是存储每个页的帧的实际地址。

当CPU需要通过逻辑地址访问一个页时,操作系统需要获取物理地址来物理上访问该页。

逻辑地址包含两个部分。

  1. 页号
  2. Offset

操作系统的内存管理单元需要将页号转换为帧号。

示例

参照上图,假设CPU需要访问进程P3的第4个页的第10个字。由于进程P1的第4个页存储在第9个帧中,因此第9个帧的第10个字将作为物理地址返回。

分页的过程是什么?

操作系统可以通过移动操作在主存(物理内存)和辅助内存(虚拟内存)之间传输数据。这两种内存都使用指定大小的块。每当应用程序运行时,操作系统会立即将创建的页面保存到备用内存中。当进程需要内存时,操作系统会在主内存中为其分配页帧。然后,操作系统将程序片段从临时内存转移到主存储区。

分页术语表

要理解分页过程,需要熟悉相关的词汇。以下是在处理分页时常用的一组术语:

  • 页面

页:逻辑/二级存储器中固定大小的区域。数据在主存和辅助存储之间以页为单位进行传输。

工作集:一个页组构成了一个操作的工作集。随着进程访问内存中不同的位置,其工作集会不断改变。

  • 页表:

页表是内存管理单元(MMU)用来将逻辑地址转换为

  • 物理地址

物理内存:计算机可以访问的实际存储,通常是RAM的形式。

  • 虚拟内存:

固态硬盘或硬盘驱动器作为主内存的一部分,被称为虚拟内存(逻辑/二级内存)。它会临时从RAM中导入信息,以弥补物理存储的限制。物理存储由大小相同的块(即页)组成。

  • 内存管理单元 (MMU): 内存管理单元(MMU)是一种硬件,它将虚拟地址转换为实际地址。MMU同样也控制内存扇区的分配和回收。
  • 逻辑地址 (虚拟地址): 每当应用程序运行时,CPU会为每个页生成一个逻辑地址。
  • 虚拟地址空间: 一个活动程序产生的一组逻辑地址被称为物理地址空间(或虚拟地址空间)。
  • 物理地址: 物理地址对于电子存储器中的每个图像都是特定的。地址提供了进程在物理内存中的精确位置。
  • 物理地址空间: 基础设施可能使用的所有潜在实际地址的范围被称为其物理地址空间。

分页的工作流程

分页是对分割后的数据进行系统性检索和呈现的过程。在分页操作期间,会发生页命中或页错误。

工作流程的步骤如下:

1. 一个进程开始运行。

2. 操作系统将工作流程的各个部分分配给大小相同的虚拟内存页。同时,它在物理内存中创建对应的页帧。

3. 操作系统创建一个文档数据库,将进程的理论网页与实际的页面信号关联起来。

4. 另一个进程请求访问该进程的帧或页。

5a. 由于所请求的页已在主内存中,该进程产生了一次页命中。

5b. 如果所请求的页不在主内存中,机器正在处理页错误或页缺失。分页过程仍然会修复这个问题。

6. 内存管理单元(MMU)使用文件数据库来确定进程在物理存储中的位置(页帧)。

7. 页表被更新为正确的物理位置。

8. 操作系统将文档加载到主数据库的网页元素中。

9. 文档可以被访问,进程从中断处继续执行。

分页方法

有多种可用的分页实现方法,选择哪种方法需要考虑多个变量。这包括操作系统类型、可用空间量以及相关进程的需求。

例如,对于需要高性能的操作系统来说,请求分页是一个很好的选择。然而,对于需要灵活性的操作系统,抢占式分页则提供了更好的选择。

下文描述了不同的分页策略:

  • 请求分页

这是现代操作系统(如Linux、macOS和Windows)中最广泛使用的存储控制方法。它通过只在内存中存储当前正在执行的页来最大化内存利用率。

  • 预取分页

这是一种更积极的请求分页形式,它会迅速准备好正在请求的页面附近的页面。通过预测哪些仍在RAM中的页面很快会被需要,其目标是减少页面错误和延迟。

  • 预分页

预分页是预取分页的一种不那么激进的变体。系统会预加载任何可能很快需要的页面(但不是立即或马上)。

回收、窃取和空闲页队列。这些方法通过监控可用帧并根据需要重新分配它们来管理内存。

空闲页队列。

该过程通过确保等待列表几乎不会耗尽来减少处理错误页面的需求。

窃取页面。一种释放页面片段的过程。最近未被访问的页面会从内存中清除。空闲的页面元素会被加入到空闲页面队列中。

回收。结合使用窃取和回收可以释放未被使用的页帧。然而,回收更具侵略性。操作系统可能会回收那些很可能很快会恢复使用的页面。

  • 预先清理

即使已修改的页面很可能在不久的将来再次被修改,该过程仍会将这些页面的内容写回存储。这可以改善启动时间,因为当另一个应用程序启动时,计算机无需再等待页面从磁盘读取。

  • 写时复制分页

当一个应用程序试图写入一个正在被另一个程序使用的页面时,操作系统会复制该页面并授予该应用程序对它的有限所有权。这保证了两个操作的数据不会被覆盖。

  • 分段分页

将主存储器划分为可变大小的段,每个段包含一个页表,结合了分页和分段。更小的、固定大小的页将这些部分分开。与使用基于页的分段的数字内存不同,段管理模拟到实际内存位置的安排。

  • 反向分页

一种方法,计算机的内存被划分为帧,而页表存储在存储器中。当需要访问特定页面时,进程会在页表中搜索实际的帧。

页错误 (Page Faults)

当应用程序试图访问一个未存储在物理内存中的页时,就会导致页错误。原因可能是没有足够的空间,或者该页最近没有被使用,因此它从未变得可用。

此外,如果出现以下情况,也会发生页错误:这是该页当前第一次被下载到RAM中。为了给新页腾出空间,该页在存储器中被临时删除。

该文档在内存中被修改后必须传输到存储器中。操作系统的类型、可用的存储量以及正在运行的进程都会影响处理页错误的最优方法。操作系统通过分页或停止进程来管理页错误。

以下后续操作之一可能是解决方案:

如果程序在关键区域失败或页面内容不重要,则终止它。当页面出现问题时,不同的页面替换方法决定应该驱逐哪个页面。先进先出(FIFO)、最佳(Optimal)和最近最少使用(LRU)是最常见的页面替换方法。

将产生错误消息的特定页面移入主内存,并将任何未使用的页面转移到备份内存中。目标是确保程序能够继续运行。预取分页或预分页是操作系统预加载它预计很快会需要的页面的过程。如果这些预加载的网页没有被使用,即使它减少了页面错误,也会导致RAM浪费。

颠簸 (Thrashing)

当页错误率上升到计算机花费更多时间修复页问题而较少时间运行客户端代码的程度时,就会在虚拟内存中发生颠簸。当操作遇到页错误时,颠簸反馈循环开始。操作系统需要将所需的页加载到RAM中,这需要时间。当它在短时间内遇到多个页错误时,操作系统会把所有精力都浪费在修复页错误上,而不是运行用户代码。

颠簸的原因

如果发生系统颠簸,系统会持续变慢直到无法使用。颠簸只能通过解决根本原因来解决。原因包括:

  • 步骤过多

当操作系统运行多个进程时,它无法处理这些需求。因为操作系统必须不断地将网页移入和移出内存,这导致了较高的页错误率。

  • 内存过度使用

当活动使用大量空间时,操作系统无法一次将所有页面存储到存储器中。此外,这会导致很高的页错误率。

  • 页面替换算法不当

当页错误发生时,页面替换方法决定了哪一页应该被移除。一个不恰当的替换页面机制会驱逐经常使用的页面,从而导致高页错误率。

  • 大量的多道程序设计

当多任务级别足够高时,系统会并发执行程序。这会导致颠簸并给计算机的操作系统带来压力。

  • 边界缺失 当新页面到达时,如果没有足够的面板可用,操作系统必须从存储中删除页面。

防止颠簸的各种技术包括:

  • 减少进程数量。
  • 减少进程使用的内存量。
  • 使用合适的页面替换算法。
  • 增加内存容量。
  • 终止未被使用的程序。
  • 替换使用大量内存的应用程序。
  • 扩大交换文件的大小。

分页的优点

分页通过使操作系统能更好地利用物理存储来提高系统效率。分页的主要优点是:

  • 减少外部碎片

如果所有页同时在内存中,分页使得操作系统可以使用的内存量比可能的多。当页不被使用时,操作系统会将它们转移到外部存储,并在需要时再将它们返回。

  • 提高内存使用量

通过减少CPU等待文档加载到硬盘之间的时间,分页提高了效率。操作系统只换出很少使用的页面,而将大多数经常访问的页面保留在存储中。

  • 简化内存管理

分页简化了操作系统的内存管理。因此,操作系统只需扫描当前在内存中的页面,而无需监控每个进程的完整位置字段。高效的交换。由于分页,操作系统在更换页面时不能考虑分段。此外,操作系统会选择最不可能被访问的页面。

  • 支持虚拟内存

然而,内存本身不足以为所有进程服务;虚拟化内存管理确保每个进程都维护自己的地址空间。

分页的缺点

虽然分页是一种非常高效的内存利用方法,但它也使操作系统变得复杂并导致页错误。

尽管优点多于缺点,但以下列表突出了其中一些主要缺点:

  • 开销增加

因为操作系统必须跟踪哪些网页在驱动器上以及哪些在内存中,分页增加了成本。因此,这种成本降低了生产力,尤其是在磁盘速度慢的计算机上。

  • 页错误

分页可能导致页错误。当操作系统需要从硬盘加载一个页面到内存中时,就会发生错误。如果它们频繁发生,系统会崩溃。

  • 复杂性

实现和调试分页是一个复杂的过程。

内部碎片。因为算法的最后一页永远不会被完全利用,分页导致了空闲内存并促进了内部分散。

  • 页表开销 分页所需的页表会占用大量空间。可变页长(超级页)和多层页表可以缓解这个问题。

常见问题解答

Q1. “分页”这个术语是什么意思?

操作系统使用分页来处理内存,通过页面将额外的应用程序移动到主内存或硬盘上。

Q2. 分页的目的是什么?

分页能迅速将数据传送到信息位置。由于程序可以利用不存在于连续物理位置的时间区域,特定数量的页面会从硬盘上的文件夹复制并放置到RAM单元中。

Q3. 什么是帧和页?

帧是物理存储中特定大小的块,用于存放网页;而页是进程概念地址空间中固定大小的块。

Q4. 分页如何减少碎片?

通过将RAM分离成特定大小的块(页),这些块可能比进程的信息部分短,分页减少了内部碎片并提高了内存利用率。

Q5. 分页有什么好处?

分页有许多好处,包括:

  • 最佳空间分配:通过仅向分析提供必要的空间,分页使得内存能够根据请求快速供应,从而促进有效的内存使用。
  • 保护:分页通过确保一个进程无法访问已分配给另一个程序的RAM来防止数据丢失和非法访问。
  • 共享:通过允许多个进程使用内存中相同的页面,分页促进了进程间的内存池化,降低了内存使用并提高了系统效率。