A:在美国,考虑总统选举,三个或更多的候选人正在争取某个政党的提名。初选结束后,当代表们到达党的选举大会时,可能没有候选人获得多数票,也没有任何代表愿意改变自己的投票。这是一个死锁。每个候选人都有一些资源(选票),但需要更多的选票才能胜出。在议会中有多个政党的国家,每个政党都支持不同版本的年度预算,但无法通过召集多数党来通过预算。这也是一个死锁。
A:磁盘缓冲区是有限的资源。每一个新到达的任务都需要请求更多的资源。如果具备10MB的缓冲空间,如何10个2MB的任务的一半到来,磁盘缓冲区将会填满,没有更多的空间可以存储,就会发生一个死锁。死锁可以通过让一个任务在缓冲区填满之前就开始打印,并且在打印完成后释放空间。这样一来,任务实际上会打印完成,然后下一个可以做同样的事情。如果在缓冲区被填满前,任务还不能开始打印,死锁是可能的。
A:打印机不可抢占,磁盘空间可抢占。
A:可以,没有区别。
A:假设有三个进程A,B和C和两种资源类型R和S。并假设有一个R的实例和两个S的实例。考虑下面的场景:A请求R并得到它;B请求S并得到它;C请求S并得到它(有两个S实例);B请求R但被阻塞;A请求S被阻塞。在这个阶段四条件都成立。但是,没有发生死锁。当C完成时,S的一个实例被释放到分配给A。现在A可以完成执行然后释放R,并分配给B,然后B可以完成其执行。如果有每种类型的资源只有一个实例,这4个条件就是充分的。
A:属于“破坏占有并等待条件”,因为我们假设汽车可以在交叉路口后进入街道空间,从而释放交叉路口。另一种策略可能允许汽车暂时停在车库里,释放出足够的空间来解决交通堵塞。一些城市有交通管制政策来塑造交通;随着城市街道变得更加拥挤,交通监督员调整红灯的设置,以限制进入严重拥挤地区的交通。流量越小,资源竞争越少,从而降低了发生交通堵塞的可能性。
A:上述异常情况不是通信死锁,因为这些汽车彼此独立,如果没有竞争发生,它们会以最小的延迟通过交叉路口。这不是资源死锁,因为没有一辆汽车持有另一辆汽车请求的资源。资源预分配或资源抢占机制也无助于控制这种异常。然而,这种异常是竞争同步的一种,在这种情况下,汽车在循环链中等待资源,交通限制可能是一种有效的控制策略。为了区别于资源死锁,这种异常可能被称为“调度死锁”。类似的僵局可能会发生在一项法律规定,要求两列火车合并到一条共享铁路轨道上,等待另一列火车继续行驶。请注意,一名警察用信号通知其中一辆竞争的汽车或火车继续行驶(而不是其他汽车或火车),可以打破这种停滞状态,而无需回滚或任何其他开销。
A:一个进程可能保存一种资源类型的一些或所有单元,并请求另一种资源类型,而另一个进程保存第二种资源,同时请求第一种资源类型的可用单元。如果没有其他进程可以释放第一种资源类型的单元,并且资源不能被抢占或同时使用,则系统处于死锁状态。例如,两个进程都是实际存储系统中分配的存储单元。(我们假设不支持页面或进程的交换,同时支持对内存的动态请求。)第一个进程锁定另一个资源——可能是数据单元。第二个进程请求锁定的数据并被阻止。第一个过程需要更多内存来执行代码以释放数据。假设系统中没有其他进程可以完成和释放内存单元,则系统中存在死锁。
A:是的,不合理的资源分配图存在。我们指出资源只能由一个进程获取。从方框代表的资源到圆代表的进程的弧表示进程拥有该资源。因此,一个方框如果指向两个或两个以上的圆意味着所有这些进程都持有该资源,这违反了规则。因此,在一个图中多个弧从一个方框指向不同的圆违反了规则,除非有多个资源的副本。从方框到方框或从圆到圆的弧线也违反规则。
A:都不会导致死锁。
A:考虑三个过程A,B和C和两个资源R和S。假设A等待B持有的S,B等待A持有的S,和C是等待A持有的R。所有这三个进程,A,B和C发生死锁。然而,只有A和B属于循环链。
A:通信死锁。可以通过超时并在一段时间后重新发送启用消息(增加窗口大小的消息)来控制(启发式)。然而,B可能已经收到了原始消息和重复消息。如果窗口大小的更新是以绝对值而不是差异给出的,那么不会有任何伤害。此类消息上的序列号对于检测重复也很有效。
A:这些资源的一部分只能由管理员拥有的进程保留使用,所以管理员总是可以运行一个shell和程序来评估死锁并决定哪些进程要被杀死以便系统再次可用。
A:P1和P4会处于死锁。
A: 通过抢占恢复的过程:P2和P3完成后,进程P1可以强制抢占1个RS3 资源。这将使A =(0 2 1 3 2),并让进程P4完成。一旦P4完成并释放其资源P1可能完成。 通过回滚恢复的过程:P1回滚到请求RS3之前的状态。 通过杀死进程恢复的过程:杀死P1。
A:这个过程需要比系统更多的资源。它没有可能可以得到这些资源,所以它永远无法完成,即使没有其他进程需要任何资源。
A:如果系统有两个或多个CPU,两个或多个进程可以并行,也会导致斜轨迹。
A:可以。在三个维度中考虑。z轴代测量第三进程请求的资源数。
A:该方法仅能在提前知道资源被请求的确切时刻时才能用于指导调度,但在实践中,这种情况很少。
A:有些状态既不安全也不是死锁,但是会导致死锁。例如,假设有四个资源:磁带,绘图仪,扫描仪和CD-ROM,如下表所示,有三个进程存在竞争。可能存在以下情况: 拥有 需要 可用 A: 2 0 0 0 1 0 2 0 01 2 1 B: 1 0 0 0 0 1 3 1 C: 0 1 2 1 1 0 1 0 这种状态不是死锁,因为许多操作还可以发生,例如A仍然可以得到两台打印机。但是,如果每个进程请求其剩余的要求,就会产生死锁。
A:D再多请求1个单位,还是安全状态;若C提出同样的请求,变成不安全状态。
A:该系统不可能发生死锁。假设每个进程都拥有一个资源。有一个资源是空闲的。任何一个进程可以要求它,并获得它,在这种情况下,它可以完成和释放这两种资源。因此,死锁是不会发生的。
A:如果进程有m个资源,它可以完成并且不会发生死锁。因此,最糟糕的情况是每个进程都有m-1个资源,需要另外一个资源。如果剩下一个资源,一个进程可以完成和释放所有资源,让其余的进程完成。因此,避免死锁的条件为r≥p(m-1)+ 1。
A:不会,进程D还能完成,当它完成时,它返回足够的资源以允许进程E(或进程A)完成,等等。
A:将矩阵中的一行与可用资源的向量进行比较,可以进行m次操作,此步骤必须按顺序重复n次,以找到可以完成的进程并对其进行标记。因此,按照顺序标记一个进程需要进行mn步。对所有n个进程重复该算法意味着操作数为mn2。因此a = 1和b = 2。
A:需求矩阵如下: 0 1 0 0 2 0 2 1 0 0 1 0 3 0 0 0 0 1 1 1 如果x为0,会立即死锁。如果x为1,则进程D可以运行完成。完成后,可用的资源为1 1 2 2 1,不幸的是,现在已经死锁了。如果x为2,进程D运行后,可用资源为1 1 3 2 1,进程C可以运行完成,并返回其资源,可用的资源为2 2 3 3 1,这将允许进程B运行和完成,然后进程A运行并完成。因此,避免死锁的x的最小值是2。
A:考虑一个需要将大型文件从磁带复制到打印机的过程。因为内存量是有限的,整个文件不能直接复制到这个内存,所以该进程必须循环遍历以下语句直到整个文件被打印出来: 获取磁带机 将文件的下一部分复制到内存中(限制内存大小) 释放磁带机 获取打印机 从内存打印文件 释放打印机 这将延长进程的执行时间。此外,由于打印机在每次打印步骤之后被释放,所以不能保证文件的所有部分都将被打印在连续的页面上。
A:假设进程A以a,b,c的顺序请求记录。如果进程B首先请求a,其中一个进程将获得a,另一个将阻塞。这种情况总是不会死锁的,因为赢家现在可以完成而没有干扰。在其他四种组合中,有些可能导致死锁,有些可能不会导致死锁。六种情况如下: a b c无死锁 a c b无死锁 b a c可能死锁 b c a可能死锁 c a b可能死锁 c b a可能死锁 由于六种情况中的四种可能导致死锁,所以有1/3的机会避免死锁和2/3的机会导致死锁。
A:会。假设所有的邮箱最初都是空的。现在A发送消息到B并等待回复,B发送到C并等待回复,C发送到A并等待回复。通信死锁的所有条件现在已经满足了。
A:为了避免循环等待,使用资源(帐户)的号码进行编号。读取输入行后,进程首先锁定较小编号的帐户,然后在成功锁定该账户后(可能需要等待)再去锁定另一个帐户。由于没有任何进程等待一个编号小于现有账户的账户,所以永远不会构成循环等待,因此永远不会发生死锁。
A:更改请求新资源的语义如下。如果一个进程请求一个新的资源并且该资源是可用的,它就获取该资源并保持它已经拥有的资源。如果新资源不可用,则该进程所有已经占有的资源都将被释放。在这种情况下,死锁是不会发生的,并且没有新的资源获得后原有的资源丢失的危险性。当然这个进程只能工作在资源能够释放的情况下(你可以在页之间释放扫描仪,CD之间释放CD刻录机)。
A:我会给它一个F(失败)的成绩。进程会做什么?很显然由于它需要资源,所以它再次询问并再次阻塞,这不如保持阻塞。事实上,可能会更糟糕的是,系统可能会跟踪竞争进程等待了多长时间,并将新释放的资源分配给等待时间最长的进程。通过定期释放和重新运行,一个进程丢失了它已经等待的时间的记录。
A:开发虚拟内存和分时系统主要是为了帮助系统用户。虚拟化硬件除了防止死锁之外,还保护用户免受预准备需求、资源分配和覆盖的细节影响。然而,上下文切换和中断处理的成本相当高。需要专门的寄存器、高速缓存和电路。仅仅为了防止死锁,可能不会产生这种成本。
A:当一组进程被阻塞等待只有该集合中的其他进程可以释放的事件时,会发生死锁。另一方面,活锁中的进程不会被阻塞。相反,它们会继续检查永远不会成立的执行条件是否成立。因此,除了持有的资源之外,活动中的进程继续消耗宝贵的CPU时间。最后,会发生进程的饥饿,由于存在其他进程以及新的进程流,最终会导致饿死高优先级的进程。不像死锁或活锁,饥饿可以自己终止,例如当具有较高优先级的现有进程终止并且没有更高优先级的新进程到来时。(这里答案的翻译有问题,应该是“饥饿是由于存在其他进程以及新进入的进程流,这些进程的优先级比饥饿的进程高。”,并不是高优先级的进程被饿死。)
A:这种停滞状态是竞争同步的异常,可以通过资源预分配来控制。然而,进程不会被资源阻挡。此外,已经按线性顺序请求资源。这种异常不是资源死锁;这是一个活锁。资源预分配将防止这种异常。作为一种启发,如果进程没有在某个时间间隔内完成,它们可能会超时并释放资源,然后进入睡眠一段时间,然后再试一次。
A: (a)这是竞争同步异常。这也是一个活锁。我们可以称之为调度活锁。这不是资源活锁或死锁,因为站点不保存其他人请求的资源,因此不存在保存资源同时请求其他人的站点的循环链。这不是通信死锁,因为站是独立执行的,将按顺序完成传输。” (b)在重传之前必须等待随机数量的时隙。每次连续碰撞后,选择时隙的时间间隔加倍,动态调整以适应繁重的交通负荷。在十六次连续重传之后,一帧被丢弃。 (c)有可能产生饥饿。因为接入信道是概率性的,并且因为新到达的站点可以在已经重发了几次的站点之前竞争并被分配信道。
A:这种异常不是资源死锁。虽然进程共享互斥量,即竞争机制,但是资源预分配和死锁避免方法对于这种死态都是无效的。线性排序的资源也是无效的。事实上,人们可以争辩说,线性顺序可能是问题所在;执行互斥应该是进入前的最后一步,也应该是离开关键部分后的第一步。循环停滞状态确实存在,其中两个进程都等待只能由另一个进程引起的事件。这是通信死锁。为了取得进展,如果超时抢占消费者的互斥量,它将会打破这种僵局。编写谨慎的代码或使用监视器进行互斥是更好的解决方案。
A:如果两个程序首先要求Woofer,那么电脑会无休止的饥饿:请求Woofer,取消请求,请求Woofer,取消请求等。如果其中一个请求狗窝,另一个请求狗,会发生死锁,双方会检测到该死锁,然后取消,但会在下一个循环中重复发生。无论哪种方式,如果两台计算机都被编程为首先去请求狗或狗屋,那么饥饿或死锁就会发生。两者之间没有太大的区别。在大多数死锁问题中,饥饿似乎并不严重,因为引入随机延迟通常会使它不太可能发生,但这种方法在这里不起作用。
A: