操作系統(tǒng)原理課程設(shè)計(jì)報(bào)告--多級(jí)反饋隊(duì)列調(diào)度算法_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  一.課程設(shè)計(jì)的目的2</p><p>  二.課程設(shè)計(jì)的內(nèi)容及要求2</p><p><b>  三.實(shí)現(xiàn)原理2</b></p><p>  四.關(guān)鍵算法實(shí)現(xiàn)流程圖3</p><p>  4.1 多級(jí)反

2、饋隊(duì)列調(diào)度算法實(shí)現(xiàn)流程圖3</p><p>  4.2 文件詳細(xì)3</p><p>  五.軟件運(yùn)行環(huán)境及限制4</p><p>  六.結(jié)果輸出及分析4</p><p>  6.0.1 初始界面4</p><p>  6.1 主程序界面5</p><p>  6.2 執(zhí)行界面

3、6</p><p>  6.3 執(zhí)行完成7</p><p>  6.4 其他功能8</p><p>  6.5 算法結(jié)果說明9</p><p>  6.6 算法核心代碼9</p><p><b>  七.心得體會(huì)11</b></p><p><b&

4、gt;  八.參考文獻(xiàn)11</b></p><p><b>  課程設(shè)計(jì)的目的</b></p><p>  本課程設(shè)計(jì)是學(xué)生學(xué)習(xí)完《計(jì)算機(jī)操作系統(tǒng)(第三版)》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過課程設(shè)計(jì),讓學(xué)生更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)學(xué)生的動(dòng)手能力。</p><p>  二

5、.課程設(shè)計(jì)的內(nèi)容及要求</p><p>  設(shè)計(jì)一個(gè)虛擬處理機(jī),編程序演示堆積反饋隊(duì)列調(diào)度算法的具體實(shí)現(xiàn)過程</p><p><b>  三.實(shí)現(xiàn)原理</b></p><p>  該程序基于計(jì)算機(jī)調(diào)度算法中的多級(jí)反饋隊(duì)列算法,使用JAVA語言描述,通過線程和對象的調(diào)用來實(shí)現(xiàn)該算法的演示。</p><p>  在多級(jí)反饋隊(duì)

6、列算法中,當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第一隊(duì)列的末尾,按FCFS原則排隊(duì)等待調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時(shí),如它能在該時(shí)間片內(nèi)完成,變可準(zhǔn)備撤離系統(tǒng);如果它在一個(gè)時(shí)間片結(jié)束時(shí)尚未完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二隊(duì)列的末尾,在同樣地按FCFS原則等待調(diào)度執(zhí)行;如果它在第二個(gè)隊(duì)列中運(yùn)行一個(gè)時(shí)間片后仍未完成,在一次將它放入第三隊(duì)列,如此下去,當(dāng)一個(gè)長作業(yè)(進(jìn)程)從第一隊(duì)列依次降到第n隊(duì)列后,在第n隊(duì)列中便采取按時(shí)間片轉(zhuǎn)輪的方式運(yùn)行。<

7、/p><p>  僅當(dāng)?shù)谝魂?duì)列空閑時(shí),調(diào)度程序才調(diào)度第二隊(duì)列中的進(jìn)程運(yùn)行;僅當(dāng)?shù)?~(i-1)隊(duì)列均為空時(shí),才會(huì)調(diào)度第i隊(duì)列中的進(jìn)程運(yùn)行。如果處理機(jī)正常第i隊(duì)列中的某個(gè)進(jìn)程服務(wù)時(shí),又有新進(jìn)程進(jìn)入優(yōu)先權(quán)較高的隊(duì)列(第1~(i-1)中的任何一個(gè)隊(duì)列),此時(shí)新進(jìn)程將搶占正在運(yùn)行進(jìn)程的處理機(jī),即由調(diào)度程序把正在運(yùn)行的進(jìn)程返回第i隊(duì)列的末尾,把處理機(jī)分配給新到的高優(yōu)先權(quán)進(jìn)程。</p><p>  四.關(guān)

8、鍵算法實(shí)現(xiàn)流程圖</p><p>  4.1 多級(jí)反饋隊(duì)列調(diào)度算法實(shí)現(xiàn)流程圖</p><p><b>  4.2 文件詳細(xì)</b></p><p>  Work.java:用于封裝每個(gè)進(jìn)程的Java Bean,將每個(gè)進(jìn)程的信息封裝到對象里面便于使用。</p><p>  SeqQueue.java:用戶封裝每個(gè)隊(duì)列的

9、Java Bean,將每個(gè)隊(duì)列的信息封裝到對象里面便于使用。</p><p>  Arithmetic.java:核心類文件,用于算法的計(jì)算和界面的控制。</p><p>  View.java:用于構(gòu)建界面的類文件,用于向用戶演示整個(gè)算法運(yùn)行的過程,以及與用戶的交互操作。</p><p>  ControlView.java:用于構(gòu)建控制臺(tái)的類文件,用于與用戶交互

10、以及控制程序的進(jìn)程等。</p><p>  五.軟件運(yùn)行環(huán)境及限制</p><p>  由于本程序是由java程序編寫,具有跨平臺(tái)的性能。在具有java支持的環(huán)境中皆能運(yùn)行,建議在windows2003 server及windows XP系統(tǒng)下運(yùn)行。</p><p>  環(huán)境要求:JDK1.6版本及其以上</p><p><b> 

11、 六.結(jié)果輸出及分析</b></p><p>  6.0.1 初始界面</p><p>  初始化程序需要的空間等</p><p><b>  6.1 主程序界面</b></p><p>  左上方顯示隊(duì)列中排隊(duì)的進(jìn)程,左下為執(zhí)行完成的情況</p><p>  右上為執(zhí)行信息,右下方

12、為正在處理的進(jìn)程</p><p>  用戶可以對程序進(jìn)行操作</p><p><b>  算法實(shí)現(xiàn)思想</b></p><p><b>  6.2 執(zhí)行界面</b></p><p>  及時(shí)地添加進(jìn)程并按多級(jí)反饋隊(duì)列調(diào)度算法來執(zhí)行</p><p><b>  6.

13、3 執(zhí)行完成</b></p><p>  執(zhí)行完成后顯示出所有的進(jìn)程的執(zhí)行情況</p><p>  用戶可以通過控制臺(tái)來重新執(zhí)行</p><p><b>  6.4 其他功能</b></p><p><b>  換膚功能</b></p><p>  6.5

14、算法結(jié)果說明</p><p>  進(jìn)程運(yùn)行時(shí),將啟動(dòng)兩個(gè)線程,分別用來添加任務(wù)和執(zhí)行任務(wù),在任務(wù)執(zhí)行過程中,不斷的更新當(dāng)前的執(zhí)行情況,并接受用戶的操作。</p><p>  6.6 算法核心代碼</p><p>  算法核心代碼為Arithmetic.java,代碼如下:</p><p>  class delThread extends

15、Thread{//執(zhí)行進(jìn)程</p><p>  @SuppressWarnings("deprecation")</p><p>  public void run(){</p><p>  while(true){</p><p>  if(isStop){</p><p>  View.setS

16、q(sq);//更新面板數(shù)據(jù)</p><p>  view.showWork();</p><p>  view.showNewWork(-3, null);//刷新正在處理的面板</p><p>  delThreadFlag=true;</p><p>  delThread.this.stop();</p><p&g

17、t;  }else if(!sq[0].isEmpty()){</p><p>  doIn(0);//執(zhí)行第一個(gè)隊(duì)列</p><p>  }else if(!sq[1].isEmpty()){</p><p>  doIn(1);//執(zhí)行第二個(gè)隊(duì)列</p><p>  }else if(!sq[2].isEmpty()){</p>

18、;<p>  doIn(2);//執(zhí)行第三個(gè)隊(duì)列</p><p>  }else if(!sq[3].isEmpty()){</p><p>  doIn(3);//執(zhí)行第四個(gè)隊(duì)列</p><p>  }else if(addThreadFlag){//添加進(jìn)程關(guān)閉且所有隊(duì)列為空時(shí)自動(dòng)關(guān)閉</p><p>  view.show

19、NewWork(-2, null);//刷新正在處理的面板</p><p>  delThreadFlag=true;</p><p>  delThread.this.stop();</p><p><b>  }</b></p><p><b>  }</b></p><p&

20、gt;<b>  }</b></p><p>  public void doIn(int sqnum){//執(zhí)行某個(gè)隊(duì)列</p><p>  doflag=sqnum;//標(biāo)志正常處理第sqnum隊(duì)列</p><p><b>  try {</b></p><p>  work=sq[sqnum]

21、.delete();//取出隊(duì)首元素</p><p>  view.addMes("<font size='3'>執(zhí)行隊(duì)列"+(sqnum+1)+"中的'"+work.getName()+"'</font><br>");//添加信息</p><p>  view.

22、setSq(sq);//更新面板數(shù)據(jù)</p><p>  view.showWork();//刷新隊(duì)列面板</p><p>  view.showNewWork(sqnum+1, work);//刷新正在處理的面板</p><p>  int sqtime=sq[sqnum].getTime();//獲取隊(duì)列時(shí)間片</p><p>  if(

23、isOver(sq[sqnum], work)){//在時(shí)間片類執(zhí)行完了</p><p>  int worktime=work.getLefttime();//獲取進(jìn)程的剩余執(zhí)行時(shí)間</p><p>  for(time=0;newflag&&time<worktime;time++){</p><p>  Thread.sleep(1000

24、);</p><p><b>  }</b></p><p>  overThread(work);</p><p><b>  }else{</b></p><p>  for(time=0;newflag&&time<sqtime;time++){</p>&

25、lt;p>  Thread.sleep(1000);</p><p><b>  }</b></p><p>  if(newflag){//沒有新進(jìn)程加入隊(duì)列</p><p>  work.setLefttime(work.getLefttime()-sq[sqnum].getTime());</p><p> 

26、 if(sqnum==3){//最后一個(gè)隊(duì)列</p><p>  addInSeqQueue(sqnum, work);//放入下個(gè)隊(duì)列</p><p>  view.addMes("<font size='3'>'"+work.getName()+"'未執(zhí)行完,轉(zhuǎn)入隊(duì)列"+(sqnum+1)+"

27、隊(duì)尾</font><br>");</p><p><b>  }else{</b></p><p>  addInSeqQueue(sqnum+1, work);//放入下個(gè)隊(duì)列</p><p>  view.addMes("<font size='3'>'&quo

28、t;+work.getName()+"'未執(zhí)行完,轉(zhuǎn)入隊(duì)列"+(sqnum+2)+"隊(duì)尾</font><br>");</p><p><b>  }</b></p><p>  }else{//有新進(jìn)程加入隊(duì)列</p><p>  view.addMes("<

29、;font size='3' color=#FF0000>有進(jìn)程進(jìn)入了優(yōu)先級(jí)更高的隊(duì)列</font><br>");</p><p>  view.addMes("<font size='3'>'"+work.getName()+"'進(jìn)入隊(duì)列尾部</font><br&g

30、t;");</p><p>  work.setLefttime(work.getLefttime()-time);</p><p>  addInSeqQueue(sqnum, work);//放入隊(duì)列尾部</p><p>  newflag=true;</p><p><b>  }</b></p&g

31、t;<p><b>  }</b></p><p>  work=null;</p><p>  view.showNewWork(sqnum+1, work);//刷新正在處理的面板</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace

32、();</p><p><b>  }</b></p><p><b>  七.心得體會(huì)</b></p><p>  通過這次課程設(shè)計(jì),不僅讓我進(jìn)一步地了解了多級(jí)反饋隊(duì)列調(diào)度算法,更重要的提高了我們的動(dòng)手能力。這次的課程設(shè)計(jì)項(xiàng)目也讓我意識(shí)到,未來的編程不是簡簡單單就能完成。而編程中所出現(xiàn)的問題也需要大家共同協(xié)商解決。開始的

33、時(shí)候以為這道題有些難,經(jīng)過對資料的查詢.如:多級(jí)反饋隊(duì)列調(diào)度算法如何的實(shí)現(xiàn)機(jī)制等,很快的找到了解決的辦法并迅速的編寫出了代碼。.</p><p>  對問題缺乏仔細(xì)的分析是我的一個(gè)缺點(diǎn),通過這次課程設(shè)計(jì)我克服了這個(gè)缺點(diǎn),更學(xué)會(huì)了如何地利用無限的網(wǎng)絡(luò)資源來幫助自己完善程序,學(xué)會(huì)了是使用前人的經(jīng)驗(yàn)來幫助自己更好地成長。這個(gè)多級(jí)反饋隊(duì)列調(diào)度算法程序還有一些不足之處,如不能演示過多的程序等,在以后的時(shí)間里我會(huì)將其完善。次

溫馨提示

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

最新文檔

評論

0/150

提交評論