死锁1
死锁是指两个或两个以上的进程在执行过程中,由于资源竞争或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法推进下去,此时称系统处于死锁状态,这些永远在互相等待的进程称为死锁进程。
死锁的条件
死锁有三个必要条件:
互斥一次只有一个进程可以使用一个资源,其他进程不能访问其他进程的资源。
占有且等待当一个进程等待其他进程时,继续分配已分配的资源。
不可抢占不能强行抢占已占有的资源
前三个条件都是死锁存在的必要条件而非充分条件,要产生死锁,还需第四个条件:
循环等待存在一个闭合的进程链,每个进程至少占有此链中下一个进程所需的一个资源
第四个条件实际上是前三条件的潜在结果,即假设前三个条件存在,那么可能发生的一系列事件会导致不可解的循环等待。 这个不可解的循环等待实际上就是死锁的定义。因此这四个条件一起构成了死锁的充分必要条件。
其中,循环等待与其他三个条件存在本质上的区别。前三个条件是策略条件,而循环等待则取决于所涉及的进程请求和释放资源的顺序。
死锁预防
死锁预防的策略是师徒设计一种系统来排除发生死锁的可能性 方法分为两类, 间接死锁预防方法,即防止前三个必要条件中的任何一个条件发生。另一种是直接预防方法,即防止循环等待发生
1.互斥 一般来说这个条件是不可避免的。如果需要对资源进行互斥访问,那么操作系统就必须支持互斥。若资源或文件可能允许多个读访问,但只能允许互斥的写访问,若此时多个进程请求写权限,则可能发生死锁
2.占有且等待 可以要求进程一次性的请求所有需要的资源,并阻塞这个进程知道所有请求都满足。这种方法有低效性
3.不可抢占 首先某些资源的一个进程进一步申请资源时若被拒绝,则该进程必须释放其最初占有的资源,必要时可以再次申请这些资源和其他资源 其次,若一个进程请求一个被另一个进程占有的资源时 ,操作系统可抢占另一个进程,要求其释放资源,这个操作只能在两个进程优先级不同的条件下才能预防死锁。
4.循环等待 循环等待条件可以通过定义资源类型的线性顺序来预防
死锁的避免
死锁的避免与死锁的预防相比,可允许更多的并发。在死锁的避免中,是否允许当前的资源分配请求是通过判断请求是否可能导致死锁来决定的。因此死锁避免需要知道未来进程资源请求的情况。
两种死锁避免的方法:
若一个进程的请求会导致死锁 ,则不启动该进程。
若一个进程增加的资源请求会导致死锁,则不允许这一资源分配
网友评论