一、银行家算法
把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源。
具体要求如下:
①当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
②当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足,则按当前的申请量分配资源,否则也要推迟分配。
③系统进行安全性算法,检查此次分配后,系统是否还处于安全状态,若安全,把资源分配给进程p[i];否则,恢复原来的资源分配状态,让进程p[i]等待。
二、代码
//银行家算法
#include<iostream>
using namespace std;
int m=3,n=5; // m类可利用资源,n个进程
int resource[3]={
10,5,7}; //总资源
int available[3]={
3,3,2};//现可分配资源
int allocation[5][3]; //输入初始值 每个进程已占有的每类资源个数
int need[5][3];//输入初始值 每个进程每类资源需要的个数
int main(){
int x;
int request[3]={
0};
cout<<"已知有五个进程,三类可利用资源"<<endl;
cout<<"可分配总资源量为:3,3,2"<<endl;
cout<<"请输入已分配矩阵:"<<endl;
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
cin>>allocation[i][j];
}
}
cout<<"请输