📜  带有cera的excel表格示例中的银行家算法-任何(1)

📅  最后修改于: 2023-12-03 15:39:24.311000             🧑  作者: Mango

带有CERA的Excel表格示例中的银行家算法-任何

银行家算法是用于避免死锁的资源分配算法。具有CERA的Excel表格示例中的实现了银行家算法。

算法原理

银行家算法通过记录系统中每个资源的数量,以及进程已经占用和需要的数量,来决定是否能够分配资源,以避免死锁的发生。

算法包括以下步骤:

  1. 初始化:记录每种资源的总数量,以及每个进程已经占有的数量和需要的数量。
  2. 尝试分配资源:假设要分配给进程 $a$ 的资源数为 $m$,判断是否有足够的资源可供分配(即:每种资源可用数量大于等于该资源在所有进程所需的数量之和)。若可以分配,则进行下一步;若不能分配,则等待。
  3. 执行分配操作:从系统中分配 $m$ 个资源给进程 $a$,修改系统资源分配表。
  4. 检查进程是否能够完成:若分配后所有进程都可以正常执行(即:每种资源可用数量大于等于该资源在所有进程已占有数量之和),则认为系统安全,否则进行回退,释放已经占有的资源,直至系统安全。
示例代码

以下代码是带有CERA的Excel表格示例中,实现银行家算法的关键代码片段:

'服务器资源数量
Dim available(3) As Integer
available(1) = 10
available(2) = 5
available(3) = 7

'每个进程已经占有和需要的资源数量
Dim allocation(3,3) As Integer
allocation(1,1) = 0
allocation(1,2) = 1
allocation(1,3) = 0
allocation(2,1) = 2
allocation(2,2) = 0
allocation(2,3) = 0
allocation(3,1) = 3
allocation(3,2) = 0
allocation(3,3) = 2
Dim need(3,3) As Integer
need(1,1) = 7
need(1,2) = 4
need(1,3) = 3
need(2,1) = 3
need(2,2) = 2
need(2,3) = 2
need(3,1) = 9
need(3,2) = 0
need(3,3) = 2

'检查进程是否能够完成分配
Function isSafe() As Boolean
    Dim work(3) As Integer
    Dim finish(3) As Boolean
    Dim i As Integer
    Dim j As Integer
    For j = 1 To 3
        work(j) = available(j)
    Next j
    For i = 1 To 3
        finish(i) = False
    Next i
    i = 1
    While i <= 3
        If finish(i) = False And need(i,1) <= work(1) And need(i,2) <= work(2) And need(i,3) <= work(3) Then
            work(1) = work(1) + allocation(i,1)
            work(2) = work(2) + allocation(i,2)
            work(3) = work(3) + allocation(i,3)
            finish(i) = True
            i = 0
        End If
        i = i + 1
    Wend

    For i = 1 To 3
        If finish(i) = False Then
            isSafe = False
            Exit Function
        End If
    Next i
    isSafe = True
End Function
使用方法

以上示例代码是通过VBScript实现的,可以在Excel中创建宏来调用该函数。

例如,在Excel表格中,创建名为 "isSafe" 的宏,将以下代码复制到宏函数中:

Function isSafe() As Boolean
    '......
End Function

然后,在Excel表格的某个单元格中输入以下公式:

=isSafe()

该公式的返回值为 True 或 False,分别表示系统是否安全或不安全。