## 1. 分页存储的几个基本概念
### (1)页面和页面大小
进程的逻辑地址空间中的每个页面有一个编号,称为页号,从0开始;内存空间中的每个页框也有一个编号,称为页框号(或物理块号),也从0开始。进程在执行时需要申请内存空间,即要为每个页面分配内存中的可用页框,这就产生了页号和页框号的一一对应。
为方便地址转换,页面大小应是2的整数次幂。同时页面大小应该适中,页面太小会使进程的页面数过多,这样页表就会过长,占用大量内存,而且也会增加硬件地址转换的开销,降低页面换入/换出的效率;页面过大又会使页内碎片增多,降低内存的利用率。
### (2)地址结构
**简易调拨** ▶ 分页系统的逻辑地址结构(2009、2010、2013、2015、2017、2024)
某个分页存储管理的逻辑地址结构如图3.7所示。
[tbl-69.md](tbl-69.md)
图3.7 某个分页存储管理的逻辑地址结构
地址结构包含两部分:前一部分为页号 $P$,后一部分为页内偏移量 $W$。地址长度为32位,其中 $0 \sim 11$ 位为页内地址,即每页大小为 $2^{12}\mathrm{B}$;$12 \sim 31$ 位为页号,即最多允许 $2^{20}$ 页。在实际题目中,页号、页内偏移、逻辑地址可能是用十进制数给出的,注意进制之间的转换。
### (3)页表
为了便于找到进程的每个页面在内存中存放的位置,系统为每个进程建立一张页面映射表,简称页表。进程的每个页面对应一个页表项,每个页表项由页号和块号组成,它记录了页面在内存中对应的物理块号,如图3.8所示。进程执行时,通过查找页表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。
(a)逻辑空间
(b)页表
(c)物理空间
图3.8 页表的作用
## 2. 基本地址变换机构
地址变换机构的任务是将逻辑地址转换为内存中的物理地址。地址变换是借助于页表实现的。图3.9给出了分页存储管理系统中的地址变换机构。
<!-- page: 197 -->
图3.9 分页存储管理系统中的地址变换机构
# 注意
在页表中,页表项连续存放,因此页号可以是隐含的,不占用存储空间。
为了提高地址变换的速度,在系统中设置一个页表寄存器(PTR),存放页表在内存的始址 $F$ 和页表长度 $M$。寄存器的造价昂贵,因此在单CPU系统中只设置一个页表寄存器。平时,进程未执行时,页表的始址和页表长度存放在本进程的PCB中。当进程被调度执行时,才将页表始址和页表长度装入页表寄存器中。设页面大小为 $L$,逻辑地址 $A$ 到物理地址 $E$ 的变换过程如下(假设逻辑地址、页号、每页的长度都是十进制数):
## 前置追踪
页式系统的地址变换过程(2013、2021、2024)
## 命题追踪
页表项地址的计算与分析(2024)
① 根据逻辑地址计算出页号 $P = A / L$、页内偏移量 $W = A\% L$。
② 判断页号是否越界,若页号 $P \geqslant$ 页表长度 $M$,则产生越界中断,否则继续执行。
③ 在页表中查询页号对应的页表项,确定页面存放的物理块号。页号 $P$ 对应的页表项地址 = 页表始址 $F +$ 页号 $P \times$ 页表项长度,取出该页表项内容 $b$,即为物理块号。
④ 计算物理地址 $E = bL + W$,用物理地址 $E$ 去访存。注意,物理地址 = 页面在内存中的始址 + 页内偏移量,页面在内存中的始址 = 块号 × 块大小(页面大小)。
以上整个地址变换过程均是由硬件自动完成的。例如,若页面大小 $L$ 为1KB,页号2对应的物理块为 $b = 8$,计算逻辑地址 $A = 2500$ 的物理地址 $E$ 的过程如下:$P = 2500 / 1\mathrm{K} = 2$,$W = 2500\% 1\mathrm{K} = 452$,查找得到页号2对应的物理块的块号为8,$E = 8 \times 1024 + 452 = 8644$。
计算条件用十进制数和用二进制数给出,过程会稍有不同。页式管理只需给出一个整数就能确定对应的物理地址,因为页面大小 $L$ 是固定的。因此,页式管理中地址空间是一维的。
页表项的大小不是随意规定的,而是有所约束的。如何确定页表项的大小?
页表项的作用是找到该页在内存中的位置。以32位内存地址空间、按字节编址、一页4KB为例,地址空间内一共有 $2^{32}\mathrm{B} / 4\mathrm{KB} = 2^{20}$ 页,因此需要 $\log_22^{20} = 20$ 位才能保证表示范围能容纳所有页面,又因为内存以字节作为编址单位,即页表项的大小 $\geqslant \lceil 20 / 8\rceil = 3\mathrm{B}$。所以在这个条件下,为了保证页表项能够指向所有页面,页表项的大小应大于或等于3B。当然,也可以选择更大的页表项,让一个页面能够正好容纳整数个页表项,或便于增加一些其他信息。
下面讨论分页管理方式存在的两个主要问题:①每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低;②每个进程引入页表,用于存储映射机制,页表不能太大,否则内存利用率会降低。
<!-- page: 198 -->
# 3. 具有快表的地址变换机构
由上面介绍的地址变换过程可知,若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存;第一次是访问页表,确定所存取的数据或指令的物理地址;第二次是根据该地址存取数据或指令。显然,这种方法比通常执行指令的速度慢了一半。
为此,在地址变换机构中增设一个具有并行查找能力的高速缓冲存储器——快表(TLB),也称相联存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,主存中的页表常称为慢表。具有快表的地址变换机构如图3.10所示。
图3.10 具有快表的地址变换机构
## 前置通道
## 具有快表的地址变换的性能分析(2009)
在具有快表的分页机制中,地址的变换过程如下:
① CPU给出逻辑地址后,由硬件进行地址转换,将页号与快表中的所有页号进行比较。
② 若找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的物理块号,与页内偏移量拼接形成物理地址。这样,存取数据仅一次访存即可实现。
③ 若未找到匹配的页号,则需要访问内存中的页表,读出页表项后,就能得到该页的物理块号,再与页内偏移量拼接形成物理地址,最后用该物理地址去访存。若快表未命中,则存取数据需要两次访存。注意,找到页表项后,应同时将其存入快表,以便后面可能的再次访问。若快表已满,则须按照特定的算法淘汰一个旧页表项。
一般快表的命中率可达 90% 以上,这样分页带来的速度损失就可降低至 10% 以下。快表的有效性基于著名的局部性原理,后面讲解虚拟内存时将具体讨论它。
# 4. 两级页表
引入分页管理后,进程在执行时不需要将所有页调入内存页框,而只需将保存有映射关系的页表调入内存。但仍需考虑页表的大小。以32位逻辑地址空间、页面大小4KB、页表项大小4B为例:页内偏移为 $\log_2 4\mathrm{K} = 12$ 位,页号部分为20位,则每个进程页表中的页表项数可达 $2^{20}$ 之多,仅页表就要占用 $2^{20} \times 4\mathrm{B} / 4\mathrm{KB} = 1\mathrm{K}$ 个页,还要求是连续的。这显然是不切实际的。
## 结果概述
## 多级页表的特点和优点(2014)
解决上述问题的方法有两种:①对于页表所需的内存空间,采用离散分配方式,用一张索引表来记录各个页表的存放位置,这就解决了页表占用连续内存空间的问题;②只将当前需要的部分页表项调入内存,其余的页表项仍驻留磁盘,需要时再调入(虚拟内存的思想),这就解决了页表占用内存过多的问题。读者也许发现这个方案就和当初引进页表机制的思路一模一样,实际
<!-- page: 199 -->
上就是为离散分配的页表再建立一张页表,称为外层页表(或页目录)。仍以上面的条件为例,当采用两级分页时,对页表再进行分页,则外层页表需要1K个页表项,刚好占用4KB,使得外层页表的大小正好等于一页,这样就得到了逻辑地址空间的格式,如图3.11所示。
[tbl-70.md](tbl-70.md)
图3.11 逻辑地址空间的格式
**前置图标** 两级页表的逻辑地址结构及相关分析(2010、2013、2015、2017—2019)
两级页表是在普通页表结构上再加一层页表,其结构如图3.12所示。
图3.12 两级页表结构示意图
在页表的每个表项中,存放的是进程的某页对应的物理块号,如0号页存放在1号物理块中,1号页存放在5号物理块中。在外层页表的每个表项中,存放的是某个页表分页的始址,如0号页表存放在3号物理块中。可以利用外层页表和页表来实现进程从逻辑地址到物理地址的变换。
**前置图标** 二级页表的页表基址寄存器中的内容(2018、2021)
**前置图标** 二级页表中的地址变换过程(2015、2017)
为了方便实现地址变换,需要在系统中增设一个外层页表寄存器(也称页目录基址寄存器),用于存放页目录始址。将逻辑地址中的页目录号作为页目录的索引,从中找到对应页表的始址;再用二级页号作为页表分页的索引,从中找到对应的页表项;将页表项中的物理块号和页内偏移拼接形成物理地址,再用该物理地址访问内存单元。共进行了三次访存。
对于更大的逻辑地址空间,以64位为例,若采用两级分页,且页面大小为4KB,页表项大小为4B;若按物理块大小划分页表,则有42位用于外层页号,此时外层页表有4096G个页表项,需占用16384GB的连续内存空间,显然这是无法接受的,因此必须采用多级页表,再对外层页表分页。建立多级页表的目的在于建立索引,以免浪费内存空间去存储无用的页表项。
## 3.1.4 基本分段存储管理
分页管理方式是从计算机的角度考虑设计的,目的是提高内存的利用率,提升计算机的性能。
<!-- page: 200 -->
分页通过硬件机制实现,对用户完全透明。分段管理方式的提出则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
## 1. 分段
分段系统将用户进程的逻辑地址空间划分为大小不等的段。例如,用户进程由主程序段、两个子程序段、栈段和数据段组成,于是可以将这个进程划分为5段,每段从0开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续,进程的地址空间是二维的)。
**附图通知** ▶ 分段系统的逻辑地址结构分析(2009)
分段存储管理的逻辑地址结构由段号 $S$ 与段内偏移量 $W$ 两部分组成。在图3.13中,段号为16位,段内偏移量为16位,因此一个进程最多有 $2^{16} = 65536$ 段,最大段长为64KB。
[tbl-71.md](tbl-71.md)
图3.13 分段系统中的逻辑地址结构
在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的,但在分段系统中,段号和段内偏移量必须由用户显式提供,在高级程序设计语言中,这个工作由编译程序完成。
## 2. 段表
每个进程都有一张逻辑空间与内存空间映射的段表,进程的每个段对应一个段表项,段表项记录了该段在内存中的始址和段的长度。段表的内容如图3.14所示。
[tbl-72.md](tbl-72.md)
图3.14 段表的内容
配置段表后,执行中的进程可以通过查找段表,找到每段所对应的内存区。可见,段表用于实现从逻辑段到物理内存区的映射,如图3.15所示。
图3.15 利用段表实现物理内存区映射
段表项是连续存放的,各个段表项的长度相同,因此段号可以是隐含的,不占用存储空间。例如,在某分段系统的32位逻辑地址结构中,段号为16位,段内偏移量为16位(可用16位表示段长),物理内存大小为4GB(可用32位表示整个物理内存空间)。因此,每个段表项最少可占 $16 + 32 = 48$ 位。若段表存放的始址为 $M$ ,则 $K$ 号段对应的段表项存放的地址为 $M + K = 6$ 。
## 3. 地址变换机构
分段系统的地址变换过程如图3.16所示。为了实现进程从逻辑地址到物理地址的变换功能,
<!-- page: 201 -->
在系统中设置了一个段表寄存器,用于存放段表始址 $F$ 和段表长度 $M$。从逻辑地址 $A$ 到物理地址 $E$ 之间的地址变换过程如下:
图3.16 分段系统的地址变换过程
## 简题连接 段式系统的地址变换过程(2016)
① 从逻辑地址 A 中取出前几位为段号 $S$,后几位为段内偏移量 $W$。
② 判断段号是否越界,若段号 $S \geqslant$ 段表长度 $M$,则产生越界中断,否则继续执行。
③ 在段表中查询段号对应的段表项,段号 $S$ 对应的段表项地址 $=$ 段表始址 $F +$ 段号 $S \times$ 段表项长度。取出段表项中该段的段长 $C$,若 $W \geqslant C$,则产生越界中断,否则继续执行。
④ 取出段表项中该段的始址 $b$,计算物理地址 $E = b + W$,用物理地址 $E$ 去访存。
## 4. 分页和分段的对比
分页和分段有许多相似之处,两者都是非连续分配方式,都要通过地址映射机构实现地址变换。但是,在概念上两者完全不同,主要表现在以下三个方面:
1)页是信息的物理单位,分页的主要目的是提高内存利用率,分页完全是系统的行为,对用户是不可见的。段是信息的逻辑单位,分段的主要目的是更好地满足用户需求,用户按照逻辑关系将程序划分为若干段,分段对用户是可见的。
2)页的大小固定且由系统决定。段的长度不固定,具体取决于用户所编写的程序。
3)分页管理的地址空间是一维的。段式管理不能通过给出一个整数便确定对应的物理地址,因为每段的长度是不固定的,无法通过除法得出段号,无法通过求余得出段内偏移,所以一定要显式给出段号和段内偏移,因此分段管理的地址空间是二维的。
## 5. 段的共享与保护
## 简题连接 页、段共享的原理和特点(2019、2023)
在分页系统中,虽然也能实现共享,但远不如分段系统来得方便。若被共享的代码占 $N$ 个页框,则每个进程的页表中都要建立 $N$ 个页表项,指向被共享的 $N$ 个页框。而在分段系统中,不管该段有多大,都只需为该段设置一个段表项,因此非常容易实现共享。
为了实现段共享,在系统中配置一张共享段表,所有共享的段都在共享段表中占一个表项。表项中记录了共享段的段号、段长、内存始址、状态(存在)位、外存始址和共享进程计数 count 等信息。共享进程计数 count 记录有多少进程正在共享该段,仅当所有共享该段的进程都不再需要它时,此时其 count = 0,才回收该段所占的内存区。对于一个共享段,在不同的进程中可以具有不同
<!-- page: 202 -->
的段号,每个进程用自己进程的段号去访问该共享段①。
不能被任何进程修改的代码称为可重入代码或纯代码,它是一种允许多个进程同时访问的代码。为了防止程序在执行时修改共享代码,在每个进程中都必须配以局部数据区,将在执行过程中可能改变的部分复制到数据区,这样,进程就可对该数据区中的内容进行修改。
与分页管理类似,分段管理的保护方法主要有两种:一种是存取控制保护,另一种是地址越界保护。地址越界保护将段表寄存器中的段表长度与逻辑地址中的段号比较,若段号大于段表长度,则产生越界中断;再将段表项中的段长和逻辑地址中的段内偏移进行比较,若段内偏移大于段长,也会产生越界中断。分页管理只需要判断页号是否越界,页内偏移是不可能越界的。
## 3.1.5 段页式存储管理
分页存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享和保护。将这两种存储管理方法结合起来,便形成了段页式存储管理方式。
在段页式系统中,进程的地址空间首先被分成若干逻辑段,每段都有自己的段号,然后将各段分成若干大小固定的页。对内存空间的管理仍然和分页存储管理一样,将其分成若干和页面大小相同的物理块,对内存的分配以物理块为单位,如图3.17所示。
(a) 程序的段页划分
(b) 程序的段页表
图3.17 段页式管理方式
在段页式系统中,进程的逻辑地址分为三部分:段号、页号和页内偏移量,如图3.18所示。
[tbl-73.md](tbl-73.md)
图3.18 段页式系统的逻辑地址结构
为了实现地址变换,系统为每个进程建立一张段表,每个段对应一个段表项,每个段表项至少包括段号(隐含)、页表长度和页表始址;每个段有一张页表,每个页表项至少包括页号(隐含)和块号。此外,系统中还应有一个段表寄存器,指出进程的段表始址和段表长度(段表寄存器和页表寄存器的作用都有两个,一是在段表或页表中寻址,二是判断是否越界)。
① 对于段共享的实现,在汤小丹老师的旧版教材中采用的方法是配置共享段表;但是,在新版教材中采用的方法是在每个进程的段表中设置一个段表项,指向被共享的同一个物理段。2019年的统考真题考查的是前述方法。
<!-- page: 203 -->
# 注意
在段页式存储管理中,每个进程的段表只有一个,而页表可能有多个。
在进行地址变换时,首先通过段表查到页表始址,然后通过页表找到物理块号,最后形成物理地址。如图3.19所示,进行一次访问实际需要三次访问主存,这里同样可以使用快表来加快查找速度,其关键字由段号、页号组成,值是对应的物理块号和保护码。
图3.19 段页式系统的地址变换机构
结合上面对段式和页式管理地址空间的分析,得出结论:段页式管理的地址空间是二维的。
## 3.1.6 本节小结
本节开头提出的问题的参考答案如下。
1)为什么要进行内存管理?
在单道系统阶段,一个系统在一个时间段内只执行一个程序,内存的分配极其简单,即仅分配给当前运行的进程。引入多道程序后,进程之间共享的不仅仅是处理机,还有主存储器。然而,共享主存会形成一些特殊的挑战。若不对内存进行管理,则容易导致内存数据的混乱,以至于影响进程的并发执行。因此,为了更好地支持多道程序并发执行,必须进行内存管理。
2)多级页表解决了什么问题?又会带来什么问题?
多级页表解决了当逻辑地址空间过大时,页表的长度会大大增加的问题。而采用多级页表时,一次访盘需要多次访问内存甚至磁盘,会大大增加一次访存的时间。
无论是段式管理、页式管理还是段页式管理,读者都只需要掌握下面三个关键问题:①逻辑地址结构,②页(段)表项结构,③寻址过程。搞清楚这三个问题,就相当于搞清楚了上面几种存储管理方式。再次提醒读者区分逻辑地址结构和表项结构。
## 3.1.7 本节习题精选
### 一、单项选择题
01. 下面关于存储管理的叙述中,正确的是()。
A. 存储保护的目的是限制内存的分配
B. 在内存为 $M$ 、有 $N$ 个用户的分时系统中,每个用户占用 $M / N$ 的内存空间
C. 在虚拟内存系统中,只要磁盘空间无限大,作业就能拥有任意大的编址空间
<!-- page: 204 -->
D. 实现虚拟内存管理必须有相应硬件的支持
02. 下列关于存储管理目标的说法中,错误的是()。
A. 为进程分配内存空间
B. 回收被进程释放的内存空间
C. 提高内存的利用率
D. 提高内存的物理存取速度
03. 下列关于内存保护的描述中,不正确的是()。
A. 一个进程不能未被授权就访问另外一个进程的内存空间
B. 内存保护可以仅通过操作系统(软件)来满足,不需要处理器(硬件)的支持
C. 内存保护的方法有界地址保护和上下限地址保护
D. 一个进程不能直接疏转到另一个进程的指令地址中
04. 内存保护需要由( )完成,以保证进程空间不被非法访问。
A. 操作系统
B. 硬件机构
C. 操作系统和硬件机构合作
D. 操作系统或者硬件机构独立完成
05. 下列各种存储管理方式中,需要硬件地址变换机构的是()。
I. 单一连续分配
II. 固定分区分配
III. 页式存储管理
IV. 动态分区分配
V. 页式虚拟存储管理
A. I、III、V
B. II、III、IV
C. III、IV、V
D. II、III、IV、V
06. 在固定分区分配中,每个分区的大小是()。
A. 随作业长度变化
B. 可以不同但预先固定
C. 相同
D. 可以不同但根据作业长度固定
07. 在动态分区分配方案中,某一进程完成后,系统回收其主存空间并与相邻空闲区合并,为此需修改空闲区表,造成空闲区款减1的情况是()。
A. 无上邻空闲区也无下邻空闲区
B. 有上邻空闲区但无下邻空闲区
C. 有下邻空闲区但无上邻空闲区
D. 有上邻空闲区也有下邻空闲区
08. 设内存的分配情况如下图所示。若要申请一块40KB的内存空间,采用最佳适应算法,则所得到的分区首址为()。
A. 100K
B. 190K
C. 330K
D. 410K
09. 某分段存储管理系统中,段表内容如下表所示,逻辑地址的格式为(段号,段内偏移),则逻辑地址(2,154)对应的物理地址是()。
[tbl-74.md](tbl-74.md)
A. $120\mathrm{K} + 2$
B. $480\mathrm{K} + 154$
C. $30\mathrm{K} + 154$
D. $480\mathrm{K} + 2$
10. 动态重定位是在作业的( )中进行的。
<!-- page: 205 -->
A. 编译过程
B. 装入过程
C. 链接过程
D. 执行过程
11. 下列关于程序装入的动态重定位方式的描述中,错误的是()。
A. 系统将程序装入内存后,程序在内存中的位置可能发生移动
B. 系统为每个进程分配一个重定位寄存器
C. 被访问单元的物理地址 = 逻辑地址 + 重定位寄存器的值
D. 逻辑地址到物理地址的映射过程在进程执行时发生
12. 动态重定位的过程依赖于()。
I. 可重定位装入程序
II. 重定位寄存器
III. 地址变换机构
IV. 目标程序
A. I 和 II
B. II 和 III
C. I、II 和 III
D. I、II、III 和 IV
13. 为保证一个程序在主存中被改变存放位置后仍能正确执行,应采用()。
A. 静态重定位
B. 动态重定位
C. 动态分配
D. 静态分配
14. 下面的存储管理方案中,()方式可以采用静态重定位。
A. 固定分区
B. 可变分区
C. 页式
D. 段式
15. 对重定位存储管理方式,应()。
A. 在整个系统中设置一个重定位寄存器
B. 为每道程序设置一个重定位寄存器
C. 为每道程序设置两个重定位寄存器
D. 为每道程序和数据都设置一个重定位寄存器
16. 在可变分区管理中,采用拼接技术的目的是()。
A. 合并空闲区
B. 合并分配区
C. 增加主存容量
D. 便于地址转换
17. 某页式存储管理系统中,按字节编址,页表内容如下表所示。若页的大小为 4KB,则地址转换机构将逻辑地址 4097 转换成的物理地址为()。(地址均用十进制表示。)
[tbl-75.md](tbl-75.md)
A. 8193
B. 4097
C. 2049
D. 1025
18. 不会产生内部碎片的存储管理是()。
A. 分页式存储管理
B. 分段式存储管理
C. 固定分区式存储管理
D. 段页式存储管理
19. 多进程在主存中彼此互不干扰的环境下运行,操作系统是通过()来实现的。
A. 内存分配
B. 内存保护
C. 内存扩充
D. 地址映射
20. 在动态分区分配存储管理中,随着时间的推移,会产生越来越多的小碎片,可通过紧凑技术解决,即操作系统不时地对进程进行移动和整理,则适合采用()装入技术。
A. 绝对装入
B. 静态重定位
C. 动态重定位
D. 静态重定位和动态重定位
21. 在动态分区分配存储管理中,不需要对空闲区链进行排序的分配算法是()。
A. 首次适应法
B. 最佳适应法
C. 最差适应法
D. 都不需要
22. 分区管理中采用最佳适应分配算法时,把空闲区按()次序登记在空闲区表中。
A. 长度递增
B. 长度递减
C. 地址递增
D. 地址递减
23. 首次适应算法的空闲分区()。
<!-- page: 206 -->
A. 接大小递减顺序连在一起
B. 接大小递增顺序连在一起
C. 接地址由小到大排列
D. 接地址由大到小排列
24. 为了提高搜索空闲分区的速度,在大、中型系统中往往采用基于索引搜索的动态分区分配算法,以下不属于基于索引搜索的动态分区分配算法的是( )。
A. 快速适应算法
B. 伙伴系统
C. 哈希算法
D. 最佳适应算法
25. 内存存储管理由连续分配方式发展为页式管理方式的主要动力是( )。
A. 提高内存利用率
B. 提高系统吞吐量
C. 满足用户的需要
D. 更好的满足多道程序的需要
26. 页式存储管理中的页表是由( )建立的。
A. 编译程序
B. 用户程序
C. 链接程序
D. 操作系统
27. 在段式存储管理中,共享段表是用来实现( )的。
A. 多个进程共享同一段代码或数据
B. 多个进程共享同一段物理内存空间
C. 多个进程共享同一段逻辑地址空间
D. 多个进程共享同一段号
28. 在段式存储管理中,若一个进程有 $n$ 个段,则该进程需要( )个段表。
A. $n$
B. $n + 1$
C. 1
D. 2
29. 采用分页或分段管理后,提供给用户的物理地址空间( )。
A. 分页支持更大的物理地址空间
B. 分段支持更大的物理地址空间
C. 不能确定
D. 一样大
30. 分页系统中的页面是为( )。
A. 用户所感知的
B. 操作系统所感知的
C. 编译系统所感知的
D. 装配程序所感知的
31. 在页式存储管理中,页表的始地址存放在( )中。
A. 物理内存
B. 页表
C. 快表(TLB)
D. 页表寄存器
32. 在页式存储管理中,当CPU形成一个有效地址时,查找页表的工作是由( )实现的。
A. 操作系统
B. 页表查询程序
C. 硬件
D. 存储管理进程
33. 采用段式存储管理时,一个程序如何分段是在( )时决定的。
A. 分配主存
B. 用户编程
C. 装作业
D. 程序执行
34. 下面的( )方法有利于程序的动态链接。
A. 分段存储管理
B. 分页存储管理
C. 可变式分区管理
D. 固定式分区管理
35. 当前编程人员编写好的程序经过编译转换成目标文件后,各条指令的地址编号起始一般定为(①),称为(②)地址。
① A. 1
B. 0
C. IP
D. CS
② A. 绝对
B. 名义
C. 逻辑
D. 实
36. 可重入程序是通过( )方法来改善系统性能的。
A. 改变时间片长度
B. 改变用户数
C. 提高对换速度
D. 减少对换数量
37. 操作系统实现( )存储管理的代价最小。
A. 分区
B. 分页
C. 分段
D. 段页式
38. 动态分区也称可变式分区,它是系统运行过程中( )动态建立的。
A. 在作业装入时
B. 在作业创建时
<!-- page: 207 -->
C. 在作业完成时
D. 在作业未装入时
39. 在页式存储管理中选择页面的大小,需要考虑下列( )因素。
I. 页面大的好处是页表项比较少
II. 页面小的好处是可以减少由内碎片引起的内存浪费
III. 影响磁盘访问时间的主要因素通常不是页面大小,所以使用时优先考虑较大的页面
A. I和III
B. II和III
C. I和II
D. I、II和III
40. 某个操作系统对内存的管理采用页式存储管理方法,所划分的页面大小( )。
A. 要根据内存大小确定
B. 必须相同
C. 要根据CPU的地址结构确定
D. 要依据外存和内存的大小确定
41. 引入段式存储管理方式,主要是为了更好地满足用户的一系列要求。下面选项中不属于这一系列要求的是( )。
A. 方便操作
B. 方便编程
C. 共享和保护
D. 动态链接和增长
42. 对主存储器的访问,( )。
A. 以块(页)或段为单位
B. 以字节或字为单位
C. 随存储器的管理方案不同而异
D. 以用户的逻辑记录为单位
43. 以下存储管理方式中,不适合多道程序设计系统的是( )。
A. 单用户连续分配
B. 固定式分区分配
C. 可变式分区分配
D. 分页式存储管理方式
44. 在分页存储管理中,主存的分配( )。
A. 以页框为单位进行
B. 以作业的大小进行
C. 以物理段进行
D. 以逻辑记录大小进行
45. 在段式分配中,CPU每次从内存中取一次数据需要( )次访问内存。
A. 1
B. 3
C. 2
D. 4
46. 在段页式分配中,CPU每次从内存中取一次数据需要( )次访问内存。
A. 1
B. 3
C. 2
D. 4
47. 采用段页式存储管理时,内存地址结构是( )。
A. 线性的
B. 二维的
C. 三维的
D. 四维的
48. 在段页式存储管理中,地址映射表是( )。
A. 每个进程一张段表,两张页表
B. 每个进程的每个段一张段表,一张页表
C. 每个进程一张段表,每个段一张页表
D. 每个进程一张页表,每个段一张段表
49. 操作系统采用分页存储管理方式,要求( )。
A. 每个进程拥有一张页表,且进程的页表驻留在内存中
B. 每个进程拥有一张页表,但只有执行进程的页表驻留在内存中
C. 所有进程共享一张页表,以节约有限的内存空间,但页表必须驻留在内存中
D. 所有进程共享一张页表,只有页表中当前使用的页面必须驻留在内存中,以最大限度地节省有限的内存空间
50. 在分段存储管理方式中,( )。
A. 以段为单位,每段是一个连续存储区
B. 段与段之间必定不连续
<!-- page: 208 -->
C. 段与段之间必定连续
D. 每段是等长的
51. 下列关于段式存储管理的叙述中,错误的是( )。
A. 段是逻辑结构上相对独立的程序块,因此段是可变长的
B. 按程序中实际的段来分配主存,所以分配后的存储块是可变长的
C. 每个段表项必须记录对应段在主存的起始位置和段的长度
D. 分段方式对低级语言程序员和编译器来说是透明的
52. 段页式存储管理汲取了页式管理和段式管理的长处,其实现原理结合了页式和段式管理的基本思想,即( )。
A. 用分段方法来分配和管理物理存储空间,用分页方法来管理用户地址空间
B. 用分段方法来分配和管理用户地址空间,用分页方法来管理物理存储空间
C. 用分段方法来分配和管理主存空间,用分页方法来管理辅存空间
D. 用分段方法来分配和管理辅存空间,用分页方法来管理主存空间
53. 以下存储管理方式中,会产生内部碎片的是( )。
I. 分段虚拟存储管理
II. 分页虚拟存储管理
III. 段页式分区管理
IV. 固定式分区管理
A. I、II、III
B. III、IV
C. 仅II
D. II、III、IV
54. 下列关于页式存储管理的论述中,正确的是( )。
I. 若关闭TLB,则每存取一条指令或一个操作数据至少要访存2次
II. 页式存储管理不会产生内部碎片
III. 页式存储管理中的页面是为用户所能感知的
IV. 页式存储方式可以采用静态重定位
A. I、II、IV
B. I、IV
C. 仅I
D. 全都正确
55. 在某分页存储管理系统中,地址结构长18位,其中 $11\sim 17$ 位为页号,$0\sim 10$ 位为页内偏移量,则主存的最大容量为( )KB,主存可分为( )个页。若有一作业依次放入2、3、7号物理块,相对地址1500处有一条指令“store r1,2500”,该指令地址所在页的页号为0,则指令的物理地址为( ),指令数据的存储地址所在页的页框号为( )。
A. 256、256、5596、3
B. 256、128、5596、3
C. 256、128、5596、7
D. 256、128、3548、7
56. 在某页式存储管理的系统中,主存容量为1MB,被分成256个页框,页框号为0,1,2,…。255。某作业的地址空间占用4页,其页号为0,1,2,3,被分配到主存的第2,4,1,5号页框中,则作业中的2号页在主存中的始址是( )。
A. 1
B. 1024
C. 2048
D. 4096
57. 下列关于分页和分段的描述中,正确的是( )。
A. 分段是信息的逻辑单位,段长由系统决定
B. 引入分段的主要目的是实现离散分配并提高内存利用率
C. 分页是信息的物理单位,页长由用户决定
D. 页面在物理内存中只能从页面大小的整数倍地址开始存放
58. 在采用页式存储管理的系统中,逻辑地址空间大小为256TB,页表项大小为8B,页面大小为4KB,则该系统中的页表应该采用( )级页表。