第一部分 教材习题(P152)
1、为什么要配置层次式存储器?
设置多个存储器能够使存储器两头的硬件能并行工作;采用多级存储系统,专门是Cache 技术,是减轻存储器带宽对系统性能影响的最佳结构方案;在微处置机内部设置各类缓冲存储器,减轻对存储器存取的压力。增加CPU中寄放器数量大大减缓对存储器压力。
2、可采用哪几种方式将程序装入内存?它们分别适用于何种场合?
绝对装入方式,在编译时,如果知道程序将驻留在内存的什么位置,那么编译程序将产生绝对地址的目标代码。
可重定位装入方式,在多道程序环境下,由于编译程序不能预知所编译的目标模块在内存的什么位置,因此目标模块的起始地址通常从0开始,程序中所有其他地址都相对于起始地址计算。
动态运行时装入方式,程序在装入内存中后,允许程序在运行中在内存中移动位置。
3、何谓静态链接?何谓装入时动态链接和运行时的动态链接?
答: 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装入模块,以后不再拆开。这种事先进行链接的方式叫静态链接方式。
装入时动态链接:用户源程序编译后所得的一组目标模块,在装入内存时,采用边装入边链接的链接方式。
运行时的动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。
4、何谓装入时动态链接?装入时动态链接方式有何优点?
装入时动态链接是指将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的一种链接方式,即在装入一个目标模块时,若发生一个外部模块调用事件,将引起装入程序去找相应的外部目标模块,把它装入内存中,并修改目标模块中的相对地址。
装入时动态链接方式有以下优点:
1)便于修改和更新 2)便于实现对目标模块的共享
5、何谓运行时的动态链接?运行时的动态链接方式有何优点?
运行时动态链接是将对某些模块的链接推迟到程序执行时才进行链接,也就是,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存,把它链接到调用者模块上。
优点:凡是在执行过程中未被用过的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅能加快程序的装入过程,而且可节省大量的内存空间。
6、在动态分区分配方式中,应如何将各空闲分区链接成空闲分区链?
答:为了现实对空闲分区的分配和链接,在每个分区的起始部分,设置一些用于控制分区分配的信息,以及用于链接各分区所用的前向指针,通过前、后向链接指针,可将所有的空闲分区链接成一个双向的链,如图所示(空闲链结构),为了检索方便,在分区尾部重复设置状态位的分区大小表目。当分区被分配出去以后,把状态位由“0”改为“1”,此时,前、后向指针已没有意义。
7、为什么要引入动态重定位?如何实现?
答:在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间。如果在系统中只有若干个小的分区,即使它们容量的总和大于要装入的程序,但由于这些分区不相邻接,也无法把该程序装入内存。若想把作业装入,可采用的一种方法是:将内存中的所有作业进行移动,使它们全都相邻接,这样,即可把原来分散的多个小分区拼接成一个大分区,这时就可把作业装入该区。这种通过移动内存中作业的位置,以把原来多全分散的小分区拼接成一个大分区的方法方法,称为“拼接”或“紧凑”见图所示。由于经过紧凑后的某些用户程序在内存中的位置发生了变化,此时若不对程序和数据的地址加以修改(变换),则程序必将无法执行。为此,在每次“紧凑”后,都必须对移动了的程序或数据进行重定位,这也就引入的动态重定位。
8、什么是基于顺序搜索的动态分区分配算法?它可分为哪几种?
为了实现动态分区式分配,将系统中的空闲分区组织成空闲分区表或空闲分区链。所谓顺序搜索,是指按表或链的组织顺序,检索表或链上记录的空闲分区,去寻找一个最符合算法的、大小能满足要求的分区。 分区存储管理中常采用的分配策略有:首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法。
9、在采用首次适应算法回收内存时,可能出现哪几种情况?应怎样处理这些情况?
答: 当进程运行完毕释放内时,系统根据回收区的首址,从空闲区链中找到相应的插入点,此时可能出现以下四种情况之一:
- 回收区与插入点的前一个空闲分区F1相邻,见图(a)。此时应将回收区与插入点的前一区合并,不必为回收分区分配新表项,而只需修改其前一分区F1的大小。
- 回收区与插入点的后空闲分区F2相邻接,见图(b)。此时也可瘵两分区合并,形成拳的空闲分区,但用回收的首址作为新空闲分区的首址,大小为两者之和。
- 回收区同时与插入点的前、后两个分区相邻接,见图(C)。此时将三个分区合并使用F1的首址,取消F2的表项,大小为三者之和。
- 回收区既不与F1相邻接,也不与F2相邻接。这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置。
10、什么是基于索引搜索的动态分区分配算法?它可分为哪几种?
我们把空闲分区按照某种属性(通常是大小)分类,把每一类都链接起来形成一个链表,建立一个表把每类链表的相关信息写进去以供索引,按照这个数据分配空闲分区的算法叫做基于索引搜索的动态分区分配算法。它分为快速适应算法、伙伴系统、哈希算法。
11、令buddyk(x)表示大小为2k、地址为x的块的伙伴系统地址,试写出buddyk(x)的通用表达式。
12、分区存取管理中常用哪些分配策略?比较它们的优缺点。
固定分区存储管理
其基本思想是将内存划分成若干固定大小的分区,每个分区中最多只能装入一个作业。当作业申请内存时,系统按一定的算法为其选择一个适当的分区,并装入内存运行。由于分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,造成存储空间浪费。
13、对文件区管理的目标和对对换空间管理的目标有何不同?
对文件区管理的主要目标:是提高文件存储空间的利用率,然后才是提高对 文件的访问速度。因此,对文件区空间的管理采取离散分配方式
对对换空间管理的主要目标:是提高进程换入和换出的速度,然后才是提高 文件存储空间的利用率。为此,对对换区空间的管理采取连续分配的方式,较 少考虑外存中的碎片问题。
14、为实现对换,系统应具备哪几方面的功能?
答:为了现实进程的对换,系统必须能实现三方面的功能:对换空间的主管理,进程的换出,以及进程的换入。
15、在以进程为单位进行对换时,每次是否都将整个进程换出?为什么?
答:并非要将整个进程换出,换出程序(进程)要换出某个进程时,只能换出那些非共享的程序和数据段。对于共享的程序段和数据段,则须先对每个段的引用计数执行减1操作。若其结果值不为0时,表示仍有进程需要用它,因而不能换出;否则表示该程序段或数据段,已不被其他进程需要,于是可以将它们换出。
16、基于离散分配时所用的基本单位不同,可将离散分配分为哪几种?
分页存储管理方式、分段存储管理方式和段页式存储管理方式。
17、什么是页面?什么是物理块?页面的大小应如何确定?
页面,物理块——分页存储管理方式中的单元。
页面:分页存储管理将进程的逻辑地址空间分成若干个页,
并为各页加以编号。
物理块:相应的,也将内存的物理空间分成若干个物理块,同样为它们加以编号。
页面大小:即不能太大也不能太小, 要起到减少内存碎片空间的作用,也不能使页表过长,总之要选择适中,且页面大小应该是 2的幂,通常为 1kb~8kb。
18、什么是页表?页表的作用是什么?
页表是分页式存储管理使用的数据结构。一个进程分为多少页,它的页表就有多少行。每一行记录进程的一页和它存放的物理块的页号、块号对应关系。 页表用于进行地址变换。
19、为实现分页存储管理,需要哪些硬件支持?
答:为了实现请求分页,系统必须提供一定的硬件支持,除了需要一台具有一定容量的内存及外存的计算机以外,还需要有页表机制、缺页中断机构以及地址变换机构。
- 页表机制:作用是将用户地址空间是的逻辑地址变换为内存空间中的物理地址。
- 缺页中断机构:在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断,请求OS将所缺之页调入内存。缺页中断作为中断,它们同样需要经历诸如保护CPU环境,分析中断原因、转入缺页中断处理程序进行处理、恢复CPU环境等几个步骤。
- 地址变换机构:请求分页系统中的地址变换机构,是在分页系统地址机构的基础上,再为实现虚拟存储器而增加了某种功能而形成的,如产生和处理缺页中民,以及从内存中换出一页的功能等。在进行地址变换时,首先去检索快表,试图从中找出所要访问的页,若找到,便修改页表中的访问位,对于写指令还须将修改位置成“1”,然后利用页表中给出的物理号和页内地址,形成页内物理地址。地址变换过程到此结束。
20、在分页系统中是如何实现地址变换的?
利用地址变换机构实现从逻辑地址到物理地址的转变换,通过页表来实现从页号到物理块号的变换,将逻辑地址中的页号转换为内存中的物理块号。
21、具有快表时是如何实现地址变换的?
答:(1)在CPU给出有效地址后,由地址变换机构自动地将页号P送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便表示所要访问的页表项在快表中。(2)直接从快表中读出该页所对应的物理块号,并送到物理地址寄存器中。如在快表中未找到对应的页表项,则还须再访问内存中的页表,找到后,把从页表项中读出的物理块号送往地址寄存器。(3)将此页表项存入快表的一个寄存器单元中,亦即,重新修改快表。但如果联想寄存器已满,则OS必须找到一个老的且已被认为是不再需要的页表项,将它换出。根据页号先到快表中查看有没有对应的匹配项,如果有就直接得到相应的物理块号而不需要进过利用始址、页号和页表项长度计算后去内存中查表。得到物理块号后依然是送到物理地址寄存器中和页内地址结合形成最后的物理地址。
22、较详细地说明引入分段存储管理是为了满足用户哪几方面的需要。
答:引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要:
- 方便编程:通常,用户把自己的作业按照逻辑关系划分为若干个段,每个段都是从0开始编址,并有自己的名字和长度。因此,在访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的。
- 信息共享:要实现对程序和数据的共享时,是发信息的逻辑单位为基础的。比如,共享某个例程和函数。分页系统中的“页”只是存放信息的物理单位(块),并无完整的意义,不便于实现共享,然而段却是信息的逻辑单位,上此可知,为了现实段的共享,希望存储器管理能与用户程序分段的组织方式相适应。
- 信息保护:信息保护同样是对信息的逻辑单位进程保护,,分段管理方式能更有效和方便地实现信息保护功能。
- 动态增长:在实际应用中,往往有些段,特别是数据段,在使用过程中会不断地增长,而事先又无法确切知道数据段会增长到多大。前述的其它几种存储管理试,都难以应付这种动态增长的情况,而分段存储管理方式却能较好的解决这一问题。
- 动态链接:动态链接是指在作业运行之前,并不把目标程序段链接起来。要运行时,先将主程序所对应的目标程序装入内存并启动运行,当运行过程中又需要调用某段时,才将该段(目标程序)调入内存,并进程链接,可见动态链接也要求以段作为管理的单位。
23、为什么要引入对换?对换可分为哪几种类型?
在多道环境下,一方面,在内存中的某些进程由于某事件尚未发生而被阻塞,但它却占用了大量的内存空间,甚至有时可能出现在内存中所有进程都被阻塞而迫使CPU停止下来等待的情况;另一方面,却又有着许多作业在外存上等待,因无内存而不能进入内存运行的情况。显然这对系统资源是一种严重的浪费,且使系统吞吐量下降。为了解决这一问题,在操作系统中引入了对换(也称交换)技术。 可以将整个进程换入、换出,也可以将进程的一部分(页、段)换入、换出。前者主要用于缓解目前系统中内存的不足,后者主要用于实现虚拟存储。
24、在具有快表的段页式存储管理方式中,如何实现地址变换?
答:在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长TL。
进行地址变换时,首先利用段号S,将它与段长TL进行比较。若S<TL,表示未越界,利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。
在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问内存中的段表,从中取得页表始址;第二次访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。
显然,这使访问内存的次数增加了近两倍。
为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。
25、为什么说分段系统比分页系统更易于实现信息的共享和保护?
答:分段系统允许若干个进程共享一个或多个分段,对段的保护也十分简单易行。在分页系统中,虽然也能实现程序和数据的共享,但远不如分段系统来的方便,可以通过一个例子来说明这个问题:
例如:有一个多用户系统,可同时接纳40个用户,它们都执行一个文本编辑程序,如果文本编辑程。
序有160KB的代码和加外40KB的数据区,由总共需有8MB的内存空间来个用户。如果160KB的代码是可重入的,则无论是在分页系统还是在分段系统中,该代码都能被共享,在内存中只需保留一份文本编辑程序的副本,此时所需要的内存空间仅为1760KB(160+40*40),假定每个页面的大小为4KB,那么160KB的代码将占用40个页面,数据区占10个页面。为实现代码的共享,应在每个进程的页表中都建立40个页表项,它们的物理块号都是21#~~60#。在每个进程的页表中,还须为自己的数据区建立页表项,它们的物理块号分别是61#~~70#,71#~~80#,81#~~90#,…,等等,如A图为分页系统中共享editor的示意图。
在分段系统中,实现共享则容易得多,只需要在每个进程的段中为文本编辑程序设置一个段表项。图B是分段系统中共享editor的示意图。
26、何实现分段共享?
答:为了实现分段共享,可在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。表项中记录了共享段的段号、段长、内存始址、存在位等信息,并记录了人共享此分段的每个进程的情况。共享段表如下图所示。其中的各项说明如下:
- 共享进程计数count。非共享段仅为一个进程所需要。当进程不再需要该段时,可立即释放该段,并由系统回收该段所有占用的空间。而共享段是为多个进程所需要的,当某进程不再需要而释放它时,系统并不回收该段所占内存,仅当所有共享该段的进程全部都不再需要它时,才由系统回收该段所占内存区。为了记录有多少个进程需要共享该分段,特设置了一个整型变量count.
- 存取控制字段。对于一个共享段,应给不同的进程以不同的存取权限。例如,对于文件主,通常允许他读和写,而对其它进程,则可能只允许读,甚至只允许执行。
- 段号。对于一个共享段,不同的进程可以各用不同的段号去共享该段。
27、分页和分段存储管理有何区别?
答:分页和分段系统有许多相似之处。比如,两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。但在概念上两者完全不同,主要表现在下述的三个方面:
- 页是信息的物理单位,分页是为离散实现分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段由是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
- 页的大小固定全由系统决定,由系统把逻辑地址划分产号和怘内的地址两部分,是由机器硬件实现的,因而在 只能有一种大小的页面原则是段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编㡽时,根据信息的性质来划分。
- 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;分段的作业地址空间则是二维的,程序员在标识一个地址时,即需给出段名,又需给出段内地址。
分页 | 分段 | |
信息单位 | 物理单位 | 逻辑单位 |
信息完整性 | 离散分配方式 | 意义相对完整 |
需要 | 系统管理的需要 | 用户的需要 |
页的大小 | 固定,由系统决定 | 不固定,由用户决定 |
地址空间 | 一维 | 二维 |
28、试述分页系统和分段系统的主要区别。
解:分页和分段有许多相似之处,比如两者都不要求作业连续存放。但在概念上两者完全不同,主要表现在以下几个方面:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要。段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要。
(2)页的大小固定且由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的。而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分。
(3)分页的作业地址空间是一维的。分段的地址空间是二维的。
29、试全面比较连续分配和离散分配方式?
答:连续分配是指为一个用户程序分配一个连续的内存空间。又可进一步分为单一连续分配、固定分区分配、动态分区分配和动态重定位分区分配四种方式。连续分区方式可使一个进程分得一个连续的内存空间,这样一来有利于程序的执行,但同时又会产生很多的碎片,浪费大量的系统资源。
离散分区是采用段式或页式或段页式的分配方式将一个进程装入一些离散的内存中,这样有利于内存的利用,并且可以方便程序员在更大的空间进行编程工作。