死锁

#死锁的概念

  • 各个进程互相等待对方手里的资源,导致各个进程都阻塞,无法正常推进
  • #死锁,饥饿,死循环的区别

  • 共同点:
  • 都是进程无法正常顺利推进的现象(故意设置的死循环除外)
  • 区别
  • 死锁:
  • “循环等待对方手里的资源”导致的
  • 故至少有两个或两个以上的进程同时发生死锁
  • 发生死锁的进程一定处于阻塞态
  • 饥饿:
  • 可能只有一个进程发生饥饿
  • 饥饿进程可能阻塞态,如长期得不到需要的I/O设备
  • 可能处于就绪态,如长期得不到调度(短作业优先中有出现)
  • 死循环:
  • 可能只有一个进程发生死循环
  • 死循环的进程可以在处理机上运行
  • ...不多赘述
  • *死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题*
  • #死锁产生的必要条件

  • 产生死锁必须同时满足下四个条件
  • 互斥条件
  • 只有对必须互斥使用的资源争抢才会导致死锁
  • 不剥夺条件
  • 进程所获得的资源在未使用完之前,不能有其他进程强行夺走,只能主动释放
  • 请求和保持条件
  • 进程已经至少保持了一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求的进程被阻塞,但又对自己已有的资源保持不放
  • 循环等待条件
  • 存在一种进程资源的循环等待链,链中的每个进程已获得的资源同时被下一个进程所请求
  • 发生死锁时一定有循环等待,但是发生循环等待时未必繁盛死锁
  • 如果同类资源大于1,即使有循环等待也未必发生死锁。
  • #死锁处理策略

  • 1.预防死锁
  • 破坏死锁参审的四个必要条件中的一个或几个
  • 2.避免死锁
  • 用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
  • 3.死锁的检测和解除
  • 允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采用某种措施解除死锁