习题

1.给出一个由策略产生的死锁的例子。

2.学生们在机房的个人计算机上将自己要打印的文件发送给服务器,服务器会将这些文件暂存在它的硬盘上。如果服务器磁盘空间有限,那么,在什么情况下会产生死锁?这样的死锁应该怎样避免?

3.在图6-1中,资源释放的顺序与获得的顺序相反,以其他的顺序释放资源能否得到同样的结果?

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

4.一个资源死锁的发生有四个必要条件(互斥使用资源、占有和等待资源、不可抢占资源和环路等待资源)。举一个例子说明这些条件对于一个资源死锁的发生不是充分的。何时这些条件对一个资源死锁的发生是充分条件?

5.图6-3给出了资源分配图的概念,试问是否存在不合理的资源分配图,即资源分配图在结构上违反了使用资源的模型?如果存在,请给出一个例子。

6.假设一个系统中存在一个资源死锁。举一个例子说明死锁的进程集合中可能包括了不在相应的资源分配图中循环链中的进程。

7.鸵鸟算法中提到了填充进程表表项或者其他系统表的可能。能否给出一种能够使系统管理员从这种状况下恢复系统的方法?

8.解释系统是如何从前面问题的死锁中恢复的,使用a)抢占;b)回滚;c)终止进程。

9.假设在图6-6中,对某个i,有Cij +Rij >Ej ,这意味着什么?

10.请说明表6-8中的模型与6.5.2节描述的安全状态和不安全状态有什么主要的差异。差异带来的后果是什么?

11.图6-8所示的资源轨迹模式是否可用来说明三个进程和三个资源的死锁问题?如果可以,它是怎样说明的?如果不可以,请解释为什么。

12.理论上,资源轨迹图可以用于避免死锁。通过合理的调度,操作系统可避免进入不安全区域。请列举一个在实际运用这种方法时会带来的问题。

13.一个系统是否可能处于既非死锁也不安全的状态?如果可以,举出例子;如果不可以,请证明所有状态只能处于死锁或安全两种状态之一。

14.考虑一个使用银行家算法避免死锁的系统。某个时刻一个进程P请求资源R,但即使R当前可用这个请求也被拒绝了。如果系统分配R给P,是否意味着系统将会死锁?

15.银行家算法的一个主要限制就是需要知道所有进程的最大资源需求的信息。有没有可能设计一个不需要这些信息而避免死锁的算法?解释你的方法。

16.仔细考察图6-11b,如果D再多请求1个单位,会导致安全状态还是不安全状态?如果换成C提出同样请求,情形会怎样?

17.某一系统有两个进程和三个相同的资源。每个进程最多需要两个资源。这种情况下有没有可能发生死锁?为什么?

18.再考虑上一个问题,但现在有p个进程,每个进程最多需要m个资源,并且有r个资源可用。什么样的条件可以保证死锁不会发生?

19.假设图6-12中的进程A请求最后一台磁带机,这一操作会引起死锁吗?

20.一个计算机有6台磁带机,由n个进程竞争使用,每个进程可能需要两台磁带机,那么n是多少时系统才没有死锁的危险?

21.银行家算法在一个有m个资源类型和n个进程的系统中运行。当m和n都很大时,为检查状态是否安全而进行的操作次数正比于ma nb 。a和b的值是多少?

22.一个系统有4个进程和5个可分配资源,当前分配和最大需求如下:

阅读 ‧ 电子书库

若保持该状态是安全状态,x的最小值是多少?

23.一个消除环路等待的方法是用规则说明一个进程在任意时刻只能得到一个资源。举例说明在很多情况下这个限制是不可接受的。

24.两个进程A和B,每个进程都需要数据库中的3个记录1、2、3。如果A和B都以1、2、3的次序请求,将不会发生死锁。但是如果B以3、2、1的次序请求,那么死锁就有可能会发生。对于这3种资源,每个进程共有3!(即6)种次序请求,这些组合中有多大的可能可以保证不会发生死锁?

25.一个使用信箱的分布式系统有两条IPC原语:send和receive。receive原语用于指定从哪个进程接收消息,并且如果指定的进程没有可用消息,即使有从其他进程发来的消息,该进程也等待。不存在共享资源,但是进程由于其他原因需要经常通信。死锁会产生吗?请讨论这一问题。

26.在一个电子资金转账系统中,有很多相同进程按如下方式工作:每一进程读取一行输入,该输入给出一定数目的款项、贷方账户、借方账户。然后该进程锁定两个账户,传送这笔钱,完成后释放锁。由于很多进程并行运行,所以存在这样的危险:锁定x会无法锁定y,因为y已被一个正在等待x的进程锁定。设计一个方案来避免死锁。在没有完成事务处理前不要释放该账户记录。(换句话说,在锁定一个账户时,如果发现另一个账户不能被锁定就立即释放这个已锁定的账户。)

27.一种预防死锁的方法是去除占有和等待条件。在本书中,假设在请求一个新的资源以前,进程必须释放所有它已经占有的资源(假设这是可能的)。然而,这样做会引入这样的危险性:使竞争的进程得到了新的资源但却丢失了原有的资源。请给出这一方法的改进。

28.计算机系学生想到了下面这个消除死锁的方法。当某一进程请求一个资源时,规定一个时间限。如果进程由于得不到需要的资源而阻塞,定时器开始运行。当超过时间限时,进程会被释放掉,并且允许该进程重新运行。如果你是教授,你会给这样的学生多少分?为什么?

29.解释死锁、活锁和饥饿的区别。

30.Cinderella和Prince要离婚,为分割财产,他们商定了以下算法。每天早晨每个人发函给对方律师要求财产中的一项。由于邮递信件需要一天的时间,他们商定如果发现在同一天两人请求了同一项财产,第二天他们会发信取消这一要求。他们的财产包括狗Woofer、Woofer的狗屋、金丝雀Tweeter和Tweeter的鸟笼。由于这些动物喜爱它们的房屋,所以又商定任何将动物和它们房屋分开的方案都无效,且整个分配从头开始。Cinderella和Prince都非常想要Woofer。于是他们分别去度假,并且每人都编写程序用一台个人计算机处理这一谈判工作。当他们度假回来时,发现计算机仍在谈判,为什么?产生死锁了吗?产生饥饿了吗?请讨论。

31.一个主修人类学、辅修计算机科学的学生参加了一个研究课题,调查是否可以教会非洲狒狒理解死锁。他找到一处很深的峡谷,在上边固定了一根横跨峡谷的绳索,这样狒狒就可以攀住绳索越过峡谷。同一时刻,只要朝着相同的方向就可以有几只狒狒通过。但如果向东和向西的狒狒同时攀在绳索上那么会产生死锁(狒狒会被卡在中间),因为它们无法在绳索上从另一只的背上翻过去。如果一只狒狒想越过峡谷,它必须看当前是否有别的狒狒正在逆向通行。利用信号量编写一个避免死锁的程序来解决该问题。不考虑连续东行的狒狒会使得西行的狒狒无限制地等待的情况。

32.重复上一个习题,但此次要避免饥饿。当一只想向东去的狒狒来到绳索跟前,但发现有别的狒狒正在向西越过峡谷时,它会一直等到绳索可用为止。但在至少有一只狒狒向东越过峡谷之前,不允许再有狒狒开始从东向西越过峡谷。

33.编写银行家算法的模拟程序。该程序应该能够循环检查每一个提出请求的银行客户,并且能判断这一请求是否安全。请把有关请求和相应决定的列表输出到一个文件中。

34.写一个程序实现每种类型多个资源的死锁检测算法。你的程序应该从一个文件中读取下面的输入:进程数、资源类型数、每种存在类型的资源数(向量E)、当前分配矩阵C(第一行,接着第二行,以此类推)、需求矩阵R(第一行,接着第二行,以此类推)。你的程序输出应表明在此系统中是否有死锁。如果系统中有死锁,程序应该打印出所有死锁的进程id号。

35.写一个程序使用资源分配图检测系统中是否存在死锁。你的程序应该从一个文件中读取下面的输入:进程数和资源数。对每个进程,你应该读取4个数:进程当前持有的资源数、它持有的资源的ID、它当前请求的资源数、它请求的资源ID。程序的输出应表明在此系统中是否有死锁。如果系统中有死锁,程序应该打印出所有死锁的进程id号。