【软考备考】存储管理详解:分页地址转换 + 页面置换缺页率,画张表格就得分(附 10 道练习)

操作系统第三篇,讲存储管理。上午题在这块的考法非常"实":

  • 分页地址转换:给个逻辑地址,让你算物理地址------会拆分就是一分钟一题;

  • 页面置换:给个访问序列,用 FIFO 或 LRU 算缺页次数------画对格子就得分。

后者是全篇的重头戏,也是失分重灾区:FIFO 和 LRU 的画格子方法有本质不同,很多人用 FIFO 的思路画 LRU 的格子,一错错到底。这篇把两种画法彻底分开钉死。

一、分页存储:把内存切成等大的块

分页式管理的思路:把程序(逻辑空间)切成固定大小的 ,把内存(物理空间)切成同样大小的 ,程序运行时以页为单位随便往空块里装,再用一张页表记录"第几页装在第几块"。

于是逻辑地址天生是两段结构:

复制代码
|   页号   |      页内地址(偏移)      |

页大小决定页内地址占几位:页 4KB = 2¹² → 低 12 位是页内地址,剩下的高位全是页号。

地址转换口诀:低位照抄,高位查表。 页内地址原封不动,页号去页表里换成块号,拼起来就是物理地址。

例 1(十六进制版,真题风格):页面 4KB,页表中页号 3 对应块号 5,逻辑地址 3D16H,求物理地址。

4KB = 2¹²,低 12 位正好 3 位十六进制 → 页内地址是 D16H,页号是 3。查表:页 3 → 块 5。物理地址 = 5D16H。十六进制题根本不用算,低三位照抄、高位换数。

例 2(十进制版):页面 1KB(1024 字节),逻辑地址 2500,求页号和页内地址。

复制代码
页号     = 2500 ÷ 1024 = 2(整除)
页内地址 = 2500 mod 1024 = 452

快表(TLB)一句话 :页表本身也在内存里,查一次页表就多一次访存,太慢------于是把页表的热门条目放进 CPU 里的高速小存储(快表),先查快表,命中就省一次访存。考点就一句:快表的作用是加快地址转换

二、页面置换:内存满了,踢谁出去?

程序要访问的页不在内存 = 缺页,得从外存调进来;内存没有空块,就得淘汰一个现有页面。踢谁?三种算法:

  • FIFO(先进先出) :踢最先进来的。维护一个队列,队首最老;

  • LRU(最近最少使用) :踢最久没被访问的。看每个页面的"最近使用记录";

  • OPT(最佳置换) :踢以后最迟才会用的。需要预知未来,无法实现,只是理论基准。

三、缺页率计算:画格子大法

用同一个序列把两种算法各画一遍:访问序列 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2,物理块 3 个

FIFO:队列画法------先进来的先滚蛋

复制代码
访问:  7   0   1   2   0   3   0   4   2   3   0   3   2
块1:   7   7   7   2   2   2   0   0   0   3   3   3   3
块2:       0   0   0   0   3   3   3   3   0   0   0   0
块3:           1   1   1   1   1   4   4   4   2   2   2
缺页:  √   √   √   √       √   √   √   √   √   √

逐列看:访问 2 时内存满(7,0,1),淘汰最早进内存 的 7;访问 3 时淘汰 0(此时 0 最早)...... 缺页 10 次,命中 3 次

FIFO 最易错的点命中时队列顺序不变。FIFO 记的是"入场时间",命中不动队伍------很多人手贱把命中的页挪到队尾,那是 LRU 的动作,安到 FIFO 头上全错。

LRU:栈式画法------刚用过的压到最上面

每访问一页,就把它挪到最顶部 (标记为最新),其余往下压;缺页时淘汰最底部(最久没用)的:

复制代码
访问:  7   0   1   2   0   3   0   4   2   3   0   3   2
       7   0   1   2   0   3   0   4   2   3   0   3   2   ← 栈顶=最新
           7   0   1   2   0   3   0   4   2   3   0   3
               7   0   1   2   2   3   0   4   2   3   0   ← 栈底=最久
缺页:  √   √   √   √       √       √   √   √   √

逐列走一遍关键几步:访问 2(第 4 列)时内存满,栈底是 7(最久未用),淘汰 7,2 置顶;第 5 列访问 0 命中,但 0 要置顶 (从中间抽出来压到栈顶);访问 4 时栈底是 2,淘汰 2...... 缺页 9 次,命中 4 次

LRU 的核心动作 :命中也要刷新栈序------"最近用过"的凭证更新了。这就是它和 FIFO 的本质区别:FIFO 看入场时间,命中不挪窝;LRU 看最近使用,命中必置顶

快速心算技巧

格子画熟了可以提速:

  • FIFO:心里维护一个队列,缺页就"队首出、新页进队尾";

  • LRU:缺页找淘汰对象时,回头看访问历史 ------内存里几页中,谁上一次出现的位置最靠左,谁就是最久未用,淘汰它。

四、Belady 异常:FIFO 的怪癖

直觉上物理块越多缺页应该越少,但 FIFO 可能"物理块增加、缺页反而增多" ------这叫 Belady 异常 ,是 FIFO 的独家怪癖(它只看入场时间,会蠢到把常用页踢出去)。LRU 和 OPT 没有这种异常。概念题常考,一句话记住。


五、10 道练习题

基础题(1~5)

1. 某系统页面大小为 4KB,则逻辑地址中页内地址占( )位。

A. 4  B. 12  C. 16  D. 10

2. 某系统页面大小为 1KB,某逻辑地址为 2500(十进制),其页号和页内地址分别为( )。

A. 页号 2、页内地址 452 B. 页号 2、页内地址 476 C. 页号 25、页内地址 0 D. 页号 3、页内地址 500

3. 页面大小为 4KB,页表中页号 3 对应的块号为 5,则逻辑地址 3D16H 变换后的物理地址为( )。

A. 3D16H  B. 53D16H  C. D165H  D. 5D16H

4. FIFO 页面置换算法淘汰的页面是( )。

A. 最久未被使用的 B. 最早进入内存的 C. 以后不再使用的 D. 使用次数最少的

5. LRU 页面置换算法淘汰的页面是( )。

A. 最早进入内存的 B. 随机选择的 C. 最近最长时间未被访问的 D. 刚刚被访问过的

进阶题(6~10,带坑)

6. 页面访问序列为 4, 3, 2, 1, 4, 3, 5, 4, 3, 2, 1, 5,物理块为 4 个,采用 LRU 算法,缺页次数为( )。

A. 8  B. 10  C. 9  D. 12

7. 同上题的访问序列和物理块数,采用 FIFO 算法,缺页次数为( )。

A. 8  B. 9  C. 10  D. 7

8. 关于 Belady 异常,下列说法正确的是( )。

A. LRU 算法会出现 Belady 异常 B. 所有页面置换算法都会出现 C. 物理块减少时出现的现象 D. FIFO 算法可能出现物理块增加、缺页次数反而增多的现象

9. 分页系统中引入快表(TLB)的主要目的是( )。

A. 加快地址转换速度,减少访问内存中页表的次数 B. 扩大内存容量 C. 减少缺页次数 D. 实现虚拟存储

10. 某系统页面大小为 2KB,逻辑地址为 16 位,则页号占( )位,最多可有( )页。

A. 11 位,2048 页  B. 16 位,65536 页  C. 3 位,8 页  D. 5 位,32 页


六、答案与详解

1. B 4KB = 2¹² → 页内地址 12 位。这类题就一步:把页大小凑成 2 的幂。

2. A 页号 = 2500 ÷ 1024 = 2,页内 = 2500 - 2×1024 = 452。选 B 的算成了 2500-2048 的余数...... 哦那正是 452------选 B 的 476 是拿 2500/1024≈2.44 后的 0.44×1024 凑的,老老实实整除取余,别用近似小数。

3. D 十六进制题不用换算:4KB 页 → 低 3 位十六进制(D16)是页内地址照抄 ,页号 3 查表换成块号 5 → 5D16H。选 A 的是忘了换页号;选 B 的把块号"追加"而不是"替换"。

4. B FIFO = 先进先出,淘汰最早进来的,和"用没用过"无关。

5. C LRU = 最近最少使用,淘汰最久没被访问的。注意和 FIFO 划清界限:一个看"入场时间",一个看"最近使用"。

6. A LRU、4 块,画栈式格子(过程略,建议自己画一遍验证):缺页 8 次(序列中 4,3,2,1,5,2,1,5 这几次缺)。本题和第 7 题是同一个序列两种算法,放在一起就是让你体会"算法不同、结果不同"。

7. C 同序列 FIFO:缺页 10 次 :这题常见错因有两个------一是命中后把页面挪队尾(那是 LRU 的动作!FIFO 命中队列不动);二是凭"LRU 总比 FIFO 好"的直觉把两题答案写反,本序列恰好 LRU(8 次)优于 FIFO(10 次),但这不是定律,有的序列两者持平,动手画格子才是正道。

8. D Belady 异常是 FIFO 独家:物理块变多、缺页反而变多。LRU、OPT 都没有。记住"FIFO 会背叛直觉"这一句就够。

9. A 快表是页表的 Cache:先查快表,命中就省一次内存访问------加快地址转换。它不扩内存(B)、不减缺页(C,快表不管页面在不在内存)、与虚拟存储无关(D)。

10. D 2KB = 2¹¹ → 页内 11 位;页号 = 16 - 11 = 5 位 ,最多 2⁵ = 32 页。选 A 的把页内位数当成了页号位数,方向搞反。


七、五句话带走

  1. 地址转换:低位照抄,高位查表;十六进制题低 3 位直接抄;

  2. 页号 = 逻辑地址 ÷ 页大小(整除),页内 = 取余;

  3. FIFO 看入场,命中不挪窝;LRU 看使用,命中必置顶

  4. 缺页率:画格子,FIFO 用队列、LRU 用栈(刚用的压栈顶、淘汰栈底);

  5. Belady 异常:FIFO 独家,块多反而缺页多。

下一篇预告 :操作系统收官篇------文件管理:索引节点(i-node)里直接索引、一级间接、二级间接怎么算文件最大长度,位示图怎么算第几个字第几位。至此操作系统高频考点全部通关。

相关推荐
ttod_qzstudio2 天前
【软考算法】软件设计师下午第四题之动态规划:0-1 背包与最长公共子序列的“填表艺术“
算法·动态规划·软考
ttod_qzstudio2 天前
【软考算法】软件设计师下午第四题算法总纲:从“直接放弃“到“稳稳拿分“
算法·软考
@insist1234 天前
系统规划与管理师-云原生系统建设规划与实践案例
云原生·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
ONEP软考智能体4 天前
09-ONEP高项图表版生成样例V3.0(重点示例)
软考·高项·信息系统项目管理师·软考论文·onep智能体
一几文5 天前
2026年5月软考高级系统架构设计师考试真题回顾解析-综合知识1
架构·系统架构·软考高级·软考·it证书
@insist1236 天前
系统规划与管理师-信息安全规划核心考点解析:概述与安全架构
安全·软考·安全架构·系统规划与管理师·软件水平考试·系统规划与管理工程师
幻风_huanfeng6 天前
软考:高级软件架构师学习笔记----软件架构设计
架构·系统架构·软考·高级系统架构师
幻风_huanfeng6 天前
软考:高级软件架构师学习笔记----系统工程与信息系统基础
软件工程·软考·系统工程·高级系统架构师
@insist1236 天前
系统规划与管理师-信息安全规划概述与安全架构
安全·软考·安全架构·系统规划与管理师·软件水平考试·系统规划与管理工程师