實(shí)驗(yàn)2:存儲器管理系統(tǒng)_第1頁
實(shí)驗(yàn)2:存儲器管理系統(tǒng)_第2頁
實(shí)驗(yàn)2:存儲器管理系統(tǒng)_第3頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)報告學(xué)院(系)名稱: 計算機(jī)與通信工程學(xué)院學(xué)號專業(yè)計算機(jī)科學(xué)與技術(shù)班級2010級3班實(shí)驗(yàn)項(xiàng)目實(shí)驗(yàn)二:存儲器的分配與回收算法實(shí)現(xiàn)課程名稱操作系統(tǒng)課程代碼0668036實(shí)驗(yàn)時間2011-12-19 1-2 節(jié) 2011-12-21 1-2 節(jié) 2011-12-24 7-8 節(jié) 2011-12-26 1-2 節(jié)實(shí)驗(yàn)地點(diǎn)主校區(qū)7-215主校區(qū)7-215主校區(qū)7-215主校區(qū)7-215批改意見成績教師簽字:實(shí)驗(yàn)容:1. 本實(shí)驗(yàn)是模擬操作系統(tǒng)的主存分配,運(yùn)用可變分區(qū)的存儲管理算法設(shè)計主存分配和回收程序,并不 實(shí)際啟動裝入作業(yè)。2. 采用最先適應(yīng)法、最佳適應(yīng)法、最壞適應(yīng)法分配主存空間。3. 當(dāng)一個新作業(yè)

2、要求裝入主存時,必須查空閑區(qū)表,從中找出一個足夠大的空閑區(qū)。若找到的空閑區(qū) 大于作業(yè)需要量,這是應(yīng)把它分成二部分,一部分為占用區(qū),加一部分又成為一個空閑區(qū)。4. 當(dāng)一個作業(yè)撤離時,歸還的區(qū)域如果與其他空閑區(qū)相鄰,則應(yīng)合并成一個較大的空閑區(qū),登在空閑 區(qū)表中。5. 設(shè)計的模擬系統(tǒng)中,進(jìn)程數(shù)不小于5,進(jìn)程調(diào)度方式可以采用實(shí)驗(yàn)一中的任何一種。6. 運(yùn)行所設(shè)計的程序,輸出有關(guān)數(shù)據(jù)結(jié)構(gòu)表項(xiàng)的變化和存的當(dāng)前狀態(tài)。實(shí)驗(yàn)要求:1. 詳細(xì)描述實(shí)驗(yàn)設(shè)計思想、程序結(jié)構(gòu)及各模塊設(shè)計思路;2. 詳細(xì)描述程序所用數(shù)據(jù)結(jié)構(gòu)及算法;3. 明確給出測試用例和實(shí)驗(yàn)結(jié)果;4. 為增加程序可讀性,在程序中進(jìn)行適當(dāng)注釋說明;5. 認(rèn)真

3、進(jìn)行實(shí)驗(yàn)總結(jié),包括:設(shè)計中遇到的問題、解決方法與收獲等;6. 實(shí)驗(yàn)報告撰寫要求結(jié)構(gòu)清晰、描述準(zhǔn)確邏輯性強(qiáng);7. 實(shí)驗(yàn)過程中,同學(xué)之間可以進(jìn)行討論互相提高,但絕對禁止抄襲。步驟:1、畫界面。2、創(chuàng)建數(shù)據(jù)結(jié)構(gòu)1)進(jìn)程Request.java2)存空間Memory.java3)存空閑表FreeMemory.java4)等待進(jìn)程序歹U Request.java (實(shí)例化對象 wait)5)當(dāng)前存中已有進(jìn)程HoldMemory.java3、編寫相關(guān)模塊(以下模塊均在OS_Memory.java文件中)1)初始化存init()2) 生成進(jìn)程請求getRequest(int id)3) 查詢空閑區(qū)fin d

4、Free()4) 進(jìn)程進(jìn)入存requestIn(int index, Request request)5) 進(jìn)程離開存requestOut( int id)6) 主控模塊run()4、測試算法描述:程序開始運(yùn)行時首先調(diào)用初始化存模塊,生成一個長度為32的存地址空間,使用list集合來存儲當(dāng)前存地址的相關(guān)信息(狀態(tài)、編號、當(dāng)前進(jìn)程名)。每當(dāng)用戶點(diǎn)擊界面的上的 "Next Process"按鈕,即觸發(fā)一次存空間管理過程。隨機(jī)產(chǎn)生一個 0到1之間的隨機(jī)數(shù),用來決定本次過程是產(chǎn)生一個隨機(jī)進(jìn)程請求進(jìn)入存還是讓存中隨 機(jī)離開一個進(jìn)程。若本次為進(jìn)入過程,產(chǎn)生一個進(jìn)程請求 A (長度隨機(jī))

5、,若存空閑表為空(即存中已經(jīng)沒有空閑的地址) 則將本次產(chǎn)生的進(jìn)程加入到等待序列。更新存空閑表,結(jié)束本次調(diào)度過程。查看等待序列中是否有進(jìn)程在等待進(jìn)入存。將等待序列中的進(jìn)程按照先后順序排列。然后遍歷整個等 待序列,只要有能夠進(jìn)入到存當(dāng)中的進(jìn)程,則將其裝入存。如果等待序列中的進(jìn)程沒有能夠滿足空閑位置的,則試著匹配進(jìn)程A與存空閑表中的長度。如有適合A進(jìn)程長度的空閑區(qū),將進(jìn)程A裝入。更新存空閑表,結(jié)束本次調(diào)度過程。若本次為離開過程,查看已有進(jìn)程列表(hold)是否為空,若為空,提示存已經(jīng)為空,然后將本次調(diào)度轉(zhuǎn)換為進(jìn)入過程,即上面的進(jìn)入過程算法。若已有進(jìn)程列表(hold)不為空,則在已有進(jìn)程中隨機(jī)找到一個

6、進(jìn)程, 將其從存中移除。更新存空閑表,結(jié)束本次調(diào)度過程。流程:1、畫界面(GUI )。2、初始化存空間。3、人機(jī)交互(用戶點(diǎn)擊按鈕,觸發(fā)存儲器分配與回收算法)3、 組織數(shù)據(jù)(決定進(jìn)入或者離開進(jìn)程)。4、處理數(shù)據(jù)(將進(jìn)程裝入存或者移出存,或者加入到等待序列)5、 顯示結(jié)果(將本次過程的結(jié)果體現(xiàn)在程序界面上)。附錄(可包括源程序清單或其它說明) 包結(jié)構(gòu)圖示J、占 O£_Lati2> & binA ;=b|j FreMmoryJvJ_ Hol diMemory java ,£ Memory Java jJ_ NyComparatorjava 了 Request Ja

7、va:J Mai nPanel.java 展OS_M emoryj ava j Testjavak .dasspathM project程序清單Test.javav啟動界面用,包含main方法>E Outline= 口段goimport declarationsO. Test jFrame :Frame 口 jContentPane : Pnel o main Panel: MainPanel 也 m : OSMemor/El getJFrameOg get! Co ntentPa n合0 getMl ainPanelQ z,main (StringD)Test.javapublic c

8、lass Test private JFrame jFrame = null ;private JPanel jContentPane = null ; public MainPanel mainPanel = null ;OS_Memory m = null ;private JFrame getJFrame() if (jFrame = null ) jFrame = new JFrame("操作系統(tǒng)實(shí)驗(yàn)二 ");jFrame.setSize (new Dime nsion(400, 550);jFrame.setLocati on (300, 100);jFrame.

9、setC onten tPa ne(getJC onten tPa ne();return jFrame;private JPanel getJContentPane() if (jContentPane = null) jConten tPa ne = new JPa nel();jContentPane .setLayout( new BorderLayout();jContentPane .add(getMainPanel(), getMainPanel().getName();return jContentPane;private Mai nPa nel getMai nPa nel(

10、) if (mainPanel = null ) mainPanel = new MainPanel( m);return mainPanel;public static void main(String args) Test t = new Test();OS_Memory m = new OS_Memory(t);m.i ni t();t.m=m;t.getJFrame().setVisible( true);OS_Memory.java < 主控模塊 >當(dāng) Outlind 必-l 口喪誠疋* H hi pen dc i :; int* flag z into id iotmp

11、mci呼:I kt =-廬 Irw List 彎 F rcc:A want Lit-sReqiJcst- 上鼻 hold Li-i -cl Mtr-i _ a T Is T«tc O5_Mmchry|le5t)* geTReque?tjlnt.O requectlnOrt, keq ues:'0 requ&5tOut_int'pirintFrcrO j* prinrWaitQprintHaldQrurQimport buss in ess.FreeMemory;import buss in ess.HoldMemory;import buss in ess.M

12、emory;import buss in ess.MyComparator;import buss in ess.Request;public class OS_Memory public int i; 計數(shù)器public int flag = 0;標(biāo)記空閑長度public int id = 0;OS Memory.java/模擬的存地址空間,用一個list集合來模擬,集合中的每個元素都是Memory類型的List<Memory> memory = new ArrayList();/存空閑表,這也是一個list集合,集合中的每個元素都是FreeMemory類型的List<Fr

13、eeMemory> free = new ArrayList();/等待序列,當(dāng)請求找不到合適的存空閑區(qū)時,則在此序列中等待List<Request> wait = new ArrayList();/記錄當(dāng)前存中存在的進(jìn)程List<HoldMemory> hold = new ArrayList();Test t =null ;public OS_Memory(Test t)this.t=t;public void findFree() /尋找存中的空閑區(qū)for (i = 0; i < 31; i+) if (memory .get(i).getState(

14、) = 0) /如果當(dāng)前存空間為空,且下一地址也為空,則標(biāo)記空閑長度加1if (memory .get(i + 1).getState() = 0) flag +;/如果已經(jīng)是存地址的末尾if (i = 30) 將此次找到的空閑區(qū)記錄在存空閑表中,即free這個集合FreeMemory t = new FreeMemory( i + 1 - flag , flag + 1);free.add(t);flag = 0;/記錄后,將標(biāo)記空閑長度置為0 else flag+;如果當(dāng)前存空間為空,但下一地址不為空,則標(biāo)記空閑長度加1,彌補(bǔ)第一個未被計算的空閑地址/將此次找到的空閑區(qū)記錄在存空閑表中,即

15、free這個集合FreeMemory t = new FreeMemory( i + 1 - flag , flag);free.add(t);flag = 0;/記錄后,將標(biāo)記空閑長度置為0continue ;/繼續(xù)尋找下一個空閑區(qū)public void init() /初始化長度為32的存空間for (i = 0; i < 32; i+) Memory m = new Memory。; /初始化每一個存模塊m.setState(O);/將初始化后的每個存的狀態(tài)置為0,即空閑memory .add(m); /將每個存模塊加入到存序列中public Request getRequest(

16、int id) /生成一個1-8的隨機(jī)數(shù)int memoryLength = ( int) Math. floor (8 * Math. random () + 1; Request ruquest = new Request(id, memoryLe ngth); return ruquest;public boolean requestln(int index, Request request) int id = request.getID();int len gth = request.getLe ngth();for (int i = in dex; i < in dex + l

17、en gth; i+) this. memory .get(i).set On wer(id);this. memory .get(i).setState(1);return true ;public boolean requestOut(int id) for (int i = 0; i < 32; i+) if (this .memory .get(i).getOnwer() = id) this .memory .get(i).setOnwer(0);this .memory .get(i).setState(0);return true ;public void run()/更新

18、存空閑表free.clear();fin dFree();/產(chǎn)生一個隨機(jī)數(shù)0或1,0表示此次請求為退岀請求,1表示此次請求為進(jìn)入請求int inorout = Math. random () > 0.6 ? 0 : 1;如果存中已經(jīng)沒有進(jìn)程,且隨機(jī)產(chǎn)生的本次請求為退岀請求,則將此次請求改為進(jìn)入請求if (hold.isEmpty() && ino rout = 0) (”存已經(jīng)為空,不能產(chǎn)生離開進(jìn)程");in orout = 1;/如果隨機(jī)產(chǎn)生的狀態(tài)為退岀,隨機(jī)退岀存中一個已有的進(jìn)程if (ino rout = 0) int randomIndex = ( in

19、t) Math. floor (hold .size() - 1) * Math. random ();requestOut(hold .get(randomlndex).getlD();進(jìn)程"+ hold .get(randomlndex).getID() +"離開");進(jìn)程"+ hold .get(randomlndex).getID() + "離開 n"); hold .remove(randomlndex);/更新存空閑表free.clear();fin dFree();return ; else /如果隨機(jī)產(chǎn)生的狀態(tài)為進(jìn)入,

20、初始化一個進(jìn)程,請求進(jìn)入存id+;/初始化一個存請求Request request = getRequest(id);/如果存空閑表為空,則將請求加入等待序列if (free.isEmpty() wait.add(request);進(jìn)程"+request.getlD()+ "等待,length=" + request.getLe ngth()+ "n ”);return ;/在存空閑表中尋找合適的存地址int findok = 0;for (int i = 0; i < free.size(); i+) /等待序列優(yōu)先匹配Collections.

21、sort(wait, new MyComparator();for (int j = 0; j < wait.size(); j+) if (free.get(i).getLe ngth() >= wait.get(j).getLe ngth() 如果等待序列中找到了可以進(jìn)入存的進(jìn)程System.out .pri ntln("等待序列進(jìn)入 ="+ wait .get(j).getID(); this .t.ma inPan el .jTextArea .appe nd(” 等待序歹列進(jìn)入 ="+ wait.get(j).getID()+ ",

22、length=" +wait .get(j).getLength()+ "n");requestIn(free.get(i).getIndex(), wait.get(j);wait.remove(j);free.remove(i);標(biāo)記完成本次進(jìn)入過程fin dok=1;break;/如果進(jìn)入過程標(biāo)記為1,開始下一個調(diào)度過程if (findok=1) break ;/如果當(dāng)前空閑記錄滿足存請求的長度要求if (free.get(i).getLe ngth() >= request.getLe ngth() /讓這個請求占用找的對應(yīng)的空閑存,并跳岀循環(huán)req

23、uestI n( free.get(i).getl ndex(), request);進(jìn)程"+ request.getID() + "進(jìn)入,length=" + request.getLe ngth()+ "n ”);free.remove(i);break ;/如果請求沒有被分配到合適的存,則將其加入等待序列if (i = free.size() - 1) wait .add(request);進(jìn)程"+request.getID()+ "等待,length=" +request.getLe ngth()+ "n

24、”);/更新存空閑表free.clear();fin dFree();Mai nPa nel.javav 主界面 >import import buss in ess.FreeMemory;MainPan el.javaimport buss in ess.HoldMemory;import buss in ess.Request;public class MainPanel extends JPanelpublic JLabel label = new JLabel32;private JScrollPane jScrollPane = null ;private JScrollPan

25、e jScrollPane1 = null ;private JList jList = null ;public JTextArea jTextArea = null ;private JButton btn_run = null ;OS_Memory m = null ;private JLabel jLabel_wait = null ;public MainPanel(OS_Memory m) super();this.m=m;in itialize();private void initialize() jLabel_wait = new JLabel();丿9MainPanella

26、bel : JLabdQujScrollPane : J.croll: u'-ejScrollPanel : Sere iPanjList: JList©jTextArea-e-abtn_run i JButtonm ; O£_r,/leiTiorjLabel_wait: 'Lblfv1ainPanel(OS_MEmoryinWalizeOg eU Scroll Pan eQgetJTe>ftAreaQHgeUScrollPanelOgeULi 5tQdgetBtn_rLinO忌 new Action Listener岸 q actio nPerfe

27、rm ejLabel wait .setBounds(new Rectangle(150, 307, 122, 19);jLabel_wait .setText(“等待進(jìn)程列表");this.setSize(new Dimension(400, 550);this.setLayout( null );this.add(getJScrollPane(), null );this.add(getBtn_run(), null);this .add(getJScrollPane1(), null);this.add(jLabel_wait , null);for(int i=0;i<

28、32;i+)labeli = new JLabel();labeli.setBounds( new Rectangle(20, 15*(i+1), 100, 15); labeli.setOpaque( true );labeli.setBackground(Color. white); labeli.setBorder(BorderFactory. createL in eBorder (Color. black, 1); this .add(labeli, null );private JScrollPane getJScrollPane() if (jScrollPane = null)

29、 jScrollPa ne = new JScrollPa ne();jScrollPane .setBounds(new Rectangle(150, 15, 209, 164); jScrollPane .setViewportView(getJTextArea();return jScrollPane;private JTextArea getJTextArea() if (jTextArea = null ) jTextArea = new JTextArea();return jTextArea ;private JScrollPane getJScrollPane1() if (j

30、ScrollPane1 = null ) jScrollPa ne1 = new JScrollPa ne();jScrollPane1 .setBounds(new Rectangle(150, 330, 209, 164); jScrollPa ne1 .setViewportView(getJList();return jScrollPane1 ;private JList getJList() if (jList = null) jList = new JList();return jList;private JButton getBtn_run() if (btn_run = null) btn _ru

溫馨提示

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

評論

0/150

提交評論