操作系统原理与实践教程(第二版)习题答案

v(full); end coend

解二:

semaphore well=1; // 保证互斥地访问水井的信号量 semaphore vat=1; // 保证互斥地访问水缸的信号量

semaphore empty=10; // 表示水缸中剩余的空间能容纳的水的桶数 semaphore full=0; // 表示水缸中水的桶数

semaphore pail=3; // 保证互斥地访问临界资源水桶的信号量 // 大和尚进程 big_monk(){ while(1){

wait(full); wait(pail); wait(vat);

use pail to get water from vat signal(vat); signal(empty);

drink water in the pail signal(pail); } }

// 小和尚进程 little_monk(){ while(1){

wait(empty);\\ wait(pail); wait(well);

use pail to get water from well signal(well); wait(vat);

pour water to the vat signal(vat); signal(full); signal(pail); } }

(21) 在银行家算法中,若出现下述资源分配情况:

Process Allocation Need Available P0 0 0 3 2 0 0 1 2 1 6 2 2 P1 1 0 0 0 1 7 5 0 P2 1 3 5 4 2 3 5 6

P3 0 0 3 2 0 6 5 2 P4 0 0 1 4 0 6 5 6

试问:

① 该状态是否安全?

② 若进程 P2 提出请求 Request( 1, 2, 2, 2 )后,系统能否将资源分配给它? 解:

现在对该时刻的状态进行安全分析: 由于Available向量为(1,6,2,2),所以Work向量初始化为(1,6,2,2)该时刻的安全性检查表如下: Work A P0 1 P3 1 P4 1 P2 1 P1 2 B 6 6 6 6 9 C 2 5 8 9 D 2 4 6 Need A 0 0 0 B 0 6 6 3 7 C 1 5 5 5 5 D 2 2 6 6 0 Allocation A 0 0 0 1 1 B 0 0 0 3 0 C 3 3 1 5 0 D 2 2 4 4 0 Work+Allocation A 1 1 1 2 3 B 6 6 6 9 9 C 5 8 9 D 4 6 True True Finish 10 True 10 2 14 14 True 14 14 True 14 14 1 如表所示,存在安全序列,所以该时刻处于安全状态。 由于Request2(1,2,2,2)

Allocation A P0 0 P1 1 P2 2 P3 0 P4 0 B 0 0 5 0 0 C 3 0 7 3 1 D 2 0 6 2 4 Need A 0 1 1 0 0 B 0 7 1 6 6 C 1 5 3 5 5 D 2 0 4 2 6 Available A 0 B 4 C 0 D 0 然后进行安全性检测,此时Available为(0,4,0,0),所以Work初始化为(0,4,0,0)。 此时的Work小于任意的Need[i]向量,所以系统处于不安全状态,即认为不能分配资源(0,2,0)给P2。

(22) 设系统中仅有一类数量为M的独占型资源,系统中有N个进程竞争该类资源,其中各进程对该类资源的最大需求量为W。当M、N、W分别取下列值时,试判断哪些情形可能会发生死锁,为什么?

(1)M=2,N=2,W=1; (2)M=3,N=2,W=2; (3)M=3,N=2,W=3; (4)M=5,N=3,W=2;

解:

1. 不会发生死锁。因为两个进程需要的最多资源量都是1个,而系统拥有的资源量正

好是2个,两个进程都能顺利运行完,所以不会死锁。 2. 不会发生死锁。因为2个进程需要的最多的资源量都是2个,而系统拥有的资源量

是3个,所以总会有1个进程得到2个资源后被运行,运行完毕后释放资源,于是另一个进程也能顺利运行完,所以不会死锁。

3. 会发生死锁。当一个进程占有1个资源,另一个进程占有2个资源时,2个进程都

要再申请资源,但是系统已经没有资源了,所以就发生死锁了。

4. 不会发生死锁。因为三个进程需要的资源最大数量都是2个,而系统有5个资源,

所以至少有2个进程可以拿到足够的资源运行,运行完后再释放资源,最后一个进程也能得到运行,所以不会死锁。

第5章 存储管理

(1) 存储管理的任务和功能是什么? 解:

存储管理的主要任务是:

支持多道程序的并发执行,使多道程序能共享存储资源,在互不干扰的环境中并发执行。 方便用户,使用户减少甚至摆脱对存储器的管理,使用户从存储器的分配、保护和共享等繁琐事物中解脱出来。

提高存储器的利用率和系统吞吐量。

从逻辑上扩充内存空间,支持大程序能在小的内存空间运行或允许更多的进程并发执行。 为了完成上述任务,现代操作系统的存储管理应具有以下功能: 1. 存储空间的分配和回收。

2. 地址转换,实现逻辑地址到物理地址的映射。 3. 主存空间的共享。 4. 主存空间的保护。 5. 主存储空间的扩充。

6. 对换,对换的主要任务是实现在内存和外存之间的全部或部分进程的对换,即将内存中处于阻塞状态的进程调换到外存上,而将外存上处于就绪状态的进程换入内存。对换的目的主要是为了提高内存利用率,提高系统的吞吐量。 (2) 为什么要配置层次式存储器? 解:

为了解决CPU和存储器之间速度上的不匹配,在现代计算机系统中,存储系统通常采用层次结构,存储层次可粗略分为三级:最高层为CPU寄存器,中间为主存,最底层是辅存。根据具体功能还可以细分为寄存器、高速缓存、主存储器、磁盘缓存、辅存储设备(固定磁盘、可移动存储介质)5层。一个文件的数据可能出现在存储系统的不同层次中,例如,一个文件数据通常被存储在辅存中(如硬盘),当其需要运行或被访问时,就必须调入主存,也可以暂时存放在主存的磁盘高速缓存中。大容量的辅存常常使用磁盘,磁盘数据经常备份在可移动磁盘或者光盘上,以防止硬盘故障时丢失数据。

(3) 什么是逻辑地址?什么是物理地址?为什么要进行二者的转换工作? 解:

逻辑地址是应用程序中使用的访存地址,有时也称为相对地址,由逻辑地址构成的地址空间称为逻辑空间。每个应用程序的逻辑地址空间都是从零号地址码开始的。 物理地址是内存储器的实际存储单元地址,有时也称为绝对地址,由物理地址构成的地址空间称为物理空间。物理地址空间也是从零号地址码开始的。 在多道程序环境下,程序逻辑地址空间和内存物理地址空间是不一致的。用户程序的逻辑地址可以是一维线性或多维线性,而内存中的每一个存储单元都有相应的内存地址相对应,属于一维线性地址。在将用户程序部分或全部地装入内存空间时,要实现逻辑地址到物理地址的映射。

(4) 地址重定位,静态地址重定位和动态地址重定位有什么区别? 解:

地址重定位指从逻辑地址到物理地址的映射过程,也称为地址映射。 静态地址重定位是指在用户程序执行之前完成地址映射工作,即把程序的逻辑地址都转换为实际的内存物理地址。静态地址重定位的地址变换只是在装入时一次完成,而在程序运行期间不再变化。

动态地址重定位是指在程序执行过程中,CPU在访问内存之前,将要访问的程序或数据地址转换为内存地址。

(5) 什么是内部碎片和外部碎片?。 解:

在一个分区内部出现的碎片(即被浪费的空间)称作内部碎片,如固定分区法就会产生内部碎片;

在所有分区之外新增的碎片称作外部碎片,如在动态分区法实施过程中出现的越来越多的小空闲块就是外部碎片,由于它们太小,无法装入一个进程,因而被浪费掉。 (6) 什么是分页和分段存储技术,两者有何区别? 解:

在分页系统中,系统 会把用户程序的地址空间划分成若干个大小相等的区域,每个区域称作一个页面或页。每个页都有一个编号,叫做页号。页号一般从0开始,如0,1,2,?,等。类似地,也把内存空间划分成若干和页大小相同的物理块,这些物理块叫“帧”(frame)或内存块。同样,每个物理块也有一个编号,块号也是从0开始依次顺序排列。系统为进程分配内存时,以块为单位将进程中的若干页分别装入多个可以不相邻接的块中。

在分段存储管理方式中,程序按内容或过程(函数)关系划分为若干个段,每个段定义一组逻辑信息,都有自己的名字。一个用户作业所包含的段对应于一个二维线性虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位进行内存分配,然后通过地址映射机构把段式虚拟地址转换为实际的内存物理地址。

分段和分页有许多相似之处,比如,二者在内存中都采用离散分配方式,而不是整体连续分配方式,而且都要通过地址映射机构来实现地址转换。但二者在概念上却完全不同,具体表现在下述三个方面:

页是信息的物理单位,而段是信息的逻辑单位。分页是为了实现离散分配,减少内存碎片,提高内存利用率。或者说,分页是由于系统管理的需要,而不是用户的需要。段则是信息的逻辑单位,它含有一组意义相对完整的信息。段的长度不是固定的,取决于用户所编写的程序。分段的目的是为了能更好地满足用户的需要,更方便用户编程,更好地实现信息共享和保护。

页的大小由系统确定,由系统把逻辑地址划分为页号和页内地址两部分,整个系统只能有一种大小的页面;而段的长度却不固定,它取决于用户的程序。通常由编译程序在对源码进行编译时,根据程序的性质来划分。

分页的进程地址空间是一维的,即单一的线性空间;而分段的进程地址空间是二维的,由段号和段内地址两部分组成。

(7) 什么是虚拟存储器?列举采用虚拟存储器的必要性和可能性。 解:

虚拟存储器是指在具有层次结构存储器的计算机系统中,具有请求调入和交换功能,为用户提供一个比实际物理内存容量大得多的可寻址的一种存储器系统,它能从逻辑上对内存容量进行扩充。

采用虚拟存储器的必要性:传统存储管理方式要求将作业全部装入内存之后才能运行,这一特征导致大作业和多个作业要求运行时系统无法满足;另外,传统存储管理方式具有驻留性,即作业装入内存直到运行结束,便一直驻留在内存中。尽管进程在运行中会因I/O等

联系客服:779662525#qq.com(#替换为@)