【OS笔记24】:存储管理3-分页管理-页表与快表
文章目录
- 5.4 分页管理
- 分区管理的缺点回顾:
- 5.4.1 页的划分技术
- 5.4.2 相关数据结构 (静态分配)
- 1. 页表
- 2. 空闲页面(块)表
- 5.4.3 逻辑地址的形式
- 5.4.4 页式地址转换
- 5.4.5 快表和页表构造
- 两次访存问题
- 快表
5.4 分页管理
为了解决分区管理带来的种种问题,引入了更为先进和灵活的分页管理技术。
分区管理的缺点回顾:
- 外部碎片问题:如果连续的空闲区不能满足进程需求,则即使整个内存中所有空闲分区之和大于进程所需的空间,进程仍不能装入内存。
- 内存利用率不高:存在碎片现象(内部或外部),导致内存空间浪费。
- 难以实现虚拟存储:要求程序连续存放,无法使有限的内存运行较大、较多的程序。
5.4.1 页的划分技术
分页管理的基本思想是将内存空间和进程空间都进行“离散化”处理。
- 物理内存划分:系统把内存按
2^n(2的整数次幂)划分成大小相同、位置固定的若干个存储块,称为页面 (Page Frame) 或页框。 - 逻辑空间划分:进程的逻辑地址空间也按同样的大小 (
2^n) 划分成若干相等的部分,每一部分称为一个页 (Page)。 - 分配原则:进程以页为单位分配内存。一个进程的多个页可以被存放在不相邻的物理页面中。
- 分配和回收方式:
- 静态分配:作业装入时,一次性将其所有页都装入内存。
- 动态分配 (请求页式):作业运行时,根据需要动态地调入页。
5.4.2 相关数据结构 (静态分配)
1. 页表
为了将进程离散的页与内存中离散的页面对应起来,系统为每个进程建立一张页表。
- 作用:指出逻辑地址空间中的页号 (Page Number) 与其在主存中对应的页面号 (Frame Number) 的对应关系。
- 构成:由 页号 和 页面号 组成。
- 关键:每个进程都拥有一张页表,它是虚拟地址(逻辑地址)到物理地址转换的依据。

2. 空闲页面(块)表
- 作用:记载内存中当前所有空闲的页面。
- 归属:整个操作系统统一维护一张空闲页面表。

图片描述:该图直观地展示了分页机制。左侧是进程的逻辑地址空间(被划分为第0页、第1页…),中间是该进程的页表,页表中的每一项都指向右侧主存空间中的一个物理页面。箭头清晰地表明,逻辑上连续的页(如第0、1、2页)可以被映射到物理上不连续的页面(如第5、7、9号页面)。
5.4.3 逻辑地址的形式
在分页系统中,进程的逻辑地址被划分为两部分:
- 逻辑地址 = 页号 (P ) + 页内地址 (d)

- 页号 (P ): 用于在页表中查找对应的物理页面。页号部分的位数决定了一个进程最多可以拥有多少个页。例如,图中有20位页号,则总共有
2^20 = 1M个页。- 页内地址 (d): 也称为位移量 (Offset),表示该地址在所在页的起始位置开始的偏移量。页内地址的位数决定了页的大小。例如,图中有12位页内地址,则页的大小为
2^12 = 4K。
5.4.4 页式地址转换
为了在非连续的内存区域中正确地执行进程,操作系统(在硬件支持下)必须完成从逻辑地址到物理地址的转换。
- 虚拟地址 (逻辑地址) =
(页号, 页内地址) - 物理地址 (绝对地址) =
(页面号, 页内地址) - 关键:地址转换的核心就是通过页表将逻辑页号转换为物理页面号,而页内地址部分在转换过程中保持不变。
为了完成转换,CPU中需要有控制寄存器来存放当前运行进程的页表信息:
- 页表始址:存放当前进程的页表在内存中的起始地址。
- 页表长度:存放当前进程的页表大小(即总页数)。


图片描述:该图详细描绘了地址转换的硬件执行流程。
- CPU产生一个逻辑地址,如
(页号2, 页内地址452)。- 硬件首先检查页号的合法性:将页号
2与页表长度寄存器中的值3比较,因为2 < 3,地址合法。- 硬件根据页表始址寄存器的值
1k和页号2,计算出页表项在内存中的地址,并从中取出对应的页面号。图中显示,页号2对应的页面号是8。- 将获取到的页面号
8与原逻辑地址中的页内地址452组合,形成最终的物理地址。- 最终物理地址的计算公式为:
物理地址 = 页面号 * 页面大小 + 页内地址。例如:8 * 1KB + 452 = 8192 + 452 = 8644。
5.4.5 快表和页表构造
两次访存问题
从上述地址转换过程可以看出,不加优化的分页系统存在一个严重性能问题:
- 执行一次访存操作至少要访问主存两次。
- 第一次:访问内存中的页表,以确定所取数据或指令的物理地址。
- 第二次:根据转换得到的物理地址真正地存取数据或指令。
快表
为了提高存取速度,硬件上通常设置一个专用的高速缓冲寄存器组,我们称之为快表 (TLB)。
- 本质:一个用于存放页表一部分内容的高速缓存 (Cache)。
- 工作流程:
- 进行地址转换时,硬件先查找快表。
- 快表命中 (Hit):如果在快表中找到所需页号,则直接获得对应的页面号,地址转换极快完成。
- 快表未命中 (Miss):如果快表中找不到所需页号,则再去查询内存中的页表(慢速路径),并将查询到的该页表项写入快表中(通常会替换掉一个旧的条目)。
- 优势:快表的地址转换是非常快的,因为是硬件并行比较。利用程序的局部性原理,大部分地址访问都能在快表中命中,从而基本克服了两次访问主存的缺点。

这是一个更复杂的地址转换流程图。逻辑地址中的页号p被同时送到快表进行并行查找,并与页表长度l进行比较。如果p在快表中,直接得到页面号p’;如果不在,则通过常规的查页表方式获取p’,并将其更新到快表中。最终,p’与页内地址d组合成物理地址。
