Project4: Creating a Shell Interface

来源:互联网 发布:淘宝怎样才能前几名 编辑:程序博客网 时间:2024/06/01 08:33

Project4:

Creating a Shell Interface


一、实验环境

Ubuntu 10.04系统

Eclipse开发平台


二、实验过程:

1、新建java project,编写代码

我自己编写了测试软件

程序大体思路:

1.1Bank.java

银行家算法的接口,声明了必要的方法以提供操作;


1.2BankIml.java

实现Bank接口,存放基本的数据:

intnumOfCustomers= 0;

intnumOfResources;

booleanstate;


boolean[]finish;//存放进程是否完成

int[]available;//存放可获得的资源

int[][]maximum;//存放每个进程需要的最大资源

int[][]allocation;//存放每个进程已经分配到的资源

int[][]need;//存放每个进程还需要得资源


基本函数实现如下:

共有函数:

publicvoid initResourceAvailable(int i,int availablenum)

初始化Available数组,使available[i]=availablenum;

publicvoid initNumOfCustomers(int num)

根据进程(消费者)数量初始化所有数组;

publicvoid addCustomer(int customerNum,int[] maxDemand)

添加消费者,并添加其最大资源使用情况,修改maximum数组对应的值;

publicvoid addCustomerallocation(int customerNum,int[] allocationResource)

添加消费者的已分配资源、需要资源情况,根据int[] allocationResource的值修改allocation[][]need[][]customerNum行的值;

publicvoid getState()

根据银行家算法,对现在的状态进行判断。如果进程没有全结束,进行以下操作:找到没有完成的进程,如果分配该进程资源后系统仍处于安全的状态,那么就分配给他资源,并释放它已分配资源,修改它的标志位为已执行,并修改相应资源的数组。如果进程可全部执行完,则系统是安全的,反之不安全。

publicboolean requestResources(int customerNum,int[] request)

分配给customerNum进程request的资源;

publicvoid releaseResources(int customerNum,int[] release)

释放customerNum进程release的资源



为方便实现,我添加了以下私有函数。

私有函数:

privateboolean allFinnish()

判断是否所有的进程都进行完毕,若存在finish[]=false,则返回false

privatevoid releaseResources(int customerNum)

释放customerNum的已分配的所有资源;

privateboolean requestResources(int customerNum)

判断customerNum对应的进程是否可以释放资源。如果存在avaiable[j]<need[customerNum][j],则返回false


1.3TestHarness.java


测试文件,通过读取运行时的参数,初始化一个BankIml的对象。根据用户输出对系统是否安全进行判断。具体如下:


1、分解命令:文件的前两个参数为要读入的两个文件,第一个用以初始化max数组,第二个用于构建allocation数组。命令数的个数-2(两个文件)即为资源个数,通过循环调用initResourceAailable初始化。

2、根据文件内容初始化maxallocation

3、然后根据用户输入的申请资源的进程和申请的资源情况分配资源

4、调用getState,返回系统状态(是否安全)



2、运行并测试

运行命令举例:java TestHarness.java max allocation 10 5 7

max


运行结果举例:


Input the number of process which has request (0to4):0

Input the number of resources the request need (3 kinds of resources, input like "1 1 1"):1 1 1

cusrtomer:0 Allocate resource:1 2 3

Release cusrtomer:0

Release cusrtomer:1

Release cusrtomer:4

Release cusrtomer:3

Release cusrtomer:2

The system is ina safe state.


绿色部分为用户输入部分,表示进程0申请资源情况为1 2 3

黄色部分表示一种进程运行的顺序,并且当前系统处于一个安全的状态。

三、实验总结

通过这个实验,我对银行家算法有了进一步了解,明白了其工作机制和原理,对DeadLock的状态、判断有了深刻的认识。

这次实验,也锻炼了我java编写的能力。尤其是对程序大体框架、输入输出、数组运算、接口和类的编写有了更进一步的认识和提高。

最后,要感谢老师提供材料和课堂上理论的详细讲解,助教的热心帮助和指导。


附:源码(http://jcube.sjtu.edu.cn/f/G51FvGs7z5nN0d8rhttp://)大概有少许BUG,没空调了!!!谁比较闲,调好了记得通知我啊~~