操作系统页式存储
页式存储是一种将进程逻辑地址空间与物理内存空间划分为等大小单元、通过页表实现离散分配与地址转换的内存管理方式,本文介绍了页式存储的定义、核心概念、地址映射过程、快表与两级页表的优化机制,并通过对比优缺点和例题分析了其性能与适用场景。
一、定义与本质
页式存储管理是一种离散分配的内存管理方式。它将进程的逻辑地址空间划分为若干个大小相等的页(Page),将物理内存空间划分为同样大小的页框Page Frame,也称帧),分配时以页框为单位将进程的各页离散装入内存中。
页式存储的核心思想是以等分单元消除外部碎片,提高内存利用率。由于进程在内存中的存放不再要求连续,页式存储实现了逻辑上连续、物理上离散的地址映射关系。
二、核心概念与结构
1. 页面与页框
| 术语 | 所属空间 | 说明 |
|---|---|---|
| 页 | 逻辑地址空间 | 进程被划分的等大单元,从0开始编号 |
| 页框 | 物理地址空间 | 内存被划分的等大单元,大小与页相等 |
| 页内偏移 | 地址低位 | 表示数据在页内的具体位置 |
页面大小通常为2的整数次幂(如4KB),这样地址转换时可用位运算快速完成。
页的大小由硬件决定,一个系统中所有进程的页大小相同。页框大小必须与页大小严格相等,否则无法装入。
2. 页表
页表(Page Table)是记录进程各页在内存中对应页框号的映射表。每个进程拥有独立的页表。
| 字段 | 含义 |
|---|---|
| 页号 | 进程逻辑页的编号(隐含,不占存储) |
| 页框号 | 该页装入的物理页框编号 |
页表存储在内存中,由页表寄存器(PTR)保存其起始地址和长度。
3. 地址映射过程
逻辑地址到物理地址的转换由内存管理单元(MMU)硬件完成:
逻辑地址 = 页号P + 页内偏移W
转换步骤:
1. 从逻辑地址中提取页号P和偏移W
2. 以P为索引查页表,获取对应页框号F
3. 物理地址 = F × 页面大小 + W

页式地址转换可以类比"查字典",页号是页码(索引),页框号是正文所在的真实页码,页内偏移是行数,最终位置 = 正文页码 + 行数。
三、快表与两级页表
1. 快表
由于页表存放在内存中,每次访存需先查页表(一次访存)再取数据(二次访存),效率降低50%。为此引入快表(TLB,Translation Lookaside Buffer):
- 快表是高速缓存,存放最近使用的页表项
- 地址转换时先查快表,命中则跳过内存查表步骤
- 基于局部性原理,命中率可达90%以上
有效访存时间计算:
EAT = 命中率 × (快表访问时间 + 一次访存时间) + (1-命中率) × (快表访问时间 + 两次访存时间)
2. 两级页表
当进程逻辑地址空间很大时,页表本身也会占用大量连续内存。两级页表将页表本身再分页:
- 页目录表:外层页表,每个表项指向一个页表页
- 页表:内层页表,每个表项指向一个数据页
两级页表实现了页表本身的离散存储,解决了大页表的连续存放问题。
多级页表虽然节省了页表占用的连续内存,但增加了访存次数,N级页表需要N+1次访存才能取到数据。
四、优缺点对比
| 优点 | 缺点 |
|---|---|
| 无外部碎片:内存以页框为单位分配,不会产生进程间空隙 | 存在内部碎片:进程最后一页平均浪费半页空间 |
| 程序不必连续存放:离散分配提高内存利用率 | 地址转换开销:需要硬件支持和页表存储空间 |
| 便于共享和保护:页面级权限控制灵活 | 抖动风险:页面置换不当会导致系统效率骤降 |
五、练习
题目1:某计算机系统采用页式存储管理方案,假设其地址长度为32位,其中页号占20位,页内地址占12位。系统中页面总数是多少?页面大小是多少?
A. 页面总数1M,页面大小1K
B. 页面总数1M,页面大小4K
C. 页面总数4M,页面大小1K
D. 页面总数4M,页面大小4K
答案:B
解析:页号占20位,表示共有2^20 = 1M个页面;页内地址占12位,表示每页大小为2^12 = 4KB。注意1M = 1024 × 1024 ≈ 10^6,1K = 1024。
题目2:在页式存储管理系统中,若采用两级页表,逻辑地址格式为:
| 页目录号(10位)| 页表索引(10位)| 页内偏移(12位)|
则页面大小是( ),一个进程最多可有( )个页面。
A. 4KB,1M
B. 4KB,4M
C. 4MB,1M
D. 4MB,4M
答案:A
解析:页内偏移占12位,页面大小 = 2^12 = 4KB。页目录号10位+页表索引10位共20位页号,最大页面数 = 2^20 = 1M个页面。
题目3:在请求分页系统中,假设进程的页面走向为:1,2,3,4,1,2,5,1,2,3,4,5。系统分配给该进程3个页框,且采用LRU(最近最久未使用)置换算法,则缺页次数为( )。
A. 7
B. 8
C. 9
D. 10
答案:D
解析:LRU淘汰最久未访问的页面。逐次分析:
| 访问页 | 内存页框(最近→最久) | 缺页? |
|---|---|---|
| 1 | 1 | √ |
| 2 | 2,1 | √ |
| 3 | 3,2,1 | √ |
| 4 | 4,3,2(淘汰1) | √ |
| 1 | 1,4,3(淘汰2) | √ |
| 2 | 2,1,4(淘汰3) | √ |
| 5 | 5,2,1(淘汰4) | √ |
| 1 | 1,5,2 | × |
| 2 | 2,1,5 | × |
| 3 | 3,2,1(淘汰5) | √ |
| 4 | 4,3,2(淘汰1) | √ |
| 5 | 5,4,3(淘汰2) | √ |
缺页次数为10次,缺页率 = 10/12 ≈ 83.3%。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)