設(shè)備的分配與回收操作系統(tǒng)課程設(shè)計(jì)_第1頁(yè)
設(shè)備的分配與回收操作系統(tǒng)課程設(shè)計(jì)_第2頁(yè)
設(shè)備的分配與回收操作系統(tǒng)課程設(shè)計(jì)_第3頁(yè)
設(shè)備的分配與回收操作系統(tǒng)課程設(shè)計(jì)_第4頁(yè)
設(shè)備的分配與回收操作系統(tǒng)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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、43/46哈爾濱理工大學(xué)課程設(shè)計(jì)(操作系統(tǒng))題目: 設(shè)備的分配與回收班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 計(jì)算機(jī)系10-8班姓名:陳俊鳴 1004010820指導(dǎo)教師:高雪瑤系主任: 林克正 20目 錄 TOC o 1-3 h z u HYPERLINK l _Toc349739000 1生產(chǎn)者消費(fèi)者問(wèn)題課程設(shè)計(jì) PAGEREF _Toc349739000 h 1 HYPERLINK l _Toc349739001 1.1 題目分析 PAGEREF _Toc349739001 h 1 HYPERLINK l _Toc349739002 1.2 數(shù)據(jù)結(jié)構(gòu) PAGEREF _Toc349739002 h

2、1 HYPERLINK l _Toc349739003 1.3 流程圖 PAGEREF _Toc349739003 h 1 HYPERLINK l _Toc349739004 1.4 實(shí)現(xiàn)技術(shù) PAGEREF _Toc349739004 h 2 HYPERLINK l _Toc349739005 1.5 設(shè)計(jì)結(jié)論和心得 PAGEREF _Toc349739005 h 2 HYPERLINK l _Toc349739006 2 Linux代碼分析 PAGEREF _Toc349739006 h 4 HYPERLINK l _Toc349739007 2.1 功能講明 PAGEREF _Toc34

3、9739007 h 4 HYPERLINK l _Toc349739008 2.2 接口講明 PAGEREF _Toc349739008 h 4 HYPERLINK l _Toc349739009 2.3 局部數(shù)據(jù)結(jié)構(gòu) PAGEREF _Toc349739009 h 4 HYPERLINK l _Toc349739010 2.4 流程圖 PAGEREF _Toc349739010 h 4 HYPERLINK l _Toc349739011 2.5 以實(shí)例講明運(yùn)行過(guò)程 PAGEREF _Toc349739011 h 51設(shè)備的分配與回收課程設(shè)計(jì)題目分析在多到程序環(huán)境下,系統(tǒng)中的設(shè)備供所有進(jìn)程共享

4、。為防止進(jìn)程對(duì)系統(tǒng)資源的無(wú)序競(jìng)爭(zhēng),特規(guī)定系統(tǒng)設(shè)備不同意用戶自行使用,必須由系統(tǒng)統(tǒng)一分配。每當(dāng)進(jìn)程項(xiàng)系統(tǒng)提出I/O請(qǐng)求時(shí),只要是可能和安全帶,設(shè)備分配程序編按照一定的策略,吧設(shè)備分配給請(qǐng)求用戶。在有的系統(tǒng)中,為了確保在CPU與設(shè)備之間能進(jìn)行通信,還應(yīng)分配相應(yīng)的操縱器和通道。為了實(shí)現(xiàn)設(shè)備分配,必須在系統(tǒng)中設(shè)置相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。1.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中用到了Map(映射)的數(shù)據(jù)結(jié)構(gòu),Map結(jié)構(gòu)包括了key和value兩部分,通過(guò)key的匹配來(lái)查詢(xún)value的值,符合次涉及到的要求,解決了四張表之間的關(guān)系public static Map mapD = new HashMap(); /對(duì)應(yīng)DCT表的映射,k

5、ey值為設(shè)備類(lèi)型public static Map mapS = new HashMap(); /對(duì)用SDT的映射,key值為設(shè)備類(lèi)型public static Map mapCO = new HashMap(); /對(duì)應(yīng)COCT的映射,key值為操縱器標(biāo)識(shí)符public static Map mapCH = new HashMap();/對(duì)應(yīng)CHCT的映射,key值為通道標(biāo)識(shí)符public static Mythread mt = new Mythread3;/同意申請(qǐng)3個(gè)進(jìn)程,可依照需要做相應(yīng)更改以上4個(gè)映射用于存放對(duì)應(yīng)表的信息,設(shè)計(jì)為全局靜態(tài)是為了能存儲(chǔ)文件和添加的設(shè)備、操縱器、通道信息

6、。1.3流程圖實(shí)現(xiàn)設(shè)計(jì)中主程序和其他子模塊的算法,以流程圖的形式表示,需畫(huà)出函數(shù)和過(guò)程的調(diào)用關(guān)系圖。開(kāi)始輸入初始化文件地址開(kāi)始輸入初始化文件地址按行讀文件,讀一行文件是否結(jié)束將相應(yīng)信息保存到相應(yīng)的Map中結(jié)束否是 文件讀取Fileread(初始化)類(lèi)開(kāi)始開(kāi)始將界面的信息讀入并賦給字符串變量新建4張表分不將對(duì)應(yīng)信息添加到4張表中將4張表分不保存到各自的映射中(Map)結(jié)束 添加設(shè)備increase類(lèi)開(kāi)始開(kāi)始將界面信息讀入并賦給字符串變量變量新建用戶定義的進(jìn)程類(lèi)Mythread類(lèi)分不將對(duì)應(yīng)信息賦給進(jìn)程類(lèi)中的屬性,產(chǎn)生新的進(jìn)程將新的進(jìn)程類(lèi)保存到用戶定義的進(jìn)程類(lèi)數(shù)組中并記錄當(dāng)前進(jìn)程數(shù)目結(jié)束 申請(qǐng)新進(jìn)程

7、increaseP類(lèi)開(kāi)始開(kāi)始遍歷設(shè)備表的Map該進(jìn)程申請(qǐng)的設(shè)備是否存在進(jìn)程調(diào)用sleep()方法睡眠并在jTextArea顯示不存在該設(shè)備否進(jìn)程調(diào)用sleep方法睡眠一個(gè)進(jìn)程開(kāi)始時(shí)刻推斷暫停標(biāo)識(shí)是否為1(暫停30S)進(jìn)程調(diào)用sleep方法睡眠30s是在主界面的jTextArea顯示:進(jìn)程堵塞調(diào)用sleep方法睡眠一個(gè)堵塞時(shí)刻推斷暫停標(biāo)識(shí)是否為1推斷暫停標(biāo)識(shí)是否為1進(jìn)程調(diào)用sleep方法睡眠30s是向主界面jTextArea中顯示進(jìn)程開(kāi)始分配的信息否進(jìn)程調(diào)用sleep方法睡眠一個(gè)執(zhí)行時(shí)刻推斷暫停標(biāo)識(shí)是否為1進(jìn)程調(diào)用sleep方法睡眠30s是向主界面jTextArea中顯示進(jìn)程釋放資源信息結(jié)束否M

8、ythread類(lèi):進(jìn)程執(zhí)行的方法開(kāi)始開(kāi)始定義4個(gè)全局靜態(tài)類(lèi)型的Map定義全局靜態(tài)的進(jìn)程類(lèi)型數(shù)組定義全局靜態(tài)變量ii,signal分不記錄進(jìn)程個(gè)數(shù)和暫停標(biāo)記是否點(diǎn)擊按鈕“初始化”調(diào)用Fileread類(lèi)的構(gòu)造方法并將文件信息顯示是是否點(diǎn)擊“申請(qǐng)新進(jìn)程”否調(diào)用increaseP類(lèi)中方法申請(qǐng)是是否點(diǎn)擊“添加設(shè)備”否調(diào)用increase類(lèi)方法添加是是否點(diǎn)擊“開(kāi)始”否通過(guò)冒泡法將進(jìn)程數(shù)組中的進(jìn)程按開(kāi)始時(shí)刻升序排好否是當(dāng)進(jìn)程數(shù)在2個(gè)或2個(gè)以上時(shí) 推斷進(jìn)程申請(qǐng)的設(shè)備是否為同一類(lèi)推斷進(jìn)程申請(qǐng)的設(shè)備是否為同一類(lèi)同一類(lèi)的進(jìn)程是否堵塞決定堵塞進(jìn)程的堵塞時(shí)刻調(diào)用Mythread類(lèi)start方法是是否否結(jié)束是否點(diǎn)擊“暫停

9、”重新推斷選擇按鈕否是將暫停信號(hào)signal置1 MainF類(lèi)1.4實(shí)現(xiàn)技術(shù)在這次編程中,選擇使用的是java是MyEclipse8.6擁有窗口的框架,但同時(shí),由于java中沒(méi)有指針的概念,使得SDT、DCT、COCT、CHCT之間的練習(xí)讓我專(zhuān)門(mén)頭疼,因此我選擇了使用映射map,映射中包含key和value,而key就看起來(lái)C+中的指針的next,能將4張表練習(xí)到一起。隨后,在對(duì)進(jìn)程的void方法中的設(shè)計(jì)令我認(rèn)識(shí)到自己對(duì)java進(jìn)程知識(shí)的掌握還專(zhuān)門(mén)匱乏,現(xiàn)在還不能專(zhuān)門(mén)好的運(yùn)用sleep(),wait(),yield()等方法,也不清晰其之間的區(qū)不,因此設(shè)計(jì)要求中的暫停無(wú)法專(zhuān)門(mén)好的實(shí)現(xiàn)。1.5設(shè)

10、計(jì)結(jié)論和心得這次編程,是我對(duì)設(shè)備的分配有了更進(jìn)一步的了解,也是我的編譯能力得到了鍛煉。通過(guò)本次課程設(shè)計(jì),加深了對(duì)所學(xué)的操作系統(tǒng)的知識(shí)的理解,同時(shí)提高了自已的編程水平,也讓自已認(rèn)識(shí)到了自已編程中存在的問(wèn)題,例如:沒(méi)有對(duì)系統(tǒng)做全面分析的適應(yīng),以致于自已的程序沒(méi)有把全部可能出現(xiàn)的情況考慮進(jìn)內(nèi),以致于關(guān)于某一些特不的值,不能給出正確的運(yùn)行結(jié)果,本次課程序設(shè)計(jì)認(rèn)自已體會(huì)到了全面系統(tǒng)的分析問(wèn)題的重要性和必要性。多實(shí)踐,多進(jìn)行一些編程鍛煉,這將成為我今后的一項(xiàng)課程,自己的編程水平依舊太水,今后必須更加努力才行。2 .1Linux代碼分析為了進(jìn)一步了解操作系統(tǒng)內(nèi)核,學(xué)習(xí)了Linux操作系統(tǒng)的進(jìn)程同步程序,要緊

11、程序源代碼如下:package jframe;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import map.CHCTmap;import map.COCTmap;import map.DCTmap;import map.SDTmap;import table.CHCT;i

12、mport table.COCT;import table.DCT;import table.SDT;/*文件讀取代碼* */public class Fileread String file=f:/aa.txt; /文件的地址 String next=null;/用來(lái)存放文件每行的信息 String s=new String7;/將next值按空格分開(kāi)后存到S數(shù)組中 SDTmap sm=new SDTmap(); DCTmap dm=new DCTmap(); COCTmap com=new COCTmap(); CHCTmap chm=new CHCTmap();MainF mf=new

13、MainF();public Fileread()public Fileread(int i) throws NumberFormatException, IOExceptiontry BufferedReader input =new BufferedReader(new InputStreamReader(new FileInputStream(file);/讀文件while(next=input.readLine()!=null)Mythread myt=new Mythread(); SDT sdt=new SDT(); DCT dct=new DCT(); COCT coct=new

14、 COCT(); CHCT chct=new CHCT();s=next.split( );sdt.settypeS(s0);sdt.setdeS(s1);dct.set(s0, s1, s2);coct.set(s2, s3);chct.set(s3, s2);myt.set(s4, s0, s1, Double.valueOf(s5), Double.valueOf(s6);mf.mtmf.ii+=myt;sm.setmapS(s0, sdt);dm.setmapD(s0, dct);com.setmapCO(s2, coct);chm.setmapCH(s3, chct);/將讀到的信息

15、寫(xiě)入4張表對(duì)應(yīng)的映射和進(jìn)程數(shù)組中 catch (FileNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();/添加設(shè)備的代碼String str1=jTextField1.getText();/獲得jTextField1中的信息String str2=jTextField2.getText();String str3=jTextField3.getText();String str4=jTextField4.getText();SDT sdt=new SDT();DCT dct=new DCT();

16、COCT coct=new COCT();CHCT chct=new CHCT();sdt.settypeS(str1);sdt.setdeS(str2);dct.set(str1, str2, str3);coct.set(str3, str4);chct.set(str4, str3);MainF.mapS.put(str1, sdt);MainF.mapD.put(str1, dct);MainF.mapCO.put(str3, coct);MainF.mapCH.put(str4, chct);this.dispose();/當(dāng)前的窗口關(guān)閉/申請(qǐng)新進(jìn)程代碼String str1=jTe

17、xtField1.getText();String str2=jTextField2.getText();String str3=jTextField3.getText();String str4=jTextField4.getText();String str5=jTextField5.getText();double d1=Double.valueOf(str4);double d2=Double.valueOf(str5);Mythread mtt=new Mythread();mtt.set(str1, str2, str3, d1, d2);MainF.mtMainF.ii+=mtt

18、;this.dispose();/進(jìn)程代碼package jframe;import java.io.IOException;import java.util.Iterator;import java.util.Map;import javax.swing.JTextArea;import table.CHCT;import table.COCT;import table.DCT;import map.CHCTmap;import map.COCTmap;import map.DCTmap;import map.SDTmap;public class Mythread extends Thre

19、ad SDTmap sm=new SDTmap();String con=null;/用來(lái)記錄當(dāng)前進(jìn)程申請(qǐng)?jiān)O(shè)備的操縱器String ch=null;/ 用來(lái)記錄當(dāng)前進(jìn)程申請(qǐng)?jiān)O(shè)備的通道DCT dct=new DCT();COCT coct=new COCT();CHCT chct=new CHCT();Fileread filr=new Fileread();String name;/記錄進(jìn)程名double starttime,runtime;/記錄進(jìn)程的開(kāi)始時(shí)刻(會(huì)變)和執(zhí)行時(shí)刻double time,use;/time用來(lái)記錄進(jìn)程的起始時(shí)刻,use記錄使用時(shí)刻String apptype;/

20、記錄進(jìn)程要申請(qǐng)的設(shè)備類(lèi)型String appde;/設(shè)備標(biāo)識(shí)符String ss=;/記錄jtextArea要顯示的信息JTextArea text;public void set(String name,String apptype,String appde,double starttime,double runtime)=name;this.apptype=apptype;this.appde=appde;this.starttime=starttime;this.runtime=runtime;public void JT(JTextArea text)this.text=text;pu

21、blic void settime(double time)this.time=time;public void setut(double d)this.use=d;public void run()/推斷要申請(qǐng)的設(shè)備是否存在,不存在進(jìn)程沉睡999.999strydct=(DCT)filr.dm.getmapD().get(apptype); con=dct.get();coct=(COCT).getmapCO().get(con);ch=coct.get();catch(Exception e)text.setText(無(wú)該類(lèi)設(shè)備);try Thread.sleep(999999); cat

22、ch (InterruptedException e1) / TODO Auto-generated catch blocke1.printStackTrace();try Thread.sleep(long)time*1000);/進(jìn)程在開(kāi)始前睡眠if(MainF.signal=1)/signal為暫停標(biāo)識(shí)符,為1是暫停30sThread.sleep(30000);MainF.signal=0;text.setText(堵塞中);Thread.sleep(long)(starttime-time)*1000);/堵塞時(shí)刻if(MainF.signal=1)Thread.sleep(30000

23、);MainF.signal=0;ss=進(jìn)程+name+向+設(shè)備+apptype+ +appde+提出申請(qǐng)+n+通過(guò)操縱器 :+con+通道:+ch+n+開(kāi)始執(zhí)行時(shí)刻:+starttime+t+執(zhí)行中;text.setText(ss);/jtextArea顯示ss的信息Thread.sleep(long)runtime*1000);/睡眠執(zhí)行時(shí)刻if(MainF.signal=1)Thread.sleep(30000);MainF.signal=0;ss=執(zhí)行結(jié)束,使用時(shí)刻+use+ +釋放資源;text.setText(ss); catch (InterruptedException e)

24、/ TODO Auto-generated catch blocke.printStackTrace();public String getname()return name;/主界面開(kāi)始函數(shù)int i = 0;int j = 0;int k = ii;/ii為全局靜態(tài)變量,存儲(chǔ)申請(qǐng)的進(jìn)程數(shù)目Mythread myt = null;/冒泡排序,按開(kāi)始時(shí)刻升序排序進(jìn)程if (k = 2) for (i = 0; i k; i+) for (j = i + 1; j mtj.starttime) myt = mti;mti = mtj;mtj = myt;/依照不同的進(jìn)程數(shù)使用不同的方法switc

25、h (ii) case 1:jTextArea2.setText(該進(jìn)程未使用);mt0.settime(mt0.starttime);mt0.setut(mt0.runtime);mt0.JT(jTextArea2);mt0.start();jTextArea3.setText(該進(jìn)程未使用);jTextArea4.setText(該進(jìn)程未使用);break;case 2:jTextArea2.setText(該進(jìn)程未使用);jTextArea3.setText(該進(jìn)程未使用);jTextArea4.setText(該進(jìn)程未使用);mt0.settime(mt0.starttime);mt1

26、.settime(mt1.starttime);mt0.setut(mt0.runtime);mt0.JT(jTextArea2);mt0.start();/推斷是否堵塞,堵塞之后的方法if (mt0.apptype.equals(mt1.apptype) if (mt0.starttime + mt0.runtime) mt1.starttime) mt1.starttime = mt0.starttime + mt0.runtime;mt1.setut(mt1.starttime + mt1.runtime - mt1.time);mt1.JT(jTextArea3);mt1.start(

27、); else mt1.setut(mt1.runtime);mt1.JT(jTextArea3);mt1.start();break;case 3:jTextArea2.setText(該進(jìn)程未使用);jTextArea3.setText(該進(jìn)程未使用);jTextArea4.setText(該進(jìn)程未使用);mt0.settime(mt0.starttime);mt1.settime(mt1.starttime);mt2.settime(mt2.starttime);mt0.setut(mt0.runtime);mt0.JT(jTextArea2);mt0.start();if (mt0.a

28、pptype.equals(mt1.apptype) if (mt0.starttime + mt0.runtime) mt1.starttime) mt1.starttime = mt0.starttime + mt0.runtime;mt1.setut(mt1.starttime + mt1.runtime - mt1.time);mt1.JT(jTextArea3);mt1.start(); else mt1.setut(mt1.runtime);mt1.JT(jTextArea3);mt1.start();tryif (mt0.apptype.equals(mt2.apptype) i

29、f (mt0.starttime + mt0.runtime) mt2.starttime) mt2.starttime = mt0.starttime + mt0.runtime;mt2.setut(mt2.starttime + mt2.runtime - mt2.time);mt2.JT(jTextArea4);mt2.start(); else mt2.setut(mt2.runtime);mt2.JT(jTextArea4);mt2.start();if (mt1.apptype.equals(mt2.apptype) if (mt1.starttime + mt1.runtime) mt2.starttime) mt2.starttime = mt1.starttime + mt1.r

溫馨提示

  • 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論