操作系統(tǒng)課程設計報告----磁盤管理模塊告_第1頁
已閱讀1頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  操作系統(tǒng)課程設計報告</p><p><b>  目錄</b></p><p>  項目概述…………………………....3</p><p>  基本概念和原理…………………………5</p><p>  詳細設計………………………….....6</p><p>  總結(jié)和心得.

2、..............................................................24</p><p>  參考文獻...................................................................25</p><p>  參考代碼.................................

3、...................................25</p><p><b>  磁盤管理概要說明</b></p><p><b>  引言</b></p><p>  目的:確定磁盤管理模塊的總體結(jié)構(gòu)、與其他模塊之間的接口和總體流程。</p><p>  使用者:軟件開發(fā)人員

4、和維護人員。</p><p>  本模塊是操作系統(tǒng)模擬軟件中的演示磁盤管理的模塊,主要來展示文件在磁盤上的存儲情況,因此和文件管理模塊聯(lián)系最為緊密。磁盤調(diào)度算法是一個專門的演示模塊,與磁盤管理模塊物理相似,和其他模塊無實際聯(lián)系。</p><p><b>  總體設計</b></p><p>  采用java語言,使用圖形化界面工具swing,

5、以表格的形式來模擬磁盤存儲結(jié)構(gòu)。一行代表一個磁道,每一行的一個小格代表一個盤塊??傮w采用C/S模式,由文件系統(tǒng)發(fā)送消息過來,本模塊經(jīng)過相應的處理后,再返回給文件管理模塊其需要的信息。</p><p>  磁盤管理模塊與文件管理模塊本來是一個完整過程,有了磁盤的存儲,才有文件的生成。這兩個模塊之間要能夠進行順暢的消息傳遞。</p><p><b>  模塊設計</b>&

6、lt;/p><p><b>  模塊功能:磁盤管理</b></p><p>  1)接收信息 接收從文件管理系統(tǒng)發(fā)送過來的信息。</p><p>  2)處理信息 對信息進行識別和處理,轉(zhuǎn)交響應的模塊功能。</p><p>  3)改變磁盤 對磁盤進行增、刪、改、查并返回新的信息</p><p> 

7、 4)返回信息 把新生成的信息返回給文件管理系統(tǒng)</p><p>  磁盤調(diào)度:1)FCFS算法 2)SSTF算法 3)SCAN算法 4)cscan算法 5)NStepSCAN算法 6)FSCAN算法</p><p>  性能要求:要求磁盤管理模塊的實時性非常好,能夠迅速對文件管理模塊的請求作出響應。并且需要有統(tǒng)一的消息格式,以便取得一致性。最后還要有較好的容錯性能,當磁盤模塊出現(xiàn)異常或

8、消息出現(xiàn)某些特殊情況是,要能給出錯誤提示。磁盤調(diào)度模塊需要友好的界面。讓使用者輸入數(shù)據(jù),觀察各種磁盤調(diào)度算法,保證算法的正確性。</p><p>  磁盤管理模塊和文件管理模塊的接口使用Socket來實現(xiàn),接收一個專門的文件消息對象,處理完畢后,返回給文件管理模塊結(jié)果。結(jié)果也是一個文件消息對象。</p><p><b>  數(shù)據(jù)結(jié)構(gòu)設計</b></p>

9、<p>  磁盤管理中,采用二維表來存儲每一個盤塊。磁盤中文件存放形式有鏈式和索引,單獨的文件采用鏈式存儲,文件夾中的文件采用索引節(jié)點存儲。使用對象來存儲數(shù)據(jù),進行信息轉(zhuǎn)移。</p><p>  磁盤調(diào)度算法演示中,采用一維數(shù)組來存放所有磁道。左邊用一系列磁道號靜態(tài)顯示磁道的訪問過程,右邊就是動態(tài)變化。用不同的顏色來區(qū)分,將要訪問磁道、已訪問的磁道和新的磁道訪問請求。</p><p&

10、gt;  運行設計 </p><p>  磁盤管理模塊 </p><p>  Message Message 讀取磁盤信息</p><p><b>  修改磁盤信息</b></p><p>  初始數(shù)據(jù)

11、 改變 返回</p><p>  存儲 結(jié)果</p><p><b>  用戶界面:</b></p><p><b>  磁盤調(diào)度管理</b></p><p><b>  選擇數(shù)據(jù)</b></p><p><b>  性

12、能結(jié)果</b></p><p><b>  用戶界面</b></p><p><b>  故障處理說明</b></p><p>  出現(xiàn)故障,磁盤會產(chǎn)生一個Message對象,對象中的異常信息能夠描述異常,并返回給文件系統(tǒng)。</p><p><b>  其他設計</b&g

13、t;</p><p>  當需求發(fā)生變化后,要能夠修改并滿足新的需求。如磁盤初始空間要求更大、要求增加二級索引節(jié)點,增加文件類型后也要能夠較好維護。</p><p>  磁盤管理的基本概念和原理</p><p>  首先用,給用戶展示磁盤的分布情況,未分配給任何文件的盤塊號為黑色。分配給同一文件的盤塊號為同一種顏色,系統(tǒng)總共獲取了十四種顏色。因此可以看到彩色的磁盤分

14、布情況。</p><p>  除了使用顏色區(qū)分盤塊所屬的文件,每個盤塊上面寫明了盤塊的編號,所分配的文件類型,所分配文件的名字,以及其父文件的節(jié)點。默認情況下,其父節(jié)點為-1,就是直接放在根目錄下的文件</p><p>  所有的文件類型分為兩種,一種是“文件”,用file表示。一種是“文件夾”,用folder表示。文件的大小任意,只要不超出磁盤的空間。而文件夾的大小就是固定的,只能是1。

15、文件夾中有十個索引節(jié)點,每個節(jié)點鏈接到一個文件或文件夾,以此建立起一棵以文件夾為根節(jié)點的文件樹。</p><p>  此外在現(xiàn)實框的最下層,顯示了磁盤的使用情況??偙P塊數(shù),已使用盤塊和未使用盤塊。</p><p>  展示給用戶的界面如下圖所示 </p><p>  每一個盤塊的信息顯示實圖</p><p><b>  文件

16、夾:</b></p><p><b>  文件:</b></p><p><b>  文件夾的子文件:</b></p><p><b>  磁盤的使用信息:</b></p><p>  磁盤管理及調(diào)度模塊詳細設計說明書</p><p><

17、;b>  一、引言</b></p><p>  目的:確定磁盤管理模塊的總體結(jié)構(gòu)、與其他模塊之間的接口和總體流程。</p><p>  使用者:軟件開發(fā)人員和維護人員。</p><p>  本模塊是操作系統(tǒng)模擬軟件中的演示磁盤管理的模塊,主要來展示文件在磁盤上的存儲情況,因此和文件管理模塊聯(lián)系最為緊密。磁盤調(diào)度算法是一個專門的演示模塊,與磁盤管理

18、模塊物理相似,和其他模塊無實際聯(lián)系</p><p><b>  軟件結(jié)構(gòu)</b></p><p>  磁盤管理模塊采用C/S模式,模塊又分成三個子模塊。磁盤管理、圖形化顯示,磁盤調(diào)度分為一個模塊,六個功能。</p><p><b>  模塊設計說明</b></p><p><b>  磁盤

19、管理模塊</b></p><p>  磁盤管理模塊需要對磁盤進行增刪查改操作,以下是每一個操作的流程圖。</p><p>  磁盤演示模塊的整體流程圖</p><p>  對應于這個模塊的用戶界面如下:</p><p>  New代表新建一個文件,delete選項用來刪除一個文件,add選項用來為一個文件增加空間,dec選項為一個

20、文件減小空間,rename給文件重命名。</p><p>  整個顯示的是一個JToolBar類,JToolBar需要增加動作類來產(chǎn)生Button按鈕,總共new出了五個抽象動作類,于是出現(xiàn)了上面看到的五個按鈕。</p><p><b>  相應的代碼如下</b></p><p><b>  //新建一個工具條</b>&l

21、t;/p><p>  JToolBar toolBar = new JToolBar();</p><p>  toolBar.setFloatable(true);</p><p>  //新建五個抽象動作類</p><p>  ToolBarAction file_new = new ToolBarAction("NEW"

22、,null,this);</p><p>  ToolBarAction file_del = new ToolBarAction("DELETE",null,this);</p><p>  ToolBarAction file_add = new ToolBarAction("ADD",null,this);</p><p&g

23、t;  ToolBarAction file_dec = new ToolBarAction("DEC",null,this);</p><p>  ToolBarAction file_sea = new ToolBarAction("RENAME",null,this);</p><p>  //把第一個按鈕加入工具條</p>&l

24、t;p>  toolBar.setFloatable(true);</p><p>  JButton jb;</p><p>  jb = toolBar.add(file_new);</p><p>  jb.setActionCommand("NEW");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb

25、.setToolTipText("新建"); </p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator(); //增加一個隔離欄</p><p>  //把第刪除按鈕加入工具條</p><p>  jb = toolBar.add(file_d

26、el);</p><p>  jb.setActionCommand("DELETE");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("開始");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.a

27、ddSeparator();</p><p>  jb = toolBar.add(file_add);//把第增加按鈕加入工具條</p><p>  jb.setActionCommand("ADD");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("增加");</p>

28、<p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator();</p><p>  jb = toolBar.add(file_dec);//把第減少按鈕加入工具條</p><p>  jb.setActionCommand("DEC");//設置其產(chǎn)生事件所顯示的

29、命令</p><p>  jb.setToolTipText("減少");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator();</p><p>  jb = toolBar.add(file_sea);//把第重命名按鈕加入工具條&l

30、t;/p><p>  jb.setActionCommand("RENAME");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("查找");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSepa

31、rator();</p><p>  this.add(toolBar,BorderLayout.NORTH); //設置其布局,放在最上面</p><p>  為新建的文件分配磁盤空間,該函數(shù)是Disk中的allocate方法</p><p>  public Message allocateSpace(Message message)</p>&l

32、t;p>  刪除一個文件的流程圖,該函數(shù)是Disk中的deleteFF()方法,</p><p>  public void deleteFF(int startAdd)</p><p>  修改一個文件的流程圖,它對應Disk中的兩個函數(shù),addSpace和reclaimSpace(Message),程序中是:public Message addSpace(Message mess

33、age),public Message reclaimSpace(Message message)。</p><p>  文件重命名的流程圖如下,其對應的是renewFile函數(shù),</p><p>  public void renewFile(Message message)</p><p><b>  文件重命名</b></p>

34、<p>  最開始設計時,把消息模塊也加入了程序中,后來這個模塊被刪掉了。</p><p><b>  1)接收消息</b></p><p><b>  功能名稱:接收消息</b></p><p><b>  參與執(zhí)行者:用戶</b></p><p>  前置條件

35、:一個合法的登錄用戶</p><p>  程序流: A.if 沒有消息</p><p><b>  繼續(xù)等待</b></p><p><b>  else </b></p><p><b>  獲取消息</b></p><p>  If 消息對象是Mes

36、sage實例</p><p><b>  交給消息控制著處理</b></p><p><b>  返回 A</b></p><p><b>  Else </b></p><p>  返回Message實例,提示該消息類型錯誤。</p><p><

37、b>  End If</b></p><p><b>  End if</b></p><p><b>  消息處理</b></p><p><b>  功能名稱:消息處理</b></p><p>  參與執(zhí)行者:消息控制對象</p><p

38、>  前置條件:收到一個 Message對象</p><p>  程序流: A if 操作類型合法</p><p><b>  If 文件類型合法</b></p><p>  把消息交給磁盤來處理</p><p>  Else 把消息交給磁盤處理</p><p>  添加操作消息文件類型

39、無法識別</p><p><b>  End if</b></p><p>  Else 生成新信息,返回操作類型不合法</p><p><b>  End if</b></p><p><b>  磁盤分配</b></p><p><b> 

40、 功能名稱:磁盤分配</b></p><p>  參與執(zhí)行者:磁盤對象</p><p>  前置條件:已經(jīng)收到一個可操作的消息對象</p><p>  程序流:if 磁盤未滿</p><p>  If 所需空間<=剩余空間</p><p>  if 此文件的父文件為文件夾</p><

41、;p><b>  找到其父文件</b></p><p>  把一個空閑的盤塊號分配給新文件,并把改記錄添加到父文件的索引中。</p><p>  繼續(xù)給改文件分配全部空間</p><p>  生成新的信息對象并返回</p><p>  Else 分配給該文件新的空間</p><p>  生成

42、新的信息對象并返回</p><p><b>  End if</b></p><p><b>  返回空間不足信息</b></p><p><b>  End if</b></p><p><b>  返回磁盤已滿信息</b></p><

43、;p><b>  End if</b></p><p><b>  發(fā)送消息</b></p><p><b>  功能名稱:發(fā)送消息</b></p><p>  參與執(zhí)行者:消息發(fā)送對象</p><p>  前置條件:已經(jīng)從磁盤對象模塊獲取了一個消息對象</p>

44、;<p>  程序流: 發(fā)送消息 </p><p><b>  磁盤調(diào)度模塊</b></p><p><b>  功能名稱:磁盤調(diào)度</b></p><p>  參與執(zhí)行那個者:用戶</p><p>  前置條件:已經(jīng)登錄的合法用戶</p><p><b&

45、gt;  程序流:</b></p><p><b>  A。 用戶輸入數(shù)據(jù)</b></p><p>  If 用戶選擇fcfs算法</p><p><b>  運行fcfs算法</b></p><p>  Else if 用戶選擇sstf算法</p><p>&l

46、t;b>  運行 sstf算法</b></p><p>  Else if 用戶選擇scan算法</p><p><b>  運行 scan算法</b></p><p>  Else if 用戶選擇ccsan算法</p><p><b>  運行 ccan算法</b></p&

47、gt;<p>  Else if 用戶選擇 NStepScan算法</p><p>  運行 NStepScan算法</p><p>  Else if 用戶選擇 Fscan算法</p><p>  運行 NStepScan算法</p><p><b>  End if</b></p>&

48、lt;p>  If 有新的磁盤訪問加入</p><p><b>  添加到磁盤隊列中</b></p><p><b>  End if </b></p><p>  磁盤管理和調(diào)度模塊的類圖</p><p><b>  磁盤管理的完成情況</b></p>

49、<p>  經(jīng)過兩個星期的努力,最終完成本模塊所要求的任務。對磁盤的增刪改查都定義了良好的借口,便于和文件管理模塊集成。此外,我也單獨寫了一個磁盤調(diào)度模塊,用來展示五種磁盤調(diào)度算法。</p><p>  不過,我并沒有完成當初預想的任務,即把我的模塊寫成C/S模式,并加入一個消息管理模塊,專門來接受、發(fā)送、處理消息。由于我們的模塊不是很龐大,王昭陽直接調(diào)用我寫給他的函數(shù)即可。</p>&l

50、t;p>  最后,我還負責整合團隊中其他三位成員的代碼,并加入了注冊登錄界面。</p><p>  下面來看我們的系統(tǒng)。首先是模擬Linux多用戶登錄,輸入賬號和密碼,便可以進入我們的系統(tǒng)。如果用戶還未有賬號和密碼,可以先注冊,再進入系統(tǒng)。</p><p><b>  1)進入系統(tǒng)</b></p><p>  點擊登錄后,就可以看到我們模

51、擬操作系統(tǒng)的各種管理了。</p><p><b>  2)選擇演示模塊</b></p><p>  界面上的四個按鈕,分別代表我們四人負責的模塊</p><p>  其中虛擬文件系統(tǒng)已經(jīng)包跨了磁盤管理與調(diào)度系統(tǒng),但我編寫的模塊獨立性很強,接口定義良好,作為一個單獨的模塊演示也很好看。由于磁盤調(diào)度與磁盤管理和文件管理沒有太多關(guān)系,用戶會看到兩個窗

52、口,第一個是磁盤管理窗口,第二個是磁盤調(diào)度算法窗口。</p><p><b>  實際效果如下面截圖</b></p><p><b>  3)新建文件</b></p><p>  磁盤上本來就有一些文件和文件夾,我們把它當做系統(tǒng)文件。點擊新增按鈕,會彈出一個窗口,提示用戶輸入相應的數(shù)據(jù)。如新建一個大小為5,名字為li,直接

53、放在根目錄下的文件。</p><p>  點擊確定,磁盤上就會多出五個綠色的盤塊號,并寫著li,實際如下面所示</p><p>  當你點擊new時,就會new一個FileDialog類,該類繼承了抽象堅挺器接口,如下所示。</p><p>  public class FileDialog extends JDialog implements ActionList

54、ener</p><p>  用戶輸入數(shù)據(jù)后,點擊確定,系統(tǒng)獲取用戶輸入的數(shù)據(jù),并調(diào)用相應的方法,為文件分配盤塊。代碼如下</p><p>  if (dialog_type.equals("NEW")) {//用戶要新增一個文件</p><p>  //創(chuàng)建函數(shù)所需的信息對象</p><p>  m = new Mess

55、age(text_name.getText(), text_fileType</p><p>  .getSelectedItem().toString(), Integer</p><p>  .parseInt(text_size.getText()), Integer</p><p>  .parseInt(text_parentN.getText()));&

56、lt;/p><p>  //調(diào)用分配空間方法</p><p>  m = d.allocateSpace(m);</p><p><b>  4)刪除文件</b></p><p>  當用戶點擊delete時,也會有一個相應的對話框彈出,示意用戶所需要輸入的數(shù)據(jù)。</p><p>  輸入8并按確定后

57、,初始盤塊為8的文件就被刪除了,結(jié)果如下圖</p><p>  刪除的流程和新建差不多,系統(tǒng)獲取用戶輸入的信息后,new一個信息對象,便執(zhí)行刪除方法,代碼如下</p><p>  else if (dialog_type.equals("DELETE")) { //執(zhí)行刪除功能</p><p>  //創(chuàng)建刪除磁盤上文件所需的信息</p&g

58、t;<p>  m = new Message(Integer.parseInt(text_fileSA.getText()));</p><p>  m = d.reclaimSpace(m);//執(zhí)行刪除方法</p><p>  frame.setMessage(m);</p><p><b>  增加空間</b></p

59、><p>  點擊增加空間按鈕,同樣有一個增加空間的對話框,用戶輸入必須的數(shù)據(jù)后,就可以為相應的盤塊號增加空間。這次拿初始盤塊號為1,末尾盤塊號為3的文件,增加空間為3。未增加前分布和顏色如下</p><p><b>  點擊增加</b></p><p>  增加以后,盤塊分布如下</p><p><b>  減少

60、空間</b></p><p>  減少是增加的逆操作,下面值演示,不解釋了</p><p>  減少空間后,分布如下</p><p><b>  重命名</b></p><p>  點擊重命名按鈕,輸入重命名文件的其實盤塊號,文件大小,以及需要改變的新名稱,就可以更改文件的名稱了。</p>&l

61、t;p>  更改后的名稱如下,其顏色也會有相應的改變。</p><p><b>  磁盤調(diào)度算法,</b></p><p>  磁盤調(diào)度模塊總共展示五種磁盤算法,fcfs算法,sstf算法,scan算法,cscan算法,NS算法。磁道的總數(shù)由用戶自己決定,初始盤塊號也有用戶自己決定。如果用戶不想輸入磁盤數(shù)和初始磁道,那么系統(tǒng)會分配一個默認值。默認情況下,磁道的總

62、數(shù)是10,初始盤塊號為100。</p><p>  需要點擊創(chuàng)建磁道來獲取初始化磁道的信息,一步步如下圖</p><p>  上面顯示的是初始化后,磁道的分布情況。左邊是磁道出現(xiàn)的先后順序,由于沒有開始演示調(diào)度算法,訪問距離和平均訪問距離都為0。右邊則按磁道的編號來展示磁道的分布,最小編號牌最上面,最大編號排最下面。黑色的代表未被訪問的磁道,紅色的代表初始磁道號。</p>&

63、lt;p>  如果點擊fcfs算法,左邊會給每一個磁道填上相應的訪問距離,并統(tǒng)計平均訪問距離,右邊會按照磁道訪問的先后順序,以此顯示磁道的顏色。藍色代表將要訪問的磁道,綠色代表已經(jīng)被訪問過的磁道。磁盤調(diào)度算法演示完成后,右邊的磁盤便會恢復原狀。</p><p>  下面展示每一種磁盤調(diào)度算法的演示情況</p><p>  由于NStepScan算法是scan算法的累加,于是沒有動態(tài)演

64、示效果,只有靜態(tài)的訪問順序。</p><p><b>  總結(jié)和心得</b></p><p>  經(jīng)過兩個星期的努力,終于如愿完成了操作系統(tǒng)課程設計。整個過程雖然比較辛苦,有時也會感到比較煩躁,但我學到了很多東西,領(lǐng)悟了許多道理。</p><p><b>  學習</b></p><p>  第一次

65、真實感受到軟件工程方法所帶來的巨大成效。以前都只是憑著腦子想東西,就一行行寫下了代碼。寫出來的東西沒有一個清晰的架構(gòu),整個過程也沒有明顯的步驟?;旧鲜窍氲侥木蛯懙侥?,寫出來的程序能完成功能,但兼容性很差,更別提到和其他的模塊兼容。</p><p>  這次,我們小組按照軟件工程的一般做法。從概要設計,詳細設計,程序設計,編碼,模塊測試,集成測試,系統(tǒng)測試和最后的交付驗收,我們每一步都做了相應的工作,結(jié)果很讓人滿

66、意。我們各自都提出了自己的設想,最后也都基本完成了各自設計的程序。</p><p>  2要勇于想象。我以前從來都沒有寫過磁盤管理模塊的相關(guān)程序,這次我閱讀了磁盤管理和調(diào)度的基本原理后,就有了初步的想法。接著把自己所想的東西,變成自己可以看到的東西。Java的功能十分強大,我想是想的相應算法,它都提供了相應的接口和類來供我使用。</p><p>  自己做出了漂亮的磁盤管理界面后,心中也十

67、分歡快。</p><p>  要擅于參考優(yōu)秀的代碼。我以前從未用 java圖形界面工具Swing做過如此復雜的動態(tài)想過演示。一個個控件、按鈕、以及數(shù)據(jù)的輸入和輸出,我都不知道如何整理。但我從一個漂亮的圖形界面程序中學習良好的架構(gòu),從而做出了自己想要的效果。</p><p>  當然,在這個過程中,也遇到了很多問題,有客觀的,也有主觀的,下面我分析這些問題都是怎樣的,以及我是怎樣解決的。&l

68、t;/p><p><b>  問題</b></p><p>  接口問題。磁盤管理模塊和文件管理模塊聯(lián)系十分緊密,但偏偏分成了兩個模塊,分別給兩個人做。我們要寫一個公用的接口,以便到時候集成到一起時,能夠讓磁盤分配和文件分配同步。我們考慮再三,便決定用一個javaBean來作為信息的在體,我們進行增刪查改時都是根據(jù)這個對象中的信息來進行操作。除此之外,我們沒一個操作都對應

69、一個獨立的方法,這樣操作間就不會有太大的影響。</p><p>  最后,我們把兩個模塊集成到一起時,很快就實現(xiàn)了同步,因為大家都用了類似的接口。</p><p>  2.數(shù)據(jù)結(jié)構(gòu)的使用。用什么來記錄磁盤上文件的數(shù)據(jù),以及如何記錄文件的分配情況。要能夠既快又節(jié)省空間。最后我使用了一個二維的boolean數(shù)組來記錄磁盤的使用情況,當這個數(shù)據(jù)為false時,該盤塊號沒有被使用,為true時,就

70、使用了。那么進行增刪改查時,都要根據(jù)這個二維布爾數(shù)組來進行操作。而相應的存儲磁盤的信息,就存放在一個Block二維數(shù)組中,現(xiàn)實磁盤信息就存儲在JButton的數(shù)組中,這樣,存儲,現(xiàn)實,和整體磁盤信息分離,能夠很好的兼容其他的情況,能根據(jù)需求做出相應的改變。</p><p>  最后,我很高興自己能夠設計出這樣的一個磁盤管理系統(tǒng)。日后再遇到一些任務時,便可以更好的應對。這次可程設計,也為我日后編寫程序打下了堅實的基

71、礎。自己這么多天的努力總算沒有白費,以后我可以自信的說自己能夠設計出對用戶友好的,并且有漂亮圖形界面的軟件。</p><p><b>  參考文獻:</b></p><p> ?。?)湯小丹,梁紅兵,哲鳳屏,湯子瀛 計算機操作系統(tǒng) 西安電子科技大學出版社 </p><p>  (2)胡志剛等. 計算機操作系統(tǒng). 中南大學出版社,2005<

72、/p><p>  (3)陳向群等. Windows內(nèi)核實驗教程. 機械工業(yè)出版社,2004</p><p>  (4)羅宇等. 操作系統(tǒng)課程設計. 機械工業(yè)出版社,2005</p><p><b>  代碼如下</b></p><p><b>  我所負責模塊的結(jié)構(gòu)</b></p><

73、;p>  DiskDemo.java</p><p>  package com.csu.disk.display;</p><p>  import java.awt.BorderLayout;</p><p>  import java.awt.Color;</p><p>  import java.awt.Container;&

74、lt;/p><p>  import java.awt.Dimension;</p><p>  import java.awt.Font;</p><p>  import java.awt.GridLayout;</p><p>  import java.awt.Toolkit;</p><p>  import j

75、avax.swing.JButton;</p><p>  import javax.swing.JFrame;</p><p>  import javax.swing.JMenu;</p><p>  import javax.swing.JMenuBar;</p><p>  import javax.swing.JMenuItem;&

76、lt;/p><p>  import javax.swing.JPanel;</p><p>  import javax.swing.JSplitPane;</p><p>  import javax.swing.JTabbedPane;</p><p>  import javax.swing.JTextArea;</p>&

77、lt;p>  import javax.swing.JToolBar;</p><p>  import javax.swing.UIManager;</p><p>  import com.csu.action.ToolBarAction;</p><p>  import com.csu.attemper.AttemperAlgorithm;</p

78、><p>  import com.csu.disk.pojo.Message;</p><p>  public class DiskDemo extends JFrame{</p><p>  private static final int WIDTH=800;</p><p>  private static final int HEIG

79、HT=600;</p><p>  private Disk disk;</p><p>  private Message message = new Message();</p><p>  private JButton[][] demoBlocks;</p><p>  private Container container;<

80、/p><p>  private JPanel blocksPanel,buttonPanel,lTextPanel,bTextPanel;</p><p>  private JTextArea lText,bText;</p><p>  private JTabbedPane bTextTab; </p><p>  private JMe

81、nu menu1,menu2 ;</p><p>  private JMenuItem item1,item2;</p><p>  private JMenuBar bar;</p><p>  //private JScrollPane ;</p><p>  public DiskDemo(){</p><p&g

82、t;  super("Demo disk assignment");</p><p>  demoBlocks = new JButton[Disk.diskRodes][Disk.diskColumns];</p><p>  disk = new Disk(this);</p><p>  setFrame();</p><

83、;p>  initData();</p><p>  //UIManager.put("Button.font",new Font("隸書",1,15));</p><p><b>  }</b></p><p>  public static void main(String[] args){

84、</p><p>  new DiskDemo();</p><p><b>  }</b></p><p>  public void initData(){</p><p>  Message message = new Message("hu","folder",1,-1);

85、</p><p>  disk.allocateSpace(message);</p><p>  message = new Message("qiao","file",3,-1);</p><p>  disk.allocateSpace(message);</p><p>  message =

86、new Message("nan","file",3,0);</p><p>  disk.allocateSpace(message);</p><p>  message = new Message("li","folder",1,0);</p><p>  disk.allocat

87、eSpace(message);</p><p>  message = new Message("jia","file",6,-1);</p><p>  disk.allocateSpace(message);</p><p>  changeDiskInfo();</p><p><b>

88、;  }</b></p><p>  public void setFrame(){</p><p><b>  //菜單</b></p><p>  menu1 = new JMenu("開始");</p><p>  item1 = new JMenuItem("退出&quo

89、t;);</p><p>  menu1.add(item1);</p><p>  JMenu menu2 = new JMenu("關(guān)于");</p><p>  item2 = new JMenuItem("介紹");</p><p>  menu2.add(item2);</p>

90、<p>  bar = new JMenuBar();</p><p>  bar.add(menu1);</p><p>  bar.add(menu2);</p><p>  this.setJMenuBar(bar);</p><p><b>  //新建一個工具條</b></p><

91、p>  JToolBar toolBar = new JToolBar();</p><p>  toolBar.setFloatable(true);</p><p>  //新建五個抽象動作類</p><p>  ToolBarAction file_new = new ToolBarAction("NEW",null,this);&l

92、t;/p><p>  ToolBarAction file_del = new ToolBarAction("DELETE",null,this);</p><p>  ToolBarAction file_add = new ToolBarAction("ADD",null,this);</p><p>  ToolBarAct

93、ion file_dec = new ToolBarAction("DEC",null,this);</p><p>  ToolBarAction file_sea = new ToolBarAction("RENAME",null,this);</p><p>  //把第一個按鈕加入工具條</p><p>  toolB

94、ar.setFloatable(true);</p><p>  JButton jb;</p><p>  jb = toolBar.add(file_new);</p><p>  jb.setActionCommand("NEW");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipTex

95、t("新建"); </p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator(); //增加一個隔離欄</p><p>  //把第刪除按鈕加入工具條</p><p>  jb = toolBar.add(file_del);</p>

96、<p>  jb.setActionCommand("DELETE");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("開始");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator();

97、</p><p>  jb = toolBar.add(file_add);//把第增加按鈕加入工具條</p><p>  jb.setActionCommand("ADD");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("增加");</p><p>  jb

98、.setFocusPainted(false);</p><p>  toolBar.addSeparator();</p><p>  jb = toolBar.add(file_dec);//把第減少按鈕加入工具條</p><p>  jb.setActionCommand("DEC");//設置其產(chǎn)生事件所顯示的命令</p>

99、<p>  jb.setToolTipText("減少");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator();</p><p>  jb = toolBar.add(file_sea);//把第重命名按鈕加入工具條</p><

100、p>  jb.setActionCommand("RENAME");//設置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("查找");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator();</p

101、><p>  this.add(toolBar,BorderLayout.NORTH); //設置其布局,放在最上面</p><p>  /*設置左邊 tab 面板*/</p><p>  JTabbedPane queues = new JTabbedPane(JTabbedPane.TOP);</p><p>  blocksPanel =

102、new JPanel();</p><p>  blocksPanel.setLayout(new GridLayout(Disk.diskRodes,Disk.diskColumns));</p><p>  blocksPanel.setBackground(Color.gray);</p><p>  for(int i=0;i<Disk.diskRod

103、es;i++){</p><p>  for(int j=0;j<Disk.diskColumns;j++){</p><p>  JButton block = new JButton();</p><p>  block.setBackground(Color.black);</p><p>  block.setToolTipTe

104、xt("R"+i+"C"+j+"Block"+(i*Disk.diskColumns+j));</p><p>  demoBlocks[i][j] = block;</p><p>  blocksPanel.add(block);</p><p><b>  }</b></p

105、><p><b>  }</b></p><p><b>  //磁盤總體信息</b></p><p>  bText = new JTextArea();</p><p>  bText.setBackground(Color.lightGray);</p><p>  bTe

106、xt.setEditable(false);</p><p>  bText.setBackground(Color.white);</p><p>  String diskInfo = "磁盤大?。?quot;+Disk.totalBlocks+"\t已用空間:"+(Disk.totalBlocks-Disk.freeB)+"\t剩余空間:&qu

107、ot;+Disk.freeB;</p><p>  bText.setText(diskInfo);</p><p>  bTextTab = new JTabbedPane();</p><p>  bTextTab.add("磁盤信息",bText);</p><p>  /*整體顯示布局*/</p>&

108、lt;p>  JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,blocksPanel,bTextTab);</p><p>  jsp.setDividerLocation(450);</p><p>  JTabbedPane jtb2 = new JTabbedPane();</p>&l

109、t;p>  jtb2.add("磁盤分配", jsp);</p><p>  AttemperAlgorithm aal = new AttemperAlgorithm();</p><p>  //jtb2.add("磁盤調(diào)度",aal.jsp2);</p><p>  jtb2.validate();</p

110、><p>  this.add(jtb2,BorderLayout.CENTER);</p><p>  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();</p><p>  this.setBounds(((int)d.getWidth()-WIDTH)/2, ((int)d.getHeight()-

111、HEIGHT)/2, WIDTH, HEIGHT);</p><p>  this.setSize(800, 600);</p><p>  this.setVisible(true);</p><p>  this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);</p><p><

112、b>  }</b></p><p>  public void changeDiskInfo(){</p><p>  bText.setText("磁盤大小:"+Disk.totalBlocks+"\t已用空間:"+(Disk.totalBlocks-Disk.freeB)+"\t剩余空間:"+Disk.fre

113、eB);</p><p><b>  }</b></p><p>  public Disk getDisk() {</p><p>  return disk;</p><p><b>  }</b></p><p>  public void setDisk(Disk d

114、isk) {</p><p>  this.disk = disk;</p><p><b>  }</b></p><p>  public Message getMessage() {</p><p>  return message;</p><p><b>  }</b&g

115、t;</p><p>  public void setMessage(Message message) {</p><p>  this.message = message;</p><p><b>  }</b></p><p>  public JButton[][] getDemoBlocks() {</p

116、><p>  return demoBlocks;</p><p><b>  }</b></p><p>  public void setDemoBlocks(JButton[][] demoBlocks) {</p><p>  this.demoBlocks = demoBlocks;</p><

117、p><b>  }</b></p><p><b>  }</b></p><p><b>  Disk.java</b></p><p>  package com.csu.disk.display;</p><p>  import java.awt.Color;&l

118、t;/p><p>  import java.awt.Font;</p><p>  import javax.swing.JButton;</p><p>  import com.csu.disk.pojo.Block;</p><p>  import com.csu.disk.pojo.Message;</p><p&

119、gt;  import com.csu.disk.pojo.MyColor;</p><p>  public class Disk {</p><p>  public static int diskRodes = 10;</p><p>  public static int diskColumns = 6;</p><p>  publ

120、ic static int totalBlocks = diskRodes * diskColumns;</p><p>  public static int freeB= totalBlocks;</p><p>  public Block[][] blockTable = new Block[diskRodes][diskColumns];</p><p>

121、  // 用位示圖法來表示磁盤空閑狀況</p><p>  private boolean[][] diskFreeMap = new boolean[diskRodes][diskColumns];</p><p>  private DiskDemo demo;</p><p>  private MyColor myColor = new MyColor();

122、</p><p>  private JButton[][] demoBlocks ;</p><p>  JButton button_temp ;</p><p>  public Disk(){</p><p><b>  }</b></p><p>  public Disk(DiskD

123、emo demo){</p><p>  this.demo = demo;</p><p>  this.demoBlocks = demo.getDemoBlocks();</p><p><b>  }</b></p><p>  public static void main(String[] args) {&l

124、t;/p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 獲取空間盤塊的行列值,同時把空閑盤塊拿出來</p><p>  * @param size 所需空間大小</p><p>  * @return 長度為2*size的數(shù)組

125、,沒兩個相鄰值為一個節(jié)點地址</p><p><b>  */</b></p><p>  public int[] getFreeBlocks(int size){</p><p>  int [] free = new int[size*2];</p><p>  int count=0;</p>&l

126、t;p>  for(int i=0;i<Disk.diskRodes;i++){</p><p>  for(int j=0;j<Disk.diskColumns;j++){</p><p>  if(count==size*2)break;</p><p>  if(diskFreeMap[i][j]==false){</p>&l

127、t;p>  diskFreeMap[i][j]=true;</p><p>  free[count++] = i;</p><p>  free[count++] = j;</p><p><b>  }</b></p><p><b>  }</b></p><p>

128、;  if(count==size*2)break;</p><p><b>  }</b></p><p>  return free;</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 找到父

溫馨提示

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

評論

0/150

提交評論