作的指令表?
解:原子操作是在原子数据类型上操作, 原子数据类型有他们自己的内在的 格式。因此,不能用简单的阅读操作, 但是特别的阅读操作 对于原子数据类型来说是不可或缺的。 6.20考虑Linux系统中的如下代码片断: read_lock(&mr_rwlock); write_lock(&mr_rwlock);
mr_rwlock是读者写者锁。这段代码的作用是什么?
解:因为写者锁将会自旋,所以这段代码会导致死锁, 等待所有的 读者解锁, 包括唤醒这个线程。
6.21两个变量a和b分别有初始值1和2,对于Linux系统有如下代码:
线程1 a = 3; mb( ); -- -- 线程2 -- -- c = b; rmb(); d = a;
使用内在屏障是为了避免什么错误?
解:没有使用内存屏障, 在一些处理器上可能 c接到b 的新值, 而d接到b 的旧值。举例来说, c可以等于 4(我们期待的), 然而 d 可能等于 1.(不是我们期待的)。使用mb() 确保a 和 b 按合适的次序被写, 使用 rmb()确保 c 和d 按合适的次序被读。
第7章 内存管理
7.1. 2.3节中列出了内存管理的5个目标,7.1节中列出了5中需求。请说明它们是一致的。
答: 重定位≈支持模块化程序设计; 保护≈保护和访问控制以及进程隔离; 共享≈保护和访问控制;
逻辑组织≈支持模块化程序设计;
物理组织≈长期存储及自动分配和管理.
7.2. 考虑使用大小相等分区的固定分区方案。分区大小为2e16字节,贮存的大小为2e24字节。使用一
个进程表来包含每一个进程对应的分区。这个指针需要多少位?
答:分区的数量等于主存的字节数除以每个分区的字节数:224/216 = 28. 需要8个比特来确定一个分区大小为28中的某一个位置。
7.3. 考虑动态分区方案,说明平均内存中空洞的数量是段数量的一半。
答: 设n和h为断数量和空洞数量的个数.在主存中,每划分一个断产生一个空洞的概率是0.5,因为删除一个断和添加一个断的概率是一样的.假设s是内存中断的个数那么空洞的平均个数一定等于s/2.而导致空洞的个数一定小余断的数量的直接原因是相邻的两个断在删除是一定会产生一个空洞.
7.4. 在实现动态分区中的各种放置算法(见7.2节),内存中必须保留一个空闲块列表。分别讨论最佳适
配、首次适配、临近适配三种方法的平均查找长度。
答:通过上题我们知道,假设s是驻留段的个数,那么空洞的平均个数是s/2。从平均意义上讲,平均查找长度是s/4。
7.5. 动态分区的另一种放置算法是最坏适配,在这种情况下,当调入一个进程时,使用最大的空闲存储
26
块。该方法与最佳适配、首次适配、邻近适配相比,优点和缺点各是什么?它的平均查找长度是多少?
答:一种对最佳适配算法的评价即是为固定分配一个组块后和剩余空间是如此小以至于实际上已经没有什么用处。最坏适配算法最大化了在一次分配之后,剩余空间的大小仍足够满足另一需求的机率,同时最小化了压缩的概率。这种方法的缺点是最大存储块最早被分配,因此大空间的要求可能无法满足。
7.6. 如果使用动态分区方案,下图所示为在某个给定的时间点的内存配置:
阴影部分为已经被分配的块;空白部分为空闲块。接下来的三个内存需求分别为40MB,20MB和10MB。分别使用如下几种放置算法,指出给这三个需求分配的块的起始地址。 a. 首次适配 b. 最佳适配
c. 临近适配(假设最近添加的块位于内存的开始) d. 最坏适配 答:
a. 40M的块放入第2个洞中,起始地址是80M. 20M的块放入第一个洞中.起始地址是20M. 10M的块的起始地址是120M。
b. 40M,20N,10M的起始地址分别为230M,20M和160M.
c. 40M,20M,10M的起始地址是80M,120160M.
d. 40M,20M,10M,的起始地址是80M,230M,360M.
7.7. 使用伙伴系统分配一个1MB的存储块。
a. 利用类似于图7.6的图来说明按下列顺序请求和返回的结果:请求70;请求35;请求80;返
回A;请求60;返回B;返回D;返回C。 b. 给出返回B之后的二叉树表示。 答: a.
27
b.
7.8. 考虑一个伙伴系统,在当前分配下的一个特定块地址为011011110000.
a. 如果块大小为4,它的伙伴的二进制地址为多少? b. 如果块大小为16,它的伙伴的二进制地址为多少? 答:
a. 011011110100 b. 011011100000
k
7.9. 令buddyk(x)为大小为2、地址为x的块的伙伴的地址,写出buddyk(x)的通用表达式。
答:
7.10. Fabonacci序列定义如下:
F0=0,F1=1,Fn+2=Fn+1+Fn,n≧0
a. 这个序列可以用于建立伙伴系统吗?
b. 该伙伴系统与本章介绍的二叉伙伴系统相比,有什么优点? 答:
a. 是。字区大小可以确定Fn = Fn-1 + Fn-2.。
b. 这种策略能够比二叉伙伴系统提供更多不同大小的块,因而具有减少内部碎片的可能性。但由
于创建了许多没用的小块,会造成更多的外部碎片。
7.11. 在程序执行期间,每次取指令后处理器把指令寄存器的内容(程序计数器)增加一个字,但如果遇
到会导致在程序中其他地址继续执行的转跳或调用指令,处理器将修改这个寄存器的内容。现在考虑图7.8。关于指令地址有两种选择:
? 在指令寄存器中保存相对地址,并把指令寄存器作为输入进行动态地址转换。当遇到一次成功
的转跳或调用时,由这个转跳或调用产生的相对地址被装入到指令寄存器中。
? 在指令寄存器中保存绝对地址。当遇到一次成功的转跳或调用时,采用动态地址转换,其结果
保存到指令寄存器中。
28
哪种方法更好?
答:使用绝对地址可以减少动态地址转换的次数。但是,我们希望程序能够被重定位。因此,在指令寄存器中保存相对地址似乎就更好一些。也可以选择在进程被换出主存时将指令寄存器中的地址转换为相对地址。
321016
7.12. 考虑一个简单分页系统,其物理存储器大小为2字节,页大小为2字节,逻辑地址空间为2个页。
a. 逻辑地址空间包含多少位? b. 一个帧中包含多少字节?
c. 在物理地址中指定帧需要多少位? d. 在页表中包含多少个页表项?
e. 在每个页表项中包含多少位?(假设每个页表项中包含一个有效/无效位) 答:
161026
a. 物理地址空间的比特数是2*2=2
10
b. 一个帧包含的字节跟一个页是一样的,2比特.
321022
c. 主存中帧的数量是2/2=2,所以每个帧的定位要22个比特
16
d. 在物理地址空间,每个页都有一个页表项,所以有2项
e. 加上有效/无效位,每个页表项包含23位。7.13. 分页系统中的虚地址a相当于一对(p,w),其中p是页号,w是页中的字节号。令z是一页中的字
节总数,请给出p和w关于z和a的函数。
答:关系是:a = pz + w,其中p = ∟a/z?, a/z的整数部分。w = Rz(a) ,a除以z的余数
7.14. 在一个简单分段系统中,包含如下段表:起始地址 660 1752 222 996 长度(字节) 248 442 198 604 对如下的每一个逻辑地址,确定其对应的物理地址或者说明段错误是否会发生: a. 0,198 b. 2,256 c. 1,530 d. 3,444 e. 0,222 答:
a. 段0定位在660,所以我们有物理地址660+190=858. b. 222+156=378
c. 段1长度为422,所以会发生错误 d. 996+444=1440 e. 660+222=882.
7.15. 在内存中,存在连续的段S1,S2,?,Sn按其创建顺序一次从一端放置到另一端,如下图所示:
当段Sn+1被创建时,尽管S1,S2,?,Sn中的某些段可能已经被删除,段Sn+1仍被立即放置在段Sn之后。当段(正在使用或已被删除)和洞之间的边界到达内存的另一端时,压缩正在使用的段。 a. 说明花费在压缩上的时间F遵循以下的不等式:
F≧(1-f)/1+kf), k=t/2s-1
其中,s表示段的平均长度(以字为单位);l标识段的平均生命周期,按存储器访问;f表示在平衡条件下,未使用的内存部分。提示:计算边界在内存中移动的平均速度,并假设复制一个字至少需要两次存储器访问。
b. 当f=0.2,t=1000,s=50时,计算F。
29
答:
a. 很明显,在一个周期t内一些段会产生而一些段会被删除.因为系统是公平的,一个新的段会在t内被插入,此外,边界会医s/t的速度移动.假设t0是边界到达空洞的时间,t0=fmr/s, m=内存的长度,在对段进行压缩时会有(1-f)m个数被移动,压缩时间至少是2(1-f)m.则花在压缩上的时间F为F=1-t0/(t0+tc)。
b. K=(t/2s)-1=9;F≧(1-0.2)/(1+1.8)=0.29
第8章 虚拟内存
8.1 假设在处理器上执行的进程的也表如下所示。所有数字均为十进制数,每一项都是从0开始记数的,并且所有的地址都是内存字节地址。页尺寸为1024个字节。 虚拟页号 有效位 访问位 修改位 页帧号 0 1 1 0 4 1 1 1 1 7 2 0 0 0 — 3 1 0 0 2 4 0 0 0 — 5 1 0 1 0 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位哈希表。表项包含页号帧号和链指针。如果页表可以给每个哈
30
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《操作系统精髓与设计原理·第五版》习题答案(6)在线全文阅读。
相关推荐: