每个进程都需要一些资源来完成它的执行。 但是,该资源是按顺序授予的。
死锁是每个计算机进程等待分配给另一个进程的资源的情况。在这种情况下,由于它所需的资源不被执行,因此其他进程也在等待其他资源被释放。
假设有三个进程P1,P2和P3。有三种不同的资源R1,R2和R3。 R1分配给P1,R2分配给P2,R3分配给P3。
过了一段时间后,P1要求P2正在使用R1。 P1停止执行,因为它不能在没有R2的情况下完成。 P2也需要P3正在使用的R3。 P2也停止执行,因为没有R3就不能继续执行。 P3也要求R1使用P1,因此P3也停止执行。
在这种情况下,三个流程之间正在形成一个循环。没有一个进程正在进行,它们都在等待。由于所有进程都被阻止,计算机变得无响应。
饥饿和死锁的区别
编号 | 死锁 | 饥饿 |
---|---|---|
1 | 死锁是一种没有进程被阻塞而没有进程继续的情况 | 饥饿是低优先级进程被阻止并且高优先级进程继续进行的情况。 |
2 | 死锁是一个无限的等待。 | 饥饿是漫长的等待,但不是无限的。 |
3 | 每个死锁始终是一个饥饿。 | 每一个饥饿不一定是死锁。 |
4 | 请求的资源被其他进程阻塞。 | 请求的资源不断被更高优先级的进程使用。 |
5 | 当相互排斥,保持和等待,同时不发生抢占和循环等待时,发生死锁。 | 它由于不受控制的优先权和资源管理而发生。 |
相互排斥
资源只能以互斥方式共享。 这意味着,如果两个进程不能同时使用相同的资源。
保持并等待
进程等待一些资源,同时持有另一个资源。
没有抢先
原定的过程将一直执行到完成。 调度程序不能同时调度其他进程。
循环等待
所有进程都必须以循环方式等待资源,以便最后一个进程正在等待第一个进程持有的资源。