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,沒空調了!!!誰比較閒,調好了記得通知我啊~~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章