操作系统 死锁是什么
每个进程都需要一些资源来完成其执行。然而,资源按顺序分配。
- 进程请求某个资源。
- 如果资源可用,则操作系统分配资源;否则,让进程等待。
- 进程使用资源,并在完成后释放。
死锁是指每个计算机进程都在等待被分配给另一个进程的资源。在这种情况下,由于所需的资源被其他进程持有,并且这些进程也在等待其他资源的释放,因此没有任何进程被执行。
假设有三个进程P1、P2和P3。有三个不同的资源R1、R2和R3。R1被分配给P1,R2被分配给P2,R3被分配给P3。
经过一段时间,P1要求正在被P2使用的R1。P1停止执行,因为没有R2不能完成。P2也要求正在被P3使用的R3。P2也停止执行,因为没有R3不能继续。P3也要求正在被P1使用的R1,因此P3也停止执行。
在这种情况下,三个进程之间形成了一个循环。没有进程在前进,它们都在等待。计算机变得无响应,因为所有进程都被阻塞。
饥饿与死锁的区别
序号 | 死锁 | 饥饿 |
---|---|---|
1 | 死锁是指没有进程被阻塞且没有进程继续执行的情况。 | 饥饿是指低优先级进程被阻塞而高优先级进程继续执行的情况。 |
2 | 死锁是无限等待。 | 饥饿是长时间等待但不是无限的。 |
3 | 每个死锁总是饥饿。 | 不是每个饥饿都是死锁。 |
4 | 请求的资源被其他进程阻塞。 | 请求的资源不断被高优先级进程使用。 |
5 | 当互斥、持续等待、无抢占和循环等待同时发生时,会发生死锁。 | 它是由于优先级和资源管理无法控制而发生。 |
死锁的必要条件
- 互斥
资源只能以互斥的方式进行共享。这意味着两个进程不能同时使用同一资源。
- 持有并等待
一个进程在同时持有另一个资源的情况下等待一些资源。
- 无抢占
一旦调度的进程将执行直到完成。在此期间,调度程序不能调度其他进程。
- 循环等待
所有进程必须以循环方式等待资源,以便最后一个进程等待由第一个进程持有的资源。