研究意义与应用随着现代教育事业的不断发展, 高校开设了越来越多的公共选修课, 以此来扩大学生的知识面。课程安排一直是高校教务管理系统中一项繁重的任务。公共选修课具有课程人数不定 、设计班级多等特点 ,所以在排课系统中如何充分地安排教室给选修课程就尤为重要。 银行家算法是操作系统中用来解决死锁问题的一个典型算法, 主要解决如何合理安排资源的问题。应用到我们选修课的教室安排中主要就是系统判断可使用教室资源是否能满足课程和班级人数的要求,最终找到一个能满足所有申请的方案。44646
此外,银行家算法广泛应用于柔性制造系统,协同制造,云平台,等资源分配领域。采用动态分配资源的方法,极大的提高了资源利用率。
2.算法的研究与分析
2.1 银行家算法的思想
银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。
设进程p提出请求REQUEST [i],则银行家算法按如下规则进行判断。
(1)如果REQUEST [i]<= NEED[i],则转(2);否则出错。
(2)如果REQUEST [i]<= AVAILABLE[i],则转(3);否则出错。
(3)系统试探分配资源,修改相关数据:
AVAILABLE[i]-=REQUEST[i];
ALLOCATION[i]+=REQUEST[i];
NEED[i]-=REQUEST[i];
(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
2.2算法的流程
2.2.1传统的银行家算法:
(1)若Request,>=Need[i],则为非法清求,进行相应处理,因为它需要的资源数超过它开始宣布的最大值:否则进行下一步。
(2)若Request,>=Available,则表示系统现在可利用资源不能满足进程需求,阻塞进程;否则进行下一步。
(3)系统试探地把要求的资源分配给进程Pi,即不进行实际的资源分配而只是修改有关数据论文网、结构:
Available=Available-Request
Allocation[i]=Allocation[i]+Request
Need[i]=Need[i]-Request
(4)执行安全性检测算法,检测此次资源分配后,系统是否处于安全状态。若安全,则正式将资源分配给进程Pi,否则,将试探分配作废,恢复原来的资源分配状态,让进程Pi等待。
安全性检测。
2.2.2改进后的银行家算法:
Step1: if request[i][j]>need[i][j] then error,return
Step2: 假设process[i]的请求已获得,则系统试探性地把要求的资源预分配给process[i],即修改状态为:
Available[j]=Available[j]-request[i][j]
Allocation[i][j]=Allocation[i][j]+request[i][j]
Need[i][j]=Need[i][j]-request[i][j]
Step4: 查找j属于(0,1,2....,m-1),对所有的j,若need[i][j]<=Available[j],则可以直接实施分配,修改状态,转step7,
Step5: 执行“安全性检查”
Step6: 若系统处于安全状态,则系统真正把请求的资源分配给 process[i],return若系统处于不安全状态,则 process[i]等待,恢复系统状态
Available[j]=Available[j]+request[i][j]
Allocation[i][j]=Allocation[i][j]-request[i][j]
Need[i][j]=Need[i][j]+request[i][j]
传统的银行家算法是在实施资源分配前,先执行安全性检查:是否存在一种顺序,使得所有的进程都能执行结束,若安全则分配,否则拒绝分配,改进后的银行家算法主要思想是:假设系统当前的各类资源可用数量大于或等process[i]当前还需要各类资源的最大数量,则不必执行安全性检查就知 process[i]肯定可以执行完’该进程执行完毕后会释放它所占用的所有资源,系统可用空闲资源增加’在新的条件下再用相同的方法去寻找另一个进程,直到找不到为止,如果这样可以把所有的进程都执行完,则说明系统当前的状态是安全的,否则是不安全的’传统的银行家算法大部分系统开销用于安全性检查,而经我们改进的算法,减少了安全性检查次数,从而有效提高算法效率