银行家算法详解

银行家算法是操作系统中用于资源分配和死锁避免的重要算法。它的核心思想是确保系统中至少存在一个进程序列,使得每个进程都能获得所需的资源,完成执行任务,

  • 它有助于防止程序陷入卡顿无法完成任务的情况。
  • 它负责追踪每个程序所需的资源量以及系统当前的可用资源。

银行家算法的组成要素

为了实现银行家算法,我们需要使用以下 数据结构

!Banker-algo

假设系统中有 ‘n‘ 个进程,以及 ‘m‘ 种资源类型。

1. 可用资源向量

  • 这是一个长度为 ‘m‘ 的一维数组,表示每种类型的资源当前有多少可用。
  • Available[ j ] = k 意味着系统当前有 ‘k‘ Rj 类型的资源实例可用。

2. 最大需求矩阵

  • 这是一个大小为 ‘nm‘ * 的二维数组,定义了系统中每个进程对资源的最大需求量。
  • Max[ i, j ] = k 意味着进程 Pi 最多可能请求 ‘k‘ Rj 类型的资源实例。

3. 分配矩阵

  • 这是一个大小为 ‘nm‘ * 的二维数组,定义了当前每个进程已分配到的各类资源数量。
  • Allocation[ i, j ] = k 意味着进程 Pi 当前已分得 ‘k‘ Rj 类型的资源实例。

4. 需求矩阵

  • 这是一个大小为 ‘nm‘ * 的二维数组,表示每个进程尚需的额外资源数量。
  • Need [ i, j ] = k 意味着进程 Pi 当前还需要 ‘k‘ Rj 类型的资源实例。
  • Need [ i, j ] = Max [ i, j ] – Allocation [ i, j ]

Allocation 指定了当前已分配给进程 Pi 的资源,而 Need 指定了进程 Pi 为了完成任务可能还需要请求的额外资源。

银行家算法的关键概念

  • 安全状态: 存在至少一个进程序列,使得每个进程都能获得所需的资源,完成执行,释放其占用的资源,从而允许其他进程最终完成,而不会进入死锁。
  • 不安全状态: 尽管系统仍可以向某些进程分配资源,但无法保证所有进程都能在不造成潜在死锁的情况下完成。

不安全状态示例

让我们考虑一个包含三个进程(INLINECODEa8011574, INLINECODE7448bdd4, P3)和某类资源共 6 个实例的系统。假设情况如下:

  • 该资源的当前可用实例数为:1
  • 进程当前的资源分配情况为:
  • P1: 2
  • P2: 3
  • P3: 1
  • 最大需求(每个进程最终可能请求的最大资源数)为:
  • P1: 4
  • P2: 5
  • P3: 3

在这种情况下:

> 需求 = 最大需求 – 已分配

进程

最大需求

已分配

需求

P1

4

2

2

P2

5

3

2

P3

3

1

2- P1 可能需要再多 2 个资源才能完成。

  • P2 可能需要再多 2 个资源才能完成。
  • P3 可能需要再多 2 个资源才能完成。

然而,系统中只有 1 个可用资源。尽管目前没有任何进程发生死锁,但系统处于不安全状态,因为不存在一种资源分配序列能保证所有进程都能完成。

银行家算法主要由安全性算法和资源请求算法组成。

银行家算法的类型

银行家算法由以下两部分组成:

  • 安全性算法
  • 资源请求算法

!Type-of-banker-algo

1. 安全性算法

安全性算法用于检查系统是否处于 安全状态——即所有进程都能在不造成死锁的情况下完成。

步骤:

  • 初始化:
  • Work = Available(当前可用资源)
  • Finish[i] = false(对于所有进程,表示尚未完成)
  • 寻找一个满足以下条件的进程 Pi:
  • Finish[i] = false
  • Need[i] ≤ Work(所需资源可以被满足)
  • 如果找到这样的进程:
  • 假设分配资源给它:Work = Work + Allocation[i]
  • 标记该进程已完成:Finish[i] = true
  • 对剩余进程重复步骤 2
  • 如果所有进程都被标记为完成(所有 Finish[i] = true),则系统是 安全的

> 本质上,该算法通过模拟进程的完成过程,来验证所有进程是否能安全结束。

2. 资源请求算法

该算法用于决定是否可以安全地批准一个进程的资源请求。

步骤:
1. 检查请求是否超过进程的最大需求: 如果 Request[i] ≤ Need[i],则继续;否则,报
2. 检查资源是否可用: 如果 Request[i] ≤ Available,则继续;否…

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/39818.html
点赞
0.00 平均评分 (0% 分数) - 0