操作系統(tǒng)課程設(shè)計(jì)報(bào)告----磁盤(pán)管理模塊告_第1頁(yè)
已閱讀1頁(yè),還剩67頁(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><b>  目錄</b></p><p>  項(xiàng)目概述…………………………....3</p><p>  基本概念和原理…………………………5</p><p>  詳細(xì)設(shè)計(jì)………………………….....6</p><p>  總結(jié)和心得.

2、..............................................................24</p><p>  參考文獻(xiàn)...................................................................25</p><p>  參考代碼.................................

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

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

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

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

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

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

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

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

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

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

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

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

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

16、夾:</b></p><p><b>  文件:</b></p><p><b>  文件夾的子文件:</b></p><p><b>  磁盤(pán)的使用信息:</b></p><p>  磁盤(pán)管理及調(diào)度模塊詳細(xì)設(shè)計(jì)說(shuō)明書(shū)</p><p><

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

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

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

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

21、t;/p><p>  JToolBar toolBar = new JToolBar();</p><p>  toolBar.setFloatable(true);</p><p>  //新建五個(gè)抽象動(dòng)作類</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>  //把第一個(gè)按鈕加入工具條</p>&l

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

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

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

27、ddSeparator();</p><p>  jb = toolBar.add(file_add);//把第增加按鈕加入工具條</p><p>  jb.setActionCommand("ADD");//設(shè)置其產(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");//設(shè)置其產(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");//設(shè)置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("查找");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSepa

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

53、放在根目錄下的文件。</p><p>  點(diǎn)擊確定,磁盤(pán)上就會(huì)多出五個(gè)綠色的盤(pán)塊號(hào),并寫(xiě)著li,實(shí)際如下面所示</p><p>  當(dāng)你點(diǎn)擊new時(shí),就會(huì)new一個(gè)FileDialog類,該類繼承了抽象堅(jiān)挺器接口,如下所示。</p><p>  public class FileDialog extends JDialog implements ActionList

54、ener</p><p>  用戶輸入數(shù)據(jù)后,點(diǎn)擊確定,系統(tǒng)獲取用戶輸入的數(shù)據(jù),并調(diào)用相應(yīng)的方法,為文件分配盤(pán)塊。代碼如下</p><p>  if (dialog_type.equals("NEW")) {//用戶要新增一個(gè)文件</p><p>  //創(chuàng)建函數(shù)所需的信息對(duì)象</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>  當(dāng)用戶點(diǎn)擊delete時(shí),也會(huì)有一個(gè)相應(yīng)的對(duì)話框彈出,示意用戶所需要輸入的數(shù)據(jù)。</p><p>  輸入8并按確定后

57、,初始盤(pán)塊為8的文件就被刪除了,結(jié)果如下圖</p><p>  刪除的流程和新建差不多,系統(tǒng)獲取用戶輸入的信息后,new一個(gè)信息對(duì)象,便執(zhí)行刪除方法,代碼如下</p><p>  else if (dialog_type.equals("DELETE")) { //執(zhí)行刪除功能</p><p>  //創(chuàng)建刪除磁盤(pán)上文件所需的信息</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>  點(diǎn)擊增加空間按鈕,同樣有一個(gè)增加空間的對(duì)話框,用戶輸入必須的數(shù)據(jù)后,就可以為相應(yīng)的盤(pán)塊號(hào)增加空間。這次拿初始盤(pán)塊號(hào)為1,末尾盤(pán)塊號(hào)為3的文件,增加空間為3。未增加前分布和顏色如下</p><p><b>  點(diǎn)擊增加</b></p><p>  增加以后,盤(pán)塊分布如下</p><p><b>  減少

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

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

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

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

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

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

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

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

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

69、一個(gè)獨(dú)立的方法,這樣操作間就不會(huì)有太大的影響。</p><p>  最后,我們把兩個(gè)模塊集成到一起時(shí),很快就實(shí)現(xiàn)了同步,因?yàn)榇蠹叶加昧祟愃频慕涌凇?lt;/p><p>  2.數(shù)據(jù)結(jié)構(gòu)的使用。用什么來(lái)記錄磁盤(pán)上文件的數(shù)據(jù),以及如何記錄文件的分配情況。要能夠既快又節(jié)省空間。最后我使用了一個(gè)二維的boolean數(shù)組來(lái)記錄磁盤(pán)的使用情況,當(dāng)這個(gè)數(shù)據(jù)為false時(shí),該盤(pán)塊號(hào)沒(méi)有被使用,為true時(shí),就

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

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

72、/p><p>  (3)陳向群等. Windows內(nèi)核實(shí)驗(yàn)教程. 機(jī)械工業(yè)出版社,2004</p><p>  (4)羅宇等. 操作系統(tǒng)課程設(shè)計(jì). 機(jī)械工業(yè)出版社,2005</p><p><b>  代碼如下</b></p><p><b>  我所負(fù)責(zé)模塊的結(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("隸書(shū)",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("開(kāi)始");</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>  //新建一個(gè)工具條</b></p><

91、p>  JToolBar toolBar = new JToolBar();</p><p>  toolBar.setFloatable(true);</p><p>  //新建五個(gè)抽象動(dòng)作類</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>  //把第一個(gè)按鈕加入工具條</p><p>  toolB

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

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

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

97、</p><p>  jb = toolBar.add(file_add);//把第增加按鈕加入工具條</p><p>  jb.setActionCommand("ADD");//設(shè)置其產(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");//設(shè)置其產(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");//設(shè)置其產(chǎn)生事件所顯示的命令</p><p>  jb.setToolTipText("查找");</p><p>  jb.setFocusPainted(false);</p><p>  toolBar.addSeparator();</p

101、><p>  this.add(toolBar,BorderLayout.NORTH); //設(shè)置其布局,放在最上面</p><p>  /*設(shè)置左邊 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>  //磁盤(pán)總體信息</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 = "磁盤(pán)大?。?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("磁盤(pán)信息",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("磁盤(pán)分配", jsp);</p><p>  AttemperAlgorithm aal = new AttemperAlgorithm();</p><p>  //jtb2.add("磁盤(pán)調(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("磁盤(pán)大?。?quot;+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、  // 用位示圖法來(lái)表示磁盤(pán)空閑狀況</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án)塊的行列值,同時(shí)把空閑盤(pán)塊拿出來(lái)</p><p>  * @param size 所需空間大小</p><p>  * @return 長(zhǎng)度為2*size的數(shù)組

125、,沒(méi)兩個(gè)相鄰值為一個(gè)節(jié)點(diǎn)地址</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. 本站所有資源如無(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)論