基于javascript的银行家算法
1. 实验目的
加深了解死锁概念,体会产生死锁的原因,掌握避免死锁的具体实施方法。
2. 实验内容
编写一个系统动态分配资源的模拟程序,采用银行家算法有效地避免死锁的发生。要求程序能够在进程提出资源申请后判断系统是否处于安全状态,如果安全则打印资源分配表和安全序列;如果不安全则输出不能分配的提示。
提示:
- 银行家算法可参阅教材和课件。
-
利用文件读写操作配置系统状态。
-
利用动态内存分配解决资源和进程数量动态变化的问题。
3. 系统开发和运行环境
操作系统 | Windows 7 |
---|---|
编程语言及工具 | JavaScript(jQuery),IE9以上/FireFox/ Chrome |
配置文件 | 文件目录下的testfile.txt |
备注 |
4. 程序设计
4.1 数据结构
var Max = []
var Allocation = []
var Need = []
var Resource
var Available
var Request
var safe = []
var Work_Allocation = []
var P = ['P0', 'P1', 'P2', 'P3', 'P4']
function run() {
Work_Allocation = [] //可分配资源+进程释放的已分配资源
Max = getMaxArr() //最大需求资源
Allocation = getAllocationArr() //已分配资源
Need = getNeedArr(Max, Allocation) //需求资源
Resource = getResource() //总资源数
Available = getAvailable() //可利用资源
Request = getRequest() //请求资源
}
-
可利用资源向量Available。这是一个数组对象,其中的每一个属性代表一类可利用资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态的改变。如果Available.j=K,则表示系统中现有Rj类资源K个。
-
最大需求矩阵Max。这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i].j=K;则表示进程i需要Rj类资源的最大数目为K。
-
分配矩阵Allocation。这也是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i].j=K,则表示进程i当前已分得Rj类资源的数目为K。
-
需求矩阵Need。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成任务。
上述三个矩阵间存在下述关系:Need[i].j=Max[i].j-Allocation[i].j
4.2 主要算法设计
5. 程序运行演示
5.1 初始化页面
5.2 读取文件数据
点击
输出结果:
5.3 选择进程并输入请求资源数量
输出结果:
5.4 重置
点击重置按钮
5.5 清空
点击清空按钮
6. 实验总结
-
用前端的html+bootstrap+javascript+jquery完成此次实验。
-
支持文件的读取操作,以文本方式读取数据。
-
用bootstrap渲染页面,简洁美观。
-
从文件加载数据时采用了动态内存分配方式。
-
用jQuery操作DOM对象,代码量减少。