第7章内存管理复习题:7.1.内存管理需要满足哪些需求?答:重定位、保护、共享、逻辑组织和物理组织。7.2.为什么需要重定位进程的能力?答:通常情况下,并不能事先知道在某个程序执行期间会有哪个程序驻留在主存中。此外还希望通过提供一个巨大的就绪进程池,能够把活动进程换入和换出主存,以便使处理器的利用率最大化。在这两种情况下,进程在主存中的确切位置是不可预知的。7.3.为什么不可能在编译时实施内存保护?答:由于程序在主存中的位置是不可预测的,因而在编译时不可能检查绝对地址来确保保护。并且,大多数程序设计语言允许在运行时进行地址的动态计算(例如,通过计算数组下标或数据结构中的指针)。因此,必须在运行时检查进程产生的所有存储器访问,以便确保它们只访问了分配给该进程的存储空间。7.4.允许两个或多个进程访问进程的某一特定区域的原因是什么?答:如果许多进程正在执行同一程序,则允许每个进程访问该程序的同一个副本要比让每个进程有自己单独的副本更有优势。同样,合作完成同一任务的进程可能需要共享访问同一个数据结构。7.5.在固定分区方案中,使用大小不等的分区有什么好处?答:通过使用大小不等的固定分区:1.可以在提供很多分区的同时提供一到两个非常大的分区。大的分区允许将很大的进程全部载入主存中。2.由于小的进程可以被放入小的分区中,从而减少了内部碎片。7.6.内部碎片和外部碎片有什么区别?答:内部碎片是指由于被装入的数据块小于分区大小而导致的分区内部所浪费的空间。外部碎片是与动态分区相关的一种现象,它是指在所有分区外的存储空间会变成越来越多的碎片的。7.7.逻辑地址、相对地址和物理地址间有什么区别?答:逻辑地址是指与当前数据在内存中的物理分配地址无关的访问地址,在执行对内存的访问之前必须把它转化成物理地址。相对地址是逻辑地址的一个特例,是相对于某些已知点(通常是程序的开始处)的存储单元。物理地址或绝对地址是数据在主存中的实际位置。7.8.页和帧之间有什么区别?答:在分页系统中,进程和磁盘上存储的数据被分成大小固定相等的小块,叫做页。而主存被分成了同样大小的小块,叫做帧。一页恰好可以被装入一帧中。7.9.页和段之间有什么区别?答:分段是细分用户程序的另一种可选方案。采用分段技术,程序和相关的数据被划分成一组段。尽管有一个最大段长度,但并不需要所有的程序的所有段的长度都相等。习题: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.动态分区的另一种放置算法是最坏适配,在这种情况下,当调入一个进程时,使用最大的空闲存储块。该方法与最佳适配、首次适配、邻近适配相比,优点和缺点各是什么?它的平均查找长度是多少?答:一种对最佳适配算法的评价即是为固定分配一个组块后和剩余空间是如此小以至于实际上已经没有什么用处。最坏适配算法最大化了在一次分配之后,剩余空间的大小仍足够满足另一需求的机率,同时最小化了压缩的概率。这种方法的缺点是最大存储块最早被分配,因此大空间的要求可能无法满足。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.b.7.8.考虑一个伙伴系统,在当前分配下的一个特定块地址为011011110000.a.如果块大小为4,它的伙伴的二进制地址为多少?b.如果块大小为16,它的伙伴的二进制地址为多少?答:a.011011110100b.0110111000007.9.令buddyk(x)为大小为2k、地址为x的块的伙伴的地址,写出buddyk(x)的通用表达式。答:7.10.Fabonacci序列定义如下:F0=0,F1=1,Fn+2=Fn+1+Fn,n≧0a.这个序列可以用于建立伙伴系统吗?b.该伙伴系统与本章介绍的二叉伙伴系统相比,有什么优点?答:a.是。字区大小可以确定Fn=Fn-1+Fn-2.。b.这种策略能够比二叉伙伴系统提供更多不同大小的块,因而具有减少内部碎片的可能性。但由于创建了许多没用的小块,会造成更多的外部碎片。7.11.在程序执行期间,每次取指令后处理器把指令寄存器的内容(程序计数器)增加一个字,但如果遇到会导致在程序中其他地址继续执行的转跳或调用指令,处理器将修改这个寄存器的内容。现在考虑图7.8。关于指令地址有两种选择:在指令寄存器中保存相对地址,并把指令寄存器作为输入进行动态地址转换。当遇到一次成功的转跳或调用时,由这个转跳或调用产生的相对地址被装入到指令寄存器中。在指令寄存器中保存绝对地址。当遇到一次成功的转跳或调用时,采用动态地址转换,其结果保存到指令寄存器中。哪种方法更好?答:使用绝对地址可以减少动态地址转换的次数。但是,我们希望程序能够被重定位。因此,在指令寄存器中保存相对地址似乎就更好一些。也可以选择在进程被换出主存时将指令寄存器中的地址转换为相对地址。7.12.考虑一个简单分页系统,其物理存储器大小为232字节,页大小为210字节,逻辑地址空间为216个页。a.逻辑地址空间包含多少位?b.一个帧中包含多少字节?c.在物理地址中指定帧需要多少位?d.在页表中包含多少个页表项?e.在每个页表项中包含多少位?(假设每个页表项中包含一个有效/无效位)答:a.物理地址空间的比特数是216*210=226b.一个帧包含的字节跟一个页是一样的,210比特.c.主存中帧的数量是232/210=222,所以每个帧的定位要22个比特d.在物理地址空间,每个页都有一个页表项,所以有216项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.在一个简单分段系统中,包含如下段表:起始地址长度(字节)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.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。答: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