操作系统精髓与设计原理 第8章复习题及习题解答

发布 2019-08-06 22:25:35 阅读 6965

8.10 为什么不可能把全局替换策略和固定分配策略组合起来?

固定分配策略要求分配给一个进程的帧的数目是确定的,当一个进程中取入一个新的页时,这个进程的驻留页集中的一页必须被替换出来(保持分配的帧的数目不变),这是一种局部替换策略。

8.11 驻留集和工作集有什么区别?

一个进程的驻留集是指当前在主存中的这个进程的页的个数。一个进程的工作集是指这个进程最近被使用过的页的个数。

8.12 请求式清除和预约式清除有什么区别?

在请求式清除中,只有当一页被选择用于替换时才被写回辅存;在预约式清除中,将这些被修改的多个页在需要用到它们所占据的页帧之前成批的写回辅存。

习题解答。8.1 假设在处理器上执行的进程的也表如下所示。所有数字均为十进制数,每一项都是从0开始记数的,并且所有的地址都是内存字节地址。页尺寸为1024个字节。

a. 描述cpu产生的虚拟地址通常是如何转化成一个物理主存地址的。

b. 下列虚拟地址对应于哪个物理地址(不用考略页错误)?

i)1052

(ii)2221

(iii)5499

解答。a:由虚拟地址求得页号和偏移量,用虚拟页号作为索引页表,得到页帧号,联系偏移量得到物理地址。

b:(i)1052=1024+28 查表对应的页帧号是7,因此物理地址为7*1024+28=7196

ii)2221=2*1024+173 此时出现页错误。

iii)5499=5*1024+379 对应的页帧号为0 因此物理地址是379

8.2 考虑一个使用32位的地址和1kb大小的页的分页虚拟内存系统。每个页表项需要32位。需要限制页表的大小为一个页。

a.页表一共需要使用几级?

b.每一级页表的大小是多少?提示:一个页表的大小比较小。

c.在第一级使用的页较小与在最底下一级使用的页较小相比,那种策略使用最小个数的页?

解答。a:虚拟内存可以分为232/210= 222页,所以需要22个bit来区别虚拟内存中的一页,每一个页表可以包含210/4=28项,因此每个页表可以包含22bit中的8个bit,所以需要**索引。

b:第二级页表有28个页表项,第一级页表有26个页表项。

c:如果顶层有26个页表项将会减少使用空间,在这种情况下,中间层页表有26个并且每个都有28个页表项,底层有214个页并且每个都有28个页表项,因此共有1+26+214页=16,449页。如果中间层有26个页表项,那么总的页数有1+28+214页=16,641页。

如果底层有26个页表项,那么总的页表数是1+28+216页=65,973页。

8.3 a:图8.4中的用户表需要多少内存空间?

b:假设需要设计一个哈希反向页表来实现与图8.4中相同的寻址机制,使用一个哈希函数来将20位页号映射到6位哈希表。

表项包含页号帧号和链指针。如果页表可以给每个哈希表项分配最多3个溢出项的空间,则哈希反向页表需要占用多大的内存空间?

解答。a:4mbyte

b:行数:26+2=128项。每项包含:20(页号)+20(帧号)+8bits(链索引)=48bits=6bytes。总共:128*6=768bytes

8.4 一个进程分配给4个页帧(下面的所有数字均为十进制数,每一项都是从0开始计数的)。上一次把一页装入到一个页帧的时间,上一次访问页帧中的页的时间,每个页帧中的虚拟页号以及每个页帧的访问位(r)和修改位(m)如下表所示(时间均为从进程开始到该事件之间的时钟时间,而不是从事件发生到当前的时钟值)。

当虚拟页4发生错误时,使用下列内存管理策略,哪一个页帧将用于置换?解释原因。

先进先出)算法。

最近最少使用)算法。

算法。d.最佳(使用下面的访问串)算法。

e.在页错误之前给定上述内存状态,考虑下面的虚拟页访问序列:

如果使用窗口大小为4的工作集策略来代替固定分配,会发生多少页错误?每个页错误何时发生?

解答。a:页帧3,在时间20加载,时间最长。

b:页帧1,在时间160访问距现在时间最长。

c:清除页帧3的r位(最早加载),清除页帧2的r位,(次最早加载),换出的是页帧0因为它的r位为0。

d:换出的是页帧3中的虚拟页3,因为它将最晚被访问到。

e:一共有6个错误,如下。

8.5 一个进程访问5页:a,b,c,d和e,访问顺序如下:

a;b;c;d;a;b;e;a;b;c;d;e

假设置换算法为先进后出,该进程在主存中有三个页帧,开始时为空,请查找在这个访问顺序中传送的页号。对于4个页帧的情况,请重复上面的过程。

解答。分别有9次和10次页错误,这被称之为“belady′s现象”("an anomaly in space-time characteristics of certain programs running in a paging machine," by belady et al, communications of the acm, june 1969.)

8.6 一个进程在磁盘上包含8个虚拟页,在主存中固定分配给4个页帧。发生如下顺序的页访问:

a.如果使用lru替换策略,给出相继驻留在这4个页帧中的页。计算主存的命中率。假设这些帧最初是空的。

b.如果使用fifo策略,重复问题(a)。

c.比较使用这两种策略的命中率。解释为什么这个特殊的访问顺序,使用fifo的效率接近于lru。

解答。a:lru:命中率=16/33

b:fifo:命中率=16/33

c:这两种策略对这个特殊的页轨迹(执行顺序)是等效的。

8.7 在vax中,用户页表以系统空间的虚拟地址进行定位。让用户页表位于虚存而不是主存中有什么好处?有什么缺点?

解答。最主要的优点是在物理内存空间上的节省。这主要是两方面的原因:

(1)一个用户页表可以仅当使用时才取入内存。(2)操作系统可以动态的分配用户页表,产生一个页表仅当程序被创建时。

当然,也有一个缺点:地址转换需要多余的工作。

8.8 假设在主存中执行下列程序语句:

for(i=1;i≤n;i++)

a[i]=b[i]+c[i];

页尺寸为1000个字。令n=1000。使用一台具有所有寄存器指令并使用了索引寄存器的机器,写出实现上述语句的一个假想程序,然后给出在执行过程中的页访问顺序。

解答。由机器语言编写的程序,在主存中地址4000处开始运行。运**况如下:

4000 (r1)←1 建立索引记录i

4001 (r1)←n 在r2中建立n

4002 比较r2,r1 检查i﹥n

4003 如果大于则跳转到4009

4004 (r3)←b(r1) 使用索引记录r1到达b[i]

4005 (r3)←(r3)+c(r1)使用索引记录r1加上c[i]

4006 a(r1)←(r3)使用索引记录r1将总和存入a[i]中。

4007 (r1)←(r1)+1 i加一。

4008 跳到4002

6000—6999 存储a

7000—7999 存储b

8000—8999 存储c

9000 存储1

9001 存储n

由这个循环产生的参考串为。

包括11.000个参考,但仅包括5个不寻常的页。

8.9 ibm system/370体系结构使用两级存储器结构,并且分别把这两级称为段和页,这里的分段方法缺少本章所描述的关于段的许多特征。对于这个基本的370体系结构,页尺寸可以是2kb或4kb,段大小固定为64kb或1mb。

这种方案缺少一般分段系统的那些优点?370的分段方法有什么好处?

解答。s/370分段系统是固定的且对程序员是不可见的,因此没有一个分段系统的优点在s/370中实现(无保护情况下)每一个段表项的p位提供整个段表的保护。

8.10 假设页尺寸为4kb,页表项大小位4字节。如果要映射一个64位地址空间,并且最顶层的页表对应于一页,则需要几级页表?

解答。因为每个页表项有4bytes,每个页表有4kbytes,所以每个页表可以映射1024=210个页,标识出210×212=222bytes的地址空间。然而,地址空间是264bytes。

增加一个二层页表,顶层页表指向210个页表,标识出232个页表,将这个过程继续下去就得到:

我们可以看到5层是不够表示64位的地址空间,但是6层达到了要求。但是6层中只有2位被使用,而不是全部的10位。所以不是使用72位的虚拟地址空间,而是将除了最低两位外的其他位全部屏蔽忽略。

这样将会得到一个64位地址空间,顶层页只有4个页表项。另外一种方法是修改规则将顶层页做成一个单独的物理页并且让它适合4个页。这样将会节省一个页。

8.11 考虑一个系统该系统采用基于页的内存映射,并使用一级页表。假设页表总是在主存中。

a.如果一次存储器访问需要200ns,那么一次需要调页的存储器访问要多长时间?

b.现在增加一个mmu,在命中或未命中时有20ns的开销。如果假设有85%的存储器访问命中都在mmu tlb中,那么哪些是有效的存储器访问时间?

c.解释tlb命中率如何影响有效的存储器访问时间。

解答。a.400ns。200ns用来得到页表项,200ns用来到达存储位置。

b.这是一个常见的有效时间计算公式:

两种情况:第一种,tlb中包含所需的页表项。在这种情况下在200ns外多了20ns的存储访问时间。

第二种,tlb中不包含所需的页表项。这时我们会再多花200ns来把所需的页表项取入tlb。