1、1第四章 存储器管理第一部分 教材习题(P159)15、在具有快表的段页式存储管理方式中,如何实现地址变换?答:在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长 TL。进行地址变换时,首先利用段号 S,将它与段长 TL 进行比较。若 STL,表示未越界,利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号 P 来获得对应页的页表项位置,从中读出该页所在的物理块号 b,再利用块号 b 和页内地址来构成物理地址。在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问内存中的段表,从中取得页表始址;
2、第二次访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。显然,这使访问内存的次数增加了近两倍。为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。19、虚拟存储器有哪些特征?其中最本质的特征是什么?答:虚拟存储器有以下特征:多次性:一个作业被分成多次调入内存运行,亦即在作业运行时没有必要将其全部装入,只需将当前要运
3、行的那部分程序和数据装入内存即可;以后每当要运行到尚未调入的那部分程序时,再将它调入。多次性是虚拟存储器最重要的特征,任何其他的存储器管理方式都不具有这一特征。因此,认为虚拟存储器是具有多次性特征的存储器系统。对换性:允许在作业的运行过程中进行换进、换出,也即,在进程运行期间,允许将那些暂不使用的程序和数据,从内存调至外存的对换区(换出) ,待以后需要时再将它们从外存调至内存(换进) ;甚至还允许将暂不运行的进程调至外存,待它们重又具备运行条件时再调入内存。换进和换出能有效地提高内存利用率。可见,虚拟存储器具有对换性特征。虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容
4、量。这是虚拟存储器所表现出来的最重要特征,也是实现虚拟存储器的最重要的目标。虚拟性是以多次性和对换性为基础的,多次性和对换性又必须建立在离散分配的基础上。所以最本质特征应该是离散性。222、在请求分页系统中,页表应包括哪些数据项?每项的作用是什么?答:在请求分页系统中的每一个页表项如下: 状态位 P:用于指示该页是否已调入内存,供程序访问时参考。 访问字段 A:用于记录本页在一段时间内被访问的次数,或记录本页已有多长时间没有被访问,供选择换出页面时参考。 修改位 M:表示该页在调入内存后是否被修改过,由于内存中的每一页都在外存上保留一分副本,因此,若没有被修改,在置换该页时就不需再将该页写回到
5、外存上,以减少系统的开销和启动磁盘的次数,若已被修改,则必须将该页重写到外存上,以保证外存中所保留的始终是最新副本。简言之,M 位供置换页面时参考。 外存地址,用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。页号 物理块号 状态位P访问字段 A 修改位 M 外存地址326、在一个请求分页系统中,采用 LRU 、FIFO 页面置换算法时,如果一个作业的页面走向为 1、3、2、1、1、3、5、1、3、2、1、5,当分配给该作业的物理块数 M 分别为 3 和 4 时,试计算在访问过程中所发生的缺页次数和缺页率,并比较所得的结果。答:LRU1 3 3 2 1 3 5 1 3 21 3 2
6、 2 1 3 5 1 3 2 11 3 2 1 1 3 5 1 3 2 1 5缺 缺 缺 缺 缺 缺当物理块数为 3 时,缺页次数为 6,缺页率为 6/12。2 2 2 5 5 31 3 3 2 1 3 5 1 3 21 3 2 2 1 3 5 1 3 2 11 3 2 1 1 3 5 1 3 2 1 5缺 缺 缺 缺当物理块数为 4 时,缺页次数为 4,缺页率为 4/12。FIFO1 1 1 1 3 2 5 1 1 31 3 3 3 3 2 5 1 3 3 21 3 2 2 2 2 5 1 3 2 2 5缺 缺 缺 缺 缺 缺 缺 缺当物理块数为 3 时,缺页次数为 8,缺页率为 8/12。
7、1 1 1 1 1 11 1 1 1 3 3 3 3 3 31 3 3 3 3 2 2 2 2 2 21 3 2 2 2 2 5 5 5 5 5 5缺 缺 缺 缺当物理块数为 4 时,缺页次数为 4,缺页率为 4/12。1、为什么要配置层次式存储器?2、可采用哪几种方式将程序装入内存?它们分别适用于何种场合?答: 绝对装入方式,在编译时,如果知道程序将驻留在内存的什么位置,那么编译程序将产生绝对地址的目标代码。可重定位装入方式,在多道程序环境下,由于编译程序不能预知所编译的目标模块在内存的什么位置,因此目标模块的起始地址通常从 0 开始,程序中所有其他地址都相对于起始地址计算。动态运行时装入方
8、式,程序在装入内存中后,允许程序在运行中在内存中移动位置。43、何谓静态链接?何谓装入时动态链接和运行时的动态链接?答: 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装入模块,以后不再拆开。这种事先进行链接的方式叫静态链接方式。装入时动态链接:用户源程序编译后所得的一组目标模块,在装入内存时,采用边装入边链接的链接方式。运行时的动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。4、在进行程序链接时,应完成哪些工作?答:在进行程序链接时,应完成:对相对地址的修改变换外部调用符号55、在动态分区分配方式中,应如何将各空闲分区链接成空闲
9、分区链?答:为了现实对空闲分区的分配和链接,在每个分区的起始部分,设置一些用于控制分区分配的信息,以及用于链接各分区所用的前向指针,通过前、后向链接指针,可将所有的空闲分区链接成一个双向的链,如图所示(空闲链结构) ,为了检索方便,在分区尾部重复设置状态位的分区大小表目。当分区被分配出去以后,把状态位由“0”改为“1” ,此时,前、后向指针已没有意义。前向指针N+20后向指针N+20N 个字节可用66、为什么要引入动态重定位?如何实现?答:在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间。如果在系统中只有若干个小的分区,即使它们容量的总和大于要装入的程序,但由于这些分区不相邻接,
10、也无法把该程序装入内存。若想把作业装入,可采用的一种方法是:将内存中的所有作业进行移动,使它们全都相邻接,这样,即可把原来分散的多个小分区拼接成一个大分区,这时就可把作业装入该区。这种通过移动内存中作业的位置,以把原来多全分散的小分区拼接成一个大分区的方法方法,称为“拼接”或“紧凑”见图所示。由于经过紧凑后的某些用户程序在内存中的位置发生了变化,此时若不对程序和数据的地址加以修改(变换) ,则程序必将无法执行。为此,在每次“紧凑”后,都必须对移动了的程序或数据进行重定位,这也就引入的动态重定位。操作系统用户程序 1 10KB用户程序 330KB用户程序 614KB用户程序 926KB操作系统用
11、户程序 1 用户程序 3用户程序 6用户程序 680KB(A)紧凑前 (B)紧凑后77、在采用首次适应算法回收内存时,可能出现哪几种情况?应怎样处理这些情况?答: 当进程运行完毕释放内时,系统根据回收区的首址,从空闲区链中找到相应的插入点,此时可能出现以下四种情况之一: 回收区与插入点的前一个空闲分区 F1 相邻,见图(a) 。此时应将回收区与插入点的前一区合并,不必为回收分区分配新表项,而只需修改其前一分区 F1 的大小。 回收区与插入点的后空闲分区 F2 相邻接,见图(b) 。此时也可瘵两分区合并,形成拳的空闲分区,但用回收的首址作为新空闲分区的首址,大小为两者之和。 回收区同时与插入点的
12、前、后两个分区相邻接,见图(C)。此时将三个分区合并使用 F1 的首址,取消 F2 的表项,大小为三者之和。 回收区既不与 F1 相邻接,也不与 F2 相邻接。这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置。8、令 buddyk(x)表示大小为 2k、地址为 x 的块的伙伴系统地址,试写出buddyk(x)的通用表达式。9、分区存取管理中常用哪些分配策略?比较它们的优缺点。10、在系统中引入对换后可带来哪些好处?答:引入对换后,可以解决由于内存不足而无法同时容纳多个用户程序的问题,并可以进一步提高内存的利用率。11、为实现对换,系统应具备哪几方面的
13、功能?答:为了现实进程的对换,系统必须能实现三方面的功能:对换空间的主管理,进程的换出,以及进程的换入。12、在以进程为单位进行对换时,每次是否都将整个进程换出?为什么?答:并非要将整个进程换出,换出程序(进程)要换出某个进程时,只能换出那些非共享的程序和数据段。对于共享的程序段和数据段,则须先对每个段的引用计数执行减 1 操作。若其结果值不为 0 时,表示仍有进程需要用它,因而F1回收区F2回收区F1回收区F2A B C8不能换出;否则表示该程序段或数据段,已不被其他进程需要,于是可以将它们换出。13、为实现分页存储管理,需要哪些硬件支持?答:为了实现请求分页,系统必须提供一定的硬件支持,除
14、了需要一台具有一定容量的内存及外存的计算机以外,还需要有页表机制、缺页中断机构以及地址变换机构。 页表机制:作用是将用户地址空间是的逻辑地址变换为内存空间中的物理地址。 缺页中断机构:在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断,请求 OS 将所缺之页调入内存。缺页中断作为中断,它们同样需要经历诸如保护 CPU 环境,分析中断原因、转入缺页中断处理程序进行处理、恢复 CPU 环境等几个步骤。 地址变换机构:请求分页系统中的地址变换机构,是在分页系统地址机构的基础上,再为实现虚拟存储器而增加了某种功能而形成的,如产生和处理缺页中民,以及从内存中换出一页的功能等。在进行地址变换
15、时,首先去检索快表,试图从中找出所要访问的页,若找到,便修改页表中的访问位,对于写指令还须将修改位置成“1” ,然后利用页表中给出的物理号和页内地址,形成页内物理地址。地址变换过程到此结束。14、较详细地说明引入分段存储管理是为了满足用户哪几方面的需要。答:引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要: 方便编程:通常,用户把自己的作业按照逻辑关系划分为若干个段,每个段都是从 0 开始编址,并有自己的名字和长度。因此,在访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的。 信息共享:要实现对程序和数据的共享时,是发信息的逻辑单位为基础的。比如,共享某个例程和函数。
16、分页系统中的“页”只是存放信息的物理单位(块),并无完整的意义,不便于实现共享,然而段却是信息的逻辑单位,上此可知,为了现实段的共享,希望存储器管理能与用户程序分段的组织方式相适应。 信息保护:信息保护同样是对信息的逻辑单位进程保护, ,分段管理方式能更有效和方便地实现信息保护功能。 动态增长:在实际应用中,往往有些段,特别是数据段,在使用过程中会不断地增长,而事先又无法确切知道数据段会增长到多大。前述的其它几种存储管理试,都难以应付这种动态增长的情况,而分段存储管理方式却能较好的解决这一问题。 动态链接:动态链接是指在作业运行之前,并不把目标程序段链接起来。要运行时,先将主程序所对应的目标程
17、序装入内存并启动运行,当运行过程中又需要调用某段时,才将该段(目标程序)调入内存,并进程链接,可见动态链接也要求以段作为管理的单位。91016、为什么说分段系统比分页系统更易于实现信息的共享和保护?答:分段系统允许若干个进程共享一个或多个分段,对段的保护也十分简单易行。在分页系统中,虽然也能实现程序和数据的共享,但远不如分段系统来的方便,可以通过一个例子来说明这个问题:例如:有一个多用户系统,可同时接纳 40 个用户,它们都执行一个文本编辑程序,如果文本编辑程。序有 160KB 的代码和加外 40KB 的数据区,由总共需有 8MB 的内存空间来个用户。如果 160KB 的代码是可重入的,则无论
18、是在分页系统还是在分段系统中,该代码都能被共享,在内存中只需保留一份文本编辑程序的副本,此时所需要的内存空间仅为 1760KB(160+40*40),假定每个页面的大小为 4KB,那么 160KB 的代码将占用 40 个页面,数据区占 10 个页面。为实现代码的共享,应在每个进程的页表中都建立 40 个页表项,它们的物理块号都是 21#60#。在每个进程的页表中,还须为自己的数据区建立页表项,它们的物理块号分别是61#70#,71#80#,81#90#,等等,如 A 图为分页系统中共享editor 的示意图。在分段系统中,实现共享则容易得多,只需要在每个进程的段中为文本编辑程序设置一个段表项。图 B 是分段系统中共享 editor 的示意图。进程 1 页表进程 2页表Ed1Ed2Ed40Data1Data10Ed1Ed2Ed40Data1Data1021226071802122607180主存Ed40Data1Data10Data1Data10Ed2Ed1021226061707180A 图