北航操作系统课程-20200316课堂小测-存储管理之段式内存管理

2020-03-16-课堂小测-段式内存管理


北京航空航天大学计算机学院-2020春操作系统课程
以下题目作者为北航计算机学院操作系统课程组,客观题答案由课程组给出,解析及主观题答案均为博主原创,水平有限,如有错误敬请批评指正。


1 在Intel x86下从段式地址到线性地址的转换中需要查找的对象可能是:(多选)

A. 全局描述符表GDT

B. 局部描述符表LDT

C. 页目录

D. 页表

答:A、B

x86采用段式+页式管理内存。我们知道段式管理的地址是二维的,段与段长度不一样,因此相互独立,而页式地址是一维的,也称线性的,这是由于每一页的空间大小是一致的。题目所述的从段式地址到线性地址的转换,指的是原逻辑地址(段式地址)首先转换为页式管理所用的线性地址。这一过程中逻辑地址的高位取出Segment Selector(段选择子,相当于段号的地位),然后通过查描述符表来找到对应段的页目录起始地址(x86采用二级页表)。这里的描述符可能查全局描述符表GDT,整个系统独一个;也有可能查局部描述符表LDT,每个进程拥有一个。


2 关于段式管理描述不正确的有:(多选)

A. 两个段的长度可以不同

B. 每个段内地址都从0开始

C. 段页式管理实质上等价于采用两级页表的页式管理

D. 段内地址是二维的、不连续的

扫描二维码关注公众号,回复: 10211942 查看本文章

答:C、D

段的长度是可以不一样的,这也是段式内存管理的优势之一,A正确。每个段内地址都从0开始是正确的,而再加上段长不一致,这也是段式地址是二维地址的原因,B正确。段页式管理相当于在页式管理之上再查一次段表,段式+一级页式相当于二级页表,但段式之下也可以嵌套多级页表,例如x86的段式+二级页表模式,相当于三级页表,一方面我们不能说段页式就一定相当于二级页表,另一方面我们也不能说段页式就和多级页表“等价”,二者还是有本质上的区别的,C错误。段式地址整体是二维的不连续的,但段内地址是从0开始的连续地址,D错误。


3 基于动态链接实现共享库函数的优点有:(多选)

A. 减少可执行程序的文件大小

B. 节约运行时所需的内存

C. 便于库函数的升级维护

D. 提高程序的运行效率

答:A、B、C

动态链接库函数是将编译好的库函数动态地链接到可执行文件中。这样做之后不需要每个程序都将库函数单独编译一遍加载在可执行文件中,而是所有程序共享这些库函数,因此可执行程序文件的大小是减小了的,A正确。同理,运行时所有的程序也都是去内存相应的段寻找库函数,不需要在各自的进程内存空间中都加载一遍,节省了运行时内存,B正确。库函数维护升级也只需要改动一处,升级一次,所有的程序都动态链接共享,不需要各自单独升级,C正确。动态链接共享库函数不会提升程序运行效率,相反通过段式内存实现的动态链接会让访问库函数增加一次访问段表的开销,D错误。


4 下列关于可重入代码说法正确的有:(多选)

A. 即使只有一个用户进程,使用不可重入代码也可能是不安全的

B. 可重入代码中一般不能使用全局变量

C. 在多道程序下,共享可重入代码可以减少程序对内存的占用

D. 可重入代码中一般不能使用静态变量

答:A、B、C、D

可重入代码又称纯代码,指的是多次并发调用的过程中执行不受影响的代码。这样的要求使得可重入代码一般是不可以使用全局变量和静态变量的,这是由于全局变量会在多次并发调用的时候被多次修改,对于单次调用而言会产生错误的结果,而静态变量在多次并发调用的时候初始化的时间会有差异,会造成静态变量多次初始化出错,B和D正确。即时只有一个用户进程,还有一个一直在运行的操作系统内核进程,使用不可重入代码也有可能受到这两个进程的互相干扰,A正确。可重入代码是可以共享的,这也是这一概念提出的意义之一,让多个程序共享一段代码,相比他们各自加载而言是对内存的节约,C正确。


5 Intel x86下的CR3寄存器中保存的是:(单选)

A. 页目录基地址

B. 段表基地址

答:A

CR3中含有页目录表物理内存基地址,因此该寄存器也被称为页目录基地址寄存器PDBR(Page-Directory Base address Register)。x86下的控制寄存器内容如下:

在这里插入图片描述


6 假设段式管理下的虚拟地址为16位,其中段号占2位,则一个段最大为:(填空)

答:16KB

虚拟地址16位,段号2位,则段内偏移有14位,可以表示2^14=16KB的空间,因此每一段最大不会超过16KB。


7 当从内存中读取数组的一个元素时,往往会把与该元素地址相邻的若干数组元素同时读出,并放入缓存,这实际上利用了程序执行的:(单选)

A. 空间局部性

B. 时间局部性

答:A

读取元素时往往会把相邻地址的内容都读出来,这就是前几次课提到的cache line概念。由于是读内存的操作,显然这体现的是程序的空间局部性。


8 在虚拟内存管理中,关于交换分区的说法正确的是:(多选)

A. 交换分区越大越好

B. 交换分区用于存储从内存中换出的页面内容

C. 交换分区过小会影响虚拟内存系统的正常工作

D. 交换分区是由硬件自动管理的

答:B、C

交换分区是虚拟内存管理中的概念,用于扩展比较小的内存,通过换页的操作来让外存(辅存)来分担内存(主存)的存储操作。交换分区是用于存储内存中换出的页面的,B正确。交换分区过小,待换出的内存内容无处存放,会影响虚拟内存系统的工作,C正确。交换分区并非越大越好,一般与物理内存保持线性关系即可,太大了没有必要,A错误。交换分区是由操作系统管理的,D错误。


9 在请求式分页管理中,如果一个页表项的Valid标志位是0,说明:(多选)

A. 还未给相应页面分配物理页框

B. 相应页面的内容已经装入内存

C. 访问该页内容时,系统将会产生缺页异常

D. 相应页的内容可能存储在磁盘上

答:A、C、D

Valid位为0,意味着这个逻辑页不在主存中,而在辅存交换分区中,B错误,D正确。此时页面还没有分配物理页框,A正确,访问此页时系统会产生缺页异常并向主存中调页,C正确。


10 当进程申请分配页框时,如果已经没有空闲内存,在理想情况下系统应优先将什么样的页面淘汰出内存:(单选)

A. 占用内存时间最长的页面

B. 将来不会再使用的页面

C. 内碎片最多的页面

D. 修改标志位M为0的页面

答:B

换页的过程是非常耗费时间的,辅存的读取比主存要慢上千倍,因此交换时的原则是尽可能少地交换,所以在理想情况下是要将将来不会再用的页面换出,尽量避免重复多次地换进换出。

发布了19 篇原创文章 · 获赞 3 · 访问量 3921

猜你喜欢

转载自blog.csdn.net/JeremyZhao1998/article/details/104992142