第四章 存储管理 自测习题

一、单项选择题

1.通常,用户编写的程序中所使用的地址是(A )。

 A.逻辑地址

 B.物理地址

 C.绝对地址

 D.内存地址

2.可由CPU调用执行的程序所对应的地址空间为(C)。

 A.符号名空间

 B.虚拟地址空间

 C.物理空间

 D.逻辑地址空间

3.下列存储器中,速度最快的是( C  )。

 A.高速缓存Cache 

 B.内存

 C.CPU内部寄存器

 D.硬盘

4.下列存储器中,容量最大的是(  D  )。

 A.高速缓存Cache

 B.内存

 C.CPU内部寄存器

 D.硬盘

5.把逻辑地址转变为内存物理地址的过程称作(D)。

 A.编译

 B.连接

 C.运行

 D.重定位

6.经过(B),目标程序可以不经过任何改动而装入物理内存单元。

 A.静态重定位

 B.动态重定位

 C.编译或汇编

 D.存储扩充

7.动态重定位是在程序(A)期间,每次访问内存之前进行重定位。

 A.执行

 B.编译

 C.装入

 D.修改

解析:
动态重定位是在程序执行期间,由硬件地址转换机构(如 MMU)在每次访问内存之前,将逻辑地址(虚拟地址)转换为物理地址。

B 编译(编译时生成逻辑地址,不进行重定位)

C 装入(静态重定位发生在装入时,动态重定位则不同)

D 修改(不准确)

8.在目标程序装入内存时,一次性完成地址修改的方式是( A   .

 A.静态重定位

 B.动态重定位

 C.静态连接

 D.动态连接

解析:
静态重定位是指在程序装入内存时,由装入程序一次性对程序中的逻辑地址进行修改,将其转换为物理地址。此后程序执行时不再进行地址转换。

B 动态重定位(在执行过程中每次访问内存前动态转换)

C 静态连接(指在程序运行前将多个目标模块链接成一个完整的可执行文件)

D 动态连接(在程序运行时才链接所需的模块)

9.在分时系统中,可将进程不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据,称为(B)。

 A.覆盖技术

 B.对换技术

 C.虚拟技术

 D.物理扩充

10.下列存储管理方案中,不采用动态重定位的是(C)。

 A.页式管理

 B.可变分区

 C.固定分区

 D.段式管理

11.分区管理要求对每一个进程都分配(A)的内存单元。

 A.地址连续

 B.若干地址不连续

 C.若干连续的页面

 D.若干不连续的页面

解析:
分区管理(包括固定分区和动态分区)将内存划分为若干个连续的区域,每个进程被分配到一个地址连续的内存分区中。

B 若干地址不连续(不符合分区管理特点)

C 若干连续的页面(这是分页管理的描述)

D 若干不连续的页面(分页/分段管理可能不连续)

12.固定分区中各分区的大小是(B)。

 A.相同的

 B.相同或者不同,但预先固定

 C.根据进程要求确定

 D.随进程个数而定

13.在存储管理中,为实现地址映射,硬件应提供两个寄存器,一个是基址寄存器。另一个是(C)。

 A.控制寄存器

 B.程序状态字寄存器

 C.限长寄存器

 D.通用寄存器

14.可重定位分区存储管理采用的地址转换公式是(C)。

 A.绝对地址=界限寄存器值+逻辑地址

 B.绝对地址=下限寄存器值+逻辑地址

 C.绝对地址=基址寄存器值+逻辑地址

 D.绝对地址=块号×块长+页内地址

15.最先适应分配算法把空闲区(A

 A.按地址顺序从小到大登记在空闲区表中

 B.按地址顺序从大到小登记在空闲区表中

 C.按长度以递增顺序登记在空闲区表中

 D.按长度以递减顺序登记在空闲区表中

16.最容易形成很多小碎片的可变分区算法是(B)。

 A.最先适应算法

 B.最佳适应算法

 C.位示图法

 D.以上都不是

解析:
最佳适应算法要求将进程放入能满足其要求的最小空闲分区中。这种方法虽然能减少大块空闲区的浪费,但会产生大量非常小的、难以利用的碎片(即外部碎片)。

A 最先适应算法(通常产生碎片较少,且碎片分布较均匀)

B 最佳适应算法(正确,最容易形成很多小碎片)

C 位示图法(是一种存储管理方式,不是可变分区分配算法)

17.动态分区分配按照进程的需求量分配内存分区,所以(   D )。

 A.分区的长度是固定的

 B.分区的个数是确定的

 C.分区的长度和个数都是确定的

 D.分区的长度不是预先固定的,分区的个数是不确定的

18.在分页系统环境下,程序员编制的程序,其地址空间是连续的,分页是由(D)完成的。

 A.程序员

 B.编译地址

 C.用户

 D.系统 

19.下列存储管理方式中,存储碎片尽可能少,使内存利用率较高的是(C)。

 A.固定分区 

 B.可变分区

 C.分页管理 

 D.段页式管理 

解析:
分页管理将内存划分为大小固定的页框,将进程划分为同样大小的页面,按页框分配。由于页面大小固定且小于分区大小,并且不需要连续的内存空间,因此几乎不产生外部碎片(仅可能产生少量内部碎片,且大小可控),内存利用率较高。

A 固定分区(产生内部碎片,利用率低)

B 可变分区(产生外部碎片,需要紧凑技术)

C 分页管理(正确,碎片最少,利用率高)

D 段页式管理(虽然利用率也较高,但管理开销更大,且仍然存在少量碎片;相比分页管理更复杂,题目问存储碎片尽可能少通常首选基本分页管理)

20.在分页存储管理系统中,从页号到物理块号的地址映射是通过(B)实现的。

 A.分区表

 B.页表

 C.PCB

 D.JCB

21.在页式存储管理系统中,整个系统的页表个数是(D)个。

 A.1

 B.2

 C.与页面数相同

 D.和装入主存的进程个数相同

22.虚拟存储技术是(B)。

 A.扩充内存空间的技术

 B.扩充相对地址空间的技术

 C.扩充外存空间的技术

 D.扩充输入输出缓冲区的技术

23.虚拟存储器的容量是由计算机的地址结构决定的,若CPU32位地址,则它的虚拟地址空间为(D)字节。

 A.100K 

 B.640K

 C.2G

 D.4G

24.与虚拟存储技术不能配合使用的是(A)。

 A.分区管理

 B.页式存储管理

 C.段式存储管理

 D.段页式存储管理

25.实现虚拟存储器的目的是( D   )。

 A.实现存储保护

 B.实现程序浮动

 C.扩充辅存容量

 D.扩充主存容量

26.虚拟存储器的最大容量(  B  )。

 A.为内外存容量之和

 B.由计算机的地址结构决定

 C.是任意大的

 D.由作业的地址空间决定

27.在请求分页虚拟存储管理中,若所需页面不在内存中,则会引起(D)。

 A.输入输出中断

 B.时钟中断

 C.越界中断

 D.缺页中断

28.下列存储管理方案中,不要求将进程全部调入并且也不要求连续存储空间的是(D)。

 A.固定分区

 B.可变分区

 C.单纯分页式存储管理

 D.请求分页式存储管理

29.存储管理中,页面抖动是指(B)。

 A.使用机器时,屏幕闪烁的现象

 B.被调出的页面又立刻被调入所形成的频繁调入调出现象

 C.系统盘有问题,致使系统不稳定的现象

 D.由于主存分配不当,偶然造成主存不够的现象

30.系统抖动现象的发生是由(A)引起的。

 A.置换算法选择不当

 B.交换的信息量过大

 C.内存容量不足

 D.请求页式管理方案

31.在请求分页存储管理中,若采用FIFO页面淘汰算法,则当分配的页面数增加时,缺页中断的次数(D)。

 A.减少

 B.增加

 C.无影响

 D.可能增加也可能减少

解析:
FIFO(先进先出)页面置换算法中,存在一种称为 Belady 异常 的现象:当系统分配给进程的物理块数增加时,缺页次数反而可能增加,而不仅仅是减少。这是因为 FIFO 算法并不遵循内存越大缺页越少的直觉。

A 减少(不一定,可能发生 Belady 异常)

B 增加(也不一定,有些情况下还是减少)

C 无影响(错误)

D 可能增加也可能减少(正确,因为 FIFO 可能出现异常)

32.在页式虚拟存储管理系统中,LRU算法是指(B)。

 A.最早进入内存的页先淘汰

 B.近期最长时间以来没被访问的页先淘汰

 C.近期被访问次数最少的页先淘汰

 D.以后再也不用的页先淘汰

解析:
LRULeast Recently Used,最近最久未使用)算法的核心思想是:选择最近最长时间没有被访问的页面进行淘汰,基于程序局部性原理认为过去未访问的页面未来也可能不会被访问。

A 最早进入内存的页先淘汰(这是 FIFO 算法)

B 近期最长时间以来没被访问的页先淘汰(正确,LRU 定义)

C 近期被访问次数最少的页先淘汰(这是 LFULeast Frequently Used 算法)

D 以后再也不用的页先淘汰(这是理想化的 OPT 算法,无法实现)

33.下述页面置换算法中会产生Belady现象的算法是( A  )。

 A.先进先出法

 B.最近最少使用置换法

 C.最近未使用置换法

 D.最佳置换法

二、判断题

1.在现代操作系统中,不允许用户干预内存的分配。(A

 A.

 B.

解析:
在现代操作系统中,内存管理是由操作系统内核统一负责的,用户程序无法直接干预内存的分配与回收。用户进程只能通过系统调用(如 mallocmmap 等)请求内存,具体的分配策略、地址映射、页面置换等均由操作系统控制,目的是保护内存空间、防止冲突、提高利用率。

2.程序装入内存时,内存利用率最大的装入方式是可重定位装入。(B

 A.

 B.

3CPU可以直接访问外存(如磁盘)上的数据。(B

 A.

 B.

4.磁带设备的主要用途是作为文件系统的后备,存放不常用的信息或用做系统间传送信息的介质。(A

 A.

 B.

5.采用动态重定位技术的系统,目标程序可以不经任何改动,而装入物理内存。(A

 A.

 B.

解析:
采用动态重定位技术时,目标程序(或可执行文件)中使用的地址是逻辑地址(相对地址),在装入内存时不需要修改程序中的地址。程序执行过程中,CPU每次访问内存时,由硬件地址转换机构(如 MMU)自动将逻辑地址转换为物理地址。因此,目标程序可以原样装入物理内存的任何可用区域,无需改动。

6.动态存储分配时,不需要靠硬件地址变换机构实现重定位。(B

 A.

 B.

7.把内存物理地址转变为逻辑地址的过程称作重定位。(B

 A.

 B.

8.固定分区存储管理的各分区的大小不可变化,这种管理方式不适合多道程序设计系统。(B

 A.

 B.

解析:
固定分区管理虽然各分区大小在系统初始化后不可改变,但它支持多道程序设计——内存中可以同时装入多个不同分区的作业,每个分区运行一个程序。只是它存在内部碎片、灵活性差等缺点,并不能说不适合多道程序设计系统。实际上,早期的多道批处理系统就曾使用过固定分区管理。

9.可重定位分区存储管理可以对作业分配不连续的内存单元。(B

 A.

 B.

10.为了提高内存的利用率,在可重定位分区分配方式中采用紧缩技术来减少内存碎片。(A

 A.

 B.

11.在页式存储管理方案中,为了提高内存的利用率,允许同时使用不同大小的页面。(B

 A.

 B.

12.页式存储管理系统不利于页面的共享和保护。(A

 A.

 B.

13.虚拟存储器是利用操作系统产生的一个假想的特大存储器,是逻辑上扩充了内存容量,而物理内存的容量并未增加。(A

 A.

 B.

14.虚拟存储方式下,程序员编制程序时不必考虑主存的容量,但系统的吞吐量在很大程度上依赖于主存储器的容量。(A

 A.

 B.

15.虚拟存储空间实际上就是辅存空间。(B

 A.

 B.

解析:
虚拟存储空间不是实际的物理空间(主存或辅存),而是操作系统提供给用户的逻辑地址空间(如 32 位系统可达 4GB)。它通过请求分页/分段技术,将部分内容放在主存、部分放在辅存(交换区),使用户感觉拥有一个比实际主存大得多的存储空间。辅存(如磁盘)只是虚拟存储的实现支撑之一,不能说虚拟存储空间就是辅存空间。

16.在虚拟存储系统中,操作系统为用户提供了巨大的存储空间。因此,用户地址空间的大小可以不受任何限制。(B

 A.

 B.

17.虚拟存储器实际上是一种设计技巧,使主存物理容量得到扩大。(B

 A.

 B.

18Linux系统采用了请求分页存储管理技术和对换技术。(A

 A.

 B.

三、简答题

1、存储器一般分为哪些层次?

计算机系统中的存储器通常按访问速度、成本、容量划分为多个层次,构成一个存储层次结构(Memory Hierarchy。由快到慢、由上到下一般包括以下层次:

1.寄存器(Register

位于 CPU 内部,速度最快(纳秒级),容量极小(几十到几百字节),由编译器分配,成本最高。

2.高速缓存(Cache

分为 L1L2L3 等多级,用于缓存主存中的热点数据,速度较快,容量较小(KBMB),对程序员透明。

3.主存(Main Memory / RAM

即内存,用于存放运行中的程序和数据,速度中等(几十纳秒),容量较大(GB 级),断电后数据丢失(DRAM)。

4.磁盘缓存(Disk Cache

操作系统或磁盘控制器在主存中划出的一部分区域,用于暂存磁盘 I/O 的数据,本质上仍是内存,但从逻辑上可视为介于主存与磁盘之间的一层。

5.辅存(Secondary Storage

如机械硬盘(HDD)、固态硬盘(SSD),容量大(几百 GBTB),速度慢(毫秒或微秒级),断电数据不丢失,用于长期存储。

6.三级存储(Tertiary Storage(部分系统中存在)

如磁带库、光盘库,用于归档或备份,速度极慢,容量极大,通常离线或近线访问。

2、装入程序的功能是什么?常用的装入方式有哪几种?

装入程序的功能是将可执行程序(目标模块)从外存(如磁盘)加载到内存中,并使其能够运行。它负责分配内存空间、处理地址重定位等。

常用的装入方式有 3

1.绝对装入

程序中的地址在编译或汇编时已经指定为实际的物理地址,装入时无需进行地址转换。

特点:简单,但缺乏灵活性,只能装入到固定位置。

2.静态重定位装入

程序装入内存时,装入程序一次性将其逻辑地址修改为物理地址(重定位)。

特点:装入后地址固定,程序在内存中不能移动,且需要连续空间。

3.动态重定位装入

程序装入内存时仍使用逻辑地址,执行过程中由硬件(如 MMU)在每次访问内存前动态完成地址转换。

特点:支持程序在内存中移动(如紧凑、换入换出),提高内存利用率。

补充说明:现代操作系统主要使用动态重定位装入(结合分页/分段管理),以实现虚拟存储和更高的灵活性。

3、对程序进行重定位的方式分为哪两种?简述各自的实现方式。

对程序进行重定位的方式分为以下两种:

1.静态重定位

实现方式:在程序装入内存时,由装入程序(链接器或加载器)一次性将程序中的逻辑地址(相对地址)转换为物理地址(绝对地址)。转换完成后,程序在内存中的地址固定,执行过程中不再进行地址修改。

特点:不需要硬件地址转换机构支持,但程序装入后不能移动,且需要占用连续的内存空间。

2.动态重定位

实现方式:程序装入内存时仍使用逻辑地址,不进行地址转换。在程序执行过程中,每次访问内存前,由硬件地址转换机构(如 MMU 中的重定位寄存器)将逻辑地址加上某个基址(如程序在内存中的起始物理地址)实时计算得到物理地址。

特点:需要硬件支持,程序在内存中可以移动(如紧凑、换入换出),便于实现虚拟存储和共享,是现代操作系统的主流方式。

总结:静态重定位在装入时一次性完成,动态重定位在执行时每次访问前完成

4、对换技术如何解决内存不足的问题?

对换技术(Swapping)是操作系统在内存管理中使用的一种技术,用来解决内存不足的问题。其核心思想是:将内存中暂时不能运行的进程或进程的部分数据换出到磁盘上的对换区(或交换区),释放内存空间给其他进程使用;当需要执行被换出的进程时,再将其数据换回内存

具体解决方式如下:

1.将阻塞或低优先级进程换出
当内存空间不足,无法满足新进程的装入需求或当前活跃进程的内存增长需求时,系统会选择一个或多个处于阻塞态(如等待 I/O)、就绪态但优先级较低睡眠状态的进程,将其整个地址空间(或部分页面)复制到磁盘对换区,从而释放内存。

2.释放的内存重新分配
换出后得到的空闲内存将被分配给急需内存的进程(如新创建的子进程、请求内存增长的进程、或者从磁盘换入的高优先级进程)。

3.换回时机
当被换出的进程所等待的事件发生(如 I/O 完成、信号量被释放),或者系统负载降低、内存有足够空闲空间时,操作系统会将其从磁盘对换区换回内存。如果换回时发现原内存位置已被占用,系统会为其寻找新的内存区域(利用动态重定位或分页机制)。

对换技术的特点与限制

优点

允许运行的进程数超过物理内存容量(逻辑上扩展内存)。

提高内存利用率,避免因内存不足而终止进程。

缺点与局限

I/O 开销大:进程对换通常涉及整个地址空间的读写,磁盘 I/O 很慢。

粒度较粗:换出整个进程比换出部分页面(分页系统中)成本更高。

可能引起抖动:如果换出/换入过于频繁,系统会忙于在内存和磁盘之间移动数据,导致 CPU 利用率急剧下降。

需要快速对换区:一般使用磁盘的专用分区(Swap Partition)或大文件,速度比普通文件系统快。

5、解释固定分区法和动态分区法的基本原理。

1. 固定分区法

基本原理
系统在初始化时将内存划分为若干个大小固定的分区(区域),每个分区可以装入一个进程。分区大小可以在系统启动时设定(相等或不等),一旦划分后,分区边界和大小不再改变。当有进程需要装入时,由内存分配程序从可用的分区中找出一个足够大且空闲的分区分配给进程。

特点

支持多道程序:每个分区可驻留一个进程。

内部碎片:若进程比分区小,剩余部分无法被其他进程使用,造成浪费。

分区数量固定:限制了并发执行的进程数。

无外部碎片:因为分区边界固定,不会产生不可用的小空闲区(除了内部碎片)。

适用场景:早期批处理系统,或简单嵌入式系统。

2. 动态分区法

基本原理
系统不预先划分固定分区,而是根据进程的实际需求动态地从空闲内存中划分出一个连续区域给进程,该区域大小正好等于(或略大于)进程所需。当进程结束时,其占用的内存区域被释放回空闲区。系统需要维护空闲分区表/链表,并按一定算法(如最先适应、最佳适应、循环最先适应)进行分配。

特点

无内部碎片(分配大小精确匹配需求)。

会产生外部碎片:多次分配释放后,内存中会分布许多很小的、非连续的空闲区,可能导致无法满足一个大进程的内存请求。

需要紧凑(Compaction)技术:移动已分配进程,将小空闲区合并成大空闲区,但开销较大。

灵活性高:内存利用率理论上高于固定分区。

适用场景:通用操作系统(如早期的 UNIXWindows),现代系统中常与分页/分段结合使用。

6、动态重定位分区管理方式中如何实现虚-实地址映射?

动态重定位分区管理方式中,虚-实地址映射是通过硬件支持(如重定位寄存器)和地址转换过程实时完成的。具体实现如下:

1. 核心硬件:重定位寄存器(Relocation Register

每个进程在内存中有一个起始物理地址(基址),系统将其保存在该进程对应的重定位寄存器中(或 PCB 中,运行时装入 CPU 的重定位寄存器)。

此外还有一个界限寄存器Limit Register),用于存储进程所占内存的长度,防止越界访问。

2. 地址映射过程

当进程中的指令访问某个逻辑地址(也称虚拟地址、相对地址)时,CPU 的地址转换硬件自动执行以下操作:

  1. 将逻辑地址(LA)与重定位寄存器中的基址(Base 相加,得到物理地址(PA):

PA=Base+LA

  1. 同时,将逻辑地址与界限寄存器中的限长(Limit 比较:
    • 如果 LA < Limit,则地址合法,转换成功,CPU  PA 访问内存。
    • 如果 LA >= Limit,则产生越界中断(地址越界异常),由操作系统终止该进程。

3. 特点与说明

逻辑地址从 0 开始:每个进程看到的地址空间都是从 0 开始的线性空间(静态或动态编译时生成)。

程序装入时不需修改地址:因为地址转换是在执行时实时计算的。

进程可以移动:若要将进程移到内存的另一区域,只需修改重定位寄存器中的基址,而不需要修改程序本身。

需要连续内存:动态重定位分区仍然要求每个进程占用连续的内存区域(基址+限长)。

与分页/分段的区别:动态重定位分区是一维连续分配;分页/分段则通过页表/段表实现不连续分配。

总结:动态重定位分区通过 基址寄存器 + 界限寄存器,在执行时每次访问内存前完成逻辑地址 + 基址的转换,并检查越界,实现了虚-实地址映射。这种映射方式简单,但需要连续内存且可能产生外部碎片。

7、分页存储管理的基本方法是什么?

分页存储管理的基本方法是将进程的逻辑地址空间物理内存都划分为大小相同的,前者称为页面,后者称为页框(或物理块),然后通过页表将进程的各个逻辑页面映射到物理内存中不连续的页框上。具体如下:

1. 分区方法

逻辑地址空间划分:将进程的逻辑地址空间划分为若干大小相等的页面Page),页面的编号从 0 开始。

物理内存划分:将物理内存划分为若干大小相等的页框Frame,也叫物理块),页框的编号也从 0 开始。

页面大小:通常为 512 字节、1 KB2 KB4 KB 等,由硬件决定,是 2 的整数次幂。

2. 核心数据结构:页表

每个进程都有一个页表,记录其逻辑页面与物理页框的映射关系

页表项(PTE)通常包含:

页框号(物理块号)

有效位、访问位、修改位、保护位等状态信息。

3. 地址转换过程

逻辑地址被划分为两部分:页号(p  页内偏移(d

CPU 访问内存时:

通过页号 p 在进程的页表中查找对应的页框号 f

物理地址 = 页框号 × 页面大小 + 页内偏移(即 f * size + d)。

4. 特点

无外部碎片:内存以页框为单位分配,不产生小空闲区不可用的问题。

有内部碎片:进程最后一页可能装不满一个页框,造成少量内部碎片(平均半页)。

进程无需连续内存:页面可以不连续地存放在任意空闲页框中。

支持虚拟存储:页表中的某些页面可以不在内存中(请求分页),从而将进程逻辑地址空间扩展到大于物理内存。

5. 硬件支持

需要 MMU(内存管理单元) 完成逻辑地址到物理地址的快速转换。

为提高页表访问速度,通常使用 TLB(快表,转换后备缓冲区) 缓存最近使用的页表项。

总结:分页存储管理通过将程序逻辑地址空间和物理内存划分为固定大小的页面/页框,使用页表实现动态映射,使得进程可以占用不连续的物理内存,消除了外部碎片,便于实现虚拟存储器。

8、在分页系统中页面大小由谁决定?页表的作用是什么?

在分页系统中:

1. 页面大小由谁决定?

页面大小由硬件(计算机体系结构)决定,而不是由操作系统随意指定。

常见的页面大小为 512 字节、1 KB2 KB4 KB8 KB 等,通常是 2 的整数次幂。

硬件(如 MMUCPU 指令集)会规定逻辑地址中 页号  页内偏移 的划分方式(例如 32 位地址中高 20 位为页号,低 12 位为偏移页面大小 4 KB)。

操作系统可以选择支持多种页面大小(如 Intel x86-64 支持 4KB2MB1GB 大页),但具体某一系统运行时使用的页面大小由操作系统根据硬件能力和配置选定。

2. 页表的作用是什么?

页表的作用是实现从逻辑地址(虚拟地址)到物理地址的映射
具体包括:

记录进程的每个逻辑页面对应的物理页框号(内存中的位置)。

提供访问权限控制(如可读、可写、可执行)。

支持虚拟存储:通过页表项中的有效位(存在位) 判断页面是否在内存中,若不在则引发缺页中断,由操作系统从磁盘换入。

辅助页面置换:页表项中的访问位、修改位等状态信息供置换算法使用。

总结:页面大小由硬件/体系结构决定;页表是分页系统的核心数据结构,负责地址转换、保护和虚拟内存管理。

9、如何将逻辑地址转换成物理地址?

在分页存储管理系统中,将逻辑地址转换为物理地址的过程由硬件(MMU)配合页表完成,具体步骤如下:

1. 逻辑地址结构

逻辑地址由两部分组成:页号(p  页内偏移(d
地址长度和页面大小由硬件决定(例如 32 位地址,页面大小 4 KB → 12 位为偏移,高 20 位为页号)。

2. 地址转换过程

假设:

页面大小为 L(如 4096 字节)

逻辑地址为 A

页表起始地址存放在 页表基址寄存器(PTBR 

转换步骤

1.拆分逻辑地址
页号 p = A / L(整数除法)
页内偏移 d = A % L(或 A 的低位部分)

2.查页表
用页号 p作为索引,在进程的页表中找到对应的页表项,从中取出物理页框号(f

3.计算物理地址
物理地址 = f × L + d

4.同时进行越界检查
如果页号p大于等于页表长度(即进程最大页号),则产生越界中断。

3. 硬件加速(TLB

为了提高转换速度,MMU 中有一个 TLB(快表),缓存最近使用的页表项。

转换时先查找 TLB

命中:直接获得页框号,快速转换。

未命中:访问内存中的页表,找到后同时更新 TLB

10、考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问逻辑地址和物理地址各需要多少二进制位表示?

答:

已知:

逻辑空间:8 个页面

每页大小:1024 字节

物理块数:32 个物理块

每块大小 = 每页大小 = 1024 字节

1. 逻辑地址结构

逻辑地址 = 页号 + 页内偏移

页号数 = 8

8 = 2³ → 页号需要 3

页内偏移:页大小 = 1024 字节 = 2¹⁰ → 偏移需要 10

逻辑地址总位数 = 3 + 10 = 13

2. 物理地址结构

物理地址 = 物理块号 + 块内偏移

物理块数 = 32

32 = 2⁵ → 物理块号需要 5

块内偏移 = 页内偏移 = 10

物理地址总位数 = 5 + 10 = 15

最终答案:

逻辑地址 13

物理地址 15

11、虚拟存储器有哪些基本特征?

虚拟存储器(Virtual Memory)具有以下四个基本特征:

1. 离散性(非连续性)

进程的逻辑地址空间被划分为若干页面(或分段),这些页面可以离散地存放在物理内存的不同位置(不要求连续),从而消除了外部碎片,提高了内存利用率。

2. 多次性(对换性)

一个进程的程序和数据不需要在运行前全部装入内存,而是分成多次调入:先装入部分页面,当访问的页面不在内存时,由操作系统动态调入(请求调页);同时,内存紧张时可将暂时不用的页面换出到磁盘(对换)。这与传统的一次性全部装入完全不同。

3. 虚拟性(用户感觉远大于物理内存)

用户编程时使用的逻辑地址空间(虚拟地址空间)可以远大于实际物理内存(如 32 位系统可达 4GB64 位更大)。用户感觉系统拥有一个大而快的内存,但实际上依赖物理内存+磁盘交换区实现。

4. 安全性(隔离与保护)

每个进程拥有独立的虚拟地址空间,进程之间互不干扰。操作系统通过页表/段表控制访问权限(读//执行),防止越界或非法访问,增强了系统的稳定性和安全性。

总结:虚拟存储器通过离散分配、部分装入、按需调页的方式,实现了大地址空间、高内存利用率、进程隔离,是现代操作系统的核心技术。

12、请求分页技术与简单分页技术之间的根本区别是什么?

请求分页技术与简单分页技术的根本区别在于:进程运行时,是否必须将所有页面一次性装入内存

在简单分页技术中,进程在运行前必须将其全部页面装入内存。如果物理内存不足以容纳整个进程,该进程就无法运行。这种方式下,逻辑地址空间不能超过物理内存大小,并且进程一旦装入,所有页面始终占据内存,直到进程结束。

而在请求分页技术中,进程运行前只装入少数必要的页面(例如当前即将执行的部分),其余页面在运行过程中需要访问时才从磁盘动态调入内存。如果访问的页面不在内存中,会触发缺页中断,操作系统负责将所需页面读入内存,并可能根据页面置换算法换出一些暂时不用的页面。这使得进程的逻辑地址空间可以大于物理内存,实现了虚拟存储器。

总结来说:简单分页是全部装入再运行,请求分页是部分装入、按需调入、必要时换出。请求分页提高了内存利用率,支持更大的程序运行,但也带来了缺页处理和页面置换的开销。

13、页面抖动与什么有关?

页面抖动(Thrashing)主要与以下因素密切相关:

1.分配给进程的物理块数过少
当系统分配给一个进程的物理内存块数太少,不足以容纳其当前频繁访问的工作集(即当前活跃的页面集合)时,进程会频繁发生缺页中断。

2.缺页频率过高
由于物理块不足,进程每次访问内存都可能缺页,导致操作系统不断从磁盘读取页面,同时又需要换出其他页面。磁盘 I/O 操作变得极其频繁。

3.CPU 利用率急剧下降
系统将大量时间花费在页面换入换出(磁盘 I/O)上,而不是执行有效的程序指令。操作系统检测到 CPU 利用率低,可能会错误地判断为并发度不够,从而尝试引入更多进程,进一步加剧内存竞争。

4.系统负载(多道程序度)过高
当内存中同时运行的进程数量过多,每个进程分到的物理块数都严重不足时,整个系统会陷入全局性抖动,所有进程都在等待磁盘 I/O,几乎没有任何进程能有效推进。

5.工作集与物理内存的矛盾
若进程的工作集大小总和超过了系统的物理内存总量,则必然发生抖动。操作系统无法为每个进程提供足够的工作集空间。

总结:页面抖动的本质是物理内存严重不足,导致系统频繁在内存与磁盘之间交换页面,使 CPU 大部分时间闲置等待 I/O,系统效率急剧恶化。解决抖动的常用方法有:降低多道程序度(减少同时运行的进程数)、为进程分配更多物理块、引入工作集模型或缺页率反馈控制机制。

四、应用题

1、若在一分页存储管理系统中,某作业的页表如表9所示。已知页面大小为1024字节,试将逻辑地址1011214840005012转化为相应的物理地址。

页号

物理块号

0

5

1

8

2

3

3

6

4

9

5

1

答:

逻辑地址物理地址的转换方法

物理地址 = 物理块号 × 1024 + 页内偏移
其中:

页号 = 逻辑地址 / 1024(整除)

页内偏移 = 逻辑地址 % 1024

逻辑地址 1011

页号 = 1011 / 1024 = 0
偏移 = 1011
页表[0] = 5
物理地址 = 5×1024 + 1011 = 6131

逻辑地址 2148

页号 = 2148 / 1024 = 2
偏移 = 2148 - 2×1024 = 2148 - 2048 = 100
页表[2] = 3
物理地址 = 3×1024 + 100 = 3072 + 100 = 3172

逻辑地址 4000

页号 = 4000 / 1024 = 3
偏移 = 4000 - 3×1024 = 4000 - 3072 = 928
页表[3] = 6
物理地址 = 6×1024 + 928 = 6144 + 928 = 7072

逻辑地址 5012

页号 = 5012 / 1024 = 4
偏移 = 5012 - 4×1024 = 5012 - 4096 = 916
页表[4] = 9
物理地址 = 9×1024 + 916 = 9216 + 916 = 10132

2、某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如表10所示,计算逻辑地址0A5C(H)所对应的物理地址。

10 用户页表

https://lms.ouchn.cn/api/uploads/1600150/in-rich-content?created_at=1647446755

答:

1. 已知条件

用户编程空间:32 个页面页号范围 0~315 位二进制)

每页大小 = 1 KB = 1024 字节页内偏移占 10

逻辑地址:0A5C (H)

2. 逻辑地址分解

0A5C (H) = 0000 1010 0101 1100 (B)

一页 1 KB = 1024 字节需要 10 位表示页内偏移
10 位:10 0101 1100 (B) = 0x25C

剩下高位是页号:
0A5C 右移 10 位(去掉低 10 位)
0A5C >> 10 = 0x2 (因为 0xA5C >> 10 = 0x2

页号 p = 2,偏移 d = 0x25C

可以判断高6位表示页号,低10位表示偏移。

3. 查页表

页号 2 → 物理块号 = 4

只需把高6位的值修改为4即可(000100),再将它与低10位的10 0101 1100拼接,得到最终物理地址为:0001 0010 0101 110016进制为125C

3、考虑下述页面走向:12342156212376321236,当内存块数量分别为35时,试问使用先进先出法(FIFO)置换算法的缺页次数是多少?(注意,所有内存块最初都是空的,所以,凡第一次用到的页面都产生一次缺页。)

一、内存块数 = 3

序号

页面

内存块状态 (FIFO 队列)

是否缺页

1

1

1

缺页

2

2

1, 2

缺页

3

3

1, 2, 3

缺页

4

4

2, 3, 4 (换出1)

缺页

5

2

2, 3, 4

不缺页

6

1

3, 4, 1 (换出2)

缺页

7

5

4, 1, 5 (换出3)

缺页

8

6

1, 5, 6 (换出4)

缺页

9

2

5, 6, 2 (换出1)

缺页

10

1

6, 2, 1 (换出5)

缺页

11

2

6, 2, 1

不缺页

12

3

2, 1, 3 (换出6)

缺页

13

7

1, 3, 7 (换出2)

缺页

14

6

3, 7, 6 (换出1)

缺页

15

3

3, 7, 6

不缺页

16

2

7, 6, 2 (换出3)

缺页

17

1

6, 2, 1 (换出7)

缺页

18

2

6, 2, 1

不缺页

19

3

2, 1, 3 (换出6)

缺页

20

6

1, 3, 6 (换出2)

缺页

缺页次数 = 16

二、内存块数 = 5

FIFO 算法

序号

页面

内存块状态 (FIFO 队列)

是否缺页

1

1

1

缺页

2

2

1, 2

缺页

3

3

1, 2, 3

缺页

4

4

1, 2, 3, 4

缺页

5

2

1, 2, 3, 4

不缺页

6

1

1, 2, 3, 4

不缺页

7

5

1, 2, 3, 4, 5

缺页

8

6

2, 3, 4, 5, 6 (换出1)

缺页

9

2

2, 3, 4, 5, 6

不缺页

10

1

3, 4, 5, 6, 1 (换出2)

缺页

11

2

4, 5, 6, 1, 2 (换出3)

缺页

12

3

5, 6, 1, 2, 3 (换出4)

缺页

13

7

6, 1, 2, 3, 7 (换出5)

缺页

14

6

6, 1, 2, 3, 7

不缺页

15

3

6, 1, 2, 3, 7

不缺页

16

2

6, 1, 2, 3, 7

不缺页

17

1

6, 1, 2, 3, 7

不缺页

18

2

6, 1, 2, 3, 7

不缺页

19

3

6, 1, 2, 3, 7

不缺页

20

6

6, 1, 2, 3, 7

不缺页

最终答案:

内存块数 = 3 时,FIFO 缺页次数16

内存块数 = 5 时,FIFO 缺页次数10

4、考虑下述页面走向:12342156212376321236,当内存块数量分别为35时,试问使用最近最少置换算法(LRU)的缺页次数是多少?(注意,所有内存块最初都是空的,所以,凡第一次用到的页面都产生一次缺页。)

答:

一、内存块数 = 3

LRU:每次替换最久未使用的页面。

1 → 缺页,内存 [1]

2 → 缺页,内存 [1, 2]

3 → 缺页,内存 [1, 2, 3]

4 → 缺页,换出最久未用的 1,内存 [2, 3, 4]

2 → 内存中,使用顺序更新为 [3, 4, 2]2 变为最近使用)

1 → 缺页,换出最久未用的 3,内存 [4, 2, 1]

5 → 缺页,换出最久未用的 4,内存 [2, 1, 5]

6 → 缺页,换出最久未用的 2,内存 [1, 5, 6]

2 → 缺页,换出最久未用的 1,内存 [5, 6, 2]

1 → 缺页,换出最久未用的 5,内存 [6, 2, 1]

2 → 内存中,更新顺序 [6, 1, 2]

3 → 缺页,换出最久未用的 6,内存 [1, 2, 3]

7 → 缺页,换出最久未用的 1,内存 [2, 3, 7]

6 → 缺页,换出最久未用的 2,内存 [3, 7, 6]

3 → 内存中,更新顺序 [7, 6, 3]

2 → 缺页,换出最久未用的 7,内存 [6, 3, 2]

1 → 缺页,换出最久未用的 6,内存 [3, 2, 1]

2 → 内存中,更新顺序 [3, 1, 2]

3 → 内存中,更新顺序 [1, 2, 3]

6 → 缺页,换出最久未用的 1,内存 [2, 3, 6]

缺页次数 =  15

二、内存块数 = 5

LRU5 个内存块,同样管理使用顺序。

1 → 缺页,内存 [1]

2 → 缺页,内存 [1, 2]

3 → 缺页,内存 [1, 2, 3]

4 → 缺页,内存 [1, 2, 3, 4]

2 → 内存中,更新顺序 [1, 3, 4, 2]

1 → 内存中,更新顺序 [3, 4, 2, 1]

5 → 缺页,内存 [3, 4, 2, 1, 5](仍没满,直接加)

6 → 缺页,内存已满,换出最久未用的 3,内存 [4, 2, 1, 5, 6]

2 → 内存中,更新顺序 [4, 1, 5, 6, 2]

1 → 内存中,更新顺序 [4, 5, 6, 2, 1]

2 → 内存中,更新顺序 [4, 5, 6, 1, 2]

3 → 缺页,换出最久未用的 4,内存 [5, 6, 1, 2, 3]

7 → 缺页,换出最久未用的 5,内存 [6, 1, 2, 3, 7]

6 → 内存中,更新顺序 [1, 2, 3, 7, 6]

3 → 内存中,更新顺序 [1, 2, 7, 6, 3]

2 → 内存中,更新顺序 [1, 7, 6, 3, 2]

1 → 内存中,更新顺序 [7, 6, 3, 2, 1]

2 → 内存中,更新顺序 [7, 6, 3, 1, 2]

3 → 内存中,更新顺序 [7, 6, 1, 2, 3]

6 → 内存中,更新顺序 [7, 1, 2, 3, 6]

缺页次数 = 8

答案:

内存块数 = 3 时,LRU 缺页次数15

内存块数 = 5 时,LRU 缺页次数8

5、考虑下述页面走向:12342156212376321236,当内存块数量分别为35时,试问使用最佳置换算法(OPT)的缺页次数是多少?(注意,所有内存块最初都是空的,所以,凡第一次用到的页面都产生一次缺页。)

一、内存块数 = 3

使用 OPT:淘汰未来最远才会使用到的页面,或未来永不使用的页面。

1 → 缺页,内存 [1]

2 → 缺页,内存 [1, 2]

3 → 缺页,内存 [1, 2, 3]

4 → 缺页,需淘汰:

1下次使用:位置6

2下次使用:位置5

3下次使用:位置12
淘汰最远的(12),即页3 → 内存 [1, 2, 4]

2 → 命中,内存 [1, 2, 4]

1 → 命中,内存 [1, 2, 4]

5 → 缺页,淘汰:

1下次:10

2下次:9

4下次:永不出现
淘汰页4 → 内存 [1, 2, 5]

6 → 缺页,淘汰:

1下次:10

2下次:9

5下次:永不出现
淘汰页5 → 内存 [1, 2, 6]

2 → 命中,内存 [1, 2, 6]

1 → 命中,内存 [1, 2, 6]

2 → 命中,内存 [1, 2, 6]

3 → 缺页,淘汰:

1下次:17

2下次:16

6下次:14
淘汰最远的(17),即页1 → 内存 [2, 6, 3]

7 → 缺页,淘汰:

2下次:16

6下次:20

3下次:15
淘汰最远的(20),即页6 → 内存 [2, 3, 7]

6 → 缺页,淘汰:

2下次:16

3下次:15

7下次:永不出现
淘汰页7 → 内存 [2, 3, 6]

3 → 命中,内存 [2, 3, 6]

2 → 命中,内存 [2, 3, 6]

1 → 缺页,淘汰:

2下次:18

3下次:19

6下次:20
淘汰最远的(20),即页6 → 内存 [2, 3, 1]

2 → 命中,内存 [2, 3, 1]

3 → 命中,内存 [2, 3, 1]

6 → 缺页,淘汰:

2下次:永不

3下次:永不

1下次:永不
淘汰任意,如页2 → 内存 [3, 1, 6]

缺页位置1234781213141720
缺页次数 = 11

二、内存块数 = 5

1 → 缺页,内存 [1]

2 → 缺页,内存 [1, 2]

3 → 缺页,内存 [1, 2, 3]

4 → 缺页,内存 [1, 2, 3, 4]

2 → 命中

1 → 命中

5 → 缺页,内存 [1, 2, 3, 4, 5]

6 → 缺页,需淘汰(5块已满):
内存中页面及下次使用位置:

1 → 10

2 → 9

3 → 12

4 → 永不出现

5 → 永不出现
淘汰一个永不出现的(如4内存 [1, 2, 3, 5, 6]

2 → 命中

1 → 命中

2 → 命中

3 → 命中

7 → 缺页,淘汰:

1 → 17

2 → 16

3 → 15

5 → 永不出现

6 → 14
淘汰5 → 内存 [1, 2, 3, 6, 7]

6 → 命中

3 → 命中

2 → 命中

1 → 命中

2 → 命中

3 → 命中

6 → 命中

缺页位置12347813
缺页次数 = 7

最终答案

内存块数 = 3 时,OPT 缺页次数11

内存块数 = 5 时,OPT 缺页次数7

6、考虑下面存储访问序列,该程序大小为460字:

  10,11,104,170,73,309,185,245,246,434,458,364

设页面大小是100字,请给出该访问序列的页面走向。又设该程序基本可用内存是200字,如果采用先进先出(FIFO)置换算法,缺页率是多少。(注:缺页率=缺页次数/访问页面总数)

答:

1. 已知条件

存储访问序列(字地址):
10, 11, 104, 170, 73, 309, 185, 245, 246, 434, 458, 364

页面大小 = 100

程序大小 = 460 页面号范围 0 ~ 4(因为 460/100=4.6,需要 5 页,页号 0,1,2,3,4

可用内存 = 200 → 200/100 = 2 个内存块(页框)

FIFO 置换算法

2. 将地址序列转换为页号

页号 = 地址 / 100(整除)

10 → 0

11 → 0

104 → 1

170 → 1

73 → 0

309 → 3

185 → 1

245 → 2

246 → 2

434 → 4

458 → 4

364 → 3

页面走向:0, 0, 1, 1, 0, 3, 1, 2, 2, 4, 4, 3
总访问次数(页面引用次数)= 12

3. 内存块数 = 2FIFO 置换

初始内存为空。

序号

页面

内存状态(FIFO队列)

是否缺页

1

0

0

缺页

2

0

0

不缺页

3

1

0, 1

缺页

4

1

0, 1

不缺页

5

0

0, 1

不缺页

6

3

1, 3 (换出0)

缺页

7

1

1, 3

不缺页

8

2

3, 2 (换出1)

缺页

9

2

3, 2

不缺页

10

4

2, 4 (换出3)

缺页

11

4

2, 4

不缺页

12

3

4, 3 (换出2)

缺页

缺页次数 = 序号 1,3,6,8,10,12 →  6 次缺页
缺页率 = 6 / 12 = 0.5 = 50%

最终答案

页面走向:0, 0, 1, 1, 0, 3, 1, 2, 2, 4, 4, 3

缺页率 = 50%

7、考虑下面存储访问序列,该程序大小为460字:

  10,11,104,170,73,309,185,245,246,434,458,364

设页面大小是100字,请给出该访问序列的页面走向。又设该程序基本可用内存是200字,如果采用最近最少使用置换算法(LRU),缺页率是多少?(注:缺页率=缺页次数/访问页面总数)

答:

1. 已知条件

存储访问序列(字地址):
10, 11, 104, 170, 73, 309, 185, 245, 246, 434, 458, 364

页面大小 = 100

程序大小 = 460 页号范围 0 ~ 4

内存大小 = 200 内存块数 = 2(页框)

LRU 置换算法(淘汰最久未使用)

2. 转换为页面走向

页号 = 地址 / 100(向下取整)

10 → 0

11 → 0

104 → 1

170 → 1

73 → 0

309 → 3

185 → 1

245 → 2

246 → 2

434 → 4

458 → 4

364 → 3

页面走向:0, 0, 1, 1, 0, 3, 1, 2, 2, 4, 4, 3
总访问次数 = 12

3. 内存块数 = 2LRU 置换

序号

页面

内存状态(最近使用→最久未使用)

是否缺页

1

0

[0]

缺页

2

0

[0]

不缺页

3

1

[0, 1]

缺页

4

1

[0, 1]

不缺页

5

0

[1, 0]

不缺页

6

3

[0, 3](淘汰最久未用的 1)

缺页

7

1

[3, 1](淘汰 0)

缺页

8

2

[1, 2](淘汰 3)

缺页

9

2

[1, 2]

不缺页

10

4

[2, 4](淘汰 1)

缺页

11

4

[2, 4]

不缺页

12

3

[4, 3](淘汰 2)

缺页

缺页次数:序号 1,3,6,7,8,10,12 →  7 次缺页
缺页率 = 7 / 12 ≈ 0.583 = 58.3%

最终答案

页面走向:0, 0, 1, 1, 0, 3, 1, 2, 2, 4, 4, 3

缺页率 = 7/12 ≈ 58.3%

8、考虑下面存储访问序列,该程序大小为460字:

  10,11,104,170,73,309,185,245,246,434,458,364

设页面大小是100字,请给出该访问序列的页面走向。又设该程序基本可用内存是200字,如果采用最佳置换算法(OPT),缺页率是多少?(注:缺页率=缺页次数/访问页面总数)

答:

1. 已知条件

存储访问序列(字地址):
10, 11, 104, 170, 73, 309, 185, 245, 246, 434, 458, 364

页面大小 = 100

程序大小 = 460 页号范围 0 ~ 4

内存大小 = 200 内存块数 = 2

OPT 置换算法(淘汰未来最远使用或永不使用的页面)

2. 转换为页面走向

页号 = 地址 // 100

10 → 0

11 → 0

104 → 1

170 → 1

73 → 0

309 → 3

185 → 1

245 → 2

246 → 2

434 → 4

458 → 4

364 → 3

页面走向:0, 0, 1, 1, 0, 3, 1, 2, 2, 4, 4, 3
总访问次数 = 12

3. 内存块数 = 2OPT 置换

初始内存为空。

序号

页面

内存状态(满时淘汰)

是否缺页

1

0

[0]

缺页

2

0

[0]

不缺页

3

1

[0, 1]

缺页

4

1

[0, 1]

不缺页

5

0

[0, 1]

不缺页

6

3

需淘汰:页0下次用?位置无;页1下次用?7
淘汰页1 → [0, 3]

缺页

7

1

需淘汰:页0下次用?无;页3下次用?12
淘汰页3 → [0, 1]

缺页

8

2

需淘汰:页0下次用?无;页1下次用?无
淘汰页0 → [1, 2]

缺页

9

2

[1, 2]

不缺页

10

4

需淘汰:页1下次用?无;页2下次用?无
淘汰页1 → [2, 4]

缺页

11

4

[2, 4]

不缺页

12

3

需淘汰:页2下次用?无;页4下次用?无
淘汰页2 → [4, 3]

缺页

缺页次数:序号 1,3,6,7,8,10,12 → 7 次缺页
缺页率 = 7 / 12 ≈ 58.33%

最终答案

页面走向:0, 0, 1, 1, 0, 3, 1, 2, 2, 4, 4, 3

缺页率 = 7/12 ≈ 58.3%

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐