即使每个页面都失效,其次数也不会超过p,故上限是p。
8.(1)可能已出现了抖动现象,应减少系统的进程数;
(2)系统比较正常,可考虑适当增加进程数以提高资源利用率; (3)CPU和磁盘的利用率都较低,必须增加并发进程数。
9.首先采用FIFO,当m=3时,缺页次数=9;m=4时,缺页次数=10。 采用LRU算法,当m=3时,缺页次数=10;m=4时,缺页次数=8。 结果说明:FIFO有Belady奇异现象,即不满足驻留集增大,缺页次数一定减小的规律;另在m=3时,LRU的缺页次数比FIFO要多,所以LRU算法并不总优于FIFO,还要看当前访问串的特点。
10.存储管理的主要研究内容是主存存储分配、地址再定位、存储保护和存储扩充。
11.实现虚拟存储器的物质基础是:一定容量的主存、足够的辅存和地址变换机构。
12.
(1) 通过分页处理,使程序可以不需要占用连续的内存空间;
(2) 通过实现虚拟存储器,解决程序大小不能超过内存的容量的问题。 13.
(1) 存储器访问具有时间和空间的“局部性”,因此快表的命中率一般可达70%到90%;
(2) 页表是在系统执行过程中,每时每刻都需要访问的,因此,访问时间的微小缩短,其累计节约的时间却可以达到很大。
14.OS中存储管理的主要对象是内存储器的用户空间,以及作为内存用户空间的扩展和延伸的磁盘对换区(Unix)。内存的系统空间是存放OS内核的,不存在多道程序之间进行分配的问题,故不属存储管理的范围;在Unix中,磁盘对换区是用于进程映象对换的,因而从概念上讲是内存用户空间的扩充,故将它的管理也纳入存储管理之中。当然,不是所有的系统都有磁盘对换区,因而也不是所有系统的存储管理都有此管理对象。
15. 覆盖技术的基本思想是什么?
解 覆盖技术的基本思想是,若一个大的程序是由多个相对独立的程序模块组成,且有些模块是相互排斥的,即执行甲就不会执行乙,则在这种情况下,就没有必要将该程序的所有模块装入内存,而是将那些二者(或多者)执行时取其一的模块处理成“覆盖”,让它们共享内存的一个“覆盖区”。这样就可大大节省内存空间,达到用小内存运行大程序的目的。
5.4.5 解答题
1.总结出的区别如下表所示:
108
分页 单一连续逻辑地址空间 页是信息的物理单位 页是面向系统的 页内的信息逻辑上可能不完整的 页的大小固定 由系统划分 对用户透明 以页面为单位分配空间 存在内零头 不需要紧凑技术 分段 二维逻辑地址空间 段是信息的逻辑单位 段是面向用户的 段内的信息在逻辑上是完整的 段长度可变增长 用户可见 便于动态链接和存储保护 修改和共享 以段大小为单位分配的空间 存在外零头 需采用紧凑技术
提出分页管理的目的是为了提高内存空间的利用率;提出分段管理的目的除了也可以提高内存空间的利用率(相对分区管理而言)外,主要是为了更好地实现程序的共享和动态链接,并方便用户编程。
2.
(1)因为页表放在内存,故取一条指令(或一个操作数)须访问两次内存,所以需0.6us×2 = 1.2us的时间。
(2)这里假定访问快表的时间可以忽略不计,命中快表时取数只要一次访存,故此时的平均存取周期为
0.6us×0.75+1.2us×(1-0.75)=0.75us
说明:解此题的关键是要知道访问快表的时间可以忽略不计和平均存取周期的概念。
3.根本区别就在于,虚存管理允许部分装入和部分对换,而实存管理不允许这样做。所谓“部分装入”,指的是一道应用程序不是全部装入内存以后才开始执行而是只装入其一部分(甚至一点都不装)就开始运行,然后在运行的过程中根据需要逐步地装入其余部分;“部分对换”,指的是当内存已满而又有新的将“部分”需要装入时,要把已在内存的某一“部分”换出去,以腾出空间存放新来者。部分装入和部分对换的结果是可以用小的内存运行大的程序。实存管理则不同,它所要求的是整体装入。
4.(1)虚存的运行背景是用小内存运行大程序。这里的“大程序”是指比整个内存用户空间还要大的程序,它可以是一道程序,也可以是多道程序之和。
(2)虚存的可行性基础是程序运行的局部性原理。
(3)实现虚存的主要技术是部分装入、部分对换、局部覆盖、动态重定位。
109
(4)从原理上讲,虚存空间就是CPU逻辑地址所给出的空间,例如,逻辑地址是25位,则虚存空间就是225=32M;但实际的虚拟存储器的容量还要受辅存和内存空间之和的限制,即虚存空间不能超过这两个物理空间之和。
5.通过逐个演算,获得下表所示的结果。 过程分得的页面数 1 2 3 4 5 6 7 Optimal 20 15 11 8 7 7 7 LRU 20 17 15 10 8 7 7 FIFO 20 18 16 14 12 9 7 说明:每一个页面第一次进入内存也算缺页。 由上表可见,当进程分得的页面数在2~5之间时,Optimal缺页数最少,LRU次之,FIFO最多。大量统计证明LRU算法是实用算法中性能最好的。
6.内存的有效存取时间EAT(Efficent Access Time)也叫平均存取时间AAT(Average Access Time),其计算公式如下:
EAT=命中快表时的存取时间×快表命中率+命中内存时的存取时间×内存命中率+页面失效时的存取时间×页面实效率
将题中的已知条件代入可得 EAT=1us×80%+2us×10%+(5000us+2us)×10%
=0.8us+0.2us+500.2us
=501.2us
说明:解此题除了要了解“有效存取时间”的计算公式外,还应了解在命中快表、命中内存和页面失效三种情况下存取时间的计算方法。特别是,当页面失效时,除了页面传送时间,还应加上2次访问内存的时间,因为页面失效的前提是不命中快表。
7.设可接受的最大缺页率为p,则有
1us×0.7+2us×(1-0.7-p)+0.4p×8ms+0.6p×20ms=2us 即 0.7+0.6-2p+3200p+1200p=2 15198p=0.7 p=0.000046 8.
(1)节约内存
110
在许多情况下,每次要运行的模块可能是不相同的,但由于事先无法知道本次要运行哪些模块,故只能是将所有可能要运行到的模块,全部链接在一起,是每次执行时的装入全部的模块。显然这是低效的。因为装入的某些模块在运行过程中,根本就不运行。比较典型的例子是错误处理模块,如果程序在整个运行过程中,都不出现错误,便不会用到该模块。动态连接的方式就可以解决这个问题。
(2)便于软件版本的修改和更新
在采用装入时动态链接方式时,要修改或更新各个目标模块,是件非常容易的事,但对于经静态链接以装配在一起的装入模块,如果要修改或更新其中的某个目标模块时,则要求重新打开装入模块,这不仅是低效的,而且对于普通用户是不可能的。
(3)便于实现目标模块共享和构建程序。
若采用装入时动态链接方式,OS能够将一个目标模块链接到几个应用程序中去,即实现多个应用程序对该模块的共享。然而,采用静态链接方式时每个应用模块都必须含有该目标模块的拷贝,则无法实现共享。
9.
(1) LRU
第2页面:20+8*3 第4页面:20 +8*3 第5页面:20 +8*3
第2页面:8+1 第7页面:20 +8*3 第6页面:20+8*3 第4页面:20+ 8*3
第8页面:20+8*3
因此总的时间是(20+8*3)*7+(8+1)
(2) OPT
第2页面:20+8*3 第4页面:20 +8*3 第5页面:20 +8*3 第2页面:8+1 第7页面:20 +8*3 第6页面:20+8*3 第4页面:8+1 第8页面:8+1
因此总的时间是 (20+8*3)*5 +(8+2)*3
111