2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  操作系統(tǒng)課程設(shè)計(jì)報(bào)告</p><p>  院(系): 計(jì)算機(jī)工程學(xué)院 </p><p>  專業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè) </p><p>  學(xué)生姓名: __ </p><p>  班級(jí):__計(jì)算073

2、 _學(xué)號(hào): </p><p>  題目: 仿真模擬銀行家算法對(duì)死鎖的避免 </p><p>  起迄日期: __2010-7-6至2010-7-16_ </p><p>  設(shè)計(jì)地點(diǎn): 2號(hào)實(shí)驗(yàn)樓402   </p><p>  指 導(dǎo) 教 師:

3、 </p><p>  2009—2010年度 第 2 學(xué)期</p><p>  完成日期: 2010 年 7 月 16 日</p><p><b>  課程設(shè)計(jì)目的</b></p><p>  《操作系統(tǒng)》是一門重要的專業(yè)基礎(chǔ)課,是涉及較多硬件知識(shí)的計(jì)算機(jī)系統(tǒng)軟件課

4、程。在計(jì)算機(jī)軟硬件課程的設(shè)置上,它起著承上啟下的作用。操作系統(tǒng)對(duì)計(jì)算機(jī)系統(tǒng)資源實(shí)施管理,是所有其他軟件與計(jì)算機(jī)硬件的唯一接口,所有用戶在使用計(jì)算機(jī)時(shí)都要得到操作系統(tǒng)提供的服務(wù)。</p><p>  操作系統(tǒng)課程設(shè)計(jì)的主要任務(wù)是研究計(jì)算機(jī)操作系統(tǒng)的基本原理和算法,掌握操作系統(tǒng)的進(jìn)程管理、存儲(chǔ)管理、文件管理和設(shè)備管理的基本原理與主要算法。目的是使學(xué)生掌握常用操作系統(tǒng)(如DOS、Windows或Linux)的一般管理方

5、法,了解它是如何組織和運(yùn)作的,對(duì)操作系統(tǒng)的核心概念和算法有一個(gè)透徹的理解,并對(duì)系統(tǒng)運(yùn)行的機(jī)制有一個(gè)全面的掌握,從而充分理解系統(tǒng)調(diào)用與程序設(shè)計(jì)之間的關(guān)系。</p><p><b>  課程設(shè)計(jì)內(nèi)容</b></p><p>  仿真模擬銀行家算法對(duì)死鎖的避免。對(duì)于進(jìn)程死鎖的避免問(wèn)題,分為兩種狀態(tài):安全狀態(tài)和非安全狀態(tài)。在避免死鎖的方法中,允許進(jìn)程動(dòng)態(tài)地申請(qǐng)資源分配之前,應(yīng)

6、先計(jì)算此次資源分配的安全性。若此次分配不會(huì)導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),則將資源分配給進(jìn)程;否則,令進(jìn)程等待。</p><p>  所謂安全狀態(tài)是指系統(tǒng)能按某種進(jìn)程順序,來(lái)為每個(gè)進(jìn)程pi分配所需的資源,直至滿足每個(gè)進(jìn)程對(duì)資源的最大需求,使每個(gè)進(jìn)程都可順利地完成。如果系統(tǒng)無(wú)法找到這樣一個(gè)序列,則系統(tǒng)處于不安全狀態(tài)。只要系統(tǒng)處于安全狀態(tài),系統(tǒng)便可避免進(jìn)入死鎖狀態(tài)。因此避免死鎖的實(shí)質(zhì)在于:系統(tǒng)在進(jìn)行資源分配時(shí),如何使系統(tǒng)不進(jìn)

7、入不安全狀態(tài)。銀行家算法就是一種最有代表性的避免死鎖的算法。</p><p><b>  系統(tǒng)分析與設(shè)計(jì)</b></p><p><b>  1、系統(tǒng)分析</b></p><p>  系統(tǒng)分析的主要任務(wù)是將在系統(tǒng)詳細(xì)調(diào)查中所得到的文檔資料集中到一起,對(duì)組織內(nèi)部整體管理狀況和信息處理過(guò)程進(jìn)行分析。目的是將用戶的需求及其解決方

8、法確定下來(lái),這些需要確定的結(jié)果包括:開(kāi)發(fā)者關(guān)于現(xiàn)有組織管理狀況的了解;用戶對(duì)信息系統(tǒng)功能的需求;數(shù)據(jù)和業(yè)務(wù)流程;管理功能和管理數(shù)據(jù)指標(biāo)體系;新系統(tǒng)擬改動(dòng)和新增的管理模型等等。系統(tǒng)分析所確定的內(nèi)容是今后系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)的基礎(chǔ)。</p><p>  根據(jù)銀行家算法,設(shè)計(jì)這個(gè)銀行家算法的模擬系統(tǒng)。算法中涉及到進(jìn)程的個(gè)數(shù),資源的種類。進(jìn)程當(dāng)前占有的資源保存在數(shù)組allocation中,需要的資源數(shù)目need數(shù)組中。用戶

9、添加進(jìn)程數(shù)目,并且設(shè)置每個(gè)進(jìn)程對(duì)于每一類資源的占有情況和需要情況,還可以設(shè)置每一類資源的庫(kù)存容量。根據(jù)算法,找出安全序列,如果不存在安全序列的話,會(huì)顯示安全序列不存在。</p><p><b>  2、系統(tǒng)設(shè)計(jì)</b></p><p>  程序是利用java語(yǔ)言編寫(xiě)的,直接調(diào)用java中的GUI接口進(jìn)行界面的設(shè)計(jì)。設(shè)計(jì)出兩個(gè)窗口,一個(gè)主窗口,一個(gè)執(zhí)行算法并且將結(jié)果顯示

10、的對(duì)話框。涉及到j(luò)ava中的JFrame 、JPanel、JDialog主要是這三個(gè)。其中面板類用到了最多的。下面將這兩個(gè)窗口的任務(wù)敘述如下:</p><p>  1、對(duì)于主窗口,包括添加進(jìn)程的功能、設(shè)置每個(gè)進(jìn)程的Allocation的數(shù)目、設(shè)置Available的數(shù)值??梢栽O(shè)置每個(gè)進(jìn)程的Request的情況。</p><p> ?。?)添加進(jìn)程的功能。利用了一個(gè)JtextField 輸入

11、進(jìn)程的名字。利用JcomboBox選擇各個(gè)給進(jìn)程所需要的資源的最大數(shù)目。利用按鈕添加監(jiān)聽(tīng)器實(shí)現(xiàn)添加功能。如果進(jìn)程名字沒(méi)有添加的話,默認(rèn)是:進(jìn)程+序號(hào)。</p><p> ?。?)設(shè)置Allocation。與上面的基本相同。利用了一個(gè)JtextField 輸入進(jìn)程的名字。利用JcomboBox選擇各個(gè)給進(jìn)程所占有的各類資源的數(shù)目。利用按鈕添加監(jiān)聽(tīng)器實(shí)現(xiàn)添加功能。如果沒(méi)有見(jiàn)輸入進(jìn)程的名字,功能不能執(zhí)行。根據(jù)算法,所占

12、有的各類的資源的數(shù)目不能超過(guò)給進(jìn)程所需要的各類資源的最大數(shù)目。否則不會(huì)執(zhí)行。</p><p>  (3)設(shè)置Request。功能執(zhí)行的時(shí)候,用JtextField 輸入進(jìn)程的名字。利用JcomboBox選擇各個(gè)給進(jìn)程所申請(qǐng)的各類資源的數(shù)目。利用按鈕添加監(jiān)聽(tīng)器實(shí)現(xiàn)添加功能。如果沒(méi)有見(jiàn)輸入進(jìn)程的名字,功能不能執(zhí)行。根據(jù)算法,所申請(qǐng)的各類的資源的數(shù)目不能超過(guò)給進(jìn)程所需要的數(shù)目,即不能超過(guò)Need中的數(shù)目。如果滿足的話,

13、還必須檢查是否超過(guò)了Available中的數(shù)目。只有這兩個(gè)條件同時(shí)滿足了,才能夠繼續(xù)執(zhí)行。</p><p>  2、對(duì)于另一個(gè)窗口,主要是通過(guò)內(nèi)部類來(lái)實(shí)現(xiàn)的。這個(gè)窗口相當(dāng)于主窗口中的一個(gè)變量。這個(gè)窗口實(shí)現(xiàn)了算法和顯示結(jié)果。</p><p> ?。?)顯示Request后的各個(gè)變量的結(jié)果。利用Jlist控件將結(jié)果顯示。因?yàn)槭褂玫氖莾?nèi)部類,所以可以自由調(diào)用外部的變量。</p>&

14、lt;p> ?。?)顯示執(zhí)行算法后的結(jié)果。同樣也是利用Jlist控件將結(jié)果顯示。執(zhí)行算法的時(shí)候,先將數(shù)據(jù)的字符串形式轉(zhuǎn)化為數(shù)字形式。然后根據(jù)銀行家算法執(zhí)行,查找到安全序列。將結(jié)果顯示。</p><p>  3、設(shè)計(jì)的過(guò)程,填入了兩個(gè)實(shí)例。一個(gè)是正確的存在安全序列的實(shí)例。一個(gè)是不存在安全序列的實(shí)例。</p><p><b>  3、模塊設(shè)計(jì):</b></p&

15、gt;<p>  程序的設(shè)計(jì)主要有兩個(gè)模塊,分別是設(shè)置數(shù)值和檢查安全性序列模塊。對(duì)于設(shè)置數(shù)值模塊,主要有添加進(jìn)程、清空進(jìn)程、進(jìn)程申請(qǐng)資源(即,Request資源)。對(duì)于檢查安全性序列就是執(zhí)行銀行家算法。</p><p>  程序運(yùn)行的時(shí)候,先是設(shè)置數(shù)據(jù),通過(guò)點(diǎn)擊添加進(jìn)程、設(shè)置Allocation和Request的值來(lái)設(shè)置數(shù)據(jù)。在點(diǎn)擊“執(zhí)行算法”,彈出對(duì)話框顯示申請(qǐng)資源后的結(jié)果。在點(diǎn)擊對(duì)話框中的執(zhí)行算

16、法按鈕進(jìn)行查找安全序列。</p><p>  其中涉及的數(shù)據(jù)結(jié)構(gòu)和模塊調(diào)用圖如下:</p><p>  1、對(duì)于設(shè)置數(shù)值模塊(包括添加進(jìn)程、清空進(jìn)程、申請(qǐng)資源)用到的數(shù)據(jù)結(jié)構(gòu)是一個(gè)類:</p><p>  public class MyJlist extends JFrame implements ActionListener</p><p>

17、;<b>  {</b></p><p>  private JTextField current_text=new JTextField();//添加到標(biāo)簽("當(dāng)前進(jìn)程資源非配情況:")之后,添加到容器panel1的中間</p><p>  private JList threadName_list;//顯示添加的進(jìn)程名字</p>

18、<p>  private JList max_resource1_list;//顯示各個(gè)進(jìn)程所用到的資源1的最大數(shù)量</p><p>  private String[] max_resource1_list_num=new String[10];//存儲(chǔ)各個(gè)進(jìn)程所用到的資源1的最大數(shù)量</p><p>  private JList max_resource2_list;//

19、顯示各個(gè)進(jìn)程所用到的資源2的最大數(shù)量</p><p>  private String[] max_resource2_list_num=new String[10];//存儲(chǔ)各個(gè)進(jìn)程所用到的資源2的最大數(shù)量</p><p>  private JList max_resource3_list;//顯示各個(gè)進(jìn)程所用到的資源3的最大數(shù)量</p><p>  priva

20、te String[] max_resource3_list_num=new String[10];//存儲(chǔ)各個(gè)進(jìn)程所用到的資源3的最大數(shù)量</p><p>  private JList allocation_resource1_list;</p><p>  //顯示各個(gè)進(jìn)程所占有的資源1的數(shù)量</p><p>  private String[] alloca

21、tion_resource1_list_num=new String[10];</p><p>  //存儲(chǔ)各個(gè)進(jìn)程所占有的資源1的數(shù)量</p><p>  private JList allocation_resource2_list;</p><p>  //顯示各個(gè)進(jìn)程所占有的資源2的數(shù)量</p><p>  private Strin

22、g[] allocation_resource2_list_num=new String[10];</p><p>  //存儲(chǔ)各個(gè)進(jìn)程所占有的資源2的數(shù)量</p><p>  private JList allocation_resource3_list;</p><p>  //顯示各個(gè)進(jìn)程所占有的資源3的數(shù)量</p><p>  pri

23、vate String[] allocation_resource3_list_num=new String[10];</p><p>  //存儲(chǔ)各個(gè)進(jìn)程所占有的資源3的數(shù)量</p><p>  private JList need_resource1_list;</p><p>  //顯示各個(gè)進(jìn)程所需要的資源1的數(shù)量</p><p> 

24、 private String[] need_resource1_list_num=new String[10];</p><p>  //存儲(chǔ)各個(gè)進(jìn)程所需要的資源1的數(shù)量</p><p>  private JList need_resource2_list;</p><p>  //顯示各個(gè)進(jìn)程所需要的資源2的數(shù)量</p><p>  p

25、rivate String[] need_resource2_list_num=new String[10];</p><p>  //存儲(chǔ)各個(gè)進(jìn)程所需要的資源2的數(shù)量</p><p>  private JList need_resource3_list;</p><p>  //顯示各個(gè)進(jìn)程所需要的資源3的數(shù)量</p><p>  pri

26、vate String[] need_resource3_list_num=new String[10];</p><p>  //存儲(chǔ)各個(gè)進(jìn)程所需要的資源3的數(shù)量</p><p>  private JList available_resource1_list;</p><p>  //顯示資源1的庫(kù)存數(shù)量</p><p>  privat

27、e String[] available_resource1_list_num=new String[]{"10"};</p><p>  //存儲(chǔ)資源1的庫(kù)存數(shù)量</p><p>  private JList available_resource2_list;</p><p>  //顯示資源2的庫(kù)存數(shù)量</p><p&g

28、t;  private String[] available_resource2_list_num=new String[]{"5"};</p><p>  //存儲(chǔ)資源2的庫(kù)存數(shù)量</p><p>  private JList available_resource3_list;</p><p>  //顯示資源3的庫(kù)存數(shù)量</p>

29、<p>  private String[] available_resource3_list_num=new String[]{"7"};</p><p>  //存儲(chǔ)資源3的庫(kù)存數(shù)量</p><p>  private JTextField add_ThreadName;</p><p>  //添加的進(jìn)程的名字</p&g

30、t;<p>  private String[] name_num_add_ThreadName=new String[10];</p><p>  //存儲(chǔ)所要添加的進(jìn)程的名字</p><p><b>  }</b></p><p>  2、對(duì)于執(zhí)行銀行家算法的所用到的數(shù)據(jù)結(jié)構(gòu)是一個(gè)內(nèi)部類:</p><p&g

31、t;  class ComputeDialog extends JDialog implements ActionListener</p><p><b>  {</b></p><p>  //銀行家算法所用的變量</p><p>  private int[][] work=new int[10][3];</p><p&

32、gt;  private int[][] need=new int[10][3];</p><p>  private int[][] allocation=new int[10][3];</p><p>  //以下是顯示申請(qǐng)資源后進(jìn)程和資源中類的情況</p><p>  private JList threadName0_list;</p><

33、;p>  private JList max0_resource1_list;</p><p>  private JList max0_resource2_list;</p><p>  private JList max0_resource3_list;</p><p>  private JList need0_resource1_list;</p

34、><p>  private JList need0_resource2_list;</p><p>  private JList need0_resource3_list;</p><p>  private JList allocation0_resource1_list;</p><p>  private JList allocatio

35、n0_resource2_list;</p><p>  private JList allocation0_resource3_list;</p><p>  private JList available0_resource1_list;</p><p>  private JList available0_resource2_list;</p>

36、<p>  private JList available0_resource3_list;</p><p>  //以下顯示利用銀行家算法執(zhí)行后的各個(gè)進(jìn)程和資源的結(jié)果</p><p>  private JList threadName1_list;</p><p>  private JList max1_resource1_list;</p&g

37、t;<p>  private String[] max1_resource1_list_num=new String[num_add_ThreadName];</p><p>  private JList max1_resource2_list;</p><p>  private String[] max1_resource2_list_num=new String[n

38、um_add_ThreadName];</p><p>  private JList max1_resource3_list;</p><p>  private String[] max1_resource3_list_num=new String[num_add_ThreadName];</p><p>  private JList need1_resour

39、ce1_list;</p><p>  private String[] need1_resource1_list_num=new String[num_add_ThreadName];</p><p>  private JList need1_resource2_list;</p><p>  private String[] need1_resource2_l

40、ist_num=new String[num_add_ThreadName];</p><p>  private JList need1_resource3_list;</p><p>  private String[] need1_resource3_list_num=new String[num_add_ThreadName];</p><p>  priv

41、ate JList allocation1_resource1_list;</p><p>  private String[] allocation1_resource1_list_num=new String[num_add_ThreadName];</p><p>  private JList allocation1_resource2_list;</p><p

42、>  private String[] allocation1_resource2_list_num=new String[num_add_ThreadName];</p><p>  private JList allocation1_resource3_list;</p><p>  private String[] allocation1_resource3_list_num=

43、new String[num_add_ThreadName];</p><p>  private JList available1_resource1_list;</p><p>  private String[] available1_resource1_list_num=new String[num_add_ThreadName];</p><p>  pr

44、ivate JList available1_resource2_list;</p><p>  private String[] available1_resource2_list_num=new String[num_add_ThreadName];</p><p>  private JList available1_resource3_list;</p><p&

45、gt;  private String[] available1_resource3_list_num=new String[num_add_ThreadName];</p><p>  private JList finish_list;</p><p>  private String[] finish=new String[num_add_ThreadName];</p>

46、<p>  private JTextField safe_arry;//顯示安全序列</p><p><b>  }</b></p><p>  3、整個(gè)程序主要就是兩部分,在主窗口部分由添加進(jìn)程、清空進(jìn)程、進(jìn)程實(shí)例、申請(qǐng)資源、設(shè)置進(jìn)程當(dāng)前資源的占有情況、設(shè)置資源的庫(kù)存情況、執(zhí)行算法。</p><p><b>  4、

47、數(shù)據(jù)結(jié)構(gòu)說(shuō)明:</b></p><p>  程序分為兩個(gè)模塊,其中第一個(gè)模塊涉及到添加進(jìn)程、清空進(jìn)程、設(shè)置Allocation、申請(qǐng)資源等等。第二個(gè)模塊涉及到將申請(qǐng)資源的結(jié)果顯示、執(zhí)行銀行家算法。</p><p>  對(duì)于這兩個(gè)模塊的實(shí)現(xiàn)主要通過(guò)兩個(gè)類來(lái)實(shí)現(xiàn)的。</p><p>  (1)第一個(gè)模塊是類public class MyJlist來(lái)實(shí)現(xiàn)的,因

48、為用的編程語(yǔ)言是JAVA,所以程序?qū)τ诟鞣N功能是顯示是通過(guò)給按鈕添加事件監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)的,即add_button.addActionListener(this);//用來(lái)實(shí)現(xiàn)添加進(jìn)程</p><p>  allocation_button.addActionListener(this);</p><p>  //用來(lái)設(shè)置對(duì)應(yīng)進(jìn)程的當(dāng)前各類資源的占有情況</p><p>

49、;  request_button.addActionListener(this);//用來(lái)實(shí)現(xiàn)進(jìn)程對(duì)資源的申請(qǐng)</p><p>  available_button.addActionListener(this);//用來(lái)設(shè)置當(dāng)前各類資源的當(dāng)前的數(shù)</p><p>  clear_button.addActionListener(this);//清空各個(gè)進(jìn)程的記錄</p>

50、<p>  example1_button.addActionListener(this);//實(shí)例1</p><p>  example2_button.addActionListener(this);//實(shí)例2</p><p>  check_safe_arry.addActionListener(this);//執(zhí)行算法,彈出對(duì)話框</p><p>

51、  (2)第二個(gè)模塊的實(shí)現(xiàn)通過(guò)一個(gè)內(nèi)部類:class ComputeDialog extends JDialog implements ActionListener,與第一模塊類似,該模塊的功能的實(shí)現(xiàn)也是通過(guò)按鈕添加事件監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)的。</p><p>  check_safe_button.addActionListener(this);//實(shí)現(xiàn)銀行算法,查找到安全序列。查//不到的時(shí)候,顯示安全序列不存在。&

52、lt;/p><p>  safe_arry.setText("安全序列不存在!");//安全序列不存在的時(shí)候,設(shè)置為此文本</p><p>  對(duì)于模塊在程序中的作用,第一個(gè)模塊是主體,第二個(gè)模塊是在第一個(gè)模塊的基礎(chǔ)上實(shí)現(xiàn)的。</p><p><b>  5、算法流程圖:</b></p><p>  1、

53、第一個(gè)模塊中涉及添加、清空、設(shè)置Allocation、設(shè)置Available。</p><p>  (1)主程序初始化。</p><p><b> ?。?)添加功能</b></p><p><b> ?。?)清空功能</b></p><p>  (4)設(shè)置Allocation</p>

54、<p> ?。?)設(shè)置Available。</p><p> ?。?)設(shè)置Request</p><p>  2、第二模塊主要是實(shí)現(xiàn)銀行家算法:</p><p>  loop控制循環(huán)次數(shù),超過(guò)指定次數(shù),說(shuō)明沒(méi)有安全序列</p><p>  四、模塊調(diào)試與系統(tǒng)測(cè)試</p><p><b>  1、模塊

55、調(diào)試</b></p><p>  輸入的形式和輸入值的范圍</p><p>  程序的輸入過(guò)程主要在主窗體中,對(duì)于進(jìn)程名,可以使用任意字符,但是對(duì)于進(jìn)程的名字不能重復(fù)。如果沒(méi)有填寫(xiě)進(jìn)程的名字,程序默認(rèn)這個(gè)進(jìn)程的名字是:進(jìn)程+當(dāng)前的進(jìn)程數(shù)目。所添加的進(jìn)程數(shù)目不能超過(guò)10個(gè)進(jìn)程。對(duì)于進(jìn)程共享的資源,一共有三類,但是每一類的資源總數(shù)不能超過(guò)10個(gè)。資源的最大剩余量是10。</p

56、><p><b>  輸出的形式</b></p><p>  數(shù)據(jù)的顯示在主窗口中和子窗口中都可以顯示。將所有數(shù)據(jù)填寫(xiě)好后,單擊按鈕,會(huì)在主窗口中顯示出所顯示的數(shù)據(jù)。點(diǎn)擊“執(zhí)行算法”按鈕就會(huì)彈出一個(gè)對(duì)話框,顯示數(shù)據(jù)。對(duì)話框中點(diǎn)擊按鈕“檢查安全性”,執(zhí)行銀行家算法,將結(jié)果顯示在對(duì)話框中。</p><p><b>  程序所能達(dá)到的功能<

57、;/b></p><p>  程序功能:1、添加進(jìn)程及其最大資源。點(diǎn)擊添加按鈕進(jìn)行添加,添加的進(jìn)程的名字不能重復(fù)。2、給每一個(gè)進(jìn)程的Allocation進(jìn)行修改。點(diǎn)擊Allocation按鈕,會(huì)顯示當(dāng)前修改的進(jìn)程中的資源情況。3、清空所有記錄。點(diǎn)擊“清空”按鈕,一切都會(huì)初始化。4、提供了兩個(gè)實(shí)例。點(diǎn)擊按鈕“實(shí)例1”,顯示實(shí)例1的所有進(jìn)程及其資源的分布情況。同樣的點(diǎn)擊“實(shí)例2”。4、修改Available的數(shù)

58、值。點(diǎn)擊按鈕“Available”,顯示修改當(dāng)前各個(gè)資源的剩余量。</p><p><b>  2、系統(tǒng)測(cè)試</b></p><p>  測(cè)試的數(shù)據(jù)依照課本上的例子來(lái)寫(xiě):</p><p>  操作過(guò)程及其結(jié)果如下:</p><p><b>  3、調(diào)試分析:</b></p><p

59、> ?。?)程序測(cè)試的時(shí)候,發(fā)現(xiàn)在執(zhí)行了銀行家算法后,只要進(jìn)程超過(guò)3個(gè)很容易死機(jī)。即使不超過(guò)3個(gè)也會(huì)死機(jī)。經(jīng)過(guò)對(duì)按鈕事件處理的書(shū)寫(xiě)仔細(xì)檢查,才發(fā)現(xiàn)程序中控制循環(huán)從0開(kāi)始的變量i的數(shù)值有問(wèn)題。當(dāng)一次循環(huán)結(jié)束后,再進(jìn)行下一輪循環(huán)的時(shí)候,i的數(shù)值為1,越過(guò)了0,以至于程序死機(jī)。將其修改為-1之后,就沒(méi)有問(wèn)題了。</p><p> ?。?)對(duì)java中的控件的使用非常麻煩,在使用控件Jlist的時(shí)候,直接添加到容器

60、中,程序運(yùn)行的時(shí)候會(huì)改變大小。后來(lái)從網(wǎng)上查詢到了控件的正確使用方法,就是將控件添加到JscrollPane中,在將JscrollPane添加到容器中。</p><p> ?。?)對(duì)于Jcombobox的使用也是非常的麻煩,程序中有有一個(gè)清空功能,使用了之后必須將控件的數(shù)據(jù)都要清掉。于是使用了控件的removeallitem()函數(shù),但是一旦調(diào)用這個(gè)函數(shù)的時(shí)候,程序中的圖形的布局就要發(fā)生變化。通過(guò)查資料得知,對(duì)于控

61、件Jcombobox的使用,如果使用函數(shù)去掉它的所有數(shù)據(jù),會(huì)造成整個(gè)圖形的布局變化,這是不可避免的。因?yàn)槲沂褂玫娜萜鞯牟季止芾砥魇鞘褂玫腂orderLayout而不是FlowLayout。最后,我只能換為JtxtField這個(gè)文本編輯控件。</p><p> ?。?)對(duì)于程序中的變量的賦值,特別是對(duì)于那些沒(méi)有固定長(zhǎng)度的變量賦值是個(gè)困難問(wèn)題。開(kāi)始的時(shí)候,我為每一個(gè)資源的數(shù)目都定義了一個(gè)計(jì)數(shù)變量。但是這樣的做的結(jié)果就

62、是程序出錯(cuò),最后我改用了一個(gè)變量,那就是程序中的進(jìn)程數(shù)目的變量。這樣將變量統(tǒng)一了之后,程序的運(yùn)行不會(huì)出錯(cuò)了而且還會(huì)簡(jiǎn)潔了變量。</p><p><b>  五、用戶手冊(cè)</b></p><p>  1.、本程序的運(yùn)行環(huán)境是MyEclipse環(huán)境,使用的編程語(yǔ)言是Java語(yǔ)言,操作系統(tǒng)是</p><p>  Windows Xp操作系統(tǒng)。<

63、/p><p>  2、程序無(wú)需安裝,只需要安裝了MyEclipse即可。</p><p>  3、程序使用之前,在MyEclipse中建立一個(gè)Java工程,在工程中建立一個(gè)MyJlist類,將代碼粘貼到其中,直接運(yùn)行即可。點(diǎn)擊編譯器中運(yùn)行按鈕,程序中出現(xiàn)如下情況:</p><p><b> ?。?)程序運(yùn)行:</b></p><

64、p>  從截圖中可以看出,目前系統(tǒng)的進(jìn)程數(shù)目是0,即沒(méi)有進(jìn)程。當(dāng)前各個(gè)控件的情況是空,</p><p>  這是一個(gè)初始化狀態(tài)。當(dāng)前程序中有三類資源,默認(rèn)數(shù)值為10、5、7</p><p> ?。?)在標(biāo)簽“添加進(jìn)程:”所對(duì)應(yīng)的這一列中進(jìn)行添加進(jìn)程。在“進(jìn)程名:”右面的編輯框中輸入進(jìn)程的名字,如p1。在往下,選擇每一類資源的該進(jìn)程所用到的資源的最大數(shù)目。如可以選擇進(jìn)程所需要的三類資源

65、的數(shù)目都為5。這樣方便一些。設(shè)置完之后,直接點(diǎn)擊下面的按鈕“添加”即可。這樣進(jìn)程p1就直接添加到了系統(tǒng)中。此時(shí)后,“目前系統(tǒng)中的進(jìn)程數(shù)目為:”后面顯示為1。具體的操作如下圖所示:依照以上的過(guò)程,再添加一些進(jìn)程到系統(tǒng)中。</p><p>  (3)在標(biāo)簽“Allocation”所對(duì)應(yīng)的這一列中,是用來(lái)設(shè)置每個(gè)進(jìn)程的當(dāng)前所占有的資源的數(shù)目的。同樣的,在標(biāo)簽“選擇進(jìn)程:”標(biāo)簽后面的文本框中填寫(xiě)所要設(shè)置的進(jìn)程的名字。在往

66、下,選擇資源的進(jìn)程的所占有的數(shù)量,例如可以設(shè)置進(jìn)程p1當(dāng)前擁有的三類資源的數(shù)目為1,2,3。過(guò)程如下圖所示:</p><p>  同樣,根據(jù)上述過(guò)程,設(shè)置其他的進(jìn)程的數(shù)值。</p><p> ?。?)在標(biāo)簽“Request”這一類是用來(lái)設(shè)置某一個(gè)進(jìn)程是否申請(qǐng)了資源的,進(jìn)程在執(zhí)行的過(guò)程可以申請(qǐng)資源。例如進(jìn)程p1可以申請(qǐng)資源的數(shù)目為Request(2,2,2)。結(jié)果如下圖所示:</p&g

67、t;<p> ?。?)在標(biāo)簽“Available”這一列,設(shè)置當(dāng)前三類資源的剩余數(shù)目??稍O(shè)置為(2,2,2)</p><p> ?。?)點(diǎn)擊“清空”按鈕,結(jié)果與程序開(kāi)始運(yùn)行的結(jié)果是一樣的。點(diǎn)擊實(shí)例1,實(shí)例2按鈕會(huì)出現(xiàn)兩個(gè)實(shí)例。點(diǎn)擊執(zhí)行算法按鈕,會(huì)出現(xiàn)如下對(duì)話框,接著點(diǎn)擊對(duì)話框中的“檢查安全性”按鈕就可求出安全序列。</p><p><b>  六、程序清單</

68、b></p><p>  程序主要用到了一個(gè)類及其內(nèi)部類:</p><p>  public class MyJlist extends JFrame implements ActionListener</p><p><b>  {</b></p><p>  private JTextField current

69、_text=new JTextField();//添加到標(biāo)簽("當(dāng)前進(jìn)程資源非配情況:")之后,添加到容器panel1的中間</p><p>  //以下變量是為了防止找不到安全序列后,為了恢復(fù)進(jìn)程在沒(méi)有審請(qǐng)資源的時(shí)候的情況</p><p>  private String request1;// 申請(qǐng)資源1的數(shù)量</p><p>  priva

70、te String request2;// 申請(qǐng)資源2的數(shù)量</p><p>  private String request3;// 申請(qǐng)資源3的數(shù)量</p><p>  private String available1;//滿足申請(qǐng)后的資源1的剩余量</p><p>  private String available2;//滿足申請(qǐng)后的資源2的剩余量<

71、/p><p>  private String available3;//滿足申請(qǐng)后的資源3的剩余量</p><p>  private String need1;//滿足申請(qǐng)資源后,資源1的當(dāng)前需要量</p><p>  private String need2; //滿足申請(qǐng)資源后,資源2的當(dāng)前需要量</p><p>  private

72、String need3; //滿足申請(qǐng)資源后,資源3的當(dāng)前需要量</p><p>  private int convert=0;//控制進(jìn)程中只能有一個(gè)進(jìn)程申請(qǐng)資源</p><p>  private int requestThread;//存儲(chǔ)申請(qǐng)資源進(jìn)程的索引數(shù)值,便于恢復(fù)進(jìn)程的情況</p><p>  //以下所有變量都是為了圖形的顯示</p>

73、;<p>  private String[] max_resource1_list_num=new String[10];</p><p>  private String[] max_resource2_list_num=new String[10];</p><p>  private String[] max_resource3_list_num=new String

74、[10];</p><p>  private String[] allocation_resource1_list_num=new String[10];</p><p>  private String[] allocation_resource2_list_num=new String[10];</p><p>  private String[] alloc

75、ation_resource3_list_num=new String[10];</p><p>  private String[] need_resource1_list_num=new String[10];</p><p>  private String[] need_resource2_list_num=new String[10];</p><p> 

76、 private String[] need_resource3_list_num=new String[10];</p><p>  private String[] available_resource1_list_num=new String[]{"10"};</p><p>  private String[] available_resource2_list_

77、num=new String[]{"5"};</p><p>  private String[] available_resource3_list_num=new String[]{"7"};private JTextField add_ThreadName;//添加進(jìn)程的名字文本框</p><p>  private String[] name

78、_num_add_ThreadName=new String[10];</p><p>  private static int num_add_ThreadName;//添加的進(jìn)程的數(shù)目</p><p>  //填寫(xiě)要填寫(xiě)的進(jìn)程資源的進(jìn)程的名字</p><p>  private static int index;//存儲(chǔ)要修改進(jìn)程的索引</p>&

79、lt;p>  private JButton allocation_button;//Allocaion按鈕</p><p>  private JTextField request_thread_name;//申請(qǐng)資源的進(jìn)程的名字</p><p>  private JButton request_button;//Request按鈕</p><p>  p

80、rivate JTextField available_resource1_text;</p><p>  //填寫(xiě)要修改的資源1的剩余數(shù)量</p><p>  private JTextField available_resource2_text;</p><p>  private JTextField available_resource3_text;<

81、/p><p>  private JButton available_button;//Available按鈕</p><p>  private JButton clear_button;//清空按鈕</p><p>  private JButton example1_button;//實(shí)例1按鈕</p><p>  private JBut

82、ton example2_button;//實(shí)例2按鈕</p><p>  private JButton check_safe_arry;//執(zhí)行算法按鈕</p><p>  public MyJlist()</p><p><b>  {</b></p><p>  add_button.addActionListe

83、ner(this);//添加按鈕添加事件監(jiān)聽(tīng)器</p><p>  allocation_button.addActionListener(this); </p><p>  //Allocation按鈕添加事件監(jiān)聽(tīng)器</p><p>  request_button.addActionListener(this); </p><p>  /

84、/Reques按鈕添加事件監(jiān)聽(tīng)器</p><p>  available_button.addActionListener(this); </p><p>  // Available按鈕添加事件監(jiān)聽(tīng)器</p><p>  clear_button.addActionListener(this); //清空按鈕添加事件監(jiān)聽(tīng)器</p><p>

85、  example1_button.addActionListener(this);</p><p>  //實(shí)例1按鈕添加事件監(jiān)聽(tīng)器</p><p>  example2_button.addActionListener(this); </p><p>  //實(shí)例2按鈕添加事件監(jiān)聽(tīng)器</p><p>  check_safe_arry.a

86、ddActionListener(this); </p><p>  //執(zhí)行算法按鈕添加事件監(jiān)聽(tīng)器</p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e)//實(shí)現(xiàn)功能</p><p><b>  {</b>&

87、lt;/p><p>  boolean bool_add=false;</p><p>  String str_add;</p><p>  boolean bool_allocation=false;</p><p>  boolean bool_request=false;</p><p>  if(e.getSou

88、rce()==add_button)//實(shí)現(xiàn)添加進(jìn)程功能</p><p>  {convert=0;</p><p>  if(num_add_ThreadName<10)//最多添加10個(gè)進(jìn)程</p><p>  {if(add_ThreadName.getText().length()==0)</p><p>  //進(jìn)程名字為空的

89、處理</p><p>  {name_num_add_ThreadName[num_add_ThreadName]=new String("進(jìn)程"+num_add_ThreadName);</p><p>  str_add=new String("進(jìn)程"+num_add_ThreadName);</p><p>

90、<b>  }</b></p><p><b>  else</b></p><p>  {name_num_add_ThreadName[num_add_ThreadName]=new String(add_ThreadName.getText());//獲取進(jìn)程名</p><p>  str_add=ne

91、w String(add_ThreadName.getText());</p><p><b>  }</b></p><p>  for(int i=0;i<num_add_ThreadName;i++)//判斷進(jìn)程名是否重復(fù)</p><p><b>  {</b></p><p>  i

92、f(name_num_add_ThreadName[i].equalsIgnoreCase(str_add))</p><p>  {bool_add=true;JOptionPane.showMessageDialog(this, "進(jìn)程名字 已存在!請(qǐng)重新填寫(xiě)。");break;}</p><p><b>  else</b></p&g

93、t;<p>  bool_add=false;}</p><p>  if(!bool_add)</p><p><b>  {</b></p><p>  /*添加進(jìn)程并且顯示出來(lái)*/</p><p>  num_add_ThreadName++;//進(jìn)程數(shù)增加</p><p>&

94、lt;b>  }</b></p><p>  this.repaint();//重畫(huà)圖形}</p><p><b>  else</b></p><p>  JOptionPane.showMessageDialog(this, "最多添加10個(gè)進(jìn)程!");}</p><p>  i

95、f(e.getSource()==allocation_button)</p><p>  {convert=0;</p><p>  String middle=new String(String.valueOf(allocation_thread_name.getText()));</p><p>  //判斷進(jìn)程的名字是否存在</p><p

96、>  for(int i=0;i<num_add_ThreadName;i++)</p><p>  {if(name_num_add_ThreadName[i].equalsIgnoreCase(middle))</p><p>  {bool_allocation=true;break;}</p><p><b>  else</b&

97、gt;</p><p>  bool_allocation=false;}</p><p>  if(bool_allocation)</p><p>  {//獲取進(jìn)程的索引數(shù)值</p><p>  for(int i=0;i<num_add_ThreadName+1;i++)</p><p>  {if(mi

98、ddle.equalsIgnoreCase(name_num_add_ThreadName[i]))</p><p>  {index=i;break;}}</p><p>  //根據(jù)索引修改對(duì)應(yīng)的進(jìn)程的數(shù)值</p><p>  if((Integer.parseInt(String.valueOf(allocation_resource_combobox1.ge

99、tSelectedItem()))<=Integer.parseInt(max_resource1_list_num[index]))&&(Integer.parseInt(String.valueOf(allocation_resource_combobox2.getSelectedItem()))<=Integer.parseInt(max_resource2_list_num[index]))&

100、&(Integer.parseInt(String.valueOf(allocation_resource_combobox3.getSelectedItem()))<=Integer.parseInt(max_resource3_list_num[index])))</p><p>  {/*設(shè)置修改后的數(shù)值,并且顯示在圖形中*/</p><p>  this.repain

101、t();}</p><p><b>  //進(jìn)程申請(qǐng)資源</b></p><p>  if(e.getSource()==request_button)</p><p>  {//存儲(chǔ)數(shù)值,便于恢復(fù)</p><p>  available1=available_resource1_list_num[0];</p&g

102、t;<p>  available2=available_resource2_list_num[0];</p><p>  available3=available_resource3_list_num[0];String middle=new String(String.valueOf(request_thread_name.getText()));</p><p>  /

103、/查找進(jìn)程名字是否存在</p><p>  for(int i=0;i<num_add_ThreadName;i++)</p><p>  {if(name_num_add_ThreadName[i].equalsIgnoreCase(middle))</p><p>  {bool_request=true;break;}</p><p&

104、gt;<b>  else</b></p><p>  bool_request=false;}</p><p>  if(bool_request){//獲取進(jìn)程的索引數(shù)值</p><p>  for(int i=0;i<num_add_ThreadName+1;i++)</p><p>  {if(middle

105、.equalsIgnoreCase(name_num_add_ThreadName[i]))</p><p>  {index=i; requestThread=index;</p><p>  //存取數(shù)值,便于恢復(fù)</p><p>  request1=String.valueOf(allocation_resource1_list_num[index]<

106、/p><p>  request2=String.valueOf(allocation_resource2_list_num[index]);</p><p>  request3=String.valueOf(allocation_resource3_list_num[index]);</p><p>  need1=String.valueOf(need_resou

107、rce1_list_num[index]);</p><p>  need2=String.valueOf(need_resource2_list_num[index]);</p><p>  need3=String.valueOf(need_resource3_list_num[index]); break;}}</p><p>  //申請(qǐng)資源小于需要量,并且

108、需要資源的剩余量if((Integer.parseInt(String.valueOf(request_resource_combobox1.getSelectedItem()))<=Integer.parseInt(need_resource1_list_num[index]))&&(Integer.parseInt(String.valueOf(request_resource_combobox2.getSe

109、lectedItem()))<=Integer.parseInt(need_resource2_list_num[index]))&&(Integer.parseInt(String.valueOf(request_resource_combobox3.getSelectedItem()))<=Integer.parseInt(need_resource3_list_num[index])))</p&g

110、t;<p>  {if((Integer.parseInt(String.valueOf(request_resource_combobox1.getSelectedItem()))<=Integer.parseInt(available_resource1_list_num[0]))&&(Integer.parseInt(String.valueOf(request_resource_combobo

111、x2.getSelectedItem()))<=Integer.parseInt(available_resource2_list_num[0]))&&(Integer.parseInt(String.valueOf(request_resource_combobox3.getSelectedItem()))<=Integer.parseInt(available_resource3_list_num[0])

112、))</p><p>  {/*滿足資源的申請(qǐng),顯示數(shù)據(jù)</p><p>  convert++;//控制只能有一個(gè)進(jìn)程滿足申請(qǐng)</p><p><b>  }}</b></p><p>  //修改資源的當(dāng)前的所有量</p><p>  if(e.getSource()==available_b

113、utton)</p><p><b>  {try</b></p><p>  {convert=0;</p><p>  /*將字符轉(zhuǎn)化為數(shù)字,輸入不是數(shù)字的字符串則將拋出異常}</p><p>  catch( NumberFormatException e1)</p><p>  {J

114、OptionPane.showMessageDialog(this, "輸入的字符不是數(shù)字!請(qǐng)重新填寫(xiě)。");}</p><p><b>  }</b></p><p><b>  //清空按鈕</b></p><p>  if(e.getSource()==clear_button)</p>

115、;<p>  {/*初始化操作*/}</p><p><b>  //實(shí)例1</b></p><p>  if(e.getSource()==example1_button)</p><p>  {//設(shè)置進(jìn)程名字并且顯示</p><p>  for(int i=0;i<5;i++)</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論