操作系统 - 模拟银行家算法实验

本文通过一个具体的例子展示了操作系统中模拟银行家算法的实现,包括资源分配、需求矩阵、最大需求矩阵等,并通过C++代码进行安全性检测,检查不同进程的资源请求是否会导致系统进入不安全状态。实验结果显示了系统如何处理安全和不安全的资源请求。
摘要由CSDN通过智能技术生成
/*   实验以3.7.4为例
  N=5个进程(p0,p1,p2,p3,p4) M=3类资源(A=10,B=5,C=7)
  在T0时刻资源分配如下
                     Max             Allocation           Need            Available
                A    B    C       A     B     C       A    B     C      A    B      C
    p0          7    5    3       0     1     0       7    4     3      3    3      2
    p1          3    2    2       2     0     0       1    2     2
    p2          9    0    2       3     0     2       6    0     0
    p3          2    2    2       2     1     1       0    1     1
    p4          4    3    3       0     0     2       4    3     1
*/

#include <iostream>

using namespace std;


#define N 5//进程数
#define M 3//资源数

int Available[M]={3,3,2};//可用资源向量

//最大需求矩阵
int Max[N][M]={ {7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3} };

//分配矩阵
int Allocation[N][M]={ {0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}  };

//需求矩阵
int Need[N][M] = {  {7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}  };


//请求向量
int Request[M];

bool savety(int allocation[N][M],int need[N][M],int ava[M]);
int check(int a,int request[]);
void execute(int a,int request[M]);
void print();
void result(int res);
int main()
{
    //安全性检测
    int allocation[N][M];
    int need[N][M];
    int ava[M];
    for(int i=0;i<M;i++) ava[i]=Available[i];
    for(int i=0;i<
银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。 设计目的 1)了解多道程序系统中,多个进程并发执行的资源分配。 2)掌握死锁的产生的原因、产生死锁的必要条件和处理死锁的基本方法。 3)掌握预防死锁的方法,系统安全状态的基本概念。 4)掌握银行家算法,了解资源在进程并发执行中的资源分配策略。 5)理解死锁避免在当前计算机系统不常使用的原因 要求: 设计一个n 个并发进程共享m 个系统资源的系统。进程可动态申请资源和释放资源,系统按各进程的申请动态的分配资源。要求采用银行家算法实现。 提示: (1) 初始化这组进程的最大资源请求和依次申请的资源序列。把各进程已占用和需求资源情况记录在进程控制块中。假定进程控制块的内容包括:进程名,状态,当前申请量,资源需求总量,已占资源量,能执行完标志。其中,进程的状态有:就绪、等待和完成。当系统不能满足进程的资源请求时,进程处于等待态。资源需求总量表示进程运行过程中对资源的总的需求量。 已占资源量表示进程目前已经得到但还未归还的资源量。因此,进程在以后还需要的剩余资源量等于资源需要总量减去已占资源量。显然每个进程的资源需求总量不应超过系统拥有的资源总量。 (2) 银行家算法分配资源的原则是:当某个进程提出资源请求时,假定先分配资源给它,然后查找各进程的剩余请求,检查系统的剩余资源量是否由于进程的分配而导致系统死锁。若能,则让进程等待,否则,让进程的假分配变为真分配。 a) 查找各进程的剩余请求,检查系统的剩余资源量是否能满足其中一进程。如果能,则转b)。 b) 将资源分配给所选的进程,这样,该进程已获得资源最大请求,最终能运行完成。标记这个进程为终止进程,并将其占有的全部资源归还给系统。 重复第a)步和第b)步,直到所有进程都标记为终止进程,或直到一个死锁发生。若所有进程都标记为终止进程,则系统的初始状态是安全的,否则为不安全的。若安全,则正式将资源分配给它,否则,假定的分配作废,让其等待。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值