Project4: Creating a Shell Interface

Project4:

Creating a Shell Interface


一、实验环境

Ubuntu 10.04系统

Eclipse开发平台


二、实验过程:

1、新建java project,编写代码

我自己编写了测试软件

程序大体思路:

1.1Bank.java

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


1.2BankIml.java

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

int numOfCustomers = 0;

int numOfResources;

boolean state;


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

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

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

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

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


基本函数实现如下:

共有函数:

public void initResourceAvailable(int i, int availablenum)

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

public void initNumOfCustomers(int num)

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

public void addCustomer(int customerNum, int[] maxDemand)

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

public void addCustomerallocation(int customerNum, int[] allocationResource)

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

public void getState()

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

public boolean requestResources(int customerNum, int[] request)

分配给customerNum进程request的资源;

public void releaseResources(int customerNum, int[] release)

释放customerNum进程release的资源



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

私有函数:

private boolean allFinnish()

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

private void releaseResources(int customerNum)

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

private boolean 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 in a safe state.


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

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

三、实验总结

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

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

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


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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值