2.4.2 预防死锁
预防死锁的就破坏死锁产生的四个条件中的任意一个条件。
目录
2.4.2.1 破坏互斥条件
互斥条件:只有对互斥资源的争抢才有可能产生死锁。
如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。其实我们并不能从这个地方入手,因为有些资源因为安全性问题是必须互斥访问的,所以一般不会提这方面。
2.4.2.2 破坏不剥夺条件
不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。
在采用这种方法时系统规定,进程是逐个地提出对资源的要求的。当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。这意味着某一进程已经占有的资源,在运行过程中会被暂时地释放掉,也可认为是被剥夺了,从而摒弃了“不剥夺”条件。
2.4.2.3 破坏请求和保持条件
请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进
程占有,此时请求进程被阻塞,但又对自己已有的资源
保持
不放。
采用静态分配方法
,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不让它投入运行。一旦投入运行后,这些资源就一直归它所有,该进程就不会再请求别的任何资源了。
这种办法虽然很简单就可以实现,但是资源的利用率会很低而且一次分配太多资源可能会导致某个进程饥饿。
2.4.2.4 破坏循环等待条件
循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。
顺序资源分配法,
首先给系统中的资源编号,规定每个进程
必须按编号递增的顺序请求资源
,同类资源(即编号相同的资源)一次申请完。当
一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向地回来申请小编号的资源,这样就破坏了环路,从而就不会产生循环等待的现象。