死锁处理的策略---避免死锁

 时间:2026-02-16 16:43:15

1、银行家算法是荷兰学者 Dijkstra 为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。后来该算法被用在操作系统中,用于避免死锁。

2、核心思想:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全的状态。如果会进入不安全的状态,就暂时不答应这次请求,让该进程先阻塞等待。

1、假设系统中有n各进程,m种资源。

每个进程在运行前先声明对各种资源的最大需求数,则可用一个 n * m 的矩阵(可用二维数组实现)表示所有进程对各种资源的最大需求数。不妨称为最大需求矩阵Max,Max[ i , j ] = k 表示进程Pi最多需要k个资源 Rj。同理,系统可以用一个 n * m 的分配矩阵 Allocation 表示对所有进程的资源分配情况。 Max - Allocation = Need 矩阵,表示各进程最多还需要多少各类资源。另外还要用一个长度为 m 的一维数组Available 表示当前系统中还有多少可用资源。

某进程Pi向系统申请资源,可用一个长度为 m 的一维数组 Requuest,表示本次申请的各种资源量。 

2、可用银行家算法预判本次分配是否会导致系统进入不安全的状态:

1、如果Request[i][j] <= Need[i,j]便转向第2步,否则认为出错(因为它所需的资源数已经超过它所宣布的最大值)。

2、如果Request[i][j] <= Acvailable[j]便转向第3步,否则表示尚无足够的资源,Pi必须等待。

3、系统试着把资源分配给进程Pi,并修改相应的数据(并非真的分配,修改数值只是为了做预判):

Available = Available - Request;

Allocation[i,j] = Allocation[i,j] + Request[i][j];

Need[i,j] = Need[i,j] - Request[i][j];

4、操作系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式分配,否则,恢复相应数据,让进程阻塞等待。

1、检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。

2、不断重复上述过程,看最终是否能将所有进程都加入安全序列。

  • eclipse如何重命名文件?
  • 思科模拟器:[12]无线路由器设置
  • eclipse左侧项目栏不见了解决方法
  • 如何配置tomcat环境变量
  • 出现错误cannot be resolved or is not a field
  • 热门搜索
    帽子怎么折 借条怎么写范本 水费怎么交 合同付款方式怎么写 迪莫怎么超进化 怎么更改电脑开机密码 蘑菇怎么炒 网络电视怎么连接网络 头发软怎么变硬 从深圳怎么去香港