📅  最后修改于: 2023-12-03 14:58:31.820000             🧑  作者: Mango
这道题来自于GATE-CS-2017的第二套试卷,是一道典型的操作系统题目。该题目旨在考察读者对于进程的调度算法的理解和应用。
有两个进程P1和P2,它们都要访问一个共享变量X,每次访问时需要对该变量加锁。若进程P1当前持有锁并且进程P2请求获取锁,则会发生死锁。采用两个锁L1和L2来避免死锁,即当P1拥有L1锁但无法获取L2锁时,P1需要释放自己所有的锁,再次请求L2锁;而当P2拥有L2锁但无法获取L1锁时,也需要采取同样的策略。
现在有两种调度算法S1和S2可以选择。S1采用先到先服务调度,在进程请求锁时,优先考虑先到者,即最先发出请求的进程。S2采用最短作业优先调度,即优先调度估计需要执行时间最短的进程。
对于上述场景,请回答以下问题:
1.若采用S1算法,则是否可能出现死锁?若有可能,则请给出一个具体例子,并解释为什么会出现死锁。
2.若采用S2算法,则是否可能出现死锁?若有可能,则请给出一个具体例子,并解释为什么会出现死锁。
该题目考察的是进程调度算法对于避免死锁的影响,因为锁的占用是一个非常重要的问题,所以进程调度算法对于锁的占用是非常敏感的。
对于问题一,采用S1算法时,因为其是先到先服务调度,所以会存在一个长时间占用锁资源的进程,而其他的进程在等待该进程释放锁资源,如果该进程一直不释放锁资源,则会导致其他进程一直阻塞,最终导致死锁。
解决办法是采用S2算法,因为S2算法会考虑估计执行时间最短的进程来优先调度,这样可以减少进程占用锁资源的时间,避免死锁的发生。
对于问题二,采用S2算法时,因为其是根据估计执行时间最短的进程来优先调度,所以在进程长时间占用锁资源时,会使得估计执行时间变得非常长,而其他进程在等待该进程释放锁资源的同时,会被忽略掉或者执行时间被大大延长,最终依然会导致死锁。
解决办法是采用S1算法,因为S1算法是先到先服务调度,会使得所有的进程都得到平等的待遇,避免了某些进程长时间占用锁资源导致死锁的发生。
该题目不需要代码实现。