
银行家算法用C语言实现。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
操作系统课程实验(银行家算法)
以下代码实现了银行家算法,用于判断一组进程是否能在资源分配完成后安全地执行。
**代码说明:**
该程序模拟了银行家算法的运行过程,主要功能包括:
1. **数据结构定义:** 定义了`allocation`、`max`、`available`、`need`、`path`和 `finish`等结构体,用于存储系统资源信息,进程已分配资源、最大需求量、可用资源、剩余需求量、路径和完成状态等。
2. **输入处理:** 程序首先获取系统的资源种类数量(`colum`)和进程数量(`row`)。然后,程序提示用户输入已分配资源的矩阵,以及最大需求资源的矩阵。最后,程序获取现时系统剩余资源的矩阵。
3. **安全性检查:** 核心部分是使用银行家算法进行安全性检查。程序通过遍历所有进程和资源种类,判断当前系统是否处于安全状态。如果某个进程的剩余需求量小于当前可用资源量,则认为系统不安全。
4. **输出结果:** 如果系统处于安全状态,程序会输出一个安全的执行序列(即进程的执行顺序)。如果系统不安全,则输出“系统不安全!”并退出程序。
**代码详细注释:**
* **头文件包含:** 包含了必要的头文件 `malloc.h`, `stdio.h`, 和 `stdlib.h`.
* **宏定义:** 定义了几个宏常量 `alloclen`, `maxlen`, `avalen`, `needlen`, 和 `finilen`, 用于简化代码编写和提高可读性。
* **结构体定义:** 定义了多个结构体, 用于表示资源的各种属性, 例如已分配的资源, 最大需求量, 可用资源, 剩余需求量等。
* **主函数 (`main`)**:
* 声明了各种用于存储数据的变量, 例如行数, 列数, 状态标志, 循环计数器等.
* 声明了各种结构体的指针变量, 用于动态分配内存和管理数据.
* 提示用户输入系统的资源种类数量和进程数量.
* 提示用户输入已分配资源的矩阵, 并根据用户输入动态地分配内存.
* 提示用户输入最大需求的矩阵, 并根据用户输入动态地分配内存.
* 提示用户输入现时系统的剩余资源矩阵, 并根据用户输入动态地分配内存.
* 调用 `changdata()` 函数更新数据状态 (例如: 更新可用资源). 调用 `rstordata()`函数恢复原始数据状态(例如: 将申请的资源返回给进程). 调用 `chkerr()` 函数进行安全性检查. 如果检测到不安全状态则输出错误信息并退出;否则输出安全序列并结束程序流程. 循环直到用户选择退出或继续演示为止。
全部评论 (0)


