1)可利用资源向量Available
是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。
2)最大需求矩阵Max
这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
3)分配矩阵Allocation
这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。
4)需求矩阵Need。
这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。
Need[i,j]=Max[i,j]-Allocation[i,j]
假设你是一家银行的经理,银行里有各种资源(比如打印机、扫描仪等)。你有多个客户(进程),每个客户都想借用这些资源来完成他们的任务。为了避免银行破产(系统死锁),你需要跟踪以下信息:
可利用资源向量 (Available):表示当前系统中每种资源的可用数量。
例如:如果系统有 5 台打印机,目前空闲的有 3 台,那么 Available[打印机] = 3。
最大需求矩阵 (Max):表示每个进程对每种资源的最大需求量。
例如:进程 A 最多需要 5 台打印机,那么 Max[A][打印机] = 5。
分配矩阵 (Allocation):表示每个进程当前已经分配到的每种资源的数量。
例如:进程 A 已经借走了 2 台打印机,那么 Allocation[A][打印机] = 2。
需求矩阵 (Need):表示每个进程还需要的每种资源的数量才能完成任务。
例如:进程 A 最大需要 5 台打印机,已经分配了 2 台,那么它还需要 3 台,所以 Need[A][打印机] = 3。
关键点:Need 不是独立存在的,它是通过 Max 和 Allocation 计算出来的。计算规则很简单:
Need = Max - Allocation
也就是说,一个进程的“还需要量”等于它的“最大需求量”减去“已经分配量”。