博客
关于我
操作系统 银行家算法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/

    你可能感兴趣的文章
    PHP $FILES error码对应错误信息
    查看>>
    PHP $_FILES函数详解
    查看>>
    PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
    查看>>
    php &amp; 和 &amp;amp; (主要是url 问题)
    查看>>
    php -- 魔术方法 之 判断属性是否存在或为空:__isset()
    查看>>
    php -- 魔术方法 之 获取属性:__get()
    查看>>
    php -树-二叉树的实现
    查看>>
    PHP -算法-二路归并
    查看>>
    php 2条不一样 的json数据 怎么放在一个json里面_如果你是PHP开发者,请务必了解一下Composer...
    查看>>
    php 360 不记住密码,JavaScript_多种方法实现360浏览器下禁止自动填写用户名密码,目前开发一个项目遇到一个很 - phpStudy...
    查看>>
    regExp的match、exec、test区别
    查看>>
    php 404 自定义,APACHE 自定义404错误页面设置方法
    查看>>
    PHP 5.3.0以上推荐使用mysqlnd驱动
    查看>>
    php 7.2 安装 mcrypt 扩展: mcrypt 扩展从 php 7.1.0 开始废弃;自 php 7.2.0 起,会移到 pecl...
    查看>>
    php aes sha1解密,PHP AES加密/解密
    查看>>
    php array 分片,PHP常用数组函数小结
    查看>>
    php CI框架单个file表单多文件上传例子
    查看>>
    php composer
    查看>>
    reflow和repaint引发的性能问题
    查看>>
    Reflection反射机制原理、使用场景 及 缺陷
    查看>>