本文共 3301 字,大约阅读时间需要 11 分钟。
本项目旨在对银行家算法进行C++语言的模拟实现,重点关注进程资源分配与系统安全状态的判断。通过对银行家算法的深入理解与实践,掌握进程调度与资源管理的核心知识。
代码主要包含三个部分:注释版、最终版以及相关的样例输入输出解释。
// 头文件包含#includeusing 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;} 输入:
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
输入:
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,系统能否将资源分配给它?系统能否把资源预分配给它?不能,因为预分配后系统状态不安全,所以无法给出安全序列。
输入:
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/