跳转至

第三章内存管理

答案速对

题号 年份-题号 正确答案 题号 年份-题号 正确答案 题号 年份-题号 正确答案
1 2009-26 A 12 2009-27 C 23 2015-27 A
2 2011-30 C 13 2016-28 D 24 2016-26 A
3 2010-28 B 14 2019-28 B 25 2019-29 C
4 2017-25 B 15 2012-25 B 26 2021-28 C
5 2019-32 C 16 2023-28 D 27 2015-30 C
6 2024-27 A 17 2011-28 D 28 2016-29 A
7 2010-29 B 18 2013-30 D 29 2011-29 A
8 2014-32 D 19 2014-28 C 30 2020-28 D
9 2021-29 B 20 2019-31 A 31 2022-30 D
10 2023-30 C 21 2022-29 A
11 2024-25 D (注) 22 2014-30 A

(一)内存管理基础

内存管理的基本概念

  1. 【2009-26】分区分配内存管理方式的主要保护措施是( )。

A. 界地址保护

B. 程序代码保护

C. 数据保护

D. 栈保护

解析

答案:A。界地址保护。

分区分配中,一个进程通常占用一个连续内存分区。为防止进程访问本分区以外的地址,硬件设置基址寄存器和界限寄存器,或使用等价的界地址检查机制:

  1. 先检查逻辑地址是否小于分区长度;
  2. 检查通过后,物理地址等于基址加逻辑地址;
  3. 超过界限则产生越界异常。

因此,主要保护措施是界地址保护。程序代码保护、数据保护和栈保护都不是该题所指的基本硬件机制。

  1. 【2011-30】在虚拟内存管理中,地址变换机构将逻辑地址变为物理地址,形成该逻辑地址的阶段是( )。

A. 编辑

B. 编译

C. 链接

D. 装载

解析

答案:C

A错误。在编辑阶段,程序员编写程序代码,并使用文本编辑器进行修改和保存。

B错误。在编译阶段,编译器将源代码转换为目标代码。

C正确。在链接阶段,编译器将生成的目标代码与程序所需的库函数和其他目标文件进行链接,生成最终的可执行文件和该文件的逻辑地址(虚拟地址)。

D错误。在装载阶段,操作系统将可执行文件从磁盘加载到物理内存中,并将程序的逻辑地址(虚拟地址)转换为物理地址。这个过程由地址变换机构完成。

本题选C。

连续分配管理方式

  1. 【2010-28】某基于动态分区存储管理的计算机,其主存容量为55MB(初始为空闲),采用最佳适配 (Best Fit) 算法,分配和释放的顺序为:分配15MB、分配30MB、释放15MB、分配8MB、分配6MB,此时主存中最大空闲分区的大小是( )。

A. 7MB B. 9MB C. 10MB D. 15MB

解析

答案:B

题图

  1. 【2017-25】某计算机按字节编址,其动态分区内存管理采用最佳适应算法,每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息如下表所示。
分区起始地址 20K 500K 1000K 200K
分区大小 40KB 80KB 100KB 200KB

回收起始地址为60K、大小为140KB的分区后,系统中空闲分区的数量、空闲分区链第一个分区的起始地址和大小分别是( )。

A. 3、20K、380KB

B. 3、500K、80KB

C. 4、20K、180KB

D. 4、500K、80KB

解析

答案:B。3、500K、80KB。

题图

  1. 【2019-32】在下列动态分区分配算法中,最容易产生内存碎片的是( )。

A. 首次适应算法

B. 最坏适应算法

C. 最佳适应算法

D. 循环首次适应算法

解析

答案:C。最佳适应算法。

最佳适应每次选择大小最接近请求的空闲分区。分配后,原分区剩下的部分通常很小,容易形成大量无法满足后续请求的小空闲块,这就是典型的外部碎片。

首次适应和循环首次适应通常能较快完成分配;最坏适应会尽量留下较大的剩余分区。就“最容易产生大量小碎片”而言,最佳适应最典型。

  1. 【2024-27】下列算法中,每次回收分区时仅合并大小相等的空闲分区的是

A. 伙伴算法

B. 最佳适应算法

C. 最坏适应算法

D. 首次适应算法

解析

答案:A。伙伴算法。

伙伴系统把内存按 2 的幂次大小进行分配和回收。一个空闲块只有在其伙伴块也空闲、且两者大小相同的情况下,才能合并成更大的块。因此“仅合并大小相等的空闲分区”是伙伴算法的特征。

页式管理

  1. 【2010-29】某计算机采用二级页表的分页存储管理方式,按字节编址,页大小为 \(2^{10}\)B,页表项大小为2B,逻辑地址结构为\(\begin{array}{|c|}\hline \text{页目录号}&\text{页号}&\text{页内偏移量}\\\hline \end{array}\)

逻辑地址空间大小为 \(2^{16}\)页,则表示整个逻辑地址空间的页目录表中包含表项的个数至少是( )。

A. 64 B. 128 C. 256 D. 512

解析

答案:B。128。

页大小为 2^10 B,每个页表项占 2B。若一个二级页表占一页,则一个二级页表可容纳:2^10 / 2 = 2^9 = 512 个页表项。

整个逻辑地址空间有 2^16 个页面,因此需要的二级页表数为:2^16 / 2^9 = 2^7 = 128。

一级页表需要至少有 128 个表项,每个表项指向一个二级页表,所以选 B。

  1. 【2014-32】下列选项中,属于多级页表优点的是( )。

A. 加快地址变换速度

B. 减少缺页中断次数

C. 减少页表项所占字节数

D. 减少页表所占的连续内存空间

解析

答案:D。减少页表所占的连续内存空间。

单级页表需要为整个虚拟地址空间建立页表,页表可能很大,并且通常需要一段连续的内存。多级页表只为实际使用到的地址空间建立下级页表,从而减少页表所需的连续内存空间。

多级页表会增加地址转换层次,不能直接加快地址转换,也不会减少缺页中断次数,更不会减少每个页表项的大小。

  1. 【2021-29】在采用二级页表的分页系统中,CPU页表基址寄存器中的内容是( )。

A. 当前进程的一级页表的起始虚拟地址

B. 当前进程的一级页表的起始物理地址

C. 当前进程的二级页表的起始虚拟地址

D. 当前进程的二级页表的起始物理地址

解析

答案:B。当前进程的一级页表起始物理地址。

CPU 进行地址转换时必须访问内存中的页表,因此页表基址寄存器保存的是页表在物理内存中的地址。二级分页时,它保存当前进程一级页表的起始物理地址,一级页表项再指向相应二级页表。

  1. 【2023-30】进程R和S共享数据data,若date在R和S中所在页的页号分别为p1和p2,两个页所对应的页框号分别为f1和f2,则下列叙述中,正确的是( )。

A. p1 和 p2 一定相等,f1 和 f2 一定相等

B. p1 和 p2 一定相等,f1 和 f2 不一定相等

C. p1 和 p2 不一定相等,f1 和 f2 一定相等

D. p1 和 p2 不一定相等,f1 和 f2 不一定相等

解析

答案:C。p1 和 p2 不一定相等,f1 和 f2 一定相等。

不同进程拥有独立的虚拟地址空间。同一个共享数据在两个进程中的虚拟地址可能不同,因此所在页号 p1、p2 不一定相同。

但操作系统可以让两个进程的页表项都指向同一个物理页框,这样才实现真正的物理内存共享,所以 f1 和 f2 相等。

  1. 【2024-25】在支持页式存储管理的系统中,进程切换时操作系统要执行的操作是

Ⅰ. 更新程序计数器的值

Ⅱ. 更新栈基址寄存器的值

Ⅲ. 更新页基地址寄存器的值

A. 仅Ⅲ

B. 仅I、Ⅱ

C. 仅Ⅰ、Ⅲ

D. Ⅰ、Ⅱ、Ⅲ

解析

答案:D。I、II、III。

进程切换要恢复新进程的运行现场,包括:

  • 程序计数器:恢复新进程下一条要执行的指令;
  • 栈基址或栈相关寄存器:恢复新进程的栈;
  • 页表基址寄存器:切换到新进程的地址空间。

因此三项都需要更新。

段式管理

  1. 【2009-27】一个分段存储管理系统中,地址长度为32位,其中段号占8位,则最大段长是( )。

A. \(2^8\)B

B. \(2^{16}\)B

C. \(2^{24}\)B

D. \(2^{32}\)B

解析

答案:C。2^24 B。

32 位逻辑地址中,段号占 8 位,因此段内地址占:32 - 8 = 24 位。

段内地址可以表示 0 到 2^24 - 1,所以最大段长为 2^24 B。

  1. 【2016-28】某进程的段表内容如下所示。

\(\begin{array}{c|}\hline \text{段号}&\text{段长}&\text{内存起始地址}&\text{权限}&\text{状态}\\\hline 0&100&6000&\text{只读}&\text{在内存}\\ 1&200&...&\text{读写}&\text{不在内存}\\ 2&300&4000&\text{读写}&\text{在内存}\\\hline \end{array}\)

当访问段号为2、段内地址为400的逻辑地址时,进行地址转换的结果是( )。

A. 段缺失异常

B. 得到内存地址4400

C. 越权异常

D. 越界异常

解析

答案:D。越界异常。

段号为 2 的段表项显示:段长为 300,内存起始地址为 4000,且该段在内存中。访问的段内地址为 400,而:400 > 300。

段内偏移超过段长,先发生越界异常,不能计算有效物理地址。即使按起始地址加偏移得到 4400,也不能作为合法结果。

  1. 【2019-28】在分段存储管理系统中,用共享段表描述所有被共享的段。若进程P1和P2共享段S,下列叙述中,错误的是( )。

A. 在物理内存中仅保存一份段S的内容

B. 段S在P1和P2中应该具有相同的段号

C. P1和P2共享段S在共享段表中的段表项

D. P1和P2都不再使用段S时才回收段S所占的内存空间

解析

答案:B。P1 和 P2 中应该具有相同的段号。

共享段在物理内存中只保留一份内容,多个进程的段表项可以指向同一物理段,并通过共享段表维护引用关系。只有当所有进程都不再使用该段时,系统才可以回收其内存。

但是,段号是进程虚拟地址空间内部的编号。P1 和 P2 可以把共享段放在不同的段号位置,因此不要求段号相同。B 错误。

段页式管理

(二)虚拟内存管理

虚拟内存基本概念

  1. 【2012-25】下列关于虚拟存储器的叙述中,正确的是( )。

A. 虚拟存储只能基于连续分配技术

B. 虚拟存储只能基于非连续分配技术

C. 虚拟存储容量只受外存容量的限制

D. 虚拟存储容量只受内存容量的限制

解析

答案:B。只能基于非连续分配技术。

虚拟存储器把进程的全部逻辑空间与物理内存解耦,只把当前需要的部分装入内存。典型实现包括请求分页、请求分段和请求段页式管理,本质上都利用了非连续分配和按需调入机制。

虚拟存储器的容量也不是只由外存决定,还受到 CPU 虚拟地址位数、操作系统实现方式等因素影响,所以 C、D 都不准确。

  1. 【2023-28】对于采用虚拟内存管理方式的系统,下列关于进程虚拟地址空间的叙述中,错误的是( )。

A. 每个进程都有自己独立的虚拟地址空间

B. C语言中malloc( )函数返回的是虚拟地址

C. 进程对数据段和代码段可以有不同的访问权限

D. 虚拟地址的大小由主存和硬盘的大小决定

解析

答案:D。虚拟地址的大小由主存和硬盘的大小决定。

虚拟地址的位数由处理器体系结构和操作系统的地址空间设计决定。例如,体系结构规定虚拟地址为 32 位或 64 位。主存和硬盘容量会影响可用物理存储资源和交换空间,但不会决定虚拟地址本身的位数。

每个进程通常具有独立的虚拟地址空间;malloc() 返回的是进程虚拟地址;代码段和数据段也可以设置不同的读写执行权限。因此错误的是 D。

请求页式管理

  1. 【2011-28】在缺页处理过程中,操作系统执行的操作可能是( )。

Ⅰ. 修改页表

Ⅱ. 磁盘I/O

Ⅲ. 分配页框

A. 仅Ⅰ、Ⅱ

B. 仅Ⅱ

C. 仅Ⅲ

D. Ⅰ、Ⅱ和Ⅲ

解析

答案:D。I、II、III。

缺页处理程序可能执行以下步骤:

  1. 检查访问地址是否合法,并在非法时处理越界或非法访问;
  2. 查找空闲页框,若没有空闲页框则执行页面置换;
  3. 通过磁盘 I/O 将所需页面调入内存;
  4. 修改页表项中的页框号、存在位等信息;
  5. 重新执行引起缺页的指令。

所以修改页表、磁盘 I/O 和分配页框都可能发生。

  1. 【2013-30】若用户进程访问内存时产生缺页,则下列选项中,操作系统可能执行的操作是( )。

I. 处理越界错

II. 置换页

III. 分配内存

A. 仅 I、II

B. 仅 II、III

C. 仅 I、III

D. I、II 和 III

解析

答案:D。I、II、III。

缺页异常处理时,操作系统要先判断访问地址是否属于进程合法地址空间。若不合法,需要处理越界错;若合法但没有空闲页框,可能置换页面;若存在空闲页框,则直接分配内存。因此三项都可能出现。

  1. 【2014-28】下列措施中,能加快虚实地址转换的是( )。

I. 增大快表 (TLB) 容量

II. 让页表常驻内存

III. 增大交换区 (swap)

A. 仅 I

B. 仅 II

C. 仅 I、II

D. 仅 II、III

解析

答案:C。I、II。

  • 增大 TLB 容量可以提高 TLB 命中率,减少访问页表的次数;
  • 让页表常驻内存可以避免页表本身被换出,减少地址转换过程中的额外缺页;
  • 增大交换区只增加外存可用空间,不能直接加快虚实地址转换。

因此应选 I、II。

  1. 【2019-31】某计算机主存按字节编址,采用二级分页存储管理,地址结构如下所示:\(\begin{array}{|c|}\hline \text{页目录号(10位)}&\text{页号(10位)}&\text{页内偏移(12位)}\\\hline \end{array}\),虚拟地址20501225H对应的页目录号、页号分别是( )。

A. 081H、101H

B. 081H、401H

C. 201H、101H

D. 201H、401H

解析

答案:A。081H、101H。

地址结构为:

页目录号 10 位 | 页号 10 位 | 页内偏移 12 位。

对虚拟地址 20501225H:

  • 页内偏移为低 12 位:225H;
  • 页号为从低 12 位之上的 10 位:101H;
  • 页目录号为最高 10 位:081H。

也可用移位和掩码表示:

目录号 = (0x20501225 >> 22) & 0x3FF = 0x081
页号   = (0x20501225 >> 12) & 0x3FF = 0x101

所以选择 A。

  1. 【2022-29】某进程访问的页b不在内存中,导致产生缺页异常,该缺页异常处理过程中不一定包含的操作是( )。

A. 淘汰内存中的页

B. 建立页号与页框号的对应关系

C. 将页b从外存读入内存

D. 修改页表中页b对应的存在位

解析

答案:A。淘汰内存中的页。

进程访问的页 b 不在内存中时,一定需要:

  • 把页 b 从外存读入内存;
  • 建立页号与页框号的对应关系;
  • 将页表中页 b 的存在位置为 1。

如果系统当前有空闲页框,就可以直接装入页 b,不需要淘汰任何已有页面。因此淘汰页面不是必需步骤,选 A。

页框分配与回收

  1. 【2014-30】在页式虚拟存储管理系统中,采用某些页面置换算法,会出现Belady异常现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。下列算法中,可能出现Belady异常现象的是( )。

I. LRU算法

II. FIFO算法

III. OPT算法

A. 仅 II

B. 仅 I、II

C. 仅 I、III

D. 仅 II、III

解析

答案:A。仅 II,即 FIFO。

Belady 异常是指分配给进程的页框数增加后,缺页次数反而增加。FIFO 不是栈算法,可能出现这种现象。

LRU 和 OPT 属于具有包含性质的栈式算法:页框数增加时,原有驻留页集合不会变差,因此不会出现 Belady 异常。

  1. 【2015-27】系统为某进程分配了4个页框,该进程已访问的页号序列为2, 0, 2, 9, 3, 4, 2, 8, 2, 4, 8, 4, 5。若进程要访问的下一页的页号为7,依据LRU算法,应淘汰页的页号是( )。

A. 2

B. 3

C. 4

D. 8

解析

题图

  1. 【2016-26】某系统采用改进型CLOCK置换算法,页表项中字段A为访问位,M为修改位。A=0表示页最近没有被访问,A=1表示页最近被访问过。M=0表示页没有被修改过,M=1表示页被修改过。按 (A, M) 所有可能的取值,将页分为四类:(0, 0)、(1, 0)、(0, 1) 和 (1, 1),则该算法淘汰页的次序为( )。

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)。

访问位 A 反映最近是否访问,修改位 M 反映是否被修改。替换时优先选择既未访问又未修改的页,因为它既不活跃,又不需要写回磁盘:

  1. (0,0):未访问、未修改,代价最低;
  2. (0,1):未访问但已修改,需要写回;
  3. (1,0):最近访问过但未修改;
  4. (1,1):最近访问过且已修改,替换代价最高。

因此次序为 A。

  1. 【2019-29】某系统采用LRU页置换算法和局部置换策略,若系统为进程P预分配了4个页框,进程P访问页号的序列为0, 1, 2, 7, 0, 5, 3, 5, 0, 2, 7, 6,则进程访问上述页的过程中,产生页置换的总次数是( )。

A. 3

B. 4

C. 5

D. 6

解析

本题选 C,共发生5次页置换。

前4次访问 0、1、2、7 只是把页面装入4个空页框,虽然产生缺页,但没有淘汰原页面,因此置换次数为0。

页框装满后:

  • 访问5:淘汰页1,第1次
  • 访问3:淘汰页2,第2次
  • 访问5、0:均命中
  • 访问2:淘汰页7,第3次
  • 访问7:淘汰页3,第4次
  • 访问6:淘汰页5,第5次

被淘汰页面依次为:

1、2、7、3、5

题图

  1. 【2021-28】某请求分页存储系统的页大小为4KB,按字节编址。系统给进程P分配2个固定的页框,并采用改进型Clock置换算法,进程P页表的部分内容如下表所示。

1783967806228-17f4d9e5-69a1-491c-9c1a-414a59bfda45.png

若P访问虚拟地址为02A01H的存储单元,则经地址变换后得到的物理地址是( )。

A. 00A01H

B. 20A01H

C. 60A01H

D. 80A01H

解析

本题选 C

分页存储系统的虚拟地址格式为公式 ,页大小为4KB,按字节编址,页内偏移占12位,虚拟地址为 公式 H的页号为02H=2,查表得,页号2对应的表项中存在位为0,系统给进程P分配2个固定的页框,已经有两个表项中存在位为1,需要执行页面置换算法,题目要求采用改进型Clock置换算法,改进型Clock算法的替换顺序为:

  1. 选择访问位为0且修改位为0的页进行淘汰。这表示页最近没有被访问过且没有被修改过。
  2. 选择访问位为0且修改位为1的页进行淘汰。这表示页最近没有被访问过,但已经被修改过。
  3. 选择访问位为1且修改位为0的页进行淘汰。这表示页最近被访问过,但没有被修改过。
  4. 选择访问位为1且修改位为1的页进行淘汰。这表示页最近被访问过且已经被修改过。

页号3对应的表项(访问位, 修改位)为(1, 0),页号4对应的表项(访问位, 修改位)为(1, 1),页号2选择替换页号3,此时页号2对应的页框号为60H,将页框号为60H拼接页内偏移A01H得到变换后得到的物理地址60A01H。

页置换算法

  1. 【2015-30】在请求分页系统中,页面分配策略与页面置换策略不能组合使用的是( )。

A. 可变分配,全局置换

B. 可变分配,局部置换

C. 固定分配,全局置换

D. 固定分配,局部置换

解析

答案:C。固定分配、全局置换。

固定分配要求一个进程拥有的页框数保持固定;全局置换允许从其他进程的页框中选择被淘汰页面。二者结合后,被淘汰的进程页框数会发生变化,违反固定分配的要求。

可变分配可以与全局或局部置换组合,固定分配通常与局部置换组合。因此不能组合的是固定分配与全局置换。

  1. 【2016-29】某进程访问页面的序列如下所示。

1783967843795-17fecd4c-2aa0-4300-a94b-181d9d93de12.png

若工作集的窗口大小为6,则在t时刻的工作集为( )。

A. {6, 0, 3, 2}

B. {2, 3, 0, 4}

C. {0, 4, 3, 2, 9}

D. {4, 5, 6, 0, 3, 2}

解析

答案:A。{6, 0, 3, 2}。

工作集窗口大小为 6,表示取 t 时刻之前最近 6 次页面访问,并去掉重复页。题图中 t 箭头前的 6 次访问为:

6, 0, 3, 2, 3, 2

去重后得到:

{6, 0, 3, 2}。

箭头之后的页面属于 t 时刻之后的访问,不能计入当前工作集。

内存映射文件(Memory-MappedFiles)

虚拟存储器性能的影响因素及改进方式

  1. 【2011-29】当系统发生抖动 (thrashing) 时,可以采取的有效措施是( )。

Ⅰ. 撤销部分进程

Ⅱ. 增加磁盘交换区的容量

Ⅲ. 提高用户进程的优先级

A. 仅Ⅰ

B. 仅Ⅱ

C. 仅Ⅲ

D. 仅Ⅰ、Ⅱ

解析

答案:A。仅 I。

抖动说明系统为进程分配的页框过少,进程频繁缺页,CPU 大量时间用于换页。撤销或挂起部分进程可以降低多道程序度,释放页框,缓解抖动。

增加磁盘交换区只能增加外存空间,不能增加主存页框数;提高用户进程优先级反而可能让该进程获得更多运行机会,但不能从根本上减少缺页。

  1. 【2020-28】下列因素中,影响请求分页系统有效(平均)访存时间的是( )。

Ⅰ. 缺页率

Ⅱ. 磁盘读写时间

Ⅲ. 内存访问时间

Ⅳ. 执行缺页处理程序的CPU时间

A. 仅Ⅱ、Ⅲ

B. 仅Ⅰ、Ⅳ

C. 仅Ⅰ、Ⅲ、Ⅳ

D. Ⅰ、Ⅱ、Ⅲ和Ⅳ

解析

答案:D。I、II、III、IV。

请求分页系统的平均访存时间可以抽象为:

有效访存时间 = 正常访存时间 + 缺页率 × 缺页代价

其中缺页代价包括磁盘读写时间、缺页处理程序的 CPU 执行时间,以及页面置换和恢复执行等开销。因此以下因素都会影响有效访存时间:

  • 缺页率;
  • 磁盘读写时间;
  • 内存访问时间;
  • 缺页处理程序的 CPU 时间。
  1. 【2022-30】下列选项中,不会影响系统缺页率的是( )。

A. 页面置换算法

B. 工作集的大小

C. 进程的数量

D. 页缓冲队列的长度

解析

答案:D。页缓冲队列的长度。

页面置换算法、工作集大小和进程数量都会影响内存中的驻留页面集合,从而可能影响缺页率。

页缓冲队列主要用于暂存被换出的页面、延迟写回或快速重新利用页面,主要影响缺页处理的时间和 I/O 性能,不直接决定页面访问是否缺页。因此不会影响系统缺页率的是 D。