




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告學(xué)號(hào):姓名:班級(jí):指導(dǎo)老師:學(xué)院:信息科學(xué)與工程學(xué)院目錄項(xiàng)目概述.3基本概念和原理5詳細(xì)設(shè)計(jì).6總結(jié)和心得.24參考文獻(xiàn).25參考代碼.25磁盤管理概要說明1、 引言目的:確定磁盤管理模塊的總體結(jié)構(gòu)、與其他模塊之間的接口和總體流程。使用者:軟件開發(fā)人員和維護(hù)人員。本模塊是操作系統(tǒng)模擬軟件中的演示磁盤管理的模塊,主要來展示文件在磁盤上的存儲(chǔ)情況,因此和文件管理模塊聯(lián)系最為緊密。磁盤調(diào)度算法是一個(gè)專門的演示模塊,與磁盤管理模塊物理相似,和其他模塊無實(shí)際聯(lián)系。2、 總體設(shè)計(jì)采用java語言,使用圖形化界面工具swing,以表格的形式來模擬磁盤存儲(chǔ)結(jié)構(gòu)。一行代表一個(gè)磁道,每一行的一
2、個(gè)小格代表一個(gè)盤塊??傮w采用c/s模式,由文件系統(tǒng)發(fā)送消息過來,本模塊經(jīng)過相應(yīng)的處理后,再返回給文件管理模塊其需要的信息。磁盤管理模塊與文件管理模塊本來是一個(gè)完整過程,有了磁盤的存儲(chǔ),才有文件的生成。這兩個(gè)模塊之間要能夠進(jìn)行順暢的消息傳遞。3、 模塊設(shè)計(jì) 模塊功能:磁盤管理1)接收信息 接收從文件管理系統(tǒng)發(fā)送過來的信息。 2)處理信息 對(duì)信息進(jìn)行識(shí)別和處理,轉(zhuǎn)交響應(yīng)的模塊功能。 3)改變磁盤 對(duì)磁盤進(jìn)行增、刪、改、查并返回新的信息 4)返回信息 把新生成的信息返回給文件管理系統(tǒng) 磁盤調(diào)度:1)fcfs算法 2)sstf算法 3)scan算法 4)cscan算法 5)nstepscan算法 6)
3、fscan算法 性能要求:要求磁盤管理模塊的實(shí)時(shí)性非常好,能夠迅速對(duì)文件管理模塊的請(qǐng)求作出響應(yīng)。并且需要有統(tǒng)一的消息格式,以便取得一致性。最后還要有較好的容錯(cuò)性能,當(dāng)磁盤模塊出現(xiàn)異?;蛳⒊霈F(xiàn)某些特殊情況是,要能給出錯(cuò)誤提示。磁盤調(diào)度模塊需要友好的界面。讓使用者輸入數(shù)據(jù),觀察各種磁盤調(diào)度算法,保證算法的正確性。磁盤管理模塊和文件管理模塊的接口使用socket來實(shí)現(xiàn),接收一個(gè)專門的文件消息對(duì)象,處理完畢后,返回給文件管理模塊結(jié)果。結(jié)果也是一個(gè)文件消息對(duì)象。4、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 磁盤管理中,采用二維表來存儲(chǔ)每一個(gè)盤塊。磁盤中文件存放形式有鏈?zhǔn)胶退饕?,單?dú)的文件采用鏈?zhǔn)酱鎯?chǔ),文件夾中的文件采用索引節(jié)點(diǎn)
4、存儲(chǔ)。使用對(duì)象來存儲(chǔ)數(shù)據(jù),進(jìn)行信息轉(zhuǎn)移。 磁盤調(diào)度算法演示中,采用一維數(shù)組來存放所有磁道。左邊用一系列磁道號(hào)靜態(tài)顯示磁道的訪問過程,右邊就是動(dòng)態(tài)變化。用不同的顏色來區(qū)分,將要訪問磁道、已訪問的磁道和新的磁道訪問請(qǐng)求。5、 運(yùn)行設(shè)計(jì) 磁盤管理模塊 磁盤信息diskmessagecontrol文件操作 message message 讀取磁盤信息blocks 修改磁盤信息 初始數(shù)據(jù) 改變 返回用戶輸入 存儲(chǔ) 結(jié)果用戶界面:0| file1 |22|file1 |-1磁盤大小:128kb 已用空間:32kb 可用空間:36kb 當(dāng)前文件:file1 磁盤調(diào)度管理運(yùn)行算法 用戶 選擇數(shù)據(jù) 性能結(jié)果用戶
5、界面總磁道數(shù):100 原始請(qǐng)求數(shù)據(jù):4,20,44,8,78 添加磁道請(qǐng)求: 添加 其實(shí)磁道: 初始方向:6、 故障處理說明出現(xiàn)故障,磁盤會(huì)產(chǎn)生一個(gè)message對(duì)象,對(duì)象中的異常信息能夠描述異常,并返回給文件系統(tǒng)。故障原因文件創(chuàng)建失敗磁盤已滿、需要空間剩余空間、文件名重復(fù)找不到該文件文件信息錯(cuò)誤修改文件失敗磁盤已滿、需要空間剩余空間7、 其他設(shè)計(jì)當(dāng)需求發(fā)生變化后,要能夠修改并滿足新的需求。如磁盤初始空間要求更大、要求增加二級(jí)索引節(jié)點(diǎn),增加文件類型后也要能夠較好維護(hù)。磁盤管理的基本概念和原理首先用,給用戶展示磁盤的分布情況,未分配給任何文件的盤塊號(hào)為黑色。分配給同一文件的盤塊號(hào)為同一種顏色,系
6、統(tǒng)總共獲取了十四種顏色。因此可以看到彩色的磁盤分布情況。除了使用顏色區(qū)分盤塊所屬的文件,每個(gè)盤塊上面寫明了盤塊的編號(hào),所分配的文件類型,所分配文件的名字,以及其父文件的節(jié)點(diǎn)。默認(rèn)情況下,其父節(jié)點(diǎn)為-1,就是直接放在根目錄下的文件所有的文件類型分為兩種,一種是“文件”,用file表示。一種是“文件夾”,用folder表示。文件的大小任意,只要不超出磁盤的空間。而文件夾的大小就是固定的,只能是1。文件夾中有十個(gè)索引節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)鏈接到一個(gè)文件或文件夾,以此建立起一棵以文件夾為根節(jié)點(diǎn)的文件樹。此外在現(xiàn)實(shí)框的最下層,顯示了磁盤的使用情況??偙P塊數(shù),已使用盤塊和未使用盤塊。展示給用戶的界面如下圖所示 每
7、一個(gè)盤塊的信息顯示實(shí)圖文件夾:文件:文件夾的子文件:磁盤的使用信息:磁盤管理及調(diào)度模塊詳細(xì)設(shè)計(jì)說明書 一、引言 目的:確定磁盤管理模塊的總體結(jié)構(gòu)、與其他模塊之間的接口和總體流程。使用者:軟件開發(fā)人員和維護(hù)人員。本模塊是操作系統(tǒng)模擬軟件中的演示磁盤管理的模塊,主要來展示文件在磁盤上的存儲(chǔ)情況,因此和文件管理模塊聯(lián)系最為緊密。磁盤調(diào)度算法是一個(gè)專門的演示模塊,與磁盤管理模塊物理相似,和其他模塊無實(shí)際聯(lián)系2、 軟件結(jié)構(gòu)磁盤管理模塊采用c/s模式,模塊又分成三個(gè)子模塊。磁盤管理、圖形化顯示,磁盤調(diào)度分為一個(gè)模塊,六個(gè)功能。3、 模塊設(shè)計(jì)說明磁盤管理模塊磁盤管理模塊需要對(duì)磁盤進(jìn)行增刪查改操作,以下是每一
8、個(gè)操作的流程圖。磁盤演示模塊的整體流程圖對(duì)應(yīng)于這個(gè)模塊的用戶界面如下:new代表新建一個(gè)文件,delete選項(xiàng)用來刪除一個(gè)文件,add選項(xiàng)用來為一個(gè)文件增加空間,dec選項(xiàng)為一個(gè)文件減小空間,rename給文件重命名。整個(gè)顯示的是一個(gè)jtoolbar類,jtoolbar需要增加動(dòng)作類來產(chǎn)生button按鈕,總共new出了五個(gè)抽象動(dòng)作類,于是出現(xiàn)了上面看到的五個(gè)按鈕。相應(yīng)的代碼如下/新建一個(gè)工具條jtoolbar toolbar = new jtoolbar();toolbar.setfloatable(true);/新建五個(gè)抽象動(dòng)作類toolbaraction file_new = new t
9、oolbaraction(new,null,this);toolbaraction file_del = new toolbaraction(delete,null,this);toolbaraction file_add = new toolbaraction(add,null,this);toolbaraction file_dec = new toolbaraction(dec,null,this);toolbaraction file_sea = new toolbaraction(rename,null,this);/把第一個(gè)按鈕加入工具條toolbar.setfloatable(t
10、rue);jbutton jb;jb = toolbar.add(file_new);jb.setactioncommand(new);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(新建); jb.setfocuspainted(false);toolbar.addseparator(); /增加一個(gè)隔離欄/把第刪除按鈕加入工具條jb = toolbar.add(file_del);jb.setactioncommand(delete);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(開始);jb.setfocuspainted(false);toolbar.
11、addseparator();jb = toolbar.add(file_add);/把第增加按鈕加入工具條jb.setactioncommand(add);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(增加);jb.setfocuspainted(false);toolbar.addseparator();jb = toolbar.add(file_dec);/把第減少按鈕加入工具條jb.setactioncommand(dec);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(減少);jb.setfocuspainted(false);toolbar.ad
12、dseparator();jb = toolbar.add(file_sea);/把第重命名按鈕加入工具條jb.setactioncommand(rename);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(查找);jb.setfocuspainted(false);toolbar.addseparator();this.add(toolbar,borderlayout.north); /設(shè)置其布局,放在最上面為新建的文件分配磁盤空間,該函數(shù)是disk中的allocate方法public message allocatespace(message message)刪除一個(gè)文件
13、的流程圖,該函數(shù)是disk中的deleteff()方法,public void deleteff(int startadd)修改一個(gè)文件的流程圖,它對(duì)應(yīng)disk中的兩個(gè)函數(shù),addspace和reclaimspace(message),程序中是:public message addspace(message message),public message reclaimspace(message message)。文件重命名的流程圖如下,其對(duì)應(yīng)的是renewfile函數(shù),public void renewfile(message message)文件重命名最開始設(shè)計(jì)時(shí),把消息模塊也加入了程序中
14、,后來這個(gè)模塊被刪掉了。1)接收消息 功能名稱:接收消息參與執(zhí)行者:用戶前置條件:一個(gè)合法的登錄用戶程序流: a.if 沒有消息 繼續(xù)等待 else 獲取消息if 消息對(duì)象是message實(shí)例 交給消息控制著處理返回 aelse 返回message實(shí)例,提示該消息類型錯(cuò)誤。 end ifend if2) 消息處理功能名稱:消息處理參與執(zhí)行者:消息控制對(duì)象前置條件:收到一個(gè) message對(duì)象程序流: a if 操作類型合法if 文件類型合法把消息交給磁盤來處理else 把消息交給磁盤處理添加操作消息文件類型無法識(shí)別end ifelse 生成新信息,返回操作類型不合法end if3) 磁盤分配功
15、能名稱:磁盤分配參與執(zhí)行者:磁盤對(duì)象前置條件:已經(jīng)收到一個(gè)可操作的消息對(duì)象程序流:if 磁盤未滿 if 所需空間=剩余空間 if 此文件的父文件為文件夾 找到其父文件 把一個(gè)空閑的盤塊號(hào)分配給新文件,并把改記錄添加到父文件的索引中。繼續(xù)給改文件分配全部空間生成新的信息對(duì)象并返回 else 分配給該文件新的空間 生成新的信息對(duì)象并返回 end if 返回空間不足信息 end if 返回磁盤已滿信息 end if4) 發(fā)送消息 功能名稱:發(fā)送消息 參與執(zhí)行者:消息發(fā)送對(duì)象 前置條件:已經(jīng)從磁盤對(duì)象模塊獲取了一個(gè)消息對(duì)象 程序流: 發(fā)送消息 磁盤調(diào)度模塊功能名稱:磁盤調(diào)度參與執(zhí)行那個(gè)者:用戶前置條件
16、:已經(jīng)登錄的合法用戶程序流: a。 用戶輸入數(shù)據(jù) if 用戶選擇fcfs算法 運(yùn)行fcfs算法else if 用戶選擇sstf算法 運(yùn)行 sstf算法else if 用戶選擇scan算法 運(yùn)行 scan算法else if 用戶選擇ccsan算法 運(yùn)行 ccan算法else if 用戶選擇 nstepscan算法 運(yùn)行 nstepscan算法else if 用戶選擇 fscan算法 運(yùn)行 nstepscan算法end if if 有新的磁盤訪問加入添加到磁盤隊(duì)列中 end if 磁盤管理和調(diào)度模塊的類圖磁盤管理的完成情況經(jīng)過兩個(gè)星期的努力,最終完成本模塊所要求的任務(wù)。對(duì)磁盤的增刪改查都定義了良好
17、的借口,便于和文件管理模塊集成。此外,我也單獨(dú)寫了一個(gè)磁盤調(diào)度模塊,用來展示五種磁盤調(diào)度算法。不過,我并沒有完成當(dāng)初預(yù)想的任務(wù),即把我的模塊寫成c/s模式,并加入一個(gè)消息管理模塊,專門來接受、發(fā)送、處理消息。由于我們的模塊不是很龐大,王昭陽直接調(diào)用我寫給他的函數(shù)即可。最后,我還負(fù)責(zé)整合團(tuán)隊(duì)中其他三位成員的代碼,并加入了注冊(cè)登錄界面。下面來看我們的系統(tǒng)。首先是模擬linux多用戶登錄,輸入賬號(hào)和密碼,便可以進(jìn)入我們的系統(tǒng)。如果用戶還未有賬號(hào)和密碼,可以先注冊(cè),再進(jìn)入系統(tǒng)。1)進(jìn)入系統(tǒng)點(diǎn)擊登錄后,就可以看到我們模擬操作系統(tǒng)的各種管理了。2)選擇演示模塊界面上的四個(gè)按鈕,分別代表我們四人負(fù)責(zé)的模塊
18、其中虛擬文件系統(tǒng)已經(jīng)包跨了磁盤管理與調(diào)度系統(tǒng),但我編寫的模塊獨(dú)立性很強(qiáng),接口定義良好,作為一個(gè)單獨(dú)的模塊演示也很好看。由于磁盤調(diào)度與磁盤管理和文件管理沒有太多關(guān)系,用戶會(huì)看到兩個(gè)窗口,第一個(gè)是磁盤管理窗口,第二個(gè)是磁盤調(diào)度算法窗口。 實(shí)際效果如下面截圖3)新建文件磁盤上本來就有一些文件和文件夾,我們把它當(dāng)做系統(tǒng)文件。點(diǎn)擊新增按鈕,會(huì)彈出一個(gè)窗口,提示用戶輸入相應(yīng)的數(shù)據(jù)。如新建一個(gè)大小為5,名字為li,直接放在根目錄下的文件。點(diǎn)擊確定,磁盤上就會(huì)多出五個(gè)綠色的盤塊號(hào),并寫著li,實(shí)際如下面所示當(dāng)你點(diǎn)擊new時(shí),就會(huì)new一個(gè)filedialog類,該類繼承了抽象堅(jiān)挺器接口,如下所示。public
19、 class filedialog extends jdialog implements actionlistener用戶輸入數(shù)據(jù)后,點(diǎn)擊確定,系統(tǒng)獲取用戶輸入的數(shù)據(jù),并調(diào)用相應(yīng)的方法,為文件分配盤塊。代碼如下if (dialog_type.equals(new) /用戶要新增一個(gè)文件/創(chuàng)建函數(shù)所需的信息對(duì)象m = new message(text_name.gettext(), text_filetype.getselecteditem().tostring(), integer.parseint(text_size.gettext(), integer.parseint(text_pare
20、ntn.gettext();/調(diào)用分配空間方法m = d.allocatespace(m);4)刪除文件當(dāng)用戶點(diǎn)擊delete時(shí),也會(huì)有一個(gè)相應(yīng)的對(duì)話框彈出,示意用戶所需要輸入的數(shù)據(jù)。輸入8并按確定后,初始盤塊為8的文件就被刪除了,結(jié)果如下圖刪除的流程和新建差不多,系統(tǒng)獲取用戶輸入的信息后,new一個(gè)信息對(duì)象,便執(zhí)行刪除方法,代碼如下else if (dialog_type.equals(delete) /執(zhí)行刪除功能/創(chuàng)建刪除磁盤上文件所需的信息m = new message(integer.parseint(text_filesa.gettext();m = d.reclaimspace(
21、m);/執(zhí)行刪除方法frame.setmessage(m);5) 增加空間點(diǎn)擊增加空間按鈕,同樣有一個(gè)增加空間的對(duì)話框,用戶輸入必須的數(shù)據(jù)后,就可以為相應(yīng)的盤塊號(hào)增加空間。這次拿初始盤塊號(hào)為1,末尾盤塊號(hào)為3的文件,增加空間為3。未增加前分布和顏色如下點(diǎn)擊增加增加以后,盤塊分布如下6) 減少空間減少是增加的逆操作,下面值演示,不解釋了減少空間后,分布如下7) 重命名點(diǎn)擊重命名按鈕,輸入重命名文件的其實(shí)盤塊號(hào),文件大小,以及需要改變的新名稱,就可以更改文件的名稱了。更改后的名稱如下,其顏色也會(huì)有相應(yīng)的改變。 磁盤調(diào)度算法,磁盤調(diào)度模塊總共展示五種磁盤算法,fcfs算法,sstf算法,scan算法
22、,cscan算法,ns算法。磁道的總數(shù)由用戶自己決定,初始盤塊號(hào)也有用戶自己決定。如果用戶不想輸入磁盤數(shù)和初始磁道,那么系統(tǒng)會(huì)分配一個(gè)默認(rèn)值。默認(rèn)情況下,磁道的總數(shù)是10,初始盤塊號(hào)為100。需要點(diǎn)擊創(chuàng)建磁道來獲取初始化磁道的信息,一步步如下圖 上面顯示的是初始化后,磁道的分布情況。左邊是磁道出現(xiàn)的先后順序,由于沒有開始演示調(diào)度算法,訪問距離和平均訪問距離都為0。右邊則按磁道的編號(hào)來展示磁道的分布,最小編號(hào)牌最上面,最大編號(hào)排最下面。黑色的代表未被訪問的磁道,紅色的代表初始磁道號(hào)。如果點(diǎn)擊fcfs算法,左邊會(huì)給每一個(gè)磁道填上相應(yīng)的訪問距離,并統(tǒng)計(jì)平均訪問距離,右邊會(huì)按照磁道訪問的先后順序,以此
23、顯示磁道的顏色。藍(lán)色代表將要訪問的磁道,綠色代表已經(jīng)被訪問過的磁道。磁盤調(diào)度算法演示完成后,右邊的磁盤便會(huì)恢復(fù)原狀。下面展示每一種磁盤調(diào)度算法的演示情況由于nstepscan算法是scan算法的累加,于是沒有動(dòng)態(tài)演示效果,只有靜態(tài)的訪問順序。 總結(jié)和心得經(jīng)過兩個(gè)星期的努力,終于如愿完成了操作系統(tǒng)課程設(shè)計(jì)。整個(gè)過程雖然比較辛苦,有時(shí)也會(huì)感到比較煩躁,但我學(xué)到了很多東西,領(lǐng)悟了許多道理。學(xué)習(xí)1. 第一次真實(shí)感受到軟件工程方法所帶來的巨大成效。以前都只是憑著腦子想東西,就一行行寫下了代碼。寫出來的東西沒有一個(gè)清晰的架構(gòu),整個(gè)過程也沒有明顯的步驟。基本上是想到哪就寫到哪,寫出來的程序能完成功能,但兼容
24、性很差,更別提到和其他的模塊兼容。這次,我們小組按照軟件工程的一般做法。從概要設(shè)計(jì),詳細(xì)設(shè)計(jì),程序設(shè)計(jì),編碼,模塊測(cè)試,集成測(cè)試,系統(tǒng)測(cè)試和最后的交付驗(yàn)收,我們每一步都做了相應(yīng)的工作,結(jié)果很讓人滿意。我們各自都提出了自己的設(shè)想,最后也都基本完成了各自設(shè)計(jì)的程序。 2要勇于想象。我以前從來都沒有寫過磁盤管理模塊的相關(guān)程序,這次我閱讀了磁盤管理和調(diào)度的基本原理后,就有了初步的想法。接著把自己所想的東西,變成自己可以看到的東西。java的功能十分強(qiáng)大,我想是想的相應(yīng)算法,它都提供了相應(yīng)的接口和類來供我使用。自己做出了漂亮的磁盤管理界面后,心中也十分歡快。3. 要擅于參考優(yōu)秀的代碼。我以前從未用 ja
25、va圖形界面工具swing做過如此復(fù)雜的動(dòng)態(tài)想過演示。一個(gè)個(gè)控件、按鈕、以及數(shù)據(jù)的輸入和輸出,我都不知道如何整理。但我從一個(gè)漂亮的圖形界面程序中學(xué)習(xí)良好的架構(gòu),從而做出了自己想要的效果。 當(dāng)然,在這個(gè)過程中,也遇到了很多問題,有客觀的,也有主觀的,下面我分析這些問題都是怎樣的,以及我是怎樣解決的。問題1. 接口問題。磁盤管理模塊和文件管理模塊聯(lián)系十分緊密,但偏偏分成了兩個(gè)模塊,分別給兩個(gè)人做。我們要寫一個(gè)公用的接口,以便到時(shí)候集成到一起時(shí),能夠讓磁盤分配和文件分配同步。我們考慮再三,便決定用一個(gè)javabean來作為信息的在體,我們進(jìn)行增刪查改時(shí)都是根據(jù)這個(gè)對(duì)象中的信息來進(jìn)行操作。除此之外,我
26、們沒一個(gè)操作都對(duì)應(yīng)一個(gè)獨(dú)立的方法,這樣操作間就不會(huì)有太大的影響。 最后,我們把兩個(gè)模塊集成到一起時(shí),很快就實(shí)現(xiàn)了同步,因?yàn)榇蠹叶加昧祟愃频慕涌凇?2.數(shù)據(jù)結(jié)構(gòu)的使用。用什么來記錄磁盤上文件的數(shù)據(jù),以及如何記錄文件的分配情況。要能夠既快又節(jié)省空間。最后我使用了一個(gè)二維的boolean數(shù)組來記錄磁盤的使用情況,當(dāng)這個(gè)數(shù)據(jù)為false時(shí),該盤塊號(hào)沒有被使用,為true時(shí),就使用了。那么進(jìn)行增刪改查時(shí),都要根據(jù)這個(gè)二維布爾數(shù)組來進(jìn)行操作。而相應(yīng)的存儲(chǔ)磁盤的信息,就存放在一個(gè)block二維數(shù)組中,現(xiàn)實(shí)磁盤信息就存儲(chǔ)在jbutton的數(shù)組中,這樣,存儲(chǔ),現(xiàn)實(shí),和整體磁盤信息分離,能夠很好的兼容其他的情況,
27、能根據(jù)需求做出相應(yīng)的改變。最后,我很高興自己能夠設(shè)計(jì)出這樣的一個(gè)磁盤管理系統(tǒng)。日后再遇到一些任務(wù)時(shí),便可以更好的應(yīng)對(duì)。這次可程設(shè)計(jì),也為我日后編寫程序打下了堅(jiān)實(shí)的基礎(chǔ)。自己這么多天的努力總算沒有白費(fèi),以后我可以自信的說自己能夠設(shè)計(jì)出對(duì)用戶友好的,并且有漂亮圖形界面的軟件。參考文獻(xiàn):(1)湯小丹,梁紅兵,哲鳳屏,湯子瀛 計(jì)算機(jī)操作系統(tǒng) 西安電子科技大學(xué)出版社 (2)胡志剛等. 計(jì)算機(jī)操作系統(tǒng). 中南大學(xué)出版社,2005(3)陳向群等. windows內(nèi)核實(shí)驗(yàn)教程. 機(jī)械工業(yè)出版社,2004(4)羅宇等. 操作系統(tǒng)課程設(shè)計(jì). 機(jī)械工業(yè)出版社,2005代碼如下 我所負(fù)責(zé)模塊的結(jié)構(gòu) diskdemo.
28、javapackage com.csu.disk.display;import java.awt.borderlayout;import java.awt.color;import java.awt.container;import java.awt.dimension;import java.awt.font;import java.awt.gridlayout;import java.awt.toolkit;import javax.swing.jbutton;import javax.swing.jframe;import javax.swing.jmenu;import javax.s
29、wing.jmenubar;import javax.swing.jmenuitem;import javax.swing.jpanel;import javax.swing.jsplitpane;import javax.swing.jtabbedpane;import javax.swing.jtextarea;import javax.swing.jtoolbar;import javax.swing.uimanager;import com.csu.action.toolbaraction;import com.csu.attemper.attemperalgorithm;import
30、 com.csu.disk.pojo.message;public class diskdemo extends jframeprivate static final int width=800;private static final int height=600;private disk disk;private message message = new message();private jbutton demoblocks;private container container;private jpanel blockspanel,buttonpanel,ltextpanel,bte
31、xtpanel;private jtextarea ltext,btext;private jtabbedpane btexttab; private jmenu menu1,menu2 ;private jmenuitem item1,item2;private jmenubar bar;/private jscrollpane ;public diskdemo()super(demo disk assignment);demoblocks = new jbuttondisk.diskrodesdisk.diskcolumns;disk = new disk(this);setframe()
32、;initdata();/uimanager.put(button.font,new font(隸書,1,15);public static void main(string args)new diskdemo();public void initdata()message message = new message(hu,folder,1,-1);disk.allocatespace(message);message = new message(qiao,file,3,-1);disk.allocatespace(message);message = new message(nan,file
33、,3,0);disk.allocatespace(message);message = new message(li,folder,1,0);disk.allocatespace(message);message = new message(jia,file,6,-1);disk.allocatespace(message);changediskinfo();public void setframe()/菜單menu1 = new jmenu(開始); item1 = new jmenuitem(退出);menu1.add(item1);jmenu menu2 = new jmenu(關(guān)于);
34、 item2 = new jmenuitem(介紹);menu2.add(item2);bar = new jmenubar();bar.add(menu1);bar.add(menu2);this.setjmenubar(bar);/新建一個(gè)工具條jtoolbar toolbar = new jtoolbar();toolbar.setfloatable(true);/新建五個(gè)抽象動(dòng)作類toolbaraction file_new = new toolbaraction(new,null,this);toolbaraction file_del = new toolbaraction(del
35、ete,null,this);toolbaraction file_add = new toolbaraction(add,null,this);toolbaraction file_dec = new toolbaraction(dec,null,this);toolbaraction file_sea = new toolbaraction(rename,null,this);/把第一個(gè)按鈕加入工具條toolbar.setfloatable(true);jbutton jb;jb = toolbar.add(file_new);jb.setactioncommand(new);/設(shè)置其產(chǎn)生
36、事件所顯示的命令jb.settooltiptext(新建); jb.setfocuspainted(false);toolbar.addseparator(); /增加一個(gè)隔離欄/把第刪除按鈕加入工具條jb = toolbar.add(file_del);jb.setactioncommand(delete);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(開始);jb.setfocuspainted(false);toolbar.addseparator();jb = toolbar.add(file_add);/把第增加按鈕加入工具條jb.setactioncommand(
37、add);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(增加);jb.setfocuspainted(false);toolbar.addseparator();jb = toolbar.add(file_dec);/把第減少按鈕加入工具條jb.setactioncommand(dec);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(減少);jb.setfocuspainted(false);toolbar.addseparator();jb = toolbar.add(file_sea);/把第重命名按鈕加入工具條jb.setactioncommand(r
38、ename);/設(shè)置其產(chǎn)生事件所顯示的命令jb.settooltiptext(查找);jb.setfocuspainted(false);toolbar.addseparator();this.add(toolbar,borderlayout.north); /設(shè)置其布局,放在最上面/*設(shè)置左邊 tab 面板*/jtabbedpane queues = new jtabbedpane(jtabbedpane.top);blockspanel = new jpanel();blockspanel.setlayout(new gridlayout(disk.diskrodes,disk.diskc
39、olumns);blockspanel.setbackground(color.gray);for(int i=0;idisk.diskrodes;i+)for(int j=0;jdisk.diskcolumns;j+)jbutton block = new jbutton();block.setbackground(color.black);block.settooltiptext(r+i+c+j+block+(i*disk.diskcolumns+j);demoblocksij = block;blockspanel.add(block);/磁盤總體信息btext = new jtexta
40、rea();btext.setbackground(color.lightgray);btext.seteditable(false);btext.setbackground(color.white);string diskinfo = 磁盤大?。?disk.totalblocks+t已用空間:+(disk.totalblocks-disk.freeb)+t剩余空間:+disk.freeb;btext.settext(diskinfo);btexttab = new jtabbedpane();btexttab.add(磁盤信息,btext);/*整體顯示布局*/jsplitpane jsp
41、= new jsplitpane(jsplitpane.vertical_split,true,blockspanel,btexttab);jsp.setdividerlocation(450);jtabbedpane jtb2 = new jtabbedpane();jtb2.add(磁盤分配, jsp);attemperalgorithm aal = new attemperalgorithm();/jtb2.add(磁盤調(diào)度,aal.jsp2);jtb2.validate();this.add(jtb2,borderlayout.center);dimension d = toolkit
42、.getdefaulttoolkit().getscreensize();this.setbounds(int)d.getwidth()-width)/2, (int)d.getheight()-height)/2, width, height);this.setsize(800, 600);this.setvisible(true);this.setdefaultcloseoperation(jframe.dispose_on_close);public void changediskinfo()btext.settext(磁盤大?。?disk.totalblocks+t已用空間:+(dis
43、k.totalblocks-disk.freeb)+t剩余空間:+disk.freeb);public disk getdisk() return disk;public void setdisk(disk disk) this.disk = disk;public message getmessage() return message;public void setmessage(message message) this.message = message;public jbutton getdemoblocks() return demoblocks;public void setdem
44、oblocks(jbutton demoblocks) this.demoblocks = demoblocks; disk.javapackage com.csu.disk.display;import java.awt.color;import java.awt.font;import javax.swing.jbutton;import com.csu.disk.pojo.block;import com.csu.disk.pojo.message;import com.csu.disk.pojo.mycolor;public class disk public static int d
45、iskrodes = 10;public static int diskcolumns = 6;public static int totalblocks = diskrodes * diskcolumns;public static int freeb= totalblocks;public block blocktable = new blockdiskrodesdiskcolumns;/ 用位示圖法來表示磁盤空閑狀況private boolean diskfreemap = new booleandiskrodesdiskcolumns;private diskdemo demo;pri
46、vate mycolor mycolor = new mycolor();private jbutton demoblocks ;jbutton button_temp ;public disk()public disk(diskdemo demo)this.demo = demo;this.demoblocks = demo.getdemoblocks();public static void main(string args) /* * 獲取空間盤塊的行列值,同時(shí)把空閑盤塊拿出來 * param size 所需空間大小 * return 長度為2*size的數(shù)組,沒兩個(gè)相鄰值為一個(gè)節(jié)點(diǎn)地址
47、 */public int getfreeblocks(int size)int free = new intsize*2;int count=0;for(int i=0;idisk.diskrodes;i+)for(int j=0;jdisk.diskcolumns;j+)if(count=size*2)break;if(diskfreemapij=false)diskfreemapij=true;freecount+ = i;freecount+ = j;if(count=size*2)break;return free;/* * 找到父文件夾的空閑項(xiàng)目 * param parentfil
48、enumber 父文件盤塊號(hào) * return 空閑索引號(hào),-1已經(jīng)滿了 */public int getfreeitem(int parentfilenumber)int row = parentfilenumber/disk.diskcolumns;int column = parentfilenumber%disk.diskcolumns;int subfile = blocktablerowcolumn.getsubfile();int fcount = 0,result=-1;for(int i=0;iblock.totalsubfiles;i+)if(subfilei=-1)result = i;break;fcount+;if(fcount=block.totalsubfiles)result = -1;return result;public void setfolderitem(int parentfilenumber,int headblock,int freeitem)int row = parentfilenumber/disk.diskcolumns;int column = parentfilenumber%disk.diskcolumns;int subfile = blocktablerowcolumn.getsubfile();subfil
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專項(xiàng)7 語法和病句(原卷版)
- 智慧應(yīng)急響應(yīng)管理平臺(tái)解決方案
- 江蘇省徐州市東苑中學(xué)2024-2025學(xué)年八年級(jí)下學(xué)期3月月考地理試題(原卷版+解析版)
- 2025屆江蘇省蘇州市決勝新高考高三下學(xué)期2月開學(xué)聯(lián)考地理含答案
- 內(nèi)鏡下注射硬化劑治療乙型肝炎肝硬化并發(fā)食管靜脈曲張破裂出血患者的臨床效果研究
- 安徽省淮南市東部地區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末考試地理試題(原卷版+解析版)
- 二零二五年度北京市體育俱樂部運(yùn)動(dòng)員招募合同范本
- 二零二五年度保健服務(wù)貸款居間服務(wù)與客戶反饋合同
- 房地產(chǎn)項(xiàng)目開發(fā)建設(shè)合同書
- 公司股權(quán)激勵(lì)機(jī)制設(shè)計(jì)指南
- 深靜脈的穿刺術(shù)課件
- 2025屆高考英語二輪復(fù)習(xí)備考策略課件
- 醫(yī)學(xué)課件-兒童2型糖尿病診治指南(2025)解讀
- 《結(jié)構(gòu)平法與鋼筋算量》課件-梁平法施工圖識(shí)讀
- 山東大學(xué)外科學(xué)歷年試題要點(diǎn)【表格版】
- 2025年南京機(jī)電職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年福建福州市城市多邊合作中心招聘3人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 課題申報(bào)書:GenAI賦能新質(zhì)人才培養(yǎng)的生成式學(xué)習(xí)設(shè)計(jì)研究
- 中考第一輪復(fù)習(xí)人教七年級(jí)英語上冊(cè)Unit5-Unit9詞匯短語復(fù)習(xí)課件
- 高階思維能力培養(yǎng)教學(xué)策略
- 駱駝祥子-(一)-劇本
評(píng)論
0/150
提交評(píng)論