用进程资源图检测死锁的原理

用进程资源图检测死锁的步骤为:

  1. 确认系统剩余资源数,确认非阻塞进程;
  2. 去掉非阻塞进程的所有边,现成一个孤立的点,再将分配给该进程的资源回收;
  3. 查看剩余非阻塞进程,重复执行步骤2;
  4. 最终,所有的资源和进程都变成孤立的点,这样的图叫做“可完全简化”。

如果一个图可完全简化,则不会产生死锁。如果一个图不可完全简化,则会产生死锁。

举例:

  1. 从资源R1开始检查,R1有三个资源、三个向外箭头,说明三个资源都分配完了;
  2. R2有两个资源,有一个箭头指向外,说明还剩一个资源可以分配;
  3. 进程P2,向R1申请1个资源,R1无剩余资源,进入阻塞状态;
  4. 进程P1,向R2申请1个资源,R2剩余一个,可分配给P1;因此P1得到了需要的资源,无阻塞,等待它释放资源。即,可把P1的边全部去掉:

5.P1释放资源后,R1的两个资源得到释放,满足P2的资源请求,因此P2此时可以结束阻塞继续执行。P2的所有边可以去掉:

所有资源和进程都成为孤立的点,是“可完全简化”图。因此这个场景不会形成死锁。 以上就是利用进程资源图进行死锁检测的方式。