死锁避免与检测
摘要:本次课程设计的内容是实现死锁的避免与检验。在操作系统中,由于多个进程对资源的争夺,对系统的安全造成威胁可能造成死锁。而死锁产生的必要条件分别为互斥条件、请求和保持条件、不可抢占条件、循环等待条件。为了解决死锁这一问题,目前处理死锁的方法为:预防死锁、避免死锁、检测死锁、解除死锁。
本次主要设计的是死锁避免和检验的算法实现。死锁避免的主要的内容是银行家算法,它包括对申请进程的预分配以及安全性检测。死锁检验的内容主要是对资源有序图的简化,当且仅当资源分配图是不可简化时,则说明系统存在死锁。
在设计银行家算法时要定义Available(可利用的资源量)、Allocation(已分配的资源量)、Need(所需求的资源量)、Max(最大需求量),还会使用到数组,有利于各个变量矩阵的运算。
死锁避免算法的结果可以动态低显示系统为每个进程分配资源时各个资源矩阵的变化,结果显示为是否处于安全状态,若处于安全状态,则出现安全序列,否则显示系统处于不安全状态。死锁检测算法动态地显示有向边的资源分配图的简化过程,结果显示当前环境不会发生死锁。
关键词:银行家算法; 资源分配图;避免死锁; 操作系统;检测死锁
1 设计任务
1.1设计目的
本次课程设计主要目的是掌握银行家算法,以及加深对避免死锁的方法和死锁检测的理解,推近对死锁更深层次的掌握。
1.2 设计内容
1.2.1 设计一个程序演示死锁避免算法(银行家算法),该演示程序能显示各进程申请和释放资源以及系统动态分配资源的过程,便于用户观察和分析;如果系统不能分配,也应给出系统进入不安全状态”的提示,已随机给出进程和各类共享资源数量、已分配量、申请量。
1.2.2 设计一个程序演示教材P116-117给出的死锁检验算法,该演示程序能显示资源分配图的简化过程,并给出最终检测结果(系统死锁还是不死锁),已随机给出进程和各类共享资源数量、已分配量、申请量。
2 总体设计
2.1 总体结构
2.1.1 死锁避免算法
2.1.2 死锁检测算法
2.2 开发环境
Dev-c++ 5.11开发工具、Windows 10系统
3 算法设计
3.1 死锁避免算法设计
3.1.1初始化算法流程图
3.1.2安全性检测算法流程图
3.1.3银行家算法流程图
银行家算法要先给定进程数和资源数,在随机输入符合要求的Allocation,Max,Need矩阵,给出Available向量,完成初始化。当有进程申请资源时要与Need和可用的Available相对,如果满足则进行预分配,再利用安全性算法进行检查。如果系统处于安全状态,则为进程分配资源,否则拒绝为该进程分配资源。
3.2 动态资源分配
定义Allocation,Max,Need矩阵,给出Available,完成初始化,对每个进程进行Need与Available进行比较,循环显示资源动态分配图简化的过程,即进程删边的过程,资源分配图的简化是把进程有向边删完,最后证明该环境是安全的,意味着该资源分配图无环路。
4 系统实现
4.1死锁避免算法
4.1.1 初始化模块实现
4.1.2安全性检查模块实现
4.1.3银行家算法模块的实现
4.2 动态资源分配
4.2.1初始化算法
4.2.2检验安全算法
4.2.3动态显示资源简化算法
5 系统测试
5.1银行家算法完整代码段和死锁检测完整代码
#include <stdio.h>
#define M 100 // //全局变量定义
#define N 50 //定义M个进程,N类资源
void Init();
bool checkSecurity (int);
void show();
int Bank(int);
int Available[M]; //可利用资源数组
int Max[N][M]; //最大需求矩阵
int Allocation[N][M]; //分配矩阵
int Need[N][M]; //需求矩阵
int Request[N][M]; //M个进程还需要N类资源的资源量
bool Finish[N];
int p[N];
int m,n; //M个进程,N类资源
int main (void)
{
int i;
int Flag0 = 0;
int Flag1 = 1;
Init ();
while(1)
{
printf(" 1 --> 银行家算法。\n");
printf(" 2 --> 死锁检测。\n") ;
printf(" 3 --> 退出本次实验。\n");
printf(" 请选择你要进行的操作:");
scanf("%d",&i);
switch(i)
{
case 1:
Bank(Flag0);
//checkSecurity (Flag0);
break;
case 2:
checkSecurity (Flag1);
break;
case 3:
return