当前位置:首页 > 计算机操作系统课程设计
操作系统课程设计指导书2015-1-4
18
操作系统课程设计指导书2015-1-4
任务五、死锁的避免
一、目的
在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。
我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。
二、内容
利用银行家算法来避免死锁的发生
三、程序框图
开始
主函数 main()
初始化 Init()
显示信息 show() 已分配资源 Allocation
计算剩余资源
量
程序所需济源
Need
判断是否安全
Safe
结束
19
操作系统课程设计指导书2015-1-4
四、源代码
#include
int Progress[100];//进程执行顺序标记数组 string Number[100];//进程号 class BankerArithmetic { public:
BankerArithmetic(int a,int b); //构造函数 int Safe(int grac);//判断是否安全 void Show();//显示相关信息 void Bank();//计算剩余资源量 ~BankerArithmetic();//析构函数 private:
BankerArithmetic(){};
void Init(int a,int b);//初始化 int ID;//记录成功申请资源的进程号 int n; //包含的进程数 int m; //资源种类数
int *Available;//可提供的资源总数 int ** Allocation;//以分配的资源 int ** Need;//仍需要的资源 int *Left;//剩余的资源 };
BankerArithmetic::BankerArithmetic(int a,int b):n(a),m(b) {
Init(n,m); }
BankerArithmetic::~BankerArithmetic() { int i;
20
操作系统课程设计指导书2015-1-4
delete[]Available; delete[]Left; for(i=0;i void BankerArithmetic::Init(int a,int b) { int i,j; for(i=0;i<100;i++) Sign[i]=-1; Available=new int[b];//Availablede的申请 Left=new int[b];//Left的申请 Allocation=new int*[a];//Allocation的申请 for(i=0;i Allocation[i]=new int[b]; Need=new int*[a];//Need的申请 for(i=0;i cout<<\请输入可用资源Available:\for(i=0;i>Available[i]; cout<<\请输入进程号:\for(i=0;i>Number[i]; cout<<\ 请 输 入 分 配 资 源 矩 Allocation:\ for(j=0;j>Allocation[i][j]; cout<<\ 请 输 入 仍 需 要 资 源 矩 Need:\ 21 阵 阵
共分享92篇相关文档