7.1.如果使用动态分区方案,下图所示为在某个给定的时间点的内存配置:阴影部分为已经被分配的块;空白部分为空闲块。接下来的三个内存需求分别为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.2.使用伙伴系统分配一个1MB的存储块。a.利用类似于图7.6的图来说明按下列顺序请求和返回的结果:请求70;请求35;请求80;返回A;请求60;返回B;返回D;返回C。b.给出返回B之后的二叉树表示。答:a.b.7.3.考虑一个伙伴系统,在当前分配下的一个特定块地址为011011110000.a.如果块大小为4,它的伙伴的二进制地址为多少?b.如果块大小为16,它的伙伴的二进制地址为多少?答:a.011011110100b.0110111000007.4.令buddyk(x)为大小为2k、地址为x的块的伙伴的地址,写出buddyk(x)的通用表达式。答:7.5.Fabonacci序列定义如下:F0=0,F1=1,Fn+2=Fn+1+Fn,n≧0a.这个序列可以用于建立伙伴系统吗?b.该伙伴系统与本章介绍的二叉伙伴系统相比,有什么优点?答:a.是。字区大小可以确定Fn=Fn-1+Fn-2.。b.这种策略能够比二叉伙伴系统提供更多不同大小的块,因而具有减少内部碎片的可能性。但由于创建了许多没用的小块,会造成更多的外部碎片。7.6.在程序执行期间,每次取指令后处理器把指令寄存器的内容(程序计数器)增加一个字,但如果遇到会导致在程序中其他地址继续执行的转跳或调用指令,处理器将修改这个寄存器的内容。现在考虑图7.8。关于指令地址有两种选择:在指令寄存器中保存相对地址,并把指令寄存器作为输入进行动态地址转换。当遇到一次成功的转跳或调用时,由这个转跳或调用产生的相对地址被装入到指令寄存器中。在指令寄存器中保存绝对地址。当遇到一次成功的转跳或调用时,采用动态地址转换,其结果保存到指令寄存器中。哪种方法更好?答:使用绝对地址可以减少动态地址转换的次数。但是,我们希望程序能够被重定位。因此,在指令寄存器中保存相对地址似乎就更好一些。也可以选择在进程被换出主存时将指令寄存器中的地址转换为相对地址。7.7.考虑一个简单分页系统,其物理存储器大小为232字节,页大小为210字节,逻辑地址空间为216个页。a.逻辑地址空间包含多少位?b.一个帧中包含多少字节?c.在物理地址中指定帧需要多少位?d.在页表中包含多少个页表项?e.在每个页表项中包含多少位?(假设每个页表项中包含一个有效/无效位)答:a.物理地址空间的比特数是216*210=226b.一个帧包含的字节跟一个页是一样的,210比特.c.主存中帧的数量是232/210=222,所以每个帧的定位要22个比特d.在物理地址空间,每个页都有一个页表项,所以有216项e.加上有效/无效位,每个页表项包含23位。7.8.分页系统中的虚地址a相当于一对(p,w),其中p是页号,w是页中的字节号。令z是一页中的字节总数,请给出p和w关于z和a的函数。答:关系是:a=pz+w,其中p=∟a/z,a/z的整数部分。w=Rz(a),a除以z的余数7.9.在一个简单分段系统中,包含如下段表:起始地址长度(字节)6602481752442222198996604对如下的每一个逻辑地址,确定其对应的物理地址或者说明段错误是否会发生:a.0,198b.2,256c.1,530d.3,444e.0,222答:a.段0定位在660,所以我们有物理地址660+190=858.b.222+156=378c.段1长度为422,所以会发生错误d.996+444=1440e.660+222=882.7.10.在内存中,存在连续的段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。答: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