Linux操作系统-第三章-内存
题目
某计算机采用二级页表的分页存储管理方式,按字节编址,页大小为 210 字节,页表项大
小为2 字节,逻辑地址结构为:页目录号 | 页号 | 页内偏移量
逻辑地址空间大小为 216 页,则表示整个逻辑地址空间的页目录表中包含表项的个数至少是
。(2010)
A. 64 B. 128 C. 256 D. 512
解析
📊 题目条件:
- 采用 二级页表 管理方式
- 按 字节编址
- 页大小 = $2^{10}$ 字节 → 即 1 KB
- 页表项大小 = 2 字节
- 逻辑地址空间大小 = $2^{16}$ 页
✅ 注意:题目说“逻辑地址空间大小为 $2^{16}$ 页”,即总共有 $2^{16}$ 个页,而不是 $2^{16}$ 字节!
🔍 目标:
求:页目录表(第一级页表)中至少包含多少个表项?
✅ 解题思路:
在二级页表中:
- 逻辑地址分为三部分:页目录号 | 页号 | 页内偏移量
- 页目录表(Page Directory)的每个表项指向一个页表(Page Table)
- 每个页表包含若干页表项,每个页表项对应一个物理页帧
由于逻辑地址空间有 $2^{16}$ 个页,而每个页表能管理多少页?
→ 由页表大小决定。
步骤 1:计算一个页表能容纳多少个页表项
- 页大小 = $2^{10}$ 字节
- 页表项大小 = 2 字节
→ 一个页表最多可容纳:
$$
\frac{2^{10}}{2} = 2^9 = 512 \text{ 个页表项}
$$
也就是说,每个页表可以映射 512 个页。
步骤 2:计算需要多少个页表
总页数 = $2^{16}$
每个页表管理 512 页 = $2^9$ 页
→ 所需页表个数 =
$$
\frac{2^{16}}{2^9} = 2^{7} = 128
$$
步骤 3:页目录表中表项个数 = 页表个数
因为页目录表的每个表项指向一个页表,所以:
页目录表至少需要 128 个表项
✅ 最终答案:B. 128
🎯 验证逻辑:
| 层级 | 含义 | 数量 |
|---|---|---|
| 页目录表项数 | 指向页表的数量 | 128 = $2^7$ |
| 每个页表项数 | 映射页的数量 | 512 = $2^9$ |
| 总页数 | $2^7 \times 2^9 = 2^{16}$ ✅ |
✅ 正确答案:B. 128
题目
某系统采用改进型CLOCK置换算法,页表项中字段A为访问位,M为修改位。A=0表示页
最近没有被访问,A=1表示页最近被访问过。M=0表示页没有被修改过,M=1表示页被修
改过。按(A,M)所有可能的取值,将页分为四类:(0,0)、(1,0)、(0,1)和(1,1),则该
算法淘汰页的次序为
。(2016)
A.(0,0),(0,1),(1,0),(1,1)
B.(0,0),(1,0),(0,1),(1,1)
C.(0,0),(0,1),(1,1),(1,0)
D.(0,0),(1,1),(0,1),(1,0)
解析
答案:A. (0, 0), (0, 1), (1, 0), (1, 1)
本题考查 改进型 CLOCK 置换算法(Enhanced Clock Algorithm) 的淘汰次序。
🔍 改进型 CLOCK 算法原理:
在基本 CLOCK 算法基础上,增加对 访问位 A 和 修改位 M 的判断,将页面分为四类:
| 类别 | (A, M) | 含义 |
|---|---|---|
| 1 | (0, 0) | 最近未访问、未修改 → 最优淘汰对象 |
| 2 | (0, 1) | 最近未访问、但被修改过 → 需写回磁盘,代价较高 |
| 3 | (1, 0) | 最近被访问过、未修改 → 可能还会被访问,保留 |
| 4 | (1, 1) | 最近被访问过、且被修改 → 最重要,应保留 |
📌 淘汰优先级(从高到低):
按 (A, M) 组合的“价值”排序,越不重要越先淘汰
标准顺序是:
- (0, 0) —— 既没访问也没修改 → 最安全,直接淘汰
- (0, 1) —— 未访问但修改过 → 需写回,代价大,但比“被访问过的”优先淘汰
- (1, 0) —— 被访问过但未修改 → 说明可能还会用,尽量保留
- (1, 1) —— 被访问过且修改过 → 最重要,最后淘汰
→ 所以淘汰次序为:(0,0) → (0,1) → (1,0) → (1,1)
✅ 对照选项:
A. (0,0), (0,1), (1,0), (1,1) ✅ 正确
B. (0,0), (1,0), (0,1), (1,1) ❌ 错误((1,0) 不该在 (0,1) 前)
C. (0,0), (0,1), (1,1), (1,0) ❌ 错误((1,1) 不该在 (1,0) 前)
D. (0,0), (1,1), (0,1), (1,0) ❌ 错误((1,1) 是最重要的)
🎯 考点总结:
- 改进型 CLOCK 算法通过 (A,M) 四元组分类页面;
- 淘汰时优先选择 A=0 的页(未被访问),再考虑 M 值;
- 目标:减少 I/O 开销(避免淘汰需写回的页)和 保留活跃页。
✅ 正确答案:A. (0, 0), (0, 1), (1, 0), (1, 1)
题目
系统为某进程分配了4个页框,该进程已访问的页号序列为2,0,2,9,3,4,2,8,
2,4,8,4,5。若进程要访问的下一页的页号为7,依据LRU算法,应淘汰页的页号是
。(2015)
A.2 B.3 C.4 D.8
解析
我们来分析这道经典的 LRU(Least Recently Used)页面置换算法 题目。
📊 题目条件:
- 进程被分配 4 个页框(物理内存帧)
- 已访问的页号序列:
2, 0, 2, 9, 3, 4, 2, 8, 2, 4, 8, 4, 5 - 下一个要访问的页是:7 → 此时内存已满,需淘汰一页(LRU 策略)
→ 问:应淘汰哪个页?
✅ 解题思路:
我们需要根据 LRU 算法,找出当前内存中最近最少使用的页。
LRU 的核心思想:淘汰最近最久未被访问的页。
我们从头开始模拟访问过程,记录每个时刻内存中的页,并标记其“最后访问时间”或“访问顺序”。
🧩 模拟过程(维护一个“访问历史”列表,越靠左越久未用)
初始:内存空
访问 2
- 内存:[2] (未满)
访问 0
- 内存:[2, 0]
访问 2
- 命中 → 更新顺序:将 2 移到最右 → [0, 2]
访问 9
- 缺页 → 加入 9 → [0, 2, 9]
访问 3
- 缺页 → 加入 3 → [0, 2, 9, 3] ← 已满!
访问 4
- 缺页 → 需淘汰 LRU(最左:0)→ 淘汰 0 → 加入 4 → [2, 9, 3, 4]
访问 2
- 命中 → 将 2 移到最右 → [9, 3, 4, 2]
访问 8
- 缺页 → 淘汰 LRU(最左:9)→ 加入 8 → [3, 4, 2, 8]
访问 2
- 命中 → 将 2 移到最右 → [3, 4, 8, 2]
访问 4
- 命中 → 将 4 移到最右 → [3, 8, 2, 4]
访问 8
- 命中 → 将 8 移到最右 → [3, 2, 4, 8]
访问 4
- 命中 → 将 4 移到最右 → [3, 2, 8, 4]
访问 5
- 缺页 → 淘汰 LRU(最左:3)→ 加入 5 → [2, 8, 4, 5]
✅ 当前内存状态(在访问 5 后):
内存中的页:2, 8, 4, 5
访问顺序(从左到右:最近最少使用 → 最近使用):
- 最左:2(上次访问较早)
- 然后:8
- 然后:4
- 最右:5(最新访问)
注意:虽然 2 在序列中出现多次,但最后一次访问是在访问 8 之前,之后没有再访问,所以它现在是“最近最少使用”的。
🔍 下一步:访问 7
- 7 不在内存 → 缺页 → 需淘汰一页
- 根据 LRU,淘汰 最左边的页 → 即 2
✅ 正确答案:A. 2
🎯 关键点总结:
- LRU 维护的是“访问时间顺序”,不是“访问频率”;
- “最近最少使用” = “在当前时刻,距离上次访问时间最长的页”;
- 本题中,虽然 2 出现频繁,但最后一次访问是在访问 8 之前,之后没有更新,因此被淘汰。
✅ 正确答案:A. 2
题目
.在分段存储管理系统中,用共享段表描述所有被共享的段。若进程P1和P2 共享段S,下列
叙述中,错误的是
。(2019)
A.在物理内存中仅保存一份段S 的内容
B.段S 在P1和P2中应该具有相同的段号
C.P1 和P2 共享段S 在共享段表中的段表项
D.P1和P2都不再使用段S 时才回收段S 所占的内存空间
解析
答案:B. 段 S 在 P1 和 P2 中应该具有相同的段号
✅ 解析:
本题考查 分段存储系统中共享段的实现机制,与 2019 年第 7 题完全相同(重复题)。
我们逐项分析:
A. 在物理内存中仅保存一份段 S 的内容
✅ 正确。
- 共享段的核心目的就是节省内存 —— 多个进程访问同一段时,物理内存只保留一份副本;
- 通过各自的段表项指向同一个物理地址实现共享。
B. 段 S 在 P1 和 P2 中应该具有相同的段号
❌ 错误(本题答案)
- 段号是进程私有的!每个进程有自己的段表,段号是该进程内部的索引;
- P1 可以把共享段 S 放在段号 3,P2 可以放在段号 5 —— 只要它们的段表项都指向共享段表中的同一个段描述符即可;
- 段号无需相同,只要逻辑上能映射到同一物理段就行。
📌 类比:两个程序都调用
printf,但一个程序中printf在段号 2,另一个在段号 4 —— 只要都指向同一个共享代码段,就可正常运行。
C. P1 和 P2 共享段 S 在共享段表中的段表项
✅ 正确。
- 系统维护一个共享段表,记录所有被共享的段;
- 当 P1 和 P2 都共享段 S 时,它们的段表项会指向共享段表中的同一个条目(包含物理起始地址、长度、权限等);
→ 实现“多对一”映射。
D. P1 和 P2 都不再使用段 S 时才回收段 S 所占的内存空间
✅ 正确。
- 这是共享资源的典型管理策略:引用计数(Reference Count);
- 共享段表中通常有一个“引用计数”字段,每增加一个进程共享,计数 +1;减少一个,计数 -1;
- 计数为 0 时,才释放物理内存。
🎯 考点总结:
| 选项 | 是否正确 | 原因 |
|---|---|---|
| A | ✅ | 共享段节省内存 |
| B | ❌ | 段号是进程私有,无需一致 |
| C | ✅ | 共享段表统一管理 |
| D | ✅ | 引用计数机制 |
✅ 正确答案:B. 段 S 在 P1 和 P2 中应该具有相同的段号
题目
.某进程访问的页b 不在内存中,导致产生缺页异常,改缺页异常处理过程中不一定包含的操
作是( ) (2022)
A.淘汰内存中的页 B.建立页号与页框号的对应关系
C.将页b 从外存读入内存 D.修改页表中页b 对应的存在位
解析
答案:A. 淘汰内存中的页
本题考查 缺页异常处理过程 中哪些操作是“不一定包含”的。
📌 缺页异常处理流程(标准步骤):
当进程访问的页 b 不在内存中时,触发缺页中断,操作系统执行以下操作:
检查是否有空闲页框
- 若有 → 直接分配,无需淘汰;
- 若无 → 执行页面置换算法,淘汰一个页(如 LRU、Clock 等);
将页 b 从外存读入内存(磁盘 I/O)
建立页号与页框号的对应关系(更新页表)
修改页表中页 b 对应的存在位为 1
恢复进程执行(重新执行引发缺页的指令)
逐项分析:
A. 淘汰内存中的页
❌ 不一定包含 —— 只有当内存已满时才需要淘汰;
- 如果系统有空闲页框,直接分配即可,无需淘汰;
→ 是“可能”发生,非“一定”发生。
B. 建立页号与页框号的对应关系
✅ 一定包含 —— 这是地址映射的核心,必须更新页表。
C. 将页 b 从外存读入内存
✅ 一定包含 —— 因为页 b 不在内存,必须从磁盘加载。
D. 修改页表中页 b 对应的存在位
✅ 一定包含 —— 存在位从 0 改为 1,表示该页已在内存。
🎯 考点总结:
| 操作 | 是否一定包含 | 说明 |
|---|---|---|
| A. 淘汰内存中的页 | ❌ 否 | 仅当无空闲页框时发生 |
| B. 建立页号与页框号对应 | ✅ 是 | 必须更新页表 |
| C. 从外存读入页 b | ✅ 是 | 缺页的本质是页不在内存 |
| D. 修改存在位 | ✅ 是 | 标记页已驻留 |
✅ 正确答案:A. 淘汰内存中的页
📌 记忆口诀:
“缺页处理四步走:读入、建表、改位、可选淘汰”
—— 淘汰是“可选”,其余是“必做”。
✅ 最终答案:A
题目
下列因素,影响请求分页系统有效(平均)访存时间的是
I、 缺页率
II、 磁盘读写时间
III、内存访问时间
IV 、执行缺页处理程序的 CPU 时间
A、II,III B、I,IV C、I,III,IV D、I,II,III,IV
解析
答案:D. I, II, III, IV
本题考查 请求分页系统中,影响“有效(平均)访存时间”(Effective Memory Access Time, EMAT)的因素。
在请求分页系统中,一次内存访问可能触发缺页中断,导致:
- 访问内存 → 若命中 → 时间 = 内存访问时间
- 若缺页 → 需执行缺页处理程序 → 包括:
- CPU 处理缺页异常(CPU 时间)
- 磁盘读取页面(磁盘读写时间)
- 将页面装入内存后重新执行指令
因此,平均访存时间是命中与缺页情况的加权平均。
📊 有效访存时间公式:
设:
- $ p $ = 缺页率(Page Fault Rate)
- $ m $ = 内存访问时间(Memory Access Time)
- $ d $ = 缺页处理时间(包括 CPU 处理 + 磁盘 I/O)
则:
$$
\text{EMAT} = (1 - p) \cdot m + p \cdot d
$$
而 $ d $ 本身包含:
- 执行缺页处理程序的 CPU 时间
- 磁盘读写时间
→ 所以,所有四个因素都直接影响 EMAT。
逐项分析:
I. 缺页率
✅ 影响 —— 是公式中的核心变量 $ p $,缺页率越高,EMAT 越长。
II. 磁盘读写时间
✅ 影响 —— 是缺页处理时间 $ d $ 的主要部分,磁盘慢则 $ d $ 大,EMAT 增大。
III. 内存访问时间
✅ 影响 —— 是命中时的时间 $ m $,即使缺页率低,若内存访问慢,EMAT 也会高。
IV. 执行缺页处理程序的 CPU 时间
✅ 影响 —— 是缺页处理时间 $ d $ 的一部分,CPU 处理开销大,$ d $ 增大 → EMAT 增大。
🎯 结论:
所有四项均影响请求分页系统的有效访存时间。
✅ 正确答案:D. I, II, III, IV
💡 补充说明:
这是操作系统性能评估的核心内容。实际系统中,为降低 EMAT,常采用:
- 提高命中率(增加物理内存、优化置换算法)
- 使用高速缓存(TLB)减少缺页次数
- 使用 SSD 替代 HDD 降低磁盘读写时间
- 优化缺页处理程序减少 CPU 开销
✅ 最终答案:D
题目
给出某进程访问页面的序列:
…, 1, 3, 4, 5, 6, 0, 3, 2, 3, 2, ↑t, 0, 4, 0, 3, 2, 9, 2, 1, …
工作集窗口大小 = 6
问:在 t 时刻 的工作集是什么?
解析
我们来分析这道关于 工作集(Working Set) 的题目。
📊 题目条件:
- 给出某进程访问页面的序列:
…, 1, 3, 4, 5, 6, 0, 3, 2, 3, 2, ↑t, 0, 4, 0, 3, 2, 9, 2, 1, … - 工作集窗口大小 = 6
- 问:在 t 时刻 的工作集是什么?
✅ 工作集定义:
工作集(Working Set) 是指:在最近 k 次内存访问中,所访问到的不同页面的集合。
- k 是“窗口大小”(本题为 6)
- 从当前时刻 t 往前数 k 个访问记录(包含 t 时刻的访问),取其中出现的所有不同页号组成集合。
⚠️ 注意:工作集是“最近访问过的页面”,不是“当前内存中的页面”;它反映的是程序的局部性行为。
🔍 解题步骤:
Step 1:确定 t 时刻之前的 6 个访问记录
观察序列:
1 | ..., 1, 3, 4, 5, 6, 0, 3, 2, 3, 2, ↑t, 0, 4, 0, 3, 2, 9, 2, 1, ... |
t 时刻的箭头指向的是 第 11 个访问位置(从左往右数),即:
访问序列(标序号):
| 序号 | 页面 |
|---|---|
| 1 | 1 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 5 | 6 |
| 6 | 0 |
| 7 | 3 |
| 8 | 2 |
| 9 | 3 |
| 10 | 2 |
| 11 | ← t |
→ 所以,在 t 时刻,往前数 6 个访问 是指:
序号 6 到 11(包含 t 时刻的访问):
1 | 序号 6: 0 |
但注意:t 时刻的访问尚未发生 —— 箭头在“2”之后,“0”之前,说明:
t 时刻是刚刚完成第 10 次访问(页面 2)之后,即将进行第 11 次访问(页面 0)。
所以,t 时刻的工作集应基于“最近 6 次已完成的访问”,即:
从第 5 次到第 10 次访问(共 6 次):
1 | 第 5 次:6 |
→ 这 6 次访问的页面为:6, 0, 3, 2, 3, 2
→ 去重后得到工作集:{6, 0, 3, 2}
✅ 对照选项:
A. {6, 0, 3, 2} ✅ 正确
B. {2, 3, 0, 4} ❌ 包含 4(不在最近6次中)
C. {0, 4, 3, 2, 9} ❌ 包含 4、9(超出范围)
D. {4, 5, 6, 0, 3, 2} ❌ 包含 4、5(超出范围)
🎯 关键点:
- 工作集是“最近 k 次访问中出现的页面”,不是“当前内存中的页面”;
- “t 时刻”通常指“刚完成某次访问后”,因此取“前 k 次访问”;
- 本题中,t 时刻位于“2”之后、“0”之前,故取第 5~10 次访问。
✅ 正确答案:A. {6, 0, 3, 2}
- Title: Linux操作系统-第三章-内存
- Author: 姜智浩
- Created at : 2025-12-29 11:45:14
- Updated at : 2026-01-15 08:50:14
- Link: https://super-213.github.io/zhihaojiang.github.io/2025/12/29/20251229Linux操作系统-第三章-内存/
- License: This work is licensed under CC BY-NC-SA 4.0.