2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

2、饋隊列調度算法實現(xiàn)流程圖3</p><p>  4.2 文件詳細3</p><p>  五.軟件運行環(huán)境及限制4</p><p>  六.結果輸出及分析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 算法結果說明9</p><p>  6.6 算法核心代碼9</p><p><b>  七.心得體會11</b></p><p><b&

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

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

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

7、/p><p>  僅當?shù)谝魂犃锌臻e時,調度程序才調度第二隊列中的進程運行;僅當?shù)?~(i-1)隊列均為空時,才會調度第i隊列中的進程運行。如果處理機正常第i隊列中的某個進程服務時,又有新進程進入優(yōu)先權較高的隊列(第1~(i-1)中的任何一個隊列),此時新進程將搶占正在運行進程的處理機,即由調度程序把正在運行的進程返回第i隊列的末尾,把處理機分配給新到的高優(yōu)先權進程。</p><p>  四.關

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

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

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

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

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

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

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

15、Thread{//執(zhí)行進程</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í)行第一個隊列</p><p>  }else if(!sq[1].isEmpty()){</p><p>  doIn(1);//執(zhí)行第二個隊列</p><p>  }else if(!sq[2].isEmpty()){</p>

18、;<p>  doIn(2);//執(zhí)行第三個隊列</p><p>  }else if(!sq[3].isEmpty()){</p><p>  doIn(3);//執(zhí)行第四個隊列</p><p>  }else if(addThreadFlag){//添加進程關閉且所有隊列為空時自動關閉</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í)行某個隊列</p><p>  doflag=sqnum;//標志正常處理第sqnum隊列</p><p><b>  try {</b></p><p>  work=sq[sqnum]

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

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

23、isOver(sq[sqnum], work)){//在時間片類執(zhí)行完了</p><p>  int worktime=work.getLefttime();//獲取進程的剩余執(zhí)行時間</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){//沒有新進程加入隊列</p><p>  work.setLefttime(work.getLefttime()-sq[sqnum].getTime());</p><p> 

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

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

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

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

30、t;");</p><p>  work.setLefttime(work.getLefttime()-time);</p><p>  addInSeqQueue(sqnum, work);//放入隊列尾部</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>  七.心得體會</b></p><p>  通過這次課程設計,不僅讓我進一步地了解了多級反饋隊列調度算法,更重要的提高了我們的動手能力。這次的課程設計項目也讓我意識到,未來的編程不是簡簡單單就能完成。而編程中所出現(xiàn)的問題也需要大家共同協(xié)商解決。開始的

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

溫馨提示

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

評論

0/150

提交評論