CSDN话题挑战赛第2期
参赛话题:学习笔记
此书在最后的附录 B 中,有给出部分重难点部分的参考答案。会在最后放上图片。如果想要此书习题答案,可点以下链接:为一个压缩包,以图片形式,习题图片按章节排序,答案图片按书页排序。
《操作系统原理》孟庆昌等编著之课后部分习题+答案(图片版)-其它文档类资源-CSDN文库
但是其余习题,需此书读者在书中找到相应章节处得到答案。
所以,博主此系列文章,只是像做题一般,把未给出答案的部分题目(博主认为有需要写的)做出来,以当作复习,加深理解。
本章中,针对讲解不详细的题目,也有进一步的解析。
尽量保证正确(可能会把不是题目要求的但觉得重点的会考的也写上去),如果不同意见,可留言讨论。
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第一章
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第三章
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第四章
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第五章
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第六章
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第七章
2. 装入程序的功能是什么? 常用的装入方式有哪几种?
答:(1)装入程序使得可执行代码更加灵活,但是装入处理通常是在后台(作为操作环境的一部分)或与连接相联合时才发生,装入程序极少会是实际的独立程序。
(2)通常,程序装入内存的方式有以下三种:
① 绝对装入方式。将装入模块存放到内存的指定位置中,装入模块中的地址始终与其内存中的地址相同。在装入模块中出现的所有地址都是内存的绝对地址。
② 可重定位装入方式。由装入程序根据内存当时的使用情况,决定将装入人模块放在内存的什么地方。装入人模块内使用的地址都是相对地址。
③ 动态运行时装入方式。为使内存利用率最大,装人内存的程序可以换出到磁盘上,以后再换入到内存中,但对换前后在内存中的位置可能不同。也就是说,允许进程的内存映像在不同时候处于不同的位置。
三种装入方式中,绝对方式最简单,但性能最差:动态运行时装入人方式的内存使用性能
最佳,但需要硬件支持。
3. 对换技术如何解决内存不足的问题?
答:在多道程序环境中可以采用对换技术。此时,内存中保留多个进程。当内存空间不足以容纳要求进入内存的进程时,系统就把内存中暂时不能运行的进程(包括程序和数据)换出到外存上,腾出内存空间,把具备运行条件的进程从外存换到内存中。
4. 解释固定分区法和动态分区法的基本原理。
答:(1)固定分区法:内存中分区的个数固定不变,各个分区的大小也固定不变,但不同分区大小可以不同。每个分区只可装入一个进程。
【注意】内存空间利用率不高,有时资源浪费情况严重。
例如,某进程提出内存申请 :需要 10K 空间,系统可以满足其要求:将大小为 60K 的分区分配给它,但如此一来,该分区就有 60K - 10K = 50K 的空间被浪费。
因为该进程占用这个分区后,不管剩余多大空间,都不能将其再分给其它进程。
(2)动态分区法:各个分区是在相应进程进入内存时才建立的,使其大小恰好适应进程的大小。(为了解决内存浪费问题,将分区的大小和个数设计成可变的)
5. 动态分区法采用的分配算法主要有哪几种?简述各自的实现方式。
答:动态分区法采用的分配算法主要有 4 种,分别是
(1)最先适应算法 (First - fit)
在这种算法中,空闲表是按位置排列的,即空闲块地址小的分区在表中的序号也小。
当要分配内存空间时就查表,在各空闲分区中查找满足大小要求的可用块。
只要找到第一个足以满足要求的空闲块就停止查找,并把它分配出去;
如果该空闲空间与所需空间大小一样,则从空闲表中取消该项,如果还有剩余,则余下的部分仍留在空闲表中,但应修改分区大小和分区始址。
① 优点:便于释放内存时进行合井,且为大进程预留高址部分的大空闲区。
② 缺点:内在高地址部分和低地址部分的利用不均衡,且会出现许多很小的空闲块,影响内存效率。
(2)最佳适应算法 (Best-fit)
这种算法的空闲表是以空闲块的大小为序、按增量形式排列的,即小块在前,大块在后。它在满足需要的前提下,尽量分配最小的空闲块。
① 优点:产生的剩余块是最小的;
② 缺点:不便于释放内存时与邻接区合并,也同样会出现许多难以利用的小空闲块。
(3)循环适应算法(Next-fit)
也称做下次适配算法,是最先适应算法的变种。当每次找到合适的空闲块时,就同时记下当时的位置;下次查找空闲块时,不从空闲表的开头查找,而从所记位置的下一个空闲分区开始查找,从中选择满足大小要求的第一个空闲分区。
① 优点:使内存中的空闲块分布得更均匀,减少查找空闲块的开销。在实现时设置一个指针,用于指示下一次搜索的起始位置。
② 缺点:无法为大作业预留大的空闲块。
(4)最坏适应算法(Worst-fit)
这种算法是最佳适应算法的“逆",即空闲表是以空闲块的大小为序,且大块在前、小块在后。这样,总是先分配最大的空闲块,使得划分后剩余的分区仍然比较大,可以进一步得到利用。而且,多数情况下首块就应满足要求;否则,此次申请将失败。但是,仿真结果表明,这种算法并不是一个好方法。
6. 动态重定位分区管理方式中如何实现虚——实地址映射?
答:作业装入内存时,是将该用户的程序和数据原封不动地装入到内存中。
当调度该进程在CPU上执行时,操作系统自动将该进程在内存的起始地址装入基址寄存器,将该进程的大小装入限长寄存器。
当指令执行时,如果地址合法,则将相对地址与基址寄存器中的地址相加,所得结果就是真正要访问的内存地址;如果地址越界,则发生相应的中断,进行处理。
7. 虚拟存储器有哪些基本特征?
答:① 虚拟扩充。虚拟存储器不是扩大物理内存空间,而是扩充逻辑内存容量。也就是说用户编程时所用到的地址空间可以远大于实际内存的容量。
例如,实际内存只有 1MB,而用户程序和数据所用的空间却可以达到 10 MB 或者更大,所以用户“感觉”内存扩大了。
② 部分装入。每个进程不是一次性地全部装入内存,而是分成若干部分。当进程要执行时,只需将当前运行需要用到的那部分程序和数据装入内存,以后在运行过程中用到其他部分时,再分别把那些部分从外存调入内存。
③ 离散分配。一个进程分成多个部分,它们没有全部装入内存,即使是装入内存的那部分也不必占用连续的内存空间。这样,一个进程在内存的部分可能散布在内存的不同地方,彼此并不连续。这样做不仅可避免内存空间的浪费,而且为进程动态调入内存提供了方便。
④ 多次对换。在一个进程运行期间,它所需的全部程序和数据分成多次调入内存。每次调入一部分,只解决当前需要,而在内存中的那些暂时不被使用的程序和数据,可换出到外存的对换区,甚至可以把暂时不能运行的进程在内存的全部映像都换出到对换区,以腾出尽量多的内存空间供可运行进程使用。被调出的程序和数据在需要时可以重新调入内存中(换入)。
【补充】
虚拟存储器的容量不是无限大的,主要受到 2 个方面的限制:
① 指令中表示地址的字长。机器指令中表示地址的二进制位数是有限的,如果地址单元以字节编址,且表示地址的字长是16 位,则可以表示的地址空间最大是 64 KB,如果表示的字长是 32 位,则可以表示的地址空间最大是 4 GB。
② 外存的容量。从实现观点来看,用户的程序和数据都必须完整地保存在外存(如硬盘)中。但是,外存容量、传送速度和使用频率等方面都受到物理因素的限制。也就是说,磁盘的容量有限,并非真正 “无穷大”,其传送速度也不是 “无限快”,所以,虚拟空间不可能“无限大”。
8. 分页存储管理的基本方法是什么?
答:(1)逻辑空间分页:将一个进程的逻辑地址空间划分成若干大小相等的部分,每个部分称做页面或页。每页都有一个编号,叫做页号。
(2)内存空间分块:把内存划分成与页面大小相同的若干存储块,称做内存块或页框。(也有编号)
(3)逻辑地址表示:页号 + 页内地址。
(4)内存分配原则:在分页情况下,系统以块为单位把内存分给各个进程,进程的每个页面对应一个内存块,且一个进程的若干页可以分别装入物理上不连续的内存块中。
当把一个进程装入内存时,首先检查它有多少页。若有 n 页,则至少应有 n 个空闲块才能装入该进程。如果满足要求,则分配 n 个空闲块,把它装入,且在该进程的面青中记下各页面对应的内存块号。
(5)设立页表:系统为每个进程设立了一张页面映像表,简称页表。(因为出现进程的页号连续而块号不连续的情况,设立页表可以找到每个页面在内存中对应的物理块。)
(6)建立内存块表:整个系统有一个内存块表。每个内存块在内存块表中占一项,表明该块当前空闲还是已分出去了;如果已分出去,是分给了哪个进程的哪个页面。
9. 在分页系统中页面大小由谁决定? 页表的作用是什么? 如何将逻辑地址转换成物理地址?
答:(1)在分页系统中页面大小由硬件(系统)决定。
(2)页表的作用是找到每个页面在内存中对应的物理块;
(3)见图4-13,其是分页系统的地址转换机构。
通常,页表都放在内存中。
当进程需要访问某个逻辑地址中的数据时,分页地址映像硬件自动按页面大小将 CPU 得到的有效地址 (相对地址) 分成两部分:页号和页内地址(p,d)。
见图4-13。在这个示例中,前 20 位表示页号,后12 位表示页内地址。
以页号 p 为索引去检索页表。这种查找操作由硬件自动进行。从页表中得到该页的物理块号,把它装入物理地址寄存器中。
同时,将页内地址 d 直接送入物理地址寄存器的块内地址字段中。这样,物理地址寄存器中的内容就是由两者拼接而成的实际访问内存的地址,从而完成从逻辑地址到物理地址的转换。
可以看出,分页本身就是动态重定位形式。由分页硬件机构把每个逻辑地址与某个物理地址关联在一起。
10. 什么是分页? 什么是分段? 两者有何主要区别?
答:(1)分页:将一个进程的逻辑地址空间划分成若干大小相等的部分,每个部分称做页面或页。每页都有一个编号,叫做页号。
把内存划分成与页面大小相同的若干存储块,称做内存块或页框。(也有编号)
页面或块的大小是由硬件(系统)确定的。
在分页存储管理方式中,逻辑地址表示的结构:页号 、页内地址(即页内位移)。
(2)分段:通常一个用户程序是由若干相对独立的部分组成的,他们各自完成不同的功能。为了编程和使用方便,用户可以把自己的程序按照逻辑关系组织,分成若干段,并且按照这些段来分配内存。例如有主程序段、子程序段、数据段、栈段。
分段存储管理方式中,进程的逻辑地址空间是二维的,由段号和段内地址构成。
(3)分页和分段的区别:
① 页是信息的物理单位,段是信息的逻辑单位。
② 页的大小固定且由硬件(系统)确定,段的长度却不固定,由用户决定。
③ 分页的作业地址空间是一维的,地址编号由 0 递增,只用一个地址编号可以确定唯一地址。
分段的作业地址空间是二维的,需要段名和段内地址两个信息。
④ 分页系统很难实现过程和数据的分离。因此,无法分别对它们提供保护,也不便于在用户间方便地对过程进行共享。分段系统却可以很容易实现这些功能。
11. 什么是页面抖动? 它与什么有关?
答:(1)页面抖动:刚被换出的页,很快又被访问,为把它调入而换出另一页,之后又访问刚被换出的页,.... 如此频繁地更换页面,以致系统的大部分时间都花费在页面的调度和传输上。此时,系统好像很忙,但实际效率却很低,这种现象称为抖动。
(2)抖动现象与置换算法的好坏、进程所分得的内存块数目有关。好的页面置换算法能够适当降低页面更换频率(减少缺页率),尽量避免系统抖动。
【补充】
① 产生抖动的原因:内存不足、多道程序度高、CPU的利用率低。
② 防止抖动的方法:
一是采用局部置换策略;
二是利用工作集防止抖动;
三是挂起某些进程;例如:选择优先权最低的进程、缺页进程、最近激活的进程、驻留集最小的进程、最大的进程等;
四是缺页频度法。
③ 在虚存置换算法中,先进先出(FIFO)法是最简单的页面置换算法,而( 最佳置换法(OPT) ) 算法可以保证最少的缺页率。
12. 什么是工作集? 它有什么作用?
答:(1)工作集:一个进程在某一小段时间内访问页面的集合。
(2)作用:防止抖动。
操作系统监督每个进程的工作集,并且给它分配工作集所需的内存块。若有足够多的额外块,就可装入并启动另外的进程。如果工作集增大,超出可用块的总数,操作系统则要选择一个进程挂起,把它的页面写出去,将它占用的内存块分给别的进程。被挂起的进程将在以后的适当时机重新开始执行。
13. 请求分页技术与简单分页技术之间的根本区别是什么?
答: 请求分页技术是在简单分页技术的基础上发展起来的,两者的根本区别是:请求分页提供虚拟存储器。
15. 为了提高内存的利用率,在可重定位分区分配方式中可通过什么技术来减少内存碎片?
答:紧缩(或叫拼凑)技术。
实现方法:移动某些已分配区的内容,使所有进程的分区紧挨在一起,而把空闲区留在另一端。
【补充】
为了进行内存保护,在分段存储管理方式中可以通过段表寄存器中的段表长和段表中的段长来进行越界检查。
因为,段表本身可起保护作用。每个进程都有自己的段表,在表项中设置该段的长度限制。在进行地址映射时,段内地址先与段长进行比较,如果超过段长,便发出地址越界中断,这样各段都限定自己的活动范围。
另外,段表地址寄存器中有段表长度的信息。当进程逻辑地址中的段号不小于段表长度时,表示该段号不合法,系统会产生中断。从而每个进程也被限制在自己的地址空间中运行,不会发生一个用户进程破坏另一个用户进程空间的问题。
1. 解释以下术语:物理地址、逻辑地址、逻辑地址空间、内存空间、重定位、静态重定位、动态重定位、碎片、紧缩、虚拟存储器。
答: (1)内存中各存储单元的地址由统一的基地址顺序编址,这种地址称为物理地址。
(2)用户程序经编译之后的每个目标模块都以0为基地址顺序编址。这种地址称为逻辑地址。
(3)逻辑地址空间——由程序中逻辑地址组成的地址范围叫做逻辑地址空间。
(4)内存空间——由内存中的一系列存储单元所限定的地址范围称做内存空间。
(5)重定位——把逻辑地址转变为内存物理地址的过程叫做重定位。
(6)静态重定位——在目标程序装入内存时所进行的重定位。
(7)动态重定位——在程序执行期间,每次访问内存之前进行的重定位。
(8)碎片——内存中出现的其容量太小、无法被利用的小分区称做碎片。
(9)紧缩——移动某些已分配区的内容, 使所有作业的分区紧挨在一起,而把空闲区留在另一
端,这种技术称为紧缩。
(10)可重定位地址——当含有它的程序被重定位时,将随之被调整的一种地址。
(11)虚拟存储器——用户能作为可编址内存对待的虚拟存储空间,它使用户逻辑存储器与物理存储器分离,是操作系统给用户提供的一个比真实内存空间大得多的地址空间。
14. 其虚拟存储器的用户编程空间共32个页面,每页为1KB, 内存为16KB。 假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如表 4.3 所示,则逻辑地址 0A5C(H) 所对应的
物理地址为____12C(H)____。
解法一:用户编程空间共 32 个页面,即 个页面;每页 1 KB,即页大小为 ,
可知后 10 位是页内偏移,前 5 位是页号。
逻辑地址 0A5C(H) = 0000 1010 0101 1100
所以,页内偏移是10 0101 1100 ,页号为 000 10,即为 2;
页号为 2 对应的物理块号为 4,即 00100,拼接页内偏移量,
得 0 0100 10 0101 1100 = 125C (H)
解法二:0A5C (H) 转换成十进制地址值:
每页 1 KB,即页大小为1024,所以 2652 / 1024 = 2...604
对应于物理块号 4,页内偏移量:604( = 2652 % 1024)
结果:4*1024 + 604 = 4700 化为十六进制为:125C
16. 已知段表如表 4-4 所示。下述逻辑地址的物理地址是什么?
(1)0,430(2)1,10
(3)1,11
(4)2,50
(5)3,400
(6)4,112
解:段表的逻辑地址是一个二维地址(x, y),即 x 对应段号,y 对应段内偏移量。
计算的时候,首先找到该段,判断段内偏移量是否不大于段长,是否段越界。
再考虑地址合法非法的问题。
(1)0,430:段号为 0,基址为 219,长度为 600 ,又 430 < 600 ,且地址合法,
所以其物理地址为 430 + 219 = 649
(2)1,10:段号为 1,基址为 2300,长度为 14,又 10 < 14,且地址合法,
所以其物理地址为 10 + 2300 = 2310
(3)1,11:段号为 1,基址为 2300,长度为 14,又 11 < 14,且地址合法,
所以其物理地址为 11 + 2300 = 2311
(4)2,50:段号为 2,但因为地址非法,所以访问非法,产生中断。
(5)3,400:段号为 3,基址为 1327,长度为 580,又 400 < 580,且地址合法,
所以其物理地址为 400 + 1327 = 1727
(6)4,112:段号为 4,因为段内偏移量 112 大于段长 96 ,所以段越界,产生中断。
17. 考虑下述页面走向:
1,2, 3, 4, 2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6当内存块数量分别为 3 和 5 时,试问 LRU、FIFO、OPT 这三种置换算法的缺页次数各是多少?(注意,所有内存块最初都是空的,所以,凡第一次用到的页面都产生一次缺页。)
解:见下表:
内存块数 | 置换算法 | ||
FIFO | LRU | OPT | |
3 | 16 | 15 | 11 |
5 | 10 | 8 | 7 |
详细分析之前,先解释 LRU、FIFO、OPT 这三种置换算法:
(1)LRU,最近最少使用置换法。当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以淘汰。
(2)FIFO,先进先出法。总是淘汰在内存中停留时间最长的一页,即先进入内存的页先被换出。
(3)OPT,最佳置换法。为调入新页面而必须预先淘汰某个老页面时,所选择的老页面应在将来不被使用,或者是在最远的将来才被访问。(可保证最小缺页率)
详细解答:
18. 考虑下面的存储访问序列:
10,11,104, 170,73,309,185,245,246,434,458,364
该程序大小为 460 字,设页面大小是 100 字,请给出该访问序列的页面走向。又设该程序基本可用内存是 200 字,采用 FIFO 置换算法,求出其缺页率。如果采用 LRU 置换算法,缺页率是多少?如果采用最优淘汰算法,其缺页率又是多少?
解:该访问序列的页面走向:0、0、1、1、0、3、1、2、2、4、4、3
见下表:
算法 | FIFO | LRU | OPT |
缺页次数 | 6 | 7 | 5 |
缺页率 | 6/12=0.5 | 7/12=0.583 | 5/12=0.417 |
先解释什么是页面走向:
好的页面置换算法能够适当降低页面更换频率(减少缺页率),尽量避免系统抖动。为评价一个算法的优劣, 可将该算法应用于一个特定的存储访问序列上, 并且计算缺页数量。 而存储访问序列也叫页面走向。
详细解析:
已知页面大小是 100 字,该访问序列的页面走向为 0、0、1、1、0、3、1、2、2、4、4、3
(令存储访问序列小于100的为1,在 [100, 200) 的为2,[300, 400) 的是3, [400, 500)的为4)
该程序基本可用内存是 200 字,页面大小是 100 字,所以可用内存块数为 2。