

版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤(pán)調(diào)度報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告磁盤(pán)空間管理
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 操作系統(tǒng)磁盤(pán)調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤(pán)文件操作
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤(pán)調(diào)度算法
- 課程設(shè)計(jì)---操作系統(tǒng)課程設(shè)計(jì)之linux磁盤(pán)空間管理
- 操作系統(tǒng)課程設(shè)計(jì)--磁盤(pán)調(diào)度算法實(shí)踐
- 操作系統(tǒng)課程設(shè)計(jì)-磁盤(pán)調(diào)度模擬法
- cscan磁盤(pán)調(diào)度算法---操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設(shè)計(jì)
- 《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論