死锁 互斥 同步
2017-08-21 本文已影响0人
元素周期表的十七君
死锁:
两个及以上进程,因每个进程都在等待其他进程做完某事(如释放资源),而不能继续执行
死锁的充要条件:
1.互斥:一个资源只能够供一个进程使用,已分配给进程的资源,不可以在分配给其他的进程;
2.占有且等待:当进程等待其他进程释放资源的时候,他申请的并且已经获得的资源是继续占有已经获得的资源的;
3. 不可抢占:不可以抢占进程已经占有的资源;
4.循环等待:存在一个封闭的进程链,是每一个进程至少占有此链中下一个进程所需要的一个资源。
死锁避免:
是允许三个必要条件,但是不允许出现循环等待的状况,这样会允许处理更多的并发请求。死锁避免需要知道将来的进程资源需求的情况。在死锁的避免中,是否同意资源的请求是通过判断该请求是否可能造成死锁来决定的。如果一个进程的启动会造成死锁的话,则不启动该进程;如果一个进程增加资源请求的话,会造成死锁,则不分配给他资源。
有银行家算法(资源分配拒绝策略)和拒绝启动进程的算法。
1.拒绝启动的算法
R表示系统资源,V表示未分配的资源,C[i][j]表示进程i对资源j的需求,A[i][j]表示的是进程i中已经分配了资源j的数目。根据这个矩阵的关系,定义了一个死锁避免的策略:如果一个新进程的资源需求会导致死锁,则拒绝启动这个新的进程。
2.银行家算法:
一系列的进程已经运行,R表示总的资源数目,V表示当前未分配的资源,C表示需求的资源,A表示当前已经给进程分配的资源,那么C-A矩阵就是新的资源分配需求,V需要满足至少一条C-A,否则不会分配资源给进程。然后再可以执行的进程结束的时候,回收掉该进程的所有资源。