目录1需求分析.......................................................................................................................................21.1输入的形式和输入值的范围..........................................................................21.2输出的形式......................................................................................................31.3程序所能达到的功能......................................................................................41.4测试数据......................................................................................................42概要设计.......................................................................................................................................72.1主程序的流程..................................................................................................72.2数据类型的定义..............................................................................................82.3各程序模块之间的层次(调用)关系..........................................................93详细设计.......................................................................................................................................93.1数据类型定义..................................................................................................93.2数据初始化.....................................................................................................103.3安全性检查....................................................................................................113.4显示系统数据................................................................................................123.5银行家算法分配资源....................................................................................134调试分析.....................................................................................................................................154.1设计与实现的分析........................................................................................154.2算法的时间复杂性和改进设想................................................................164.3实现过程中遇到的主要问题及解决方法................................................184.4设计过程的经验和体会................................................................................195用户使用说明.............................................................................................................................206测试与运行结果.........................................................................................................................211需求分析1.1输入的形式和输入值的范围本程序需要用户输入的数据有:申请资源的进程数目、资源的种类数目、每个进程所需的各资源数、每个进程已分配的各资源数、各资源现有的数目、需要申请资源的进程号、该进程所需的各资源数目。1)申请资源的进程数目。它的范围为MAX_PROCESS_NUM个,类型为int,现程序的MAX_PROCESS_NUM设为10,即最大申请资源的进程数为10。而进程号从0开始,假设系统提示“请输入申请资源的进程数目”时,输入值为10,则有进程号为0,1,2„„9这10个进程申请资源。2)资源的种类数目。它的范围为MAX_RESOURCE_NUM个,类型为int,现程序的MAX_RESOURCE_NUM设为10,即最大资料种类数为10。3)每个进程所需的各资源数。输入形式为“进程数×资源种类数”的矩阵,假设进程数为2,资源种类数为3,则进程所需的各资源数的输入形式为2×3的矩阵,每个数之间可以用空格、回车或制表键分隔,输入的数将被依次放入MAX[i][j]数组。例如:2×3的矩阵可以如此输入:2345678或234567设这2个进程分别为P0、P1,这3个资源种类分别为S0、S1、S2,则以上输入的意思均为P0对S0、S1、S2的需求量分别为2、3、4,如此类推。4)每个进程已分配的各资源数。输入“进程数×已分配资源数”的矩阵,与“每个进程所需的各资源数”同理,但应注意,各进程的各资源的已分配数应该比它所需的资源数少,即Allocation[i][j]=Need[i][j]。5)各资源现有数目。即Available[j],是类型为int的数组,假如有j类资源,则分别输入这j类资源的现有数目,以空格、回车或制表键分隔。6)需要申请资源的进程号。进程号应该小于进程数目,因为进程号是从0开始的。7)该进程所需的各资源数目。输入类型为int的数组,形式类似“各资源现有数目”,但应该注意,其范围应当不大于剩余资源的数量,即Request[i]=Available[i]。1.2输出的形式1)首先要求用户输入初始化数据,系统将依次输出以下提示:请输入进程的数目:请输入资源的种类数目:请输入每个进程最多所需的各资源数目:请输入每个进程已分配的各资源数目:请输入各个资源现有的数目:当输入第四项“每个进程已分配的各资源数目”时,输入的已分配资源数若大于每个进程最多所需的各资源数,即Allocation[i][j]Max[i][j],系统将提示哪个进程的第几个资源分配出错,提示如下:您输入的第n个进程所拥有的第m个资源数错误!2)完成数据初始化后,将列出系统的进程及资源情况,形式如下:现系统的进程及资源情况如下:Available:资源A:a资源B:b资源C:c„„Need:进程0:a0b0c0进程1:a1b1c1„„Allocation:进程0:a0b0c0进程1:a1b1c1„„3)接着演示进程申请资源,系统将依次输出以下提示:请输入要申请资源的进程号:请输入进程所请求的各资源的数目:4)然后,针对输入的数据再进行安全性检查以及银行家算法分配资源,若请求使得系统仍处于安全状态,则输出如下:系统是安全的。安全序列为:Pn„„Pm同意分配请求!否则,提示:系统是不安全的。不同意分配请求!5)最后,询问是否要再次请求分配资源,输出如下:您还想再次请求分配资源吗?是请按Y或y,否请按其它键。1.3程序所能达到的功能实现银行家算法的模拟。包括进程对各类资源最大申请表示及初值确定、设定系统提供资源初始状况、设定每次某个进程对各类资源的申请表、依据银行家算法,决定其申请是否得到满足。1.4测试数据以下测试数据是基于黑盒测试(也称功能测试或数据驱动测试)方法组织的,为了提高测试效果,将使用场景法来测试系统业务流程。场景法一般包含基本流和备用流,从一个流程开始,经过遍历所有的基本流和备用流来完成整个场景。本系统的基本流、备选流设置情况如下表所示:基本流1)输入进程(process_amount)和资源数目(resource_amount)及各进程对每个资源的最大需求量(Max[i][j])2)输入每个进程已分配的各资源数(Allocation[i][j])3)输入各个资源现有的数目(Available[i][j])4)输入申请资源的进程号(process)5)输入申请的各资源数量(Request[process][j])6)通过安全性检查并分配资源。备选流1已分配的资源数大于进程的最大需求量备选流2资源请求数超过进程的需求量备选流3资源请求数超过系统有的资源数备选流4不通过安全性检查表格1基本流及备选流根据以上基本流和备选流情况,可组织情景如下:场景1基本流场景2基本流、备选流1场景3基本流、备选流2场景4基本流、备选流3场景5基本流、备选流4表格2测试场景针对五种不同的场景,可有以下五组测试数据:场景1场景2场景3process_amount555resource_amount101010Max[i][j]012345543220123455433201234554432012345554320123450123455432201234554332012345544320123455543201234501234554322012345543320123455443201234555432012345Allocation[i][j]000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000Available[i][j]6658768998n/a6658768998process0n/a0Request[process][j]0112233221n/a1000000003预期结果系统是安全的。安全序列:0--1--2--3--4提示:“您输入的第1个进程所拥有的第1个资源数错提示:“你输入的第1个资源请求数超过进程的需同意分配请求!您还想再次请