admin 管理员组

文章数量: 887017

一、概述

银行家算法(Banker’s Algorithm)是一个避免进程死锁的著名算法,由 Dijkstra 于 1965 年提出。本文为笔者的读书笔记,结构如下:

  • 死锁
  • 银行家算法
  • 例子展示
  • 补充:鸵鸟算法和实际系统中对死锁的处理方式

二、死锁

既然银行家算法就是为了解决进程死锁而出现的,那么首先我们应该先来了解下什么是死锁,以及死锁产生的4个条件。

2.1 什么是死锁

如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那仫该组进程就是死锁的。下图为一个进程死锁的例子:

图中有 4 个进程 P1、P2、P3、P4,它们分别持有资源 A、B、C、D,而 P1 的运行需要 B 资源,P2 的运行需要 C 资源,P3 的运行需要 D 资源,而 P4 的运行则是需要 A 资源,但是这些资源都被 P1~P4 这 4 个进程所分别持有,而它们在运行结束之前是不会主动释放自己所持有的资源的。在这种情况下就会造成一种僵持的局面,即为死锁。

2.2 死锁的4个必要条件

从上面的例子中,总结得出死锁的4个必要条件如下:

  • 互斥使用:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,那么请求进程只能等待,直到占有资源的进程用毕释放。
  • 请求和保持:指进程已经至少保持一个资源,但又提出了新的资源请求,而该资源又被其它进程占有,此时请求进程阻塞,但又对自己已获得的请求资源不放。
  • 不可抢占:指进程已经获得的资源,在未使用完之前,不可被剥夺,只能在使用完时由自己释放。
  • 循环等待:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{ P0, P1, P2, … , Pn }中的 P0 正在等待 P1 占用的资源;P1 正在等待 P2 占用的资源, … , Pn 正在等待 P0 占用的资源。

之所以特地强调是必要条件,是因为这 4 个条件之一不出现,系统就不会有死锁的情况发生。而避免死锁的策略,最为著名的就是银行家算法了;除此之外还有鸵鸟算法,这个算

本文标签: 死锁 银行家 算法 进程