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