【软考每日一练004】图解内存管理:分页存储地址转换与页面置换算法详解
1. 题目复现
题目描述:
进程 P 有 8 个页面,页号分别为 0~7,页面大小为 4K。假设系统给进程 P 分配了 4 个存储块,进程 P 的页面变换表如下所示。表中的状态位等于 1 和 0 分别表示页面在内存和不在内存。
| 页号 | 页帧号 | 状态位 | 访问位 | 修改位 |
|---|---|---|---|---|
| 0 | - | 0 | 0 | 0 |
| 1 | 7 | 1 | 1 | 0 |
| 2 | 5 | 1 | 0 | 1 |
| 3 | - | 0 | 0 | 0 |
| 4 | - | 0 | 0 | 0 |
| 5 | 3 | 1 | 1 | 1 |
| 6 | - | 0 | 0 | 0 |
| 7 | 9 | 1 | 1 | 0 |
- 若进程 P 要访问的逻辑地址为十六进制5148H5148H5148H,则该地址经过变换后,其物理地址应为十六进制( );
- 如果进程 P 要访问的页面 6 不在内存,那么根据页面置换算法,应该淘汰页号为( )的页面。
选项:
第一问:A. 3148H | B. 5148H | C. 7148H | D. 9148H
第二问:A. 1 | B. 2 | C. 5 | D. 9
2. 答案解析
第一问:物理地址转换
答案:A. 3148H
解析过程:
- 拆分逻辑地址:逻辑地址5148H5148H5148H是十六进制。
- 页面大小为4K=2124K = 2^{12}4K=212字节,对应十六进制中的3 位(因为163=409616^3 = 4096163=4096)。
- 因此,后三位148H148H148H为页内偏移量(W)。
- 最高位5H5H5H为页号(P)。即:P=5P = 5P=5。
- 查表:找到页号为 5 的行。
- 状态位为 1(说明在内存中)。
- 对应的**页帧号(物理块号)**为 3。
- 组合物理地址:
- 物理地址 = 页帧号 + 页内偏移量。
- 将 3 与148H148H148H拼接,得到3148H3148H3148H。
第二问:页面置换选择
答案:B. 2
解析过程:
该题考查的是改进型 Clock(时钟)置换算法(也称为 NRU 算法)。该算法根据(访问位 A,修改位 M)的组合来选择淘汰页。
- 确定候选页:只有状态位为 1(已在内存中)的页面才能被淘汰。
- 页 1:(1, 0)
- 页 2:(0, 1)
- 页 5:(1, 1)
- 页 7:(1, 0)
- 优先级规则:改进型 Clock 算法的淘汰优先级如下:
- 第 1 类 (0, 0):最近未访问且未修改(最佳选择)。
- 第 2 类 (0, 1):最近未访问但已修改。
- 第 3 类 (1, 0):最近已访问但未修改。
- 第 4 类 (1, 1):最近已访问且已修改。
- 匹配结果:
- 内存中没有 (0, 0) 类型的页面。
- 页号 2的属性是(0, 1),属于第 2 类,是当前优先级最高的淘汰对象。
3. 解题思路总结(干货)
3.1 宏观视角:为什么需要“页面”?
1. 什么是页面?物理载体是什么?
为了解决内存碎片问题,OS 把进程的逻辑地址空间分成若干个固定大小的区域,称为页面(Page)。
- 物理载体:页面是逻辑上的划分,它最终要存放到物理内存中。物理内存被对应地划分为等大的存储块(Storage Block),也叫**页帧(Page Frame)**或物理块。
- 物理载体:存储块的物理载体就是计算机的RAM(内存条)。
2. 页面大小是谁确定的?
页面的大小通常是222的幂次(如4KB4KB4KB)。
- 谁确定:由硬件(CPU 架构)和操作系统共同确定。
- 为什么有大小:页面太大,内存碎片(页内碎片)多;页面太小,页表就会变得臃肿。4KB4KB4KB是目前权衡后的主流标准。
3. 页号 vs 页帧号
页号(Page Number):进程视角下的“逻辑编号”。
页帧号(Frame Number): 内存条上实际存储位置的“物理编号”。
页表的作用就是记录这两者的映射关系。它存储在内存中(系统区),由 MMU(内存管理单元) 硬件加速查询。
3.2 核心机制
在题目给出的页表中,除了映射关系,还有三个关键的状态位,它们由 MMU 在访问时自动触发变更,或由 OS 定期清理:
| 状态位 | 含义 | 触发变更时机 |
|---|---|---|
| 状态位 § | 页面是否在内存中 | 页面调入内存置 1,换出置 0。 |
| 访问位 (A) | 最近是否被访问过 | 只要 CPU 读/写该页,硬件自动置 1。 |
| 修改位 (M) | 页面内容是否被改过 | 只有发生“写”操作时,硬件自动置 1。 |
3.3 原题目如果换一种规则
如果题目要求使用其他算法,结果会怎样?
- FIFO(先进先出):无法判断。因为页表里没给“进入内存的时间”。如果假设按页号顺序进入,则淘汰页 1。
- LRU(最近最久未使用):理论上淘汰页 2。因为页 2 的访问位为 0,而 1, 5, 7 访问位均为 1。LRU 认为 0 代表最久没用。
- 当前主流算法:现实中的 Linux 和 Windows 并不使用纯粹的 LRU(因为开销太大),而是使用Clock 算法的变种或WSL(驻留集管理)。
4、 总结
- 页号看索引,页帧看内存。
- 地址转换:保持偏移量不变,只换“头”(页号换块号)。
- 置换算法:看到访问位和修改位,直接上NRU (0,0) > (0,1) > (1,0) > (1,1)规则。