博客
关于我
操作系统 银行家算法c++版
阅读量:622 次
发布时间:2019-03-12

本文共 3301 字,大约阅读时间需要 11 分钟。

银行家算法C++模拟实现

项目概述

本项目旨在对银行家算法进行C++语言的模拟实现,重点关注进程资源分配与系统安全状态的判断。通过对银行家算法的深入理解与实践,掌握进程调度与资源管理的核心知识。

代码实现

代码主要包含三个部分:注释版、最终版以及相关的样例输入输出解释。

注释版代码

// 头文件包含#include 
using namespace std;int avallable[100]; // 系统资源总量数组int sum[100]; // 已分配资源总量数组int cha[100]; // 资源剩余量数组int need[100][100]; // 进程需求数组int allocation[100][100]; // 资源分配数组int maxn[100][100]; // 进程总需求数组int n, m; // 进程个数与资源类数int que[100]; // 模拟队列bool book[100]; // 标记数组bool check() { // 检查函数 // 初始标记为安全 memset(book, true, sizeof(book)); int i, j, l, k = 0, ans; i = 0; ans = i; while (k < n) { // 进程i的资源需求是否满足 if (cha[i] == 0) { // 进程i安全 ans = i; i++; } else { // 非安全,移出队列 book[i] = false; if (ans != i) { // 安全序列更新 que[k] = ans; k++; } l = i; while (l < n && book[l]) { l++; } if (l >= n) break; // 找到下一个安全进程 for (int p = l; p < n; p++) { if (cha[p] == 0) { ans = p; i = p; break; } } } } return true;}

最终版代码

// 代码清空函数void initialization() {    memset(sum, 0, sizeof(sum));    memset(cha, 0, sizeof(cha));    memset(need, 0, sizeof(need));    memset(que, 0, sizeof(que));}// 检查函数bool check() {    memset(book, true, sizeof(book));    int i, j, l, k = 0, ans;    i = 0;    ans = i;    while (k < n) {        if (cha[i] == 0) {            ans = i;            i++;        } else {            book[i] = false;            if (ans != i) {                que[k] = ans;                k++;            }            l = i;            while (l < n && book[l]) {                l++;            }            if (l >= n) break;            for (int p = l; p < n; p++) {                if (cha[p] == 0) {                    ans = p;                    i = p;                    break;                }            }        }    }    return true;}

样例输入输出

样例1

输入:

5 424 28 25 31P0 2 17 10 6-1 9 3 2P1 11 6 12 13-9 1 6 5P2 0 0 13 11-0 0 7 4P3 4 15 8 8-1 6 1 2P4 9 11 9 9-5 8 2 9

输出:

1. 此时系统中可利用的资源向量ABCD为:A:8B:4C:6D:92. 利用银行家算法判断此时刻系统状态是否安全:安全3. 安全序列为:P2 P4 P0 P1 P34. 若进程x提出请求y,系统能否将资源分配给它?系统能否把资源预分配给它?能预分配后安全序列为:P2 P4 P0 P1 P3

样例2

输入:

5 317 5 20P1 5 5 9-2 1 2P2 5 3 6-4 0 2P3 4 0 11-4 0 5P4 4 2 5-2 0 4P5 4 2 4-3 1 4

输出:

1. 此时系统中可利用的资源向量ABC为:A:2B:3C:32. 利用银行家算法判断此时刻系统状态是否安全:安全3. 安全序列为:P4 P5 P1 P2 P34. 若进程x提出请求y,系统能否将资源分配给它?系统能否把资源预分配给它?不能,因为预分配后系统状态不安全,所以无法给出安全序列。

样例3

输入:

5 317 5 20P1 5 5 9-2 1 2P2 5 3 6-4 0 2P3 4 0 11-4 0 5P4 4 2 5-2 0 4P5 4 2 4-3 1 4

输出:

1. 此时系统中可利用的资源向量ABC为:A:2B:3C:32. 利用银行家算法判断此时刻系统状态是否安全:安全3. 安全序列为:P4 P5 P1 P2 P34. 若进程x提出请求y,系统能否将资源分配给它?系统能否把资源预分配给它?能预分配后安全序列为:P4 P5 P1 P2 P3

实现总结

本项目的主要实现步骤包括:

  • 代码设计与初始化

    • 定义了多个数组来模拟资源状态,包括可用资源、已分配资源、剩余资源、需求资源、分配资源和进程总需求等。
    • 设计了初始清空函数initialization(),用于准备下一次安全序列计算。
  • 检查函数实现

    • 核心函数check()实现了银行家算法的安全性判断。
    • 使用book数组标记进程状态,模拟队列que保存安全序列。
    • 逐步检查每个进程是否安全,维护当前安全序列长度k和上一个安全进程编号ans
  • 样例验证

    • 通过提供的三个样例,验证了代码的正确性和银行家算法的应用效果。
    • 样例输出展示了系统状态判断、安全序列生成以及资源分配预测等功能。
  • 改进与优化

    • 优化了代码结构,使其更易读性和可维护性。
    • 确保代码清空函数正确执行,避免数据残留影响后续计算。
  • 感想与收获

    通过本次项目,我对银行家算法有了更深入的理解,掌握了进程调度与资源管理的关键原理。同时,通过实际编码实现,锻炼了动手能力和解决问题的能力。这次实践让我对操作系统中的资源管理机制有了更直观的认识,为后续学习打下了坚实的基础。

    转载地址:http://vuexz.baihongyu.com/

    你可能感兴趣的文章
    nodejs学习笔记一——nodejs安装
    查看>>
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs服务端实现post请求
    查看>>
    nodejs框架,原理,组件,核心,跟npm和vue的关系
    查看>>
    Nodejs概览: 思维导图、核心技术、应用场景
    查看>>
    nodejs模块——fs模块
    查看>>
    Nodejs模块、自定义模块、CommonJs的概念和使用
    查看>>
    nodejs生成多层目录和生成文件的通用方法
    查看>>
    nodejs端口被占用原因及解决方案
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>