目
录
1.概述 ......................................................... - 3 -
2.系统软件综合训练任务及要求 ................................... - 3 -
2.1 设计任务 .................................................. - 3 -
2.2 设计要求 .................................................. - 3 -
2.3 设计分析 .................................................. - 4 -
3.总体设计 ..........................................错误!未定义书签。
4.详细设计 ..................................................... - 4 -
4.1 相关数据结果及定义 ........................................ - 4 -
4.1.1 变量定义 .............................................. - 4 -
4.1.2 函数定义 ............................................. - 4 -
4.2 层次图 .................................................... - 5 -
4.3 子模块流程图 .............................................. - 6 -
4.3.1 随机生成模块 .......................................... - 6 -
4.3.2 分配模块 .............................................. - 7 -
4.3.3 监控模块 .............................................. - 9 -
4.3.4 回收模块 ............................................. - 10 -
5.各模块及其分析 .............................................. - 10 -
5.1 总体思想 ................................................. - 10 -
5.2 使用的全局变量 ........................................... - 11 -
5.3 初始化模块 ............................................... - 11 -
5.3.1 功能 ................................................. - 11 -
5.3.2 模块代码 ............................................. - 11 -
5.4 初始化结果写文档模块 ..................................... - 12 -
5.4.1 功能 ................................................. - 12 -
5.4.2 模块代码 ............................................. - 12 -
5.5 请求资源模块 ............................................ - 13 -
5.5.1 功能 ................................................. - 13 -
- 1 -
5.5.2 模块代码 ............................................. - 13 -
5.6 DFS 搜索所有安全序列模块 ................................. - 15 -
5.6.1 功能 ................................................. - 15 -
5.6.2 模块代码 ............................................. - 15 -
5.7 对安全序列排序模块 ...................................... - 17 -
5.7.1 功能 ................................................. - 17 -
5.7.2 模块代码 ............................................. - 17 -
5.8 安全序列写文本模块 ....................................... - 17 -
5.8.1 功能 ................................................. - 17 -
5.8.2 模块代码 ............................................. - 17 -
6.程序设计与实现 .............................................. - 18 -
6.1 程序说明 ................................................. - 18 -
6.2 实验结果 ................................................. - 18 -
7.收获、体会和建议 ............................................ - 21 -
- 2 -
1.概述
当系统在进行资源管理时,如果对进程申请的资源分配不当,可能会使系统
进入死锁状态,因而后面到来的进程也无法顺利执行。银行家算法中,要对当前
申请资源的进程申请资源的数目进行判断,如果可以试分配,则试求出一个安全
序列,如果可以求出,则说明给这个进程分配资源后系统不会进入不安全状态,
将该进程申请的资源分配给他,若求不出安全序列,则说明将资源分配给该进程
后系统会进入不安全状态,所以就使该进程进入阻塞状态,等待以后可以分配资
源时再执行该进程,然后系统继续服务其他进程。通过这样一个过程,可以有效
避免系统进入死锁状态。
2.系统软件综合训练任务及要求
2.1 设计任务
设计一个界面友好,n 个客户(n=身份证前两位+身份证第三、四位+生日月
份),m 类资源(m=身份证前两位+身份证第三、四位+生日日份)的银行家算法。
其中每个客户最大资源初始值、已分配资源、需求资源随机生成。生成尽可能多
的安全序列,并从资源利用效率方面给出这些安全序列的排序(资源利用效率为
运行一条安全序列所需时间)。
2.2 设计要求
2.2.1 在深入理解操作系统基本原理的基础上,对于选定的题目,以小组为单位,
以软件工程为方法指导,先确定选题需求,进行选题设计。
2.2.2 设计系统的数据结构、算法和程序结构,设计每个模块的处理流程。要求
设计合理,界面友好。
2.2.3 编程序实现选题的系统功能,要求尽可能实现可视化的运行界面,界面应
清楚地反映出系统的运行结果。
2.2.4 确定测试方案,选择测试用例,对系统进行测试。
2.2.5 运行系统并通过验收,讲解运行结果,说明系统的详细功能和设计思路,
并回答指导教师与同学们的问题。
2.2.6 提交系统软件综合训练设计报告。
- 3 -
2.3 设计分析
在避免死锁的算法中,允许进程动态的申请资源,系统在进行资源分配之前,
先计算资源分配的安全性。若此次分配不会使系统进入不安全状态,便将资源分
配给该进程,否则进程等待。
所谓安全状态就是指系统能按照某种顺序来为用户分配资源,使每个用户都
能顺利执行。若系统不存在这样一个安全序列,那么系统进入不安全状态。
3.详细设计
该部分主要包括相关的变量与函数定义,以及各模块的程序流程图。
3.1 相关数据结构及定义
3.1.1 数据结构
//预定义的最大客户数
//预定义的最大资源类别数
#define N 100
#define M 100
int CustomerNum;// 输入客户数
int ResourseNum;//输入资源类别数
int Available[M];//可利用资源数
int Work[M];//工作向量
int Allocation[N][M];//已分配资源数
int Need[N][M];//还需要资源数
int Max[N][M];//最大资源数
long int SafetyList[100000][N+1];
//安全序列存储矩阵,第N+1列存储资源利用率
double CustomerTime[N];//每个用户占用资源时间
bool Finish[N];//完成向量
int Sum = 0;//安全序列计数器
3.1.2 函数定义
(1)void Monitor(int k)//对一个用户利用资源进行监听
(2)void Recycling(int k)//一个客户用完程序之后,回收资源
(3)int SearchAndDistribution(int k)//搜寻下一个可以分配资源的用户
(4)void GetSecuritySequence()
- 4 -
//求出安全序列,求存的安全序列用数字的形式保存在_SecuritySequence
二维数组中,所用时间对应保存在_Time数组中
(5)void Sort()
//对所求出的安全序列进行时间上的排序,即求出其资源利用率。
(6)void GiveNum()
//用于对各个客户所对应的资源数和占用时间进行随机赋值
(7)void GetNumeric()//输出客户的个数和资源的个数
(8)void InterfaceSetup()//界面设置
(9)int SafetyCheck()//安全性检查
3.2 层次图
- 5 -
3.3 子模块流程图
该部分包含随机生成模块、分配模块、监控模块和回收模块四个模块。
3.3.1 随机生成模块
- 6 -
3.3.2 分配模块
- 7 -
- 8 -