Skip to content

五、内存管理(第51-68题) ​

第51题 ​

下列关于逻辑地址与物理地址的叙述中,正确的是( )。

A. 逻辑地址是内存单元的实际地址,由硬件直接寻址访问 B. 逻辑地址是程序编译、链接后形成的地址空间中的地址,是 CPU 执行指令时使用的地址,必须经过地址变换才能得到物理地址 C. 物理地址由用户程序直接指定,逻辑地址由操作系统在装入时分配 D. 逻辑地址空间与物理地址空间的大小必须完全相同

答案:B

考点定位:五、内存管理——逻辑地址(虚拟地址)与物理地址的概念,难度★☆☆☆☆,是内存管理开篇必考的基础概念题,国企笔试中常以概念判断形式出现。

【结论】 逻辑地址是程序编译、链接后形成的地址,CPU执行指令时使用逻辑地址,必须经过地址变换机构(MMU)才能转换为物理地址,选B。

【逐项辨析】

  • A 错误——把两种地址的含义弄反了,逻辑地址不是内存单元的实际地址,不能直接用于硬件寻址。
  • B 正确——逻辑地址由编译、链接后形成,是CPU执行指令时使用的地址,只有经地址变换才能得到物理地址。
  • C 错误——物理地址由地址变换机构(MMU)产生,用户程序中出现的都是逻辑地址,程序无权直接指定物理地址。
  • D 错误——逻辑地址空间与物理地址空间的大小可以不一致,虚拟存储器中逻辑地址空间通常大于物理地址空间。

【知识点】 逻辑地址与物理地址的完整对比:

对比项逻辑地址(虚拟地址/相对地址)物理地址(绝对地址)
产生时机编译、链接后形成地址变换后产生
使用者CPU执行指令时使用地址总线最终访问内存时使用
是否随装入位置变化不变随实际存放位置而定
空间大小关系可与物理地址空间不等,虚拟存储中可更大由实际内存容量决定
变换机构由MMU硬件自动完成,对用户透明无需变换,直接寻址

地址变换机构通常由硬件MMU完成,建立逻辑地址到物理地址的映射,该过程对用户和程序员完全透明。引入虚拟存储器后,逻辑地址空间甚至可以远大于物理地址空间,这是通过请求调页/调段技术实现的。

【记忆锚点】 口诀——“逻辑编译产,CPU用它算;物理真实存,MMU来换”。另记:虚拟存储的前提是逻辑地址空间可以大于物理地址空间。

【易混对比】

对比维度逻辑地址 vs 物理地址页号 vs 物理块号
本质区别前者是程序视角,后者是硬件视角前者是逻辑划分,后者是物理划分
变换关系一对一或多对一(共享)通过页表映射
用户是否感知用户直接使用逻辑地址用户不感知物理块号

换个问法:“虚拟存储器为什么能让程序使用的地址空间大于实际内存?”——因为逻辑地址空间与物理地址空间独立,只有部分页需要装入内存,其余留在磁盘。与第55题(分页地址结构)连考。

【自测】 在虚拟存储系统中,某程序的逻辑地址空间为64KB,物理内存只有32KB,该程序能否运行?

答:能运行。虚拟存储通过请求调页/调段技术,只需将当前需要的部分装入内存即可运行,逻辑地址空间可以大于物理地址空间。〈出处:408真题同型题〉

【易错提醒】 ①逻辑地址、虚拟地址、相对地址是同一概念的三种叫法,不要当成三种不同地址;②地址变换由硬件自动完成,对用户和程序员透明;③逻辑地址空间与物理地址空间不要求大小相同,这正是虚拟存储的前提。


【知识关联】 本题考点:逻辑地址与物理地址,CPU 使用逻辑地址、须经 MMU 变换。同库题群:第52题(内存管理功能含地址变换)、第53–68题(分区/分页/分段/虚拟内存);补题相关:补-11(fork/COW 与页表)。面试:从虚拟地址到物理地址要查哪些结构(段/页表、TLB)?

【拓展延伸】 变式:给虚拟地址算物理地址(注意页号、页内偏移、TLB 未命中)。Linux:/proc/<pid>/maps、pmap、crash 用于进阶观测。(本题答案 B,以题干选项为准)

第52题 ​

下列关于内存管理主要功能的叙述中,正确的是( )。

A. 内存管理只负责内存空间的分配,内存空间的回收由用户程序自己完成 B. 地址变换由用户程序在运行时用软件完成,操作系统和硬件都不参与 C. 内存管理的主要功能包括内存空间的分配与回收、地址变换、内存空间的扩充和存储保护 D. 内存管理的主要功能是把 CPU 主频提高到与内存相同,以加快指令执行

答案:C

考点定位:五、内存管理——内存管理的主要功能(分配回收、地址转换、扩充、保护),难度★☆☆☆☆,是国企笔试中反复出现的记忆型送分题。

【结论】 内存管理的主要功能包括内存空间的分配与回收、地址变换、内存空间的扩充和存储保护四个方面,选C。

【逐项辨析】

  • A 错误——内存回收同样是内存管理的职责,不可能交给用户程序完成,否则会导致内存泄漏且无法统一管理。
  • B 错误——地址变换由硬件地址变换机构(MMU)完成,并非用户程序用软件实现,对用户透明。
  • C 正确——完整概括了内存管理的四项主要功能:分配与回收、地址变换、扩充、保护。
  • D 错误——主频由CPU硬件决定,与内存管理的功能完全无关,内存管理不负责提升CPU性能。

【知识点】 内存管理的四项主要功能及内涵:

功能具体内容实现手段
分配与回收为作业分配内存空间,作业结束时回收连续分配、离散分配(分页/分段/段页式)
地址变换逻辑地址到物理地址的转换静态重定位、动态重定位、MMU
内存扩充逻辑上扩充内存容量覆盖、交换、请求调页/调段(虚拟存储)
存储保护防止越界访问和越权存取界地址寄存器、页表/段表中的保护位

此外,内存管理还包括内存共享、碎片处理等辅助功能。“扩充”指的是逻辑扩充,并不是真的增加物理内存容量,而是通过虚拟存储技术在逻辑上扩大可用空间。

【记忆锚点】 口诀——“分回变扩保”——分配回收、地址变换、内存扩充、存储保护。五个字记全四项功能。

【易混对比】

功能连续分配离散分配(分页/分段)
分配方式分区(固定/动态)页、段、段页
地址变换动态重定位寄存器页表/段表/MMU
碎片情况固定分区有内部碎片,动态分区有外部碎片分页有内部碎片,分段有外部碎片
扩充方式覆盖、交换请求调页/调段

换个问法:“内存管理中,哪些功能需要硬件支持?”——地址变换(MMU)和存储保护(界地址寄存器)都需要硬件配合。与第53题(连续分配方式)连考。

【自测】 下列关于内存管理功能的描述中,哪一项是错误的? A. 地址变换对用户程序透明 B. 内存扩充意味着增加物理内存条 C. 存储保护可防止用户程序越界访问操作系统空间 D. 内存回收由操作系统完成

答:B。内存扩充是逻辑扩充(虚拟存储),不是增加物理内存条。〈出处:国网真题库同型题〉

【易错提醒】 ①四项功能要记全:分配回收、地址变换、扩充、保护;②“扩充”指的是逻辑扩充,并不是真的增加物理内存;③存储保护既包括防止地址越界,也包括防止越权存取。


【知识关联】 本题考点:内存管理四大功能——分配回收、地址变换、扩充、存储保护。同库题群:第51题(逻辑/物理地址)、第53–59题(分区与分页分段)、第62–68题(虚拟内存与保护);补题相关:补-11 COW。面试:虚拟存储如何「扩充」逻辑地址空间?保护位/基址限长各防什么?

【拓展延伸】 变式:四项中哪项主要由 MMU/硬件完成(地址变换与越界检查);回收能否交给用户(不能)。Linux:brk/mmap/munmap/mprotect 对应分配、映射与保护。(本题答案 C,以题干选项为准)

第53题 ​

下列关于固定分区与动态分区分配中碎片的叙述中,正确的是( )。

A. 固定分区分配会产生外部碎片,动态分区分配会产生内部碎片 B. 固定分区分配和动态分区分配都会产生内部碎片,都不会产生外部碎片 C. 固定分区分配不会产生碎片,动态分区分配会产生内部碎片 D. 固定分区分配会产生内部碎片,动态分区分配会产生外部碎片

答案:D

考点定位:五、内存管理——固定分区与动态分区分配的特点(产生哪种碎片),难度★☆☆☆☆,是连续分配方式中最常被考到的一个对比考点。

【结论】 固定分区分配产生内部碎片,动态分区分配产生外部碎片,选D。

【逐项辨析】

  • A 错误——正好把两种分配方式产生的碎片类型说反了。
  • B 错误——固定分区有内部碎片,动态分区有外部碎片,二者各有其一,不是都会产生内部碎片。
  • C 错误——固定分区因分区大小固定,当作业小于分区时必然产生内部碎片,不会没有碎片。
  • D 正确——固定分区产生内部碎片,动态分区产生外部碎片。

【知识点】 两种连续分配方式的碎片产生机理:

分配方式分区特点碎片类型碎片成因消除方式
固定分区大小预先固定,每个分区装一个作业内部碎片作业小于分区,分区内剩余空间被浪费无法消除,只能通过合理划分分区减少
动态分区装入时按需求划分,大小随作业而变外部碎片作业反复装入撤出后,内存中留下分散小空闲区紧凑(拼接)技术合并空闲区

固定分区分配中,分区大小预先确定,当作业小于分区时,分区内剩余空间被浪费,这部分浪费位于分区内部,称为内部碎片。动态分区分配不产生内部碎片,但作业反复装入、撤出后,内存中会留下许多分散且太小的空闲区,夹在已分配分区之间,称为外部碎片。

【记忆锚点】 口诀——“固定内,动态外”——固定分区产生内部碎片,动态分区产生外部碎片。另记:内部碎片在分区“里面”,外部碎片在分区“外面”(之间)。

【易混对比】

碎片类型位置产生原因能否用紧凑消除典型场景
内部碎片已分配分区内部分配单元大于实际需求不能固定分区、分页
外部碎片已分配分区之间反复分配回收后留下小空闲区能动态分区、分段

换个问法:“动态分区分配中,首次适应、最佳适应算法的作用是什么?”——它们只能减少外部碎片的产生,不能根除外部碎片。与第54题(碎片概念辨析)连考。

【自测】 某系统采用固定分区分配,内存划分为4个分区,大小分别为8KB、16KB、32KB、64KB。现有作业大小为10KB、20KB、40KB,依次装入后,内部碎片总量为多少?

答:42KB。10KB装入16KB分区,碎片6KB;20KB装入32KB分区,碎片12KB;40KB装入64KB分区,碎片24KB;总量6+12+24=42KB。〈出处:大厂面试高频〉

【易错提醒】 ①记牢对应关系:固定分区—内部碎片,动态分区—外部碎片;②首次适应、最佳适应等算法只能减少动态分区的外部碎片,不能根除;③紧凑可消除外部碎片,但需要移动大量信息且依赖动态重定位支持。


【知识关联】 本题考点:固定分区→内部碎片,动态分区→外部碎片。同库题群:第54题(两种碎片定义)、第55–56题(分配算法与紧凑)、第59题(分段/分页碎片特征)。面试:为何动态分区利用率下降、需要紧凑或离散分配?

【拓展延伸】 变式:给分区/作业尺寸判断碎片类型;分页主要剩页内内部碎片。工程:连续动态分区已少见,伙伴系统+slab 在离散框架下管理空闲。(本题答案 D,以题干选项为准)

第54题 ​

下列关于内部碎片与外部碎片的叙述中,正确的是( )。

A. 内部碎片是分配给作业的分区中未被利用的那部分空间,外部碎片是分区之间因太小而无法分配给作业的空闲区 B. 内部碎片存在于分区之间,外部碎片存在于分区内部 C. 内部碎片可以通过紧凑(拼接)技术消除,外部碎片不能通过紧凑技术消除 D. 内部碎片只可能由分页存储管理产生,外部碎片只可能由分段存储管理产生

答案:A

考点定位:五、内存管理——内部碎片与外部碎片的区别,难度★☆☆☆☆,是判断碎片类型的必考基础题,常与分页、分段的特点结合出题。

【结论】 内部碎片是已分配分区中未被利用的空间,外部碎片是分区之间因太小而无法分配的空闲区,选A。

【逐项辨析】

  • A 正确——准确说明了内部碎片在分区内部、外部碎片在分区之间的位置与成因。
  • B 错误——把两者的位置说反了,内部碎片在分区内部,外部碎片在分区之间。
  • C 错误——紧凑只能消除外部碎片,内部碎片无法通过紧凑消除,因为内部碎片被已分配区域包围。
  • D 错误——说法过于绝对,固定分区也产生内部碎片,动态分区也产生外部碎片,并非只有分页或分段才产生。

【知识点】 两种碎片的完整定义与特征:

特征内部碎片外部碎片
位置已分配给作业的存储区域内部已分配分区之间
成因分配单元大小固定,作业用不完分配区域反复分配回收后,留下分散小空闲区
能否被本作业使用不能不涉及(尚未分配)
能否被其他作业使用不能(分区已分配)不能(尺寸太小)
消除方式无法消除,等分区回收后重新利用紧凑(拼接)技术合并
典型场景固定分区、分页管理动态分区、分段管理

根本区别在于碎片所处的位置:内部碎片在已分配区域内部,外部碎片在已分配区域之间。紧凑技术通过移动已分配区域把分散的空闲区合并,只能消除外部碎片,无法消除内部碎片。

【记忆锚点】 口诀——“内在里,外在外,紧凑只治外不治里”。内部碎片在“里面”,外部碎片在“外面”(之间),紧凑只能处理外部碎片。

【易混对比】

对比维度内部碎片外部碎片
空间归属属于已分配区,但被浪费属于未分配区,但太小无法利用
消除难度难,需改变分配粒度相对易,可通过紧凑合并
对系统影响降低已分配区的利用率降低总可用内存的利用率

换个问法:“分页管理为什么有内部碎片?”——因为页大小固定,最后一页往往装不满,页内剩余空间即为内部碎片。与第53题(固定分区与动态分区碎片)连考。

【自测】 某分页系统页大小为4KB,某程序大小为15KB,则该程序会产生多大的内部碎片?

答:1KB。15KB需要4页(0-3页),前3页满,第3页只用3KB,剩余1KB为内部碎片。〈出处:408真题同型题〉

【易错提醒】 ①判断碎片类型先看位置:分区内部是内部碎片,分区之间是外部碎片;②“分页—内部碎片、分段—外部碎片”是常考的对应关系;③紧凑开销大,且必须配合动态重定位寄存器才能正确运行。


【知识关联】 本题考点:内部碎片(已分配区内浪费)vs 外部碎片(分区间过小空闲)。同库题群:第53题(固定/动态分区各产哪种)、第59题(分段)、第65–67题(置换与内存利用)。面试:紧凑能消哪种碎片?分页为何近似「无外部碎片」?

【拓展延伸】 变式:「内部碎片用紧凑消除」为错;固定分区+动态分区碎片对照表。Linux:伙伴系统合并空闲块减少外部碎片,slab 处理小对象内部碎片。(本题答案 A,以题干选项为准)

第55题 ​

下列关于分页存储管理中逻辑地址与页表的叙述中,正确的是( )。

A. 逻辑地址由页号和页内偏移量组成,页表的作用是记录每个页的页内偏移量 B. 页表保存在磁盘上,每次访问内存都要先访问磁盘查找页表 C. 页表的作用只是记录作业被划分成多少个页,页号到物理块号的对应关系无需保存 D. 逻辑地址由页号和页内偏移量两部分组成,页表的作用是实现页号到物理块号的映射

答案:D

考点定位:五、内存管理——分页存储管理的地址结构与页表作用,难度★☆☆☆☆,是分页管理的基础考点,国企笔试与互联网笔试都高频出现。

【结论】 逻辑地址由页号和页内偏移量两部分组成,页表的核心作用是实现页号到物理块号的映射,选D。

【逐项辨析】

  • A 错误——页内偏移量由逻辑地址直接给出,不需要页表记录,页表记录的是页号与物理块号的对应关系。
  • B 错误——页表通常存放在内存中,查页表访问的是内存而不是磁盘;磁盘上保存的是页面本身(外存交换区)。
  • C 错误——页表的核心作用正是保存页号到物理块号的映射,否则无法完成地址变换。
  • D 正确——逻辑地址由页号和页内偏移量组成,页表实现页号到物理块号的映射。

【知识点】 分页存储管理的地址结构与页表机制:

项目说明
逻辑地址结构一维地址,由页号(P)和页内偏移量(W)组成
页大小通常为2的整数次幂(如4KB=2^12),便于硬件拆分
页内偏移量位数log2(页大小),如4KB对应12位
页号位数地址总位数 - 页内偏移量位数
页表作用页号到物理块号的映射表
页表项内容物理块号、状态位、访问位、修改位、保护位等
页表存放位置内存(连续区域),页表起始地址由页表寄存器保存

地址变换时,用页号查页表得到物理块号,再用“块号x页大小+页内偏移量”得到物理地址。页内偏移量在整个过程中保持不变,只有页号被替换为物理块号。

【推导过程】 以32位系统、页大小4KB为例,逻辑地址拆分示意:

逻辑地址(32位) = [页号(20位) | 页内偏移量(12位)]

示例:逻辑地址 0x00001234
┌────────────────┬────────────────┐
│   页号 = 0x1   │ 偏移量 = 0x234 │
│  (高20位)      │   (低12位)     │
└────────────────┴────────────────┘

查页表:页号1 -> 物理块号5
物理地址 = 5 x 4096 + 0x234 = 0x5000 + 0x234 = 0x5234

【记忆锚点】 口诀——“页号查表得块号,偏移不动直接套”。页内偏移量原样保留,只有页号被替换为物理块号。

【易混对比】

对比维度分页管理分段管理
地址维度一维(页号+偏移)二维(段号+段内偏移)
划分依据固定大小,物理划分逻辑单位,大小不等
用户是否可见透明,用户不感知可见,程序员指定段名
碎片类型内部碎片外部碎片
页表/段表页表记录块号段表记录段长和基址

换个问法:“页表项中为什么不保存页号?”——因为页号由逻辑地址直接给出,页表项按页号顺序排列,通过页号直接索引即可。与第51题(逻辑地址与物理地址)连考。

【自测】 某32位系统页大小为8KB,则逻辑地址0x00004ABC的页号和页内偏移量分别是多少?

答:页号=2,页内偏移量=0xABC。8KB=2^13,页内偏移量占13位,最大偏移为 0x1FFF。0x00004ABC=19132,19132÷8192=2 余 2748,故页号=2,偏移=2748=0xABC。(直接把 0x4ABC 当偏移是错误的:0x4ABC=19132 已超出 13 位范围。)〈出处:大厂面试高频〉

【易错提醒】 ①页大小取2的整数次幂,页内偏移量位数等于以2为底页大小的对数;②页表项中通常不保存页号,页号由逻辑地址直接给出,页表项按页号顺序排列;③地址变换中只有页号被替换成块号,页内偏移量原样保留。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 D,以题干选项为准)

第56题 ​

某分页系统中页大小为 4KB,页表内容为:页号 0 对应块号 5,页号 1 对应块号 8,页号 2 对应块号 3,页号 3 对应块号 10。若某逻辑地址为 0x2A5F,则其对应的物理地址是( )。 A. 0x2A5F B. 0x8A5F C. 0x5A5F D. 0x3A5F

答案:D

考点定位:五、内存管理——分页地址变换计算(已知页表与页大小求物理地址),难度★★☆☆☆,是分页管理中唯一的高频计算题,几乎每套笔试都能见到。

【结论】 逻辑地址0x2A5F经页表变换后得到物理地址0x3A5F,选D。

【逐项辨析】

  • A 错误——0x2A5F是原始逻辑地址,相当于没有进行地址变换。
  • B 错误——0x8A5F是把页号1对应的块号8误当作第2页的块号。
  • C 错误——0x5A5F是把页号0对应的块号5误当作第2页的块号。
  • D 正确——3x4096+2655=14943,写成十六进制即0x3A5F。

【知识点】 分页地址变换的基本公式与步骤: 页大小为4KB=4096B=2^12,因此逻辑地址的低12位是页内偏移量,高位是页号。 物理地址 = 物理块号 x 页大小 + 页内偏移量

【推导过程】 地址变换分步计算:

步骤1:确定页内偏移量位数 页大小 = 4KB = 4096 = 2^12 -> 页内偏移量占12位

步骤2:拆分逻辑地址

项目十六进制二进制(低16位)说明
逻辑地址0x2A5F0010 1010 0101 1111原始地址
页内偏移量(低12位)0xA5F1010 0101 1111直接保留
页号(高4位)0x20010右移12位得到

步骤3:查页表

页号物理块号
05
18
23
310

页号2 -> 物理块号3

步骤4:计算物理地址

计算项值十六进制
物理块号30x3
块号左移12位(x4096)3x4096 = 122880x3000
页内偏移量26550xA5F
物理地址12288+2655 = 149430x3A5F
逻辑地址 0x2A5F 的变换过程:
┌─────────────────────────────────────┐
│  逻辑地址: 0x2A5F = 0010|1010 0101 1111 │
│           ^页号2  ^偏移量0xA5F(12位) │
│              v 查页表                │
│           块号3 = 0011               │
│              v 拼接                  │
│  物理地址: 0x3A5F = 0011|1010 0101 1111 │
└─────────────────────────────────────┘

【记忆锚点】 口诀——“偏移多少不变,页号换成块号”。页内偏移量像“门牌号”在页内不变,页号像“楼号”要换成物理的“楼号”。

【易混对比】

错误类型错误做法错误结果
不变换直接用逻辑地址0x2A5F
张冠李戴(块号8)把页号1的块号给页号20x8A5F
张冠李戴(块号5)把页号0的块号给页号20x5A5F
正确页号2->块号3,拼接偏移0x3A5F

换个问法:“若页大小改为8KB,逻辑地址0x2A5F的物理地址是多少?”——页内偏移量占13位,页号=0x1,偏移量仍为0xA5F,块号8,物理地址=8×8192+0xA5F=0x10000+0xA5F=0x10A5F(拼接时块号要左移13位,不是把8直接放到16位地址的高4位)。与第55题(分页地址结构)连考。

【自测】 某分页系统页大小为4KB,页表为:页号0->块号2,页号1->块号7,页号2->块号4,页号3->块号9。逻辑地址0x1B3C的物理地址是多少?

答:0x7B3C。页大小4KB->偏移量12位,逻辑地址0x1B3C的页号=0x1,偏移量=0xB3C;查表页号1->块号7;物理地址=7x4096+0xB3C=0x7000+0xB3C=0x7B3C。〈出处:408真题同型题〉

【易错提醒】 ①页大小4KB对应偏移量12位,页号要由逻辑地址右移12位得到;②物理地址高位是块号,低位偏移量保持不变,不要对偏移量再作变换;③查表必须用逻辑地址中的页号,不能随手取一个块号代入。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 D,以题干选项为准)

第57题 ​

下列关于快表(TLB)的叙述中,正确的是( )。

A. 快表是存放在高速缓存中的部分页表副本,命中时可直接得到物理块号,从而减少一次访问内存 B. 快表存放在内存中,命中时仍然要先访问内存中的页表才能得到物理块号 C. 快表命中时,逻辑地址中的页内偏移量也需要经过快表变换 D. 快表用于保存最近使用过的物理地址,命中时可以省去页内偏移量的计算

答案:A

考点定位:五、内存管理——快表(TLB)的作用与命中时的地址转换流程,难度★☆☆☆☆,属于分页地址变换的必考配套考点,笔试中出现频率很高。

【结论】 快表是存放在高速缓存中的部分页表副本,命中时可直接得到物理块号,从而减少一次访问内存,选A。

【逐项辨析】

  • A 正确——快表是高速缓存中的部分页表副本,命中时无需再访问内存中的页表。
  • B 错误——快表不在内存中,它存放在高速缓存(Cache)中,命中时不必再访问内存中的页表。
  • C 错误——页内偏移量由逻辑地址直接给出,不参与查表变换,快表只处理页号到块号的映射。
  • D 错误——快表保存的是页表项(页号->块号的映射)而不是物理地址,命中时仍需将块号与偏移量拼接。

【知识点】 快表(TLB)的完整工作机制:

项目说明
全称Translation Lookaside Buffer,地址变换高速缓存
存放位置高速缓存(Cache),由硬件实现
存储内容最近使用过的少量页表项(页号->块号映射)
查找方式按内容并行查找(相联存储器/Associative Memory)
命中时访存次数1次(直接取数据)
未命中时访存次数2次(先查页表,再取数据)
未命中后处理将该页表项送入快表,可能替换旧项

地址变换时先查快表:若命中,直接从快表中取出物理块号,与页内偏移量拼接成物理地址,此时只需一次访问内存取数据;若未命中,则仍需访问内存中的页表,并把该页表项送入快表。命中率越高,平均访存时间越短。

【记忆锚点】 口诀——“快表命中一次访,未命中时两次忙”。另记:TLB是“页表的Cache”,Cache是“内存的Cache”,层次关系是CPU->TLB->页表(内存)->磁盘。

【易混对比】

对比项快表(TLB)命中快表(TLB)未命中
访存次数1次2次(查页表+取数据)
时间开销快(缓存访问)慢(内存访问)
后续操作无页表项送入快表
对快表内容影响可能更新访问位可能产生替换

换个问法:“计算带快表的分页系统平均访存时间需要哪些参数?”——需要快表命中率、快表访问时间、内存访问时间。与第58题(多级页表)连考。

【自测】 某系统快表命中率为90%,快表访问时间为20ns,内存访问时间为100ns。则平均访存时间为多少?

答:130ns。命中时:20+100=120ns;未命中时:20+100+100=220ns;平均=0.9x120+0.1x220=108+22=130ns。注意:查快表无论命中与否都需要时间。〈出处:大厂面试高频〉

【易错提醒】 ①快表命中访存一次,未命中访存两次,这是计算平均访存时间的关键;②快表按内容并行查找,故称相联存储器;③进程切换时一般需要刷新快表,否则会造成地址映射错乱。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 A,以题干选项为准)

第58题 ​

引入多级页表的主要目的是( )。

A. 增加页内偏移量的位数,从而扩大页的大小 B. 避免为整个页表分配一大片连续的内存空间,使暂时不用的页表可以不占用内存,从而节省页表所占空间 C. 减少访问内存的次数,使每次地址变换只需访问一次内存 D. 使逻辑地址空间小于物理地址空间

答案:B

考点定位:五、内存管理——引入多级页表的原因,难度★☆☆☆☆,是分页管理中“为什么”类问题的高频考点。

【结论】 引入多级页表是为了避免为整个页表分配一大片连续内存,使暂时不用的页表可以不占用内存,从而节省页表空间,选B。

【逐项辨析】

  • A 错误——页的大小由页内偏移量的位数决定,与页表的级数无关,多级页表不改变页大小。
  • B 正确——多级页表的目的正是节省页表占用的内存并使页表不必连续存放。
  • C 错误——多级页表增加而不是减少了访存次数,例如两级页表未命中快表时需三次访存。
  • D 错误——逻辑地址空间的大小由地址位数决定,与页表级数无关,虚拟存储中逻辑地址空间通常大于物理地址空间。

【知识点】 多级页表的设计动机与结构:

引入多级页表的核心原因是:若采用一级页表,需要为页表分配连续的内存空间,而且即使进程只使用少量页,也要为整个逻辑地址空间建立页表项,造成内存浪费。多级页表把页表再分页,建立页目录表指向各个页表页,只有被实际用到的页表页才需要装入内存。

单级页表 vs 两级页表 结构对比:

单级页表(需要连续大空间):
┌─────────────────────────────────────────┐
│ 页表(连续存放,所有页表项)                  │
│ [页表项0][页表项1][页表项2]...[页表项N-1] │
└─────────────────────────────────────────┘

两级页表(页目录+离散页表页):
┌─────────────┐      ┌─────────────┐
│  页目录表    │----->│  页表页0    │
│ [目录项0]   │      │ [表项0..k]  │
│ [目录项1]   │----->│  页表页1    │
│ [目录项2]   │----->│  页表页2    │
│    ...      │      │    ...      │
│ [目录项m]   │      │  页表页m    │
└─────────────┘      └─────────────┘
         ^ 目录项有效位=0时不分配页表页

代价:地址变换需要多次访问内存。两级页表在快表未命中时要三次访存:先查页目录、再查页表、最后取数据。

【记忆锚点】 口诀——“多级页表省空间,牺牲时间换连续”。多级页表是“用时间换空间”的经典案例。

【易混对比】

对比项单级页表多级页表
页表存放必须连续不必连续
页表空间整个逻辑空间都要建表只用到的页才建页表页
访存次数(未命中TLB)2次n+1次(n为页表级数)
设计目标简单直接省空间、支持大地址空间

换个问法:“64位系统为什么必须采用多级页表?”——因为64位地址空间极大,单级页表本身会占用巨量内存,必须分级才能管理。与第57题(快表TLB)连考。

【自测】 某系统采用两级页表,快表命中率为85%,快表访问时间15ns,内存访问时间80ns。求平均访存时间。

答:119ns。命中:15+80=95ns;未命中:15+80+80+80=255ns(查页目录+查页表+取数据);平均=0.85x95+0.15x255=80.75+38.25=119ns。〈出处:408真题同型题〉

【易错提醒】 ①多级页表是“用时间换空间”,省内存但增加访存次数;②两级页表未命中快表时访存三次,命中快表时只需一次;③页目录中的每个表项指向一个页表页,页表页内再记录物理块号。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 B,以题干选项为准)

第59题 ​

下列关于分段存储管理的叙述中,正确的是( )。

A. 段是按程序的逻辑单位(如主程序段、子程序段、数据段)划分的,逻辑地址是二维的,由段号和段内偏移量组成,并可通过段长实现越界保护 B. 段的大小是固定的,由操作系统在作业装入时平均划分 C. 分段管理中的逻辑地址是一维的,与分页管理完全相同 D. 分段管理无法实现存储保护,因为段内地址是连续的

答案:A

考点定位:五、内存管理——分段存储管理的特点(二维地址、按逻辑单位划分、越界保护),难度★☆☆☆☆,是与分页对比出题的高频考点。

【结论】 段按程序逻辑单位划分,逻辑地址是二维的,由段号和段内偏移量组成,可通过段长实现越界保护,选A。

【逐项辨析】

  • A 正确——分段按逻辑单位划分,逻辑地址二维,并用段长检查实现越界保护。
  • B 错误——段的大小由程序的逻辑结构决定,各段长度不要求相等;平均划分固定大小的是分页。
  • C 错误——分页的逻辑地址是一维的,分段是二维的,两者并不相同。
  • D 错误——分段恰恰通过段长检查和存取权限检查实现存储保护,越界保护是其优点之一。

【知识点】 分段存储管理的完整特征:

特征说明
划分依据程序的逻辑结构(主程序、子程序、数据、栈等)
段名/段号由程序员给出,用户可见
段长不固定,由程序逻辑决定
地址结构二维:段号 + 段内偏移量
段表内容段长、段起始地址(基址)、存取权限
地址变换步骤①段号查段表得基址和段长;②检查偏移<段长;③基址+偏移=物理地址
保护机制段长检查(越界中断)+存取权限检查
优点便于共享、保护、动态增长
缺点产生外部碎片

分段系统中,地址变换时先检查段内偏移量是否小于段长,若超出则产生越界中断,从而实现存储保护;同时还可对段设置存取权限,便于实现共享与保护。

【记忆锚点】 口诀——“分页一维按大小,分段二维按逻辑;段长检查防越界,共享保护更方便”。

【易混对比】

对比维度分页管理分段管理
地址维度一维二维(段号,段内偏移)
划分单位固定大小的页逻辑单位,大小不等
用户可见性透明可见,程序员指定段
碎片类型内部碎片外部碎片
保护方式页表保护位段长检查+权限检查
共享方式以页为单位共享以段为单位共享,更自然

换个问法:“为什么分段更便于实现信息共享?”——因为段是逻辑单位,共享内容恰好在一个段内时,只需共享整个段;而分页可能把共享内容拆到多个页中。与第60题(段页式管理)连考。

【自测】 某分段系统中,段表如下:段0(基址2000,段长500),段1(基址8000,段长3000)。逻辑地址(1,2500)是否合法?若合法,物理地址是多少?

答:合法,物理地址为10500。段号1的段长为3000,偏移量2500<3000,合法;物理地址=8000+2500=10500。若逻辑地址为(1,3500)则越界。〈出处:国网真题库同型题〉

【易错提醒】 ①分段是二维地址(段号、段内偏移量),分页是一维地址;②分页对用户透明,分段对用户可见,段名由程序员给出;③段长检查是分段地址变换的必备步骤,也是分段实现保护的依据。


【知识关联】 本题考点:分段管理——按逻辑单位划分、二维地址(段号+段内偏移)、段长越界保护。同库题群:第51–54题(地址与碎片基础)、第56–58题(分页/快表)、第60题(段页式);补题相关:补-11。面试:分页 vs 分段(物理 vs 逻辑划分、一维 vs 二维)?

【拓展延伸】 变式:给逻辑地址结构判断是分页还是分段;段表项需要哪些字段。工程:x86 段页式中段选择子+页表并存,现代 OS 多「段基址为 0」弱化分段。(本题答案 A,以题干选项为准)

第60题 ​

段页式存储管理中,用户程序的划分方式是( )。

A. 先将用户程序按逻辑结构分成若干段,再把每个段划分成若干大小相同的页,并为每个段赋予段名 B. 先将用户程序分成若干页,再把每个页划分成若干段,段长由系统统一决定 C. 把整个用户程序作为一段,段内不再划分,装入时占用一片连续的内存空间 D. 把内存划分为若干固定大小的块,程序按块装入,与程序的逻辑结构无关

答案:A

考点定位:五、内存管理——段页式存储管理的特点,难度★☆☆☆☆,段页式管理是国企笔试中“三种存储管理方式对比”的常考小点,通常以“划分顺序”的形式直接考查。

【结论】 段页式管理是先将用户程序按逻辑结构分成若干段,再把每个段划分成若干大小相同的页,选A。

【逐项辨析】

  • A 正确——完整描述了段页式“先分段、段内分页”的划分顺序,且段的划分依据是程序的逻辑结构。
  • B 错误——划分顺序被颠倒,先分页再分段不是段页式的做法,而且页的大小由系统固定。
  • C 错误——这是纯分段的思想,段内不再划分就无法发挥分页消除外部碎片的作用。
  • D 错误——只描述了按固定块装入(纯分页),完全忽略了“段”这一逻辑单位。

【知识点】 段页式存储管理的结构与地址变换:

段页式是分段与分页的结合,基本思想是“先分段、段内再分页”。作业的地址空间先按程序逻辑结构划分为若干段,每个段再划分为若干大小相等的页;内存空间则按同样大小划分为块。这样既保留了分段便于共享、保护和动态增长的优点,又获得了分页消除外部碎片、内存利用率高的好处。

段页式地址结构(三段式):
┌─────────┬─────────┬─────────────────┐
│  段号    │ 段内页号 │    页内位移      │
│ (s位)   │ (p位)   │    (d位)        │
└─────────┴─────────┴─────────────────┘
         ^段表指出页表位置  ^页表指出物理块号

访问数据时需查两次表:先查段表得到该段页表的地址,再查页表得到物理块号。

【推导过程】 段页式地址拆解示例:

假设某系统地址结构为:段号8位,页号8位,页内位移12位,页大小4KB。

地址分量位数取值范围作用
段号8位0~255索引段表,找到对应段的页表地址
段内页号8位0~255索引页表,找到物理块号
页内位移12位0~4095拼接物理地址低位,不变

地址变换流程:

逻辑地址 -> 拆分为(段号,页号,位移)
    v
查段表:段号 -> 页表起始地址
    v
查页表:页号 -> 物理块号
    v
物理地址 = 块号 x 页大小 + 页内位移

通常要访问内存三次:查段表、查页表、取数据,可借助快表减少访存次数。

【记忆锚点】 口诀——“段页式,先段后页;查两次表,三次访存”。另记:段页式地址是“段号+页号+位移”三段,不是“页号+段号”。

【易混对比】

对比维度分页分段段页式
划分顺序直接分页直接分段先分段,段内分页
地址结构一维二维三维(段号,页号,位移)
碎片情况内部碎片外部碎片内部碎片(页内)
访存次数(无快表)2次2次3次
主要优点无外碎片,利用率高共享保护方便兼顾两者优点

换个问法:“段页式系统中,快表可以缓存什么?”——可以缓存(段号,页号)->物理块号的映射,命中时一次访存即可完成地址变换。与第59题(分段管理)连考。

【自测】 某段页式系统页大小为1KB,某程序分两段,段0长2.5KB,段1长4KB。问:段0和段1各需要多少个页?整个程序会产生多大的内部碎片?

答:段0需3页,段1需4页,内部碎片共0.5KB。段0:2.5KB需3页(0,1,2页),最后一页用0.5KB,碎片0.5KB;段1:4KB正好4页,无碎片;总内部碎片=0.5KB。〈出处:408真题同型题〉

【易错提醒】 ①段页式的顺序是“先分段、段内分页”,顺序颠倒即为错误选项;②地址结构是“段号+页号+页内位移”的三段式,不是“页号+段号”;③访问一条指令或一个数据通常要访问内存三次(查段表、查页表、取数据),可借助快表减少访存次数。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 A,以题干选项为准)

第61题 ​

分页与分段的本质区别在于( )。

A. 页和段都是信息的逻辑单位,如何划分完全由用户决定 B. 页是信息的物理单位,大小固定且由系统确定;段是信息的逻辑单位,大小不固定且由用户程序决定 C. 页是信息的逻辑单位,由用户按程序结构划分;段是信息的物理单位,由系统按固定大小划分 D. 分页对用户是可见的,分段对用户是不可见的

答案:B

考点定位:五、内存管理——分页与分段的对比,难度★☆☆☆☆,是离散分配方式中最经典的对比型考点,各类笔试反复出现。

【结论】 选B。分页的页是物理单位,大小固定且由系统决定;分段的段是逻辑单位,大小不固定且由用户程序决定。

【逐项辨析】

  • A 错误——页不是逻辑单位,页的划分与程序逻辑结构无关,完全由系统机械切分。
  • B 正确——准确区分了页(物理单位,固定大小,系统决定)与段(逻辑单位,可变大小,用户决定)的三重差异。
  • C 错误——把页与段的性质完全颠倒,页由系统按固定大小划分,段由用户按程序结构划分。
  • D 错误——恰恰相反,分页对用户透明(一维地址),分段对用户可见(二维地址:段名+段内偏移)。

【知识点】 分页与分段同属离散分配,但设计目标与实现机制截然不同:

对比维度分页分段
单位性质物理单位(消除外部碎片)逻辑单位(满足程序结构)
大小固定(由硬件/系统决定,如4KB)不固定(由用户程序决定)
划分依据机械划分,与程序逻辑无关按功能模块(主程序、子程序、数据段)
地址空间一维(线性地址)二维(段号+段内地址)
用户可见性不可见可见(需显式给出段名)
主要优势提高内存利用率,消除外部碎片便于共享、保护、动态增长

分页通过页表完成逻辑页到物理块的映射;分段通过段表完成段号到段基址+段长的映射。段表中还包含存取权限位,天然支持段的保护与共享。

【推导过程】 分页与分段地址转换过程对比:

分页地址转换(一维):
逻辑地址 = [页号 | 页内偏移]
         |
         v
      页表查询
         |
         v
物理地址 = [物理块号 | 页内偏移](页内偏移直接复制)

分段地址转换(二维):
逻辑地址 = [段号 | 段内偏移]
         |
         v
      段表查询(段基址 + 段长)
         |
      段内偏移 < 段长?
       /        \
     是          否
      |           |
      v           v
物理地址 = 段基址 + 段内偏移   越界中断

【记忆锚点】 口诀——“页物理段逻辑,页固定段可变,页一维段二维,页碎片少段易共享”。

【易混对比】

易混概念分页分段
是否产生外部碎片基本消除可能产生(段长不固定)
是否产生内部碎片有(最后一页可能不满)无
信息共享粒度页(粒度粗,可能混有非共享数据)段(粒度精,正好是一个功能模块)

换个问法:“为什么分段更便于共享和保护?”——因为段是逻辑单位,一段恰好对应一个功能模块,段表自带存取权限位,可直接按段控制读写权限;而页是物理切分,一个页可能同时包含代码和数据,无法独立共享。与第65、66题(页面置换算法)连考——分页/分段解决“如何分配内存”,置换算法解决“如何换入换出”,两者共同构成虚拟存储的完整机制。

【自测】 在分段系统中,某进程有代码段(段号0,基址1000,段长2000)和数据段(段号1,基址4000,段长1500)。访问逻辑地址(1, 1200)和(0, 2500)的结果分别是什么?

答:(1, 1200)合法,物理地址 = 4000 + 1200 = 5200;(0, 2500)非法,段内偏移2500 > 段长2000,产生越界中断。〈出处:408真题同型题〉

【易错提醒】 ①记忆口诀:“页物理、段逻辑;页固定、段可变;页不可见、段可见”。②分页地址是一维的,分段地址是二维的。③分段便于共享和保护,分页便于提高内存利用率,两者各有侧重。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 B,以题干选项为准)

第62题 ​

虚拟存储器得以实现的理论基础是( )。

A. 程序顺序执行时CPU与I/O设备可以并行工作 B. 程序执行时所表现出的局部性原理,即时间局部性和空间局部性 C. 内存的存取速度远高于外存,因此可以把外存直接当作内存使用 D. 进程并发执行时对临界资源的互斥访问

答案:B

考点定位:五、内存管理——虚拟内存的概念与理论基础,难度★☆☆☆☆,是虚拟存储的总纲性考点,常以“理论基础是什么”直接设问。

【结论】 选B。虚拟存储器得以实现的核心理论基础是程序执行的局部性原理,包括时间局部性和空间局部性。

【逐项辨析】

  • A 错误——程序顺序执行时CPU与I/O设备串行工作;且CPU与I/O并行是并发/多道程序设计的特点,与虚拟存储的理论基础无关。
  • B 正确——局部性原理(时间局部性+空间局部性)是虚拟存储器存在的根本依据,正因程序访问集中,才可只装入部分页面运行。
  • C 错误——外存速度比内存慢3~5个数量级,绝不可能直接当作内存使用;虚拟存储靠的是请求调入与页面置换,而非速度替代。
  • D 错误——临界资源的互斥访问属于进程同步范畴,与虚拟存储的理论基础完全无关。

【知识点】 虚拟存储器是指仅把作业的一部分装入内存便可运行的存储器系统,具有请求调入和置换功能,从逻辑上扩充内存容量。其理论基础是局部性原理:

局部性类型定义典型场景利用方式
时间局部性刚被访问的单元很可能不久再被访问循环体、循环变量、频繁调用的子程序将活跃页保留在内存,减少调出
空间局部性刚被访问单元的邻近单元很可能不久被访问数组顺序遍历、顺序执行的指令流调入一页时预读相邻页(预调页)

局部性越明显,虚拟存储效果越好。若程序访问完全随机(无局部性),则每访问一页都缺页,虚拟存储失效。

【推导过程】 以下程序片段展示两种局部性:

c
// 时间局部性示例:循环变量i被反复访问
for (int i = 0; i < 10000; i++) {
    sum += i;   // i 的访问: i, i, i, ...(时间局部性)
}

// 空间局部性示例:数组顺序访问
for (int j = 0; j < 10000; j++) {
    sum += arr[j];  // arr[0], arr[1], arr[2], ...(空间局部性)
}

访问模式统计表:

访问序列访问对象局部性类型
i, i, i, i, ...同一变量时间局部性
arr[0], arr[1], arr[2], ...相邻存储单元空间局部性
arr[0], arr[1000], arr[2000]跳跃访问局部性弱

【记忆锚点】 口诀——“时间局部重复用,空间局部挨着用;虚拟内存靠局部,没有局部就崩溃”。

【易混对比】

概念局部性原理缺页中断
解决的问题“为什么可以”只装部分页面“如何做到”在需要时调入页面
性质理论基础、程序固有属性实现机制、硬件+软件协作
发生时机始终存在访问页不在内存时触发

换个问法:“虚拟存储器扩充的是逻辑容量还是物理容量?”——扩充的是逻辑容量,实际内存条大小并未改变。与第63、64题(缺页中断处理)连考——第62题回答“为什么能虚拟”,第63、64题回答“具体怎么换页”。

【自测】 某程序对数组int a[1024][1024]进行求和。以下两种遍历方式,哪种局部性更好?方式一:按行遍历a[i][j];方式二:按列遍历a[j][i](假设行优先存储)。

答:方式一(按行遍历)更好。因为C语言数组行优先存储,按行遍历时a[i][0], a[i][1], ...在物理内存中连续,空间局部性显著;按列遍历时跳跃1024个整数,空间局部性差,缺页率更高。〈出处:大厂面试高频〉

【易错提醒】 ①局部性原理包括时间局部性和空间局部性两个方面,缺一不可。②虚拟存储器扩充的是逻辑容量,实际内存容量并未增加。③虚拟存储的实现需要“请求调入+置换”两项功能,缺一不可。


【知识关联】 本题考点:内存管理——虚拟存储器的理论基础(局部性原理)。同库题群:第63–64题(缺页中断类型与处理流程)、第65–66题(FIFO/LRU 置换算法)、第67题(抖动);与第 51–68 题内存簇连考。面试:局部性原理如何支撑“按需调页”?

【拓展延伸】 变式:时间局部性对应循环与栈帧复用、空间局部性对应数组顺序访问与指令流;虚拟存储的代价是缺页中断与工作集管理。(本题答案 B,以题干选项为准)

第63题 ​

在请求分页系统中,当 CPU 访问的页面不在内存时,系统将产生( )。

A. 时钟中断,表示进程的时间片已经用完 B. 非法操作码中断,系统将立即终止该进程 C. 缺页中断(缺页异常),由操作系统负责把所缺页面从外存调入内存 D. 算术溢出中断,由用户程序自行处理

答案:C

考点定位:五、内存管理——请求分页管理与缺页中断,难度★☆☆☆☆,请求分页是虚拟存储最常考的实现方式,缺页中断是必考基础概念。

【结论】 选C。当CPU访问的逻辑地址对应页面不在内存时,硬件产生缺页中断(缺页异常),由操作系统负责从外存调入所缺页面。

【逐项辨析】

  • A 错误——时钟中断由时间片用完触发,属于进程调度范畴,与页面是否在内存完全无关。
  • B 错误——非法操作码是程序错误导致的异常,与缺页没有因果关系。
  • C 正确——缺页中断是请求分页系统的核心机制,由操作系统响应并完成外存到内存的页面调入。
  • D 错误——算术溢出与页面是否在内存无关;且缺页中断必须由操作系统内核处理,绝不可能由用户程序自行处理。

【知识点】 缺页中断是请求分页系统中,CPU访问的逻辑地址所在页不在内存时,由硬件自动触发的异常。它与一般中断有本质区别:

对比项一般中断(如I/O中断)缺页中断
发生时机一条指令执行完毕后指令执行期间
发生次数一条指令最多一次一条指令可能多次(指令跨页+操作数跨页)
处理完后执行下一条指令重新执行被中断的指令
性质外部异步中断内部同步异常(fault)
处理者操作系统操作系统

操作系统响应缺页中断的流程:保留现场→判断访问合法性→在外存找到所缺页面→若有空闲块则直接分配,否则按置换算法淘汰一页→若被淘汰页“脏”(修改位=1)则写回外存→调入新页→修改页表和快表→恢复现场→重新执行被中断的指令。

【推导过程】 缺页中断处理流程:

步骤1: 保留CPU现场(PC、PSW、寄存器入栈)
           |
           v
步骤2: 检查访问合法性(页号是否越界?)
       /        \
    合法        非法
      |           |
      v           v
步骤3: 在外存找到所缺页面    越界中断→终止进程
       |
       v
步骤4: 内存是否有空闲块?
       /        \
     有          无
      |           |
      v           v
步骤5: 直接分配空闲块    按置换算法选择淘汰页
                          |
                          v
                      修改位=1?
                       /    \
                     是      否
                      |       |
                      v       v
                  写回外存   直接覆盖
                      |
                      v
步骤6: 从外存读入所缺页面
       |
       v
步骤7: 修改页表(有效位置1,填入物理块号),更新快表
       |
       v
步骤8: 恢复现场,重新执行被中断的指令

【记忆锚点】 口诀——“指令执行中,缺页来相送;操作系统调,重执行原令”。

【易混对比】

概念缺页中断页面置换
触发原因访问页不在内存内存无空闲块,需淘汰旧页
性质异常/中断机制缺页处理流程中的一个子步骤
是否每次缺页都发生是仅当内存满时发生

换个问法:“一条指令执行期间最多发生几次缺页中断?”——理论上多次,例如指令本身跨两页、操作数也跨两页,且四页均不在内存,则最多4次。与第64题(缺页处理流程)连考——第63题问“中断类型”,第64题问“处理步骤”。

【自测】 在请求分页系统中,一条访问内存操作数的指令,其指令本身跨越页面A和B,操作数跨越页面C和D。若A、B、C、D四页均不在内存,执行该指令最多产生几次缺页中断?

答:4次。指令取指阶段需访问A、B两页,读操作数阶段需访问C、D两页,每页不在内存均触发一次缺页中断,且都在同一条指令执行期间发生。〈出处:408真题同型题〉

【易错提醒】 ①缺页中断在指令执行期间产生,一条指令可能产生多次缺页中断,这是它区别于一般中断的关键特征。②缺页处理后需要重新执行被中断的指令,而不是执行下一条指令。③缺页率的高低与页面大小、分配块数、置换算法和程序局部性都有关。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 C,以题干选项为准)

第64题 ​

缺页中断的正确处理步骤是( )。

A. 立即撤销当前进程,并释放其占用的全部内存空间 B. 直接把缺页从外存读入内存,不需要修改页表 C. 把当前进程挂起,待系统空闲时再重新启动该进程 D. 保留CPU现场,在外存找到所缺页面,若有空闲块则调入,否则按置换算法淘汰一页后再调入,然后修改页表,恢复现场并重新执行被中断的指令

答案:D

考点定位:五、内存管理——缺页中断的处理流程,难度★★☆☆☆,是理解请求分页与页面置换算法的枢纽,常以“处理步骤”或“最后一步做什么”的形式考查。

【结论】 选D。缺页中断处理需保留现场、在外存找到所缺页面、分配空闲块(或置换)、调入页面、修改页表,最后恢复现场并重新执行被中断的指令。

【逐项辨析】

  • A 错误——缺页是请求分页系统中的正常现象,只有越界等非法访问才会终止进程,不能因缺页就撤销进程。
  • B 错误——调入新页后必须修改页表(置有效位、填物理块号),否则下次访问同一逻辑地址仍会缺页。
  • C 错误——挂起进程不是缺页处理的常规步骤;虽然等待I/O时可能发生进程切换,但“系统空闲时再重新启动”的表述错误。
  • D 正确——完整描述了从保存现场、调入页面、修改页表到重新执行指令的标准流程。

【知识点】 缺页中断处理是请求分页系统最核心的流程,可分为八个阶段:

阶段操作内容关键细节
1.保留现场保存PC、PSW、通用寄存器确保后续能正确恢复执行上下文
2.合法性检查判断页号是否越界、访问权限是否合法非法则发越界中断,终止进程
3.寻找所缺页面根据页表中的外存地址字段定位通常在外存交换区或文件区
4.空闲块检查检查内存是否有空闲物理块有则直接分配,无则进入置换
5.页面置换按置换算法选淘汰页,脏页写回外存修改位=1时必须先写回
6.调入页面从外存读入所缺页面到内存触发I/O,可能引发进程调度
7.修改页表更新页表项(有效位、物理块号等)同时更新快表(TLB),防止命中旧信息
8.恢复现场恢复寄存器,重新执行被中断指令不是执行下一条指令

【推导过程】 缺页中断处理步骤时序:

时间点    操作
--------  ------------------------------------------
t0        CPU执行指令,访问逻辑地址,发现页表有效位=0
t1        硬件触发缺页中断,保存现场
t2        OS检查访问合法性
t3        OS在外存定位所缺页面
t4        判断:内存是否有空闲块?
t4a       [有] 分配空闲块 -> t6
t4b       [无] 调用置换算法选淘汰页
t5        [若修改位=1] 将该页写回外存
t6        从外存读入所缺页面到内存
t7        修改页表(有效位置1,填物理块号),刷新快表
t8        恢复现场
t9        重新执行被中断的指令

【记忆锚点】 口诀——“保合找空换读写表重”:保留现场→合法性检查→找页→空闲检查→置换→读入→写表→重新执行。

【易混对比】

概念缺页中断处理页面置换算法
范畴操作系统内核流程缺页处理中的一个决策步骤
核心问题“如何完成一次缺页响应”“如果内存满了,淘汰哪一页”
涉及算法无特定算法FIFO、LRU、OPT、CLOCK等

换个问法:“缺页处理完成后,CPU执行的是下一条指令还是被中断的指令?”——必须重新执行被中断的指令,因为该指令之前并未执行成功。与第63题(缺页中断类型)连考——第63题问“是什么中断”,第64题问“怎么处理”;与第65、66题(置换算法)连考——处理流程中“内存无空闲块”时调用置换算法。

【自测】 某请求分页系统处理缺页中断时,若被淘汰页面的修改位为1,系统需要额外执行什么操作?若修改位为0呢?

答:修改位为1时,该页在内存中被修改过,必须先写回外存,否则外存中保留的是旧版本;修改位为0时,内存与外存内容一致,可直接覆盖,无需写回。〈出处:国网真题库同型题〉

【易错提醒】 ①处理缺页的最后一步是重新执行被中断的指令。②若内存已满,必须先按置换算法淘汰一页;被淘汰页若“脏”(修改位为1)还要写回外存。③调入新页后既要修改页表,也要更新快表,否则快表会命中失效信息。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 D,以题干选项为准)

第65题 ​

下列关于 FIFO 页面置换算法的叙述中,正确的是( )。

A. FIFO算法的性能总是最好的,不会出现任何异常现象 B. 采用FIFO算法时,有时增加分配给进程的物理块数,缺页次数反而增多,这种现象称为Belady异常 C. FIFO算法按照“最近最久未使用”的原则淘汰页面,需要为每页设置访问位 D. FIFO算法实现复杂,必须记录每个页面被访问的先后次序

答案:B

考点定位:五、内存管理——FIFO页面置换算法与Belady异常,难度★★☆☆☆,Belady异常是页面置换中最经典的反直觉现象,国企与互联网笔试高频出现。

【结论】 选B。FIFO算法不满足栈算法性质,对某些访问序列,增加物理块数反而使缺页次数增加,这种现象称为Belady异常。

【逐项辨析】

  • A 错误——FIFO性能并非最好,且它恰恰是会出现Belady异常的算法;OPT才是理论最优。
  • B 正确——准确描述了Belady异常的现象(增加物理块数→缺页增多)及产生该现象的算法(FIFO)。
  • C 错误——“最近最久未使用”是LRU算法的原则,FIFO淘汰的是最先进入内存的页;且FIFO不需要访问位。
  • D 错误——FIFO实现很简单,只需维护一个队列指针,记录页面进入内存的先后顺序即可。

【知识点】 FIFO(First-In-First-Out,先进先出)算法淘汰最先进入内存的页面,实现时将内存中的页面按进入时间排成队列,新页入队尾,淘汰队首。其最大缺陷是不考虑页面访问频率,可能淘汰活跃页。更关键的是,FIFO不满足栈算法性质,存在Belady异常。

栈算法的定义:若对同一访问串,分配n个物理块时的缺页集合是分配n+1个物理块时缺页集合的子集,则称该置换算法为栈算法。LRU和OPT都是栈算法,FIFO不是。

【推导过程】 以下用经典访问序列展示Belady异常。访问串:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5。

FIFO 3帧逐步模拟:

访问页:  1   2   3   4   1   2   5   1   2   3   4   5
        --- --- --- --- --- --- --- --- --- --- --- ---
内存:   [1] [1] [1] [2] [3] [4] [1] [1] [1] [2] [5] [5]
            [2] [2] [3] [4] [1] [2] [2] [2] [5] [3] [3]
                [3] [4] [1] [2] [5] [5] [5] [3] [4] [4]
        --- --- --- --- --- --- --- --- --- --- --- ---
缺页?    缺  缺  缺  缺  缺  缺  缺  命中 命中 缺  缺  命中

FIFO 4帧逐步模拟:

访问页:  1   2   3   4   1   2   5   1   2   3   4   5
        --- --- --- --- --- --- --- --- --- --- --- ---
内存:   [1] [1] [1] [1] [1] [1] [2] [3] [4] [5] [1] [2]
            [2] [2] [2] [2] [2] [3] [4] [5] [1] [2] [3]
                [3] [3] [3] [3] [4] [5] [1] [2] [3] [4]
                    [4] [4] [4] [5] [1] [2] [3] [4] [5]
        --- --- --- --- --- --- --- --- --- --- --- ---
缺页?    缺  缺  缺  缺  命中 命中 缺  缺  缺  缺  缺  缺

Belady异常对比汇总:

物理块数缺页次数命中次数
3帧9次3次
4帧10次2次

结论:物理块从3帧增加到4帧,缺页次数从9次上升到10次,Belady异常成立。

模拟易错点:FIFO 淘汰只看进入内存的先后,命中不会把页重新排到队尾(那是 LRU 的行为);一旦在 t8、t9 两次命中处重排队列,就会把 5 号页提前淘汰,算出「3 帧也缺 10 次」的错误结果,Belady 异常的对照随之失效。

【记忆锚点】 口诀——“FIFO,不公平;块越多,页越缺”。

【易混对比】

算法淘汰依据是否栈算法是否Belady异常实现复杂度
FIFO进入内存最早否是低(队列)
LRU最久未被访问是否高(需记录访问时序)
OPT以后永不再用是否不可实现(需预知未来)

换个问法:“哪些页面置换算法不会出现Belady异常?”——LRU和OPT属于栈算法,不会出现;FIFO及其近似算法(如简单CLOCK)可能出现。与第66题(LRU算法)连考——第65题考FIFO缺陷,第66题考LRU原理,两者是最常对比的两种算法。

【自测】 对访问序列3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4,分别用3帧和4帧FIFO,缺页次数各是多少?是否出现Belady异常?

答:3帧时缺页9次,4帧时缺页10次,同样出现Belady异常(块数增加,缺页反而增多)。〈出处:408真题同型题〉

【易错提醒】 ①Belady异常是FIFO以及CLOCK一类近似算法可能出现的现象,LRU和OPT属于栈算法,不会出现Belady异常。②FIFO淘汰的是“进入内存最早”的页,LRU淘汰的是“最久未被访问”的页,两者含义不同。③算法性能的一般排序为OPT优于LRU,LRU优于FIFO。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 B,以题干选项为准)

第66题 ​

下列关于 LRU 页面置换算法的叙述中,正确的是( )。

A. LRU算法淘汰的是最先进入内存的页面,实现时只需一个队列指针 B. LRU算法淘汰的是以后永远不会再被访问的页面,因此是一种理想算法 C. LRU算法淘汰最近一段时间内最久没有被访问过的页面,其依据是程序的局部性原理 D. LRU算法只需为每个页面设置一个修改位,就能确定淘汰对象

答案:C

考点定位:五、内存管理——LRU(最近最久未使用)页面置换算法,难度★☆☆☆☆,LRU是三种基本置换算法中考查频率最高的一种,常与FIFO、OPT对比出现。

【结论】 选C。LRU算法淘汰最近一段时间内最久没有被访问过的页面,其依据是程序的时间局部性原理。

【逐项辨析】

  • A 错误——“最先进入内存”是FIFO的淘汰原则,LRU依据的是页面最近是否被访问,而非进入内存的时间。
  • B 错误——“以后永远不会再被访问”是OPT(最佳置换)算法的假设,OPT需预知未来、无法真正实现;LRU只是OPT的可实现近似。
  • C 正确——准确说明了LRU的淘汰对象(最久未被访问)及其理论依据(局部性原理:很久没访问的页,近期再被访问的可能性小)。
  • D 错误——修改位(脏位)用于判断被淘汰页是否需要写回外存,LRU需要记录访问时序的信息(如访问位、时间戳或计数器),仅靠修改位无法确定淘汰对象。

【知识点】 LRU(Least Recently Used)算法选择最近一段时间内最久未被访问的页面淘汰。它基于局部性原理:若页面刚被访问,不久可能再被访问;若很久未被访问,近期被访问的可能性也很小。LRU属于栈算法,不会出现Belady异常,性能接近OPT。

实现方式主要有两种:

  1. 寄存器法:为每页配置移位寄存器,被访问时最高位置1,定时右移,值最小的页淘汰。
  2. 栈法:维护一个页面栈,访问某页时将其移到栈顶,栈底即为最久未用页。

【推导过程】 对访问序列1, 2, 3, 2, 1, 4, 5(3帧),逐步模拟LRU。规则:最近被访问的页排在右侧(最近使用),最左侧为淘汰候选。

步骤访问页内存状态(左=最久未用)缺页/命中淘汰页
11缺-
22缺-
33缺-
42命中-
51命中-
64缺3
75缺2

缺页5次,命中2次。步骤4访问2时,2从中间移到最右(最近使用);步骤6访问4时,3在最左(最久未用),被淘汰。

【记忆锚点】 口诀——“LRU看最近,FIFO看进门;LRU无异常,FIFO会翻车”。

【易混对比】

算法淘汰依据是否栈算法Belady异常实现开销
FIFO进入内存最早否可能出现低(队列指针)
LRU最久未被访问是不会出现高(需维护访问时序)
OPT以后永不再用是不会出现不可实现(需预知未来)

换个问法:“LRU算法为什么不会出现Belady异常?”——因为LRU满足栈算法性质:对同一访问串,n帧时的缺页集合是n+1帧时缺页集合的子集,增加帧数不会增加缺页。与第65题(FIFO与Belady异常)连考——第65题考FIFO缺陷,第66题考LRU原理与优势。

【自测】 对访问序列7, 0, 1, 2, 0, 3, 0, 4(3帧),用LRU算法,缺页次数是多少?

答:6次。逐步模拟:7缺,0缺,1缺,2缺(淘汰7),0命中,3缺(淘汰1),0命中,4缺(淘汰2)。共缺页6次。〈出处:408真题同型题〉

【易错提醒】 ①LRU看“最近是否被访问”,FIFO看“进入内存的早晚”,两者极易混淆。②OPT是理想算法,现实中无法实现,LRU是其可实现的近似。③LRU不会出现Belady异常,因为它满足栈算法的性质。


【知识关联】 本题考点:内存管理。与第 51–68 题内存簇;补题 COW/fork。面试:地址翻译全过程。

【拓展延伸】 变式:给虚拟地址算物理地址(注意 TLB 未命中)。Linux 有 /proc/pid/maps。(本题答案 C,以题干选项为准)

第67题 ​

下列关于“抖动(颠簸)”现象的叙述中,正确的是( )。

A. 死锁,是指多个进程因竞争资源而互相等待,可通过银行家算法解决 B. 碎片,是指内存中无法利用的小块空闲区域,可通过紧凑技术解决 C. 抖动(颠簸),是指进程频繁换页使CPU大部分时间用于页面调度,可通过适当增加分配的物理块数、改进置换算法或降低多道程序度来缓解 D. 溢出,是指程序访问的地址超出了进程的逻辑地址空间,可通过越界检查解决

答案:C

考点定位:五、内存管理——抖动(Thrashing)的原因与解决措施,难度★★☆☆☆,抖动是虚拟存储性能分析的代表性考点,常以“现象判断+解决办法”的形式出现。

【结论】 选C。抖动是指进程频繁换页使CPU大部分时间用于页面调度而无法有效执行用户程序的现象,可通过增加物理块数、改进置换算法或降低多道程序度来缓解。

【逐项辨析】

  • A 错误——死锁是进程间因竞争资源而互相等待、无外力便无法推进的状态,与频繁换页无关;银行家算法用于避免死锁。
  • B 错误——碎片是内存分配产生的小块空闲区域,可通过紧凑技术解决,但碎片与抖动是完全不同的概念。
  • C 正确——准确描述了抖动的现象(频繁换页,CPU忙于页面调度)、本质(物理块不足)和三类主要解决措施。
  • D 错误——溢出是地址越界,属于存储保护问题,与频繁换页无关。

【知识点】 抖动(Thrashing)指在虚拟存储系统中,分配给进程的物理块数远小于其工作集大小,导致进程运行时频繁发生缺页,系统不断在内、外存之间换入换出页面,CPU利用率急剧下降的现象。

根本原因:多道程序度过高,每进程分得的物理块太少,无法容纳当前活跃页面集合。直接原因:物理块数 < 工作集大小。

【推导过程】 抖动原因-措施对照表:

层级原因对应措施作用机制
直接原因物理块数太少增加分配物理块数让工作集能驻留内存
算法原因置换算法不当改用LRU等高效算法减少活跃页被误淘汰
系统原因多道程序度过高降低多道程序度减少并发进程数,让每进程获得更多块
预防原因无法预知工作集引入工作集模型根据近期访问页面数动态调整分配

抖动发生时的系统表现曲线:

CPU利用率
    ^
    |      /\
    |     /  \        <- 正常峰值
    |    /    \____
    |   /           \____
    |  /  抖动区           \____
    | /___________________________> 多道程序度
    0

当多道程序度超过某一阈值后,每进程物理块急剧减少,缺页率飙升,CPU利用率反而下降,形成“忙而无功”的抖动区。

【记忆锚点】 口诀——“块少度高调频繁,CPU空转叫抖动;加块减度换算法,工作集来保平安”。

【易混对比】

概念抖动死锁碎片
发生层次虚拟存储/页面调度进程同步/资源竞争内存分配
现象CPU忙于换页,利用率低进程互相等待,无法推进内存有空闲但无法分配
解决方向增加块数,减进程数,改算法银行家算法,资源有序分配紧凑,分页

换个问法:“系统出现抖动时,应该增加进程数还是减少进程数?”——应减少进程数(降低多道程序度),因为进程数越多,每进程分得的物理块越少,抖动越严重。与第62题(局部性原理)连考——局部性好则工作集小,不易抖动;与第68题(内存保护)连考——都属于内存管理但解决不同问题。

【自测】 某系统为每个进程固定分配4个物理块,监测到大量进程长期处于高缺页率状态,CPU利用率不足20%。此时若将每进程物理块增加到8个,同时把并发进程数从20个减为10个,对抖动有何影响?

答:两种措施都能缓解抖动。每进程块数增加,工作集更易驻留;进程数减半后,总内存需求降低,每进程可获得更多块,缺页率下降,CPU利用率回升。〈出处:大厂面试高频〉

【易错提醒】 ①抖动的直接原因是分配到的物理块太少,根本原因常为多道程序度过高。②抖动是“忙而无功”,CPU利用率反而下降,此时应减少进程数而不是增加。③工作集模型是防止抖动的常用方法,它根据程序近期访问的页面集合来分配物理块。


【知识关联】 本题考点:页面置换。与第 65–67 题;栈算法 vs 非栈算法。面试:为何 LRU 近似 OPT。

【拓展延伸】 变式:给引用串手算缺页次数。工程上多为 Clock/工作集近似。(本题答案 C,以题干选项为准)

第68题 ​

在连续分配方式中,实现内存存储保护的常用硬件机制是( )。

A. 只需设置一个基址寄存器,存放进程的起始地址,访问时把逻辑地址加上基址即可 B. 只需设置一个限长寄存器,存放进程的长度,访问时判断逻辑地址是否超出该长度 C. 设置页表,并在每个页表项中设置一个保护位,用于表示该页是否允许读写 D. 设置一对基址寄存器和限长寄存器,分别存放进程在内存中的起始地址和长度,访问时先做越界检查,越界则产生保护性中断

答案:D

考点定位:五、内存管理——内存保护机制(基址/限长寄存器),难度★☆☆☆☆,存储保护是内存管理中与重定位并列的基础考点,各类笔试中常见“如何实现保护”的直接设问。

【结论】 选D。连续分配方式通过一对基址寄存器和限长寄存器实现内存保护:限长寄存器做越界检查,基址寄存器完成地址重定位。

【逐项辨析】

  • A 错误——仅有基址寄存器只能完成逻辑地址到物理地址的转换(重定位),无法判断访问是否越界。
  • B 错误——仅有限长寄存器只能做越界检查,无法将逻辑地址转换为物理地址。
  • C 错误——页表保护位是分页系统的保护手段,题干问的是连续分配方式;且保护位不能替代地址转换。
  • D 正确——基址寄存器存起始地址用于重定位,限长寄存器存长度用于越界检查,两者配合是连续分配的标准保护方案。

【知识点】 内存保护防止进程访问其他进程或操作系统的存储区域。连续分配方式下,硬件提供一对寄存器:

寄存器存放内容作用检查公式
基址寄存器进程内存区起始地址地址重定位物理地址 = 逻辑地址 + 基址
限长寄存器进程长度(字节数或字数)越界检查逻辑地址 < 限长?

每次内存访问时,硬件先比较逻辑地址与限长寄存器:若逻辑地址 >= 限长,产生越界中断(保护性中断),禁止访问;若合法,则与基址相加得到物理地址。分页/分段系统则通过页表/段表中的保护位、存取权限位实现保护。

【推导过程】 连续分配地址转换与保护流程:

逻辑地址(LA)
    |
    v
LA >= 限长?
 /        \
是          否
 |           |
 v           v
越界中断    物理地址(PA) = LA + 基址
(终止进程)      |
                v
             访问内存

示例:某进程基址=2000,限长=1000。访问逻辑地址500和1200的结果:

  • LA=500: 500 < 1000,合法。PA = 500 + 2000 = 2500。
  • LA=1200: 1200 >= 1000,非法。触发越界中断。

【记忆锚点】 口诀——“基址加,限长查;越界就中断,合法才访问”。

【易混对比】

分配方式保护机制地址转换特点
连续分配基址+限长寄存器加法硬件简单,需连续空间
分页页表有效位+保护位页表查询消除外部碎片,支持离散
分段段表段长+存取权限位段表查询便于共享保护,段长可变

换个问法:“分页系统中的内存保护如何实现?”——通过页表项中的有效位(是否存在)和存取控制位(读/写/执行权限)实现,配合段式管理还可实现段的共享与保护。与第61题(分页与分段对比)连考——第61题对比分配方式,第68题聚焦保护机制;与第64题(缺页处理)连考——缺页处理中也需检查访问合法性。

【自测】 某连续分配系统中,进程P的基址寄存器值为5000,限长寄存器值为2000。进程P访问逻辑地址1500和2500时,系统分别如何处理?

答:访问1500时,1500 < 2000,合法,物理地址 = 5000 + 1500 = 6500;访问2500时,2500 >= 2000,非法,系统产生越界中断。〈出处:国网真题库同型题〉

【易错提醒】 ①基址寄存器用于重定位,限长寄存器用于越界检查,两者作用不同,缺一不可。②越界时产生的是保护性中断,通常直接终止或报告该进程,而不是简单忽略。③分页、分段系统则依靠页表/段表的保护位、存取权限位和段长比较来实现保护。

【知识关联】 本题考点:OS 安全与保护。与补题安全保护 12 题、第 91–100 题;国企电网考纲明确要求。 【拓展延伸】 变式:ASLR/NX/canary 分别防什么。面试:最小权限原则如何落地?(本题答案 D,以题干选项为准)


持续学习,持续积累。