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

    你可能感兴趣的文章
    Objective-C实现BloomFilter布隆过滤器的算法(附完整源码)
    查看>>
    Objective-C实现BMP图像旋转180度(附完整源码)
    查看>>
    Objective-C实现bogo sort排序算法(附完整源码)
    查看>>
    Objective-C实现boruvka博鲁夫卡算法(附完整源码)
    查看>>
    Objective-C实现Boyer-Moore字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现BP误差逆传播算法(附完整源码)
    查看>>
    Objective-C实现breadth First Search广度优先搜索算法(附完整源码))
    查看>>
    Objective-C实现BreadthFirstSearch广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现BreadthFirstShortestPath广度优先最短路径算法(附完整源码)
    查看>>
    Objective-C实现bubble sort冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现bucket sort桶排序算法(附完整源码)
    查看>>
    Objective-C实现Burke 抖动算法(附完整源码)
    查看>>
    Objective-C实现Burrows-Wheeler 算法(附完整源码)
    查看>>
    Objective-C实现CaesarsCiphe凯撒密码算法(附完整源码)
    查看>>
    Objective-C实现calloc函数功能(附完整源码)
    查看>>
    Objective-C实现canny边缘检测算法(附完整源码)
    查看>>
    Objective-C实现cartesianProduct笛卡尔乘积算法(附完整源码)
    查看>>
    Objective-C实现check strong password检查密码强度算法(附完整源码)
    查看>>
    Objective-C实现chudnovsky algorithm楚德诺夫斯基算法(附完整源码)
    查看>>
    Objective-C实现CIC滤波器(附完整源码)
    查看>>