操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計_第1頁
已閱讀1頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p>  課程名稱 操作系統(tǒng) </p><p>  題目名稱 進(jìn)程調(diào)度 </p><p>  學(xué)生學(xué)院 計算機(jī)學(xué)院 </p><p>  2015 年 1 月 13

2、 日</p><p><b>  目錄</b></p><p><b>  1.設(shè)計目的4</b></p><p><b>  2.設(shè)計內(nèi)容4</b></p><p><b>  3.設(shè)計步驟5</b></p><p>

3、;  3.1.需求分析5</p><p>  3.2.概要設(shè)計5</p><p>  3.2.1 設(shè)計思想5</p><p>  3.2.2 模型定義5</p><p>  3.3.3 主程序流程圖5</p><p>  3.3.4 各程序模塊之間的層次(調(diào)用)關(guān)系6</p><p>

4、;  3.3 詳細(xì)設(shè)計7</p><p>  3.3.1 功能類定義7</p><p>  3.3.2 函數(shù)調(diào)用關(guān)系圖7</p><p>  3.3.3 各模塊流程圖8</p><p>  3.4 調(diào)式分析8</p><p>  3.5 系統(tǒng)測試9</p><p>  3.6 使用說

5、明13</p><p>  4. 經(jīng)驗與體會14</p><p>  5.重要數(shù)據(jù)結(jié)構(gòu)或源程序中的疑難部分說明14</p><p><b>  設(shè)計目的</b></p><p>  設(shè)計編程進(jìn)程調(diào)度的四個算法。通過具體的進(jìn)程調(diào)度算法的實現(xiàn),加深對進(jìn)程調(diào)度算法實現(xiàn)過程的理解,并且采用Android端動態(tài)顯示,加深

6、MVC模式的理解與使用。</p><p><b>  設(shè)計內(nèi)容</b></p><p>  進(jìn)程調(diào)度是低級調(diào)度,它的主要功能是根據(jù)一定的算法將CPU分派給就緒隊列中的一個進(jìn)程。</p><p>  設(shè)計一個系統(tǒng)中有5個進(jìn)程,它們的到達(dá)時間和服務(wù)時間如下表所示,忽略I/O以及其他開銷時間。</p><p>  進(jìn)程到達(dá)時

7、間服務(wù)時間</p><p><b>  A03</b></p><p><b>  B26</b></p><p><b>  C44</b></p><p><b>  D65</b></p><p><b

8、>  E82</b></p><p>  算法實現(xiàn):先來先服務(wù)(FCFS)、非搶占及搶占的短進(jìn)程優(yōu)先(SPF)、高響應(yīng)比優(yōu)先(HRRN)以及時間片輪轉(zhuǎn)(時間片=1)調(diào)度算法。</p><p>  計算顯示:各進(jìn)程的完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間。(計算到小數(shù)點后兩位)</p><p>  上述設(shè)計采用java程序語言編程&l

9、t;/p><p>  硬件環(huán)境:win8-PC 和Android4.4.2系統(tǒng)手機(jī)</p><p>  軟件環(huán)境:eclipse+adt</p><p><b>  設(shè)計步驟</b></p><p><b>  3.1.需求分析</b></p><p>  要求實現(xiàn)4個算法演示進(jìn)

10、程調(diào)度過程,其中短作業(yè)優(yōu)先算法可拆分成非搶占式和搶占式(合計成5個)。用戶生成任務(wù)要求的測試數(shù)據(jù)后,選擇對應(yīng)的算法啟動進(jìn)程調(diào)度,Android端界面動態(tài)顯示調(diào)度過程,并記錄各狀態(tài)的個數(shù)及其各進(jìn)程的完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間。</p><p><b>  3.2.概要設(shè)計</b></p><p>  3.2.1 設(shè)計思想</p>&

11、lt;p>  由于需要在Android端動態(tài)演示過程,把整個流程的邏輯處理和界面顯示分離開來,結(jié)合MVC分層思想,線程通信機(jī)制,使用Android中的適配器來實現(xiàn)數(shù)據(jù)處理和界面顯示的結(jié)合。首先定義計時器,每隔一秒運(yùn)行一次子任務(wù)。該子任務(wù)處理好變化的數(shù)據(jù)后發(fā)送一個消息給UI線程。UI線程接受消息后,把處理的數(shù)據(jù)放進(jìn)適配器后進(jìn)行顯示。所有任務(wù)處理完后重置計時器。</p><p>  3.2.2 模型定義<

12、/p><p>  定義進(jìn)程類,用來記錄進(jìn)程在調(diào)度中數(shù)據(jù)的變化。</p><p>  使用多個泛型鏈表,分別才能不同狀態(tài)的進(jìn)程。</p><p>  3.3.3 主程序流程圖</p><p>  3.3.4 各程序模塊之間的層次(調(diào)用)關(guān)系</p><p><b>  3.3 詳細(xì)設(shè)計</b></

13、p><p>  3.3.1 功能類定義</p><p>  3.3.2 函數(shù)調(diào)用關(guān)系圖</p><p>  3.3.3 各模塊流程圖</p><p><b>  3.4 調(diào)式分析</b></p><p>  問題一:時間片控制不當(dāng)導(dǎo)致數(shù)據(jù)顯示混亂。</p><p>  解決方法

14、:畫流程圖,在運(yùn)行隊列中每更換對象,就重置時間片。檢查了不止10遍,最后控制好每一個交換對象細(xì)節(jié),終于結(jié)局。</p><p>  問題二:運(yùn)行和就緒隊列合并成同一個隊列出錯。</p><p>  解決方法:Java編程中,對隊列使用foreach時對泛型對象移動時,其底層會處理成迭代器,非線程安全,換成for循環(huán)使用。</p><p>  問題三:達(dá)到時間的不確定導(dǎo)

15、致編程邏輯混亂。</p><p>  解決問題:因為不知道第N秒達(dá)到是指第N秒開始還是第N秒結(jié)束,所以統(tǒng)一處理成第N秒結(jié)束時達(dá)到。</p><p>  問題四:兩個鏈表引用同一個對象時,引用對象影響同時影響兩個鏈表導(dǎo)致顯示出錯。</p><p>  解決問題:在重新產(chǎn)生一個對象,把原對象屬性賦給新對象,分別存進(jìn)去鏈表。遇到處理鏈表,則兩個對象同時處理就好。</

16、p><p><b>  3.5 系統(tǒng)測試</b></p><p>  以下測試數(shù)據(jù)為演示過程中某時刻</p><p><b>  先來先服務(wù)</b></p><p><b>  非搶占式短作業(yè)優(yōu)先</b></p><p><b>  搶占式短作業(yè)優(yōu)

17、先</b></p><p><b>  高響應(yīng)比優(yōu)先</b></p><p><b>  輪轉(zhuǎn)法</b></p><p><b>  3.6 使用說明</b></p><p> ?。?)主界面點擊“進(jìn)程調(diào)度(課程設(shè)計)”進(jìn)入操作界面,其他為實驗內(nèi)容不做介紹。<

18、/p><p>  (2)底部有兩個按鈕“添加測試進(jìn)程”和“啟動進(jìn)程調(diào)度”,點擊“添加測試進(jìn)程”添加任務(wù)要求5個測試數(shù)據(jù),其上方有下拉菜單可選擇對應(yīng)調(diào)度算法后,再點擊“添加測試進(jìn)程”就可以進(jìn)行調(diào)度演示。</p><p> ?。?)在演示過程中無法添加進(jìn)程和啟動進(jìn)程。系統(tǒng)自動檢測是否完成,如</p><p><b>  4. 經(jīng)驗與體會</b><

19、/p><p>  Android端《操作系統(tǒng)課設(shè)》演示系統(tǒng)經(jīng)歷了UI初步設(shè)計、任務(wù)要求完成、UI推倒重來設(shè)計三個主要過程。初期為了演示只能在小小的手機(jī)屏幕隨意添加和布局顯示塊,接下來任務(wù)的實現(xiàn)是比較繁瑣的。因為有之前實驗進(jìn)程調(diào)度的基礎(chǔ),所有5個算法難度一般,不過中間出現(xiàn)過一些小問題:操作java對象時的對象修改亂象、鏈表越界等等,不過經(jīng)過調(diào)試和思考后都解決了。因為屏幕較小一次只能演示一個算法,考慮到不讓用戶退出就可以

20、進(jìn)行過多次測試,對代碼進(jìn)行了優(yōu)化和循環(huán)處理,加上更新Android UI進(jìn)程涉及到跨進(jìn)程通信,交叉處理比較麻煩,不過經(jīng)過努力,最后還是解決了,心里蠻開心的。</p><p>  經(jīng)過本次實驗和課設(shè)的學(xué)習(xí),自己動手實現(xiàn)了所有功能,對課設(shè)內(nèi)容進(jìn)程調(diào)度有了更深刻的了解,特別是在處理各種算法時遇到問題,使自己不得不冷靜下來思考,一定程度上加深了自己的認(rèn)知。</p><p>  重要數(shù)據(jù)結(jié)構(gòu)或源程序

21、中的疑難部分說明</p><p>  package com.example.caozuoxitong.model;</p><p><b>  /**</b></p><p><b>  * 課程設(shè)計進(jìn)程類</b></p><p>  * @author yummy</p><

22、p><b>  * 進(jìn)程名</b></p><p><b>  * 服務(wù)時間</b></p><p><b>  * 達(dá)到時間</b></p><p><b>  * 當(dāng)前狀態(tài)</b></p><p><b>  * 等待時間</b&

23、gt;</p><p><b>  *</b></p><p><b>  */</b></p><p>  public class MyCourseProcess implements Comparable {</p><p>  private String name; </p>

24、<p>  private int severTime;</p><p>  private int getTime; </p><p>  private String state;</p><p>  private int waitTime;</p><p>  public String getName() {</

25、p><p>  return name;</p><p><b>  }</b></p><p>  public void setName(String name) {</p><p>  this.name = name;</p><p><b>  }</b></p&

26、gt;<p>  public int getSeverTime() {</p><p>  return severTime;</p><p><b>  }</b></p><p>  public void setSeverTime(int severTime) {</p><p>  this.se

27、verTime = severTime;</p><p><b>  }</b></p><p>  public int getGetTime() {</p><p>  return getTime;</p><p><b>  }</b></p><p>  publi

28、c void setGetTime(int getTime) {</p><p>  this.getTime = getTime;</p><p><b>  }</b></p><p>  public String getState() {</p><p>  return state;</p>&l

29、t;p><b>  }</b></p><p>  public void setState(String state) {</p><p>  this.state = state;</p><p><b>  }</b></p><p>  public int getWaitTime()

30、 {</p><p>  return waitTime;</p><p><b>  }</b></p><p>  public void setWaitTime(int waitTime) {</p><p>  this.waitTime = waitTime;</p><p><b

31、>  }</b></p><p><b>  /**</b></p><p><b>  *</b></p><p>  *實現(xiàn)Comparable接口</p><p>  *排序是按照當(dāng)前進(jìn)程服務(wù)時間從小打到排序</p><p><b>  */

32、</b></p><p><b>  @Override</b></p><p>  public int compareTo(Object another) {</p><p>  // TODO Auto-generated method stub</p><p>  return this.getSev

33、erTime()-((MyCourseProcess)another).getSeverTime();</p><p><b>  }</b></p><p><b>  }</b></p><p>  package com.example.caozuoxitong.model;</p><p>

34、  import android.R.string;</p><p><b>  /**</b></p><p>  * 進(jìn)程執(zhí)行情況表表項</p><p>  * 表項包含:名字、完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間</p><p>  * @author yummy</p><p><b&g

35、t;  *</b></p><p><b>  */</b></p><p>  public class MyCourseProcessTime {</p><p>  private String name; //進(jìn)程名</p><p>  private double wanchengshijian;

36、//完成時間</p><p>  private double zhouzhuanshijian;//周轉(zhuǎn)時間</p><p>  private double daiquanzhouzhuan;//帶權(quán)周轉(zhuǎn)時間</p><p>  public double getWanchengshijian() {</p><p>  return w

37、anchengshijian;</p><p><b>  }</b></p><p>  public void setWanchengshijian(double wanchengshijian) {</p><p>  this.wanchengshijian = wanchengshijian;</p><p>

38、<b>  }</b></p><p>  public double getZhouzhuanshijian() {</p><p>  return zhouzhuanshijian;</p><p><b>  }</b></p><p>  public void setZhouzhuans

39、hijian(double zhouzhuanshijian) {</p><p>  this.zhouzhuanshijian = zhouzhuanshijian;</p><p><b>  }</b></p><p>  public double getDaiquanzhouzhuan() {</p><p>

40、;  return daiquanzhouzhuan;</p><p><b>  }</b></p><p>  public void setDaiquanzhouzhuan(double daiquanzhouzhuan) {</p><p>  this.daiquanzhouzhuan = daiquanzhouzhuan;</

41、p><p><b>  }</b></p><p>  public String getName() {</p><p>  return name;</p><p><b>  }</b></p><p>  public void setName(String string

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論