C++实现的银行家算法操作系统作业

需积分: 9 1 下载量 36 浏览量 更新于2024-10-26 收藏 6KB TXT 举报
"这篇资源是关于使用C++编程语言实现操作系统中的银行家算法的一个实例。银行家算法是一种避免系统死锁的策略,主要用于资源分配。这个程序简洁明了,易于理解,适合学习操作系统和C++编程的学生参考。" 在操作系统中,银行家算法是一个重要的概念,它用于确保系统的安全性,防止因不恰当的资源分配导致的死锁。死锁是指两个或多个并发进程相互等待对方释放资源,从而导致它们都无法继续执行的状态。银行家算法通过预分配和检查安全状态来避免这种情况。 在这个C++实现中,定义了一些关键变量和结构体来模拟银行家算法的工作流程: 1. `m` 和 `n` 分别表示资源类型数量和进程数量。例如,在给出的代码中,`m = 3` 表示有三种资源类型,`n = 5` 表示有五个进程。 2. `Available[m]` 是一个数组,存储当前系统中每种资源类型的可用数量。初始值如 `{3, 3, 2}`。 3. `Work[m]` 用于记录系统当前可用的总资源数。 4. `Finish[n]` 记录哪些进程已经完成。 5. `Recycle()` 函数可能是用于回收已使用资源的函数,未给出具体实现。 6. `backDos()` 函数用于检查系统是否可以回到安全状态,如果可以,它将返回一个进程编号,否则返回-1。 7. `PCB`(Process Control Block)结构体代表一个进程,包含以下字段: - `flag` 表示进程状态,如是否已结束。 - `Max[m]` 存储每个进程的最大需求量。 - `Allocation[m]` 存储每个进程当前已分配的资源量。 - `Need[m]` 计算出每个进程还需要多少资源才能完成。 - `Request[m]` 用于进程请求新的资源。 在`main()`函数中,初始化了各个进程的需求、已分配资源和最大需求。`tryAdminister()`函数可能负责处理进程的资源请求,`safeCheck()`函数用于检查系统是否处于安全状态,而`Print()`函数可能用于输出当前系统状态。 银行家算法的基本步骤包括: 1. 初始化:设置每个进程的资源需求、已分配资源和最大需求。 2. 当进程请求资源时,调用`tryAdminister()`函数,如果资源可用且满足安全状态,分配资源并更新`Allocation`和`Need`。 3. 使用`safeCheck()`检查系统是否处于安全状态,即是否存在一种顺序,使得所有进程都能按此顺序完成,而不会导致死锁。 4. 如果存在安全状态,继续执行;否则,拒绝请求以防止死锁。 通过运行这个C++程序,学生可以理解和实践如何在实际代码中应用银行家算法,从而更好地掌握操作系统中的资源管理和死锁预防策略。
2018-01-20 上传
银行家算法是避免死锁的一种重要方法,本程序用java编程语言对其进行了实现。 当用户申请一组资源时,系统必须做出判断,如果把这些资源分出去,系统是否还处于安全状态。 若是,就可以分出这些资源;否则,该申请暂不予满足。 1.数据结构 假设有M个进程N类资源,则有如下数据结构: MAX[M*N] M个进程对N类资源的最大需求量 AVAILABLE[N] 系统可用资源数 ALLOCATION[M*N] M个进程已经得到N类资源的资源量 NEED[M*N] M个进程还需要N类资源的资源量 2.银行家算法 设进程I提出请求Request[N],则银行家算法按如下规则进行判断。 (1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。 (2)如果Request[N]<=AVAILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 3.安全性检查 (1)设置两个工作向量WORK=AVAILABLE;FINISH[M]=FALSE (2)从进程集合中找到一个满足下述条件的进程, FINISH[i]=FALSE NEED<=WORK 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 WORK=WORK+ALLOCATION FINISH=TRUE GO TO 2 (4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。