版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 信息科學(xué)與工程學(xué)院</b></p><p> 《操作系統(tǒng)課程設(shè)計》總結(jié)報告</p><p> 題 目: 通用處理器調(diào)度演示實驗</p><p><b> 一、課程設(shè)計目的</b></p><p> 操作系統(tǒng)課程設(shè)計是軟件工程專業(yè)的主要實踐性教學(xué)環(huán)節(jié)。在
2、進(jìn)行了專業(yè)基礎(chǔ)課和《操作系統(tǒng)》課程的學(xué)習(xí)基礎(chǔ)上,設(shè)計或分析一個實際的操作系統(tǒng)旨在加深對計算機(jī)硬件結(jié)構(gòu)和系統(tǒng)軟件的認(rèn)識,初步掌握操作系統(tǒng)組成模塊和應(yīng)用接口的使用方法,提高進(jìn)行工程設(shè)計和系統(tǒng)分析的能力,為畢業(yè)設(shè)計和以后的工程實踐打下良好的基礎(chǔ)。</p><p> 二、課程設(shè)計內(nèi)容與要求</p><p><b> 2.1設(shè)計目的</b></p><p
3、> 在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時處于就緒狀態(tài)的進(jìn)程可能有若干個,也就是能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個數(shù),為了使系統(tǒng)中的進(jìn)程有條不紊地工作,必須選用某種調(diào)度策略,在一定的時機(jī)選擇一個進(jìn)程占有處理機(jī)。要求學(xué)生設(shè)計一個模擬處理機(jī)調(diào)度算法,以鞏固和加深處理機(jī)調(diào)度的概念。</p><p> 2.2設(shè)計要求(多道、單處理機(jī))</p><p> 1) 進(jìn)程調(diào)度算法包括:時間片輪轉(zhuǎn)算法、先
4、來先服務(wù)算法、短作業(yè)優(yōu)先算法、靜態(tài)優(yōu)先權(quán)優(yōu)先調(diào)度算法、高響應(yīng)比調(diào)度算法。</p><p> 2) 每一個進(jìn)程有一個PCB,其內(nèi)容可以根據(jù)具體情況設(shè)定。</p><p> 3) 進(jìn)程數(shù)、進(jìn)入內(nèi)存時間、要求服務(wù)時間、作業(yè)大小、優(yōu)先級等均可以在界面上設(shè)定。</p><p> 4) 可讀取樣例數(shù)據(jù)(要求存放在外部文件中)進(jìn)行進(jìn)程數(shù)、進(jìn)入內(nèi)存時間、時間片長度、作業(yè)大小、
5、進(jìn)程優(yōu)先級的初始化。</p><p> 5) 可以在運(yùn)行中顯示各進(jìn)程的狀態(tài):就緒、執(zhí)行(由于不要求設(shè)置互斥資源與進(jìn)程間同步關(guān)系,故只有兩種狀態(tài))。</p><p> 6) 采用可視化界面,可在進(jìn)程調(diào)度過程中隨時暫停調(diào)度,查看當(dāng)前進(jìn)程的狀態(tài)以及相應(yīng)的阻塞隊列。</p><p> 7) 有能比較的功能,可比較同一組數(shù)據(jù)在不同調(diào)度算法下的平均周轉(zhuǎn)時間。</p&
6、gt;<p> 8) 具有一定的數(shù)據(jù)容錯性。</p><p> 三、功能模擬系統(tǒng)分析與設(shè)計</p><p><b> 3.1系統(tǒng)分析 </b></p><p> 本課程設(shè)計的目的就是模擬一種通用處理器的五種調(diào)度算法來實現(xiàn)進(jìn)程調(diào)度的過程,加深對進(jìn)程調(diào)度的理解,輸出采用采用可視化界面,可在進(jìn)程調(diào)度過程中隨時暫停調(diào)度,查看當(dāng)前進(jìn)
7、程的狀態(tài)以及相應(yīng)的阻塞隊列,進(jìn)程控制塊(PCB)是這個程序設(shè)計的核心,PCB包含了到達(dá)時間,運(yùn)行時間,優(yōu)先級等關(guān)鍵數(shù)據(jù),要求可以用五種調(diào)度算法演示,我們可以用策略模式把五個算法打包通過一個接口連接CPU,實現(xiàn)算法和CPU的分離,算法有5五種,分別實現(xiàn)不同的調(diào)度演示(時間片輪轉(zhuǎn)算法、先來先服務(wù)算法、短作業(yè)優(yōu)先算法、靜態(tài)優(yōu)先權(quán)優(yōu)先調(diào)度算法、高響應(yīng)比調(diào)度算法)</p><p> 我們采用MVC(模型-視圖-控制器)的
8、設(shè)計方法,輸入方式的采用界面直接輸入和文件讀取輸入兩種方法,視圖主要展示進(jìn)程的進(jìn)程名、到達(dá)時間、運(yùn)行時間、優(yōu)先級、時間片、響應(yīng)時間、結(jié)束時間、周轉(zhuǎn)時間,表示方法我們采用Java圖形界面輸出,動態(tài)演示調(diào)度算法的實現(xiàn)過程,以加深對操作系統(tǒng)進(jìn)程調(diào)度的理解。</p><p><b> 3.2系統(tǒng)設(shè)計</b></p><p><b> 3.2.1設(shè)計思想</
9、b></p><p> 圖3-1 進(jìn)程控制塊(PCB)</p><p> 圖3-2 進(jìn)程狀態(tài)圖</p><p> 1、每個進(jìn)程有一個進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先級數(shù)、到達(dá)時間、需要運(yùn)行時間等等。 </p><p> 2、進(jìn)程的信息,包括到達(dá)時間,優(yōu)先數(shù)及需要的運(yùn)行時間等都是事先人為地指定
10、。 </p><p> 3、每個進(jìn)程的狀態(tài)可以是就緒 W(Wait)、運(yùn)行R(Run)、或完成F(Finish)三種狀態(tài)之一。</p><p> 3.2.2算法分析 </p><p> 先來先服務(wù)調(diào)度算法 FCFS:First Come First Serve。</p><p> 總是把當(dāng)前處于就緒隊列之首的那個進(jìn)程調(diào)度到運(yùn)行狀態(tài)。也
11、就說,它只考慮進(jìn)程進(jìn)入就緒隊列的先后,而不考慮它的下一個CPU周期的長短及其他因素。FCFS算法簡單易行,但性能卻不大好。</p><p> 最短短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法SJF:Shortest Job First。</p><p> 稱為“短進(jìn)程優(yōu)先”SPN(Shortest Process Next);這是對FCFS算法的改進(jìn),其目標(biāo)是減少平均周轉(zhuǎn)時間。</p>&
12、lt;p> 高優(yōu)先權(quán)優(yōu)先調(diào)度算法HPF:Highest Priority First。</p><p> 多級隊列算法的改進(jìn),平衡各進(jìn)程對響應(yīng)時間的要求。適用于作業(yè)調(diào)度和進(jìn)程調(diào)度,可分成搶先式和非搶先式。</p><p> (四)最高響應(yīng)比優(yōu)先調(diào)度算法HRN:Highest Response Ratio Next。 </p><p> 最高響應(yīng)比優(yōu)先法
13、(HRN,Highest Response_ratio Next)是對FCFS方式和SJF方式的一種綜合平衡。FCFS方式只考慮每個作業(yè)的等待時間而未考慮執(zhí)行時間的長短,而SJF方式只考慮執(zhí)行時間而未考慮等待時間的長短。因此,這兩種調(diào)度算法在某些極端情況下會帶來某些不便。HRN調(diào)度策略同時考慮每個作業(yè)的等待時間長短和估計需要的執(zhí)行時間長短,從中選出響應(yīng)比最高的作業(yè)投入執(zhí)行。</p><p> ?。ㄎ澹┗跁r間片的
14、輪調(diào)度算法(RR)。</p><p> 將系統(tǒng)中所有的就緒進(jìn)程按照FCFS原則,排成一個隊列。每次調(diào)度時將CPU分派給隊首進(jìn)程,讓其執(zhí)行一個時間片。時間片的長度從幾個ms到幾百ms。在一個時間片結(jié)束時,發(fā)生時鐘中斷。調(diào)度程序據(jù)此暫停當(dāng)前進(jìn)程的執(zhí)行,將其送到就緒隊列的末尾,并通過上下文切換執(zhí)行當(dāng)前的隊首進(jìn)程。進(jìn)程可以未使用完一個時間片,就出讓CPU(如阻塞)。</p><p><b&
15、gt; 3.2.3模塊設(shè)計</b></p><p><b> 1)輸入模塊</b></p><p> 能夠滿足輸入進(jìn)程基本信息的功能,盡可能提供友好的交互界面。給用戶很好的提示,使用戶能夠方便的操作。</p><p> 可讀取樣例數(shù)據(jù)(要求存放在外部文件中)進(jìn)行進(jìn)程數(shù)、進(jìn)入內(nèi)存時間、時間片長度、作業(yè)大小、進(jìn)程優(yōu)先級的初始化。
16、</p><p><b> 算法模塊</b></p><p> 可以根據(jù)需求選擇五種算法中的一種運(yùn)行:</p><p> (一)先來先服務(wù)調(diào)度算法 FCFS:First Come First Serve。</p><p> 1.基本思想:按作業(yè)(進(jìn)程)到達(dá)時間先后順序依次使用CPU。</p><
17、;p> 2.適用于作業(yè)/進(jìn)程調(diào)度。</p><p> 3.非搶占調(diào)度方式。</p><p><b> 4.優(yōu)缺點。</b></p><p><b> 優(yōu)點:實現(xiàn)簡單。</b></p><p> 缺點:未考慮進(jìn)程的優(yōu)先級或緊急性,不利于短作業(yè)(進(jìn)程)的運(yùn)行,利于CPU繁忙型作業(yè),而不利
18、于I/O繁忙型作業(yè)。很少單獨使用,常與其他算法結(jié)合使用(輔助算法)。</p><p> ?。ǘ┒套鳂I(yè)(進(jìn)程)優(yōu)先調(diào)度算法SJF:Shortest Job First。</p><p> 基本思想:選擇就緒(后備)隊列中估計運(yùn)行時間最短的進(jìn)程(作業(yè))投入運(yùn)行。</p><p> 2.適用于作業(yè)/進(jìn)程調(diào)度。</p><p> 3.非搶占調(diào)
19、度方式——>最短剩余時間優(yōu)先算法或 搶占調(diào)度方式。</p><p><b> 4.優(yōu)缺點。</b></p><p> 優(yōu)點:有效縮短作業(yè)的平均周轉(zhuǎn)時間,從而提高系統(tǒng)吞吐量。</p><p> 缺點:不利于長作業(yè)和緊迫作業(yè)的運(yùn)行(無法滿足公平性,估計有主觀性)</p><p> ?。ㄈ└邇?yōu)先權(quán)優(yōu)先調(diào)度算法HP
20、F:Highest Priority First。 </p><p> 引入:為照顧緊迫型作業(yè)優(yōu)先處理,“急事急辦”,“重要事先辦”。</p><p> 1.基本思想:選擇優(yōu)先級最高的進(jìn)程或作業(yè)投入運(yùn)行。</p><p> 2.適用于作業(yè)/進(jìn)程調(diào)度。</p><p><b> 3.調(diào)度方式。</b></p&
21、gt;<p> 非搶占調(diào)度方式——批處理系統(tǒng):“等你打完我再打”。</p><p> 搶占調(diào)度方式——實時系統(tǒng):“不等你打完電話,搶過話筒就打”。</p><p> 4.優(yōu)先權(quán)(優(yōu)先級):即優(yōu)先數(shù),是由系統(tǒng)或用戶按某種原則指定的,一般用整數(shù)表示。</p><p><b> 靜態(tài)優(yōu)先權(quán)</b></p>&l
22、t;p> “一定終身”是在創(chuàng)建進(jìn)程/作業(yè)時確定的,且在整個運(yùn)行期間保持不變。優(yōu)先級的確定依據(jù):用戶要求、進(jìn)程/作業(yè)類型、對資源的要求不同系統(tǒng)有不同的確定原則,及表求方法。</p><p> 優(yōu)點:簡單易行,系統(tǒng)開銷小。</p><p> 缺點:不夠精確,可能出現(xiàn)某些低優(yōu)先級的進(jìn)程永不能被執(zhí)行。</p><p><b> (2)動態(tài)優(yōu)先權(quán)<
23、;/b></p><p> 是在創(chuàng)建進(jìn)程/作業(yè)時賦予的優(yōu)先級,可隨著進(jìn)程的推進(jìn)而改變。決定/動態(tài)改變因素:等待時間、已使用處理機(jī)的時間、其他資源的使用情況等。</p><p> 特點:可防止低優(yōu)先級的進(jìn)程/作業(yè)長時間得不到調(diào)度。</p><p> ?。ㄋ模┳罡唔憫?yīng)比優(yōu)先調(diào)度算法HRN:Highest Response Ratio Next。 </p&
24、gt;<p> 引入:實際上是一種動態(tài)優(yōu)先權(quán)調(diào)度算法。</p><p> 1.響應(yīng)比R = 響應(yīng)時間 / 要求服務(wù)時間</p><p> =(等待時間 + 運(yùn)行時間)/ 運(yùn)行時間</p><p> = 1 +(等待時間 / 運(yùn)行時間)</p><p> 2.基本思想:同時兼顧每個作業(yè)等待時間和運(yùn)行時間兩方面因素,選擇響
25、應(yīng)比最高的作業(yè)/進(jìn)程投入運(yùn)行。</p><p><b> 3.優(yōu)缺點。</b></p><p> 優(yōu)點:利于短作業(yè),利于長作業(yè)。</p><p><b> 缺點:系統(tǒng)開銷大。</b></p><p> ?。ㄎ澹┗跁r間片的輪調(diào)度算法(RR)</p><p> 1.基本
26、思想:輪轉(zhuǎn)法(Round Robin)是讓每個進(jìn)程在就緒隊列中的等待時間與享受服務(wù)的時間成正比例。</p><p> 2.時間片大小的確定:</p><p> 固定時間片 可變時間片</p><p> 系統(tǒng)響應(yīng)時間 正比</p><p> 就緒進(jìn)程個數(shù)
27、 反比 </p><p><b> CPU能力</b></p><p> 進(jìn)程切換時間q時間片t 則q/t不大于某個值</p><p> 3.時間片t大小的選擇影響:</p><p> 太大,則——>FCFS;</p><p> 太小,則系統(tǒng)開銷增大(頻繁切換)。&l
28、t;/p><p> t = R / NmaxR為響應(yīng)時間,Nmax允許的最大就緒數(shù)。</p><p><b> 3)輸出模塊</b></p><p> 根據(jù)選擇的調(diào)度算法輸出進(jìn)程的響應(yīng)時間,結(jié)束時間,周轉(zhuǎn)時間,平均周轉(zhuǎn)時間,采用可視化界面,可在進(jìn)程調(diào)度過程中隨時暫停調(diào)度,查看當(dāng)前進(jìn)程的狀態(tài)以及相應(yīng)的阻塞隊列。</p><
29、p> 3.2.4數(shù)據(jù)結(jié)構(gòu)說明</p><p><b> ADT說明:</b></p><p> ADT ADT-Name</p><p> { Data://數(shù)據(jù)說明 數(shù)據(jù)元素之間邏輯關(guān)系的描述 Operat
30、ions://操作說明 Operation1://操作1,它通??捎肅或C﹢﹢的函數(shù)原型來描述 Input:對輸入數(shù)據(jù)的說明 Preconditions:執(zhí)行本操作前系統(tǒng)應(yīng)滿足的狀態(tài)//可看作初始條件
31、;Process:對數(shù)據(jù)執(zhí)行的操作 Output:對返回數(shù)據(jù)的說明 Postconditions:執(zhí)行本操作后系統(tǒng)的狀態(tài)//"系統(tǒng)"可看作某個數(shù)據(jù)結(jié)構(gòu)</p><p> Operation2://操作2 …… }//ADT
32、 </p><p><b> 程序類圖:</b></p><p> 圖3-3 程序類圖</p><p> 3.2.5算法流程圖</p><p> 處理器調(diào)度程序活動圖:在采用多道程序設(shè)計的系統(tǒng)中,往往有若干個進(jìn)程同時處于就緒狀態(tài)。當(dāng)就緒狀態(tài)進(jìn)程個數(shù)大于處理器數(shù)時,就必須依照某種策略來決定哪些進(jìn)程優(yōu)先占
33、用處理器。本實驗?zāi)M在單處理器情況下處理器調(diào)度,幫助學(xué)生加深了解處理器調(diào)度的工作。</p><p> 圖3-4 處理器調(diào)度程序活動圖</p><p> 1.先來先服務(wù):調(diào)度算法 (FCFS:First Come First Serve)。</p><p> 圖3-5 先到先服務(wù)算法活動圖</p><p> 2.短作業(yè)(進(jìn)程)優(yōu)先調(diào)
34、度算法(SJF:Shortest Job First)。</p><p> 圖3-6 最短作業(yè)優(yōu)先算法活動圖</p><p> 3.高優(yōu)先權(quán)優(yōu)先調(diào)度算法(HPF:Highest Priority First)。 </p><p> 圖3-7 優(yōu)先調(diào)度算法活動圖</p><p> 4.最高響應(yīng)比優(yōu)先調(diào)度算法(HRN:Highest
35、 Response Ratio Next)。 </p><p> 圖3-8 最高響應(yīng)比調(diào)度算法活動圖</p><p> 5.基于時間片的輪調(diào)度算法(RR)。</p><p> 圖3-9 時間片輪轉(zhuǎn)法算法活動圖</p><p> 四、系統(tǒng)測試與調(diào)試分析</p><p><b> 4.1 系統(tǒng)測試
36、</b></p><p><b> 4.1.1輸入模塊</b></p><p> (1)實現(xiàn)在界面上直接手動輸入。</p><p> ?。?)實現(xiàn)在文件中直接讀取。</p><p><b> 4.1.2算法模塊</b></p><p> 實現(xiàn)可以在界面上選
37、擇需要的算法(時間片輪轉(zhuǎn)算法、先來先服務(wù)算法、短作業(yè)優(yōu)先算法、靜態(tài)優(yōu)先權(quán)優(yōu)先調(diào)度算法、高響應(yīng)比調(diào)度算法)運(yùn)行。</p><p><b> 4.1.3輸出模塊</b></p><p> 可以根據(jù)選擇的算法,得到正確的輸出結(jié)果。</p><p><b> 4.2測試用例</b></p><p>
38、 表4-1 測試用例表</p><p><b> 4.3測試結(jié)果</b></p><p> 4.3.1先到先服務(wù)算法</p><p> 圖4-1 先到先服務(wù)算法測試結(jié)果</p><p> 4.3.2最短作業(yè)優(yōu)先算法</p><p> 圖4-2 最短作業(yè)優(yōu)先算法測試結(jié)果</p&
39、gt;<p> 4.3.3靜態(tài)優(yōu)先級算法</p><p> 圖4-3 優(yōu)先級算法測試結(jié)果</p><p> 4.3.4最高響應(yīng)比算法</p><p> 圖4-4 最高響應(yīng)比算法測試結(jié)果</p><p> 4.3.5時間片輪轉(zhuǎn)法</p><p> 圖4-5 時間片輪轉(zhuǎn)法測試結(jié)果</p
40、><p> 4.4手動運(yùn)算結(jié)果對比</p><p> 4.4.1靜態(tài)優(yōu)先級</p><p> P1 p3 p4 p5 p2 </p><p> 0 7 10 15 19 20</p><p> 4.4.2先來先服務(wù)&
41、lt;/p><p> P1 p2p3 p4 p5</p><p> 0 7 8 11 16 20</p><p> 4.4.3最短作業(yè)優(yōu)先</p><p> P1 p2 p3 p5 p4</p><p&g
42、t; 0 7 8 11 15 20 </p><p> 4.4.4最高響應(yīng)比</p><p> P1 p2 p3 p4 p5</p><p> 0 7 8 11 16 20</p><p>
43、 4.4.5時間片算法</p><p> P1 p2 p3 p4 p1 p5 p4 p1 p5 </p><p> 0 3 4 7 10 13 16 18 19 20 </p><p> 圖4-6 手動計算截圖1</p><p> 圖4-7 手動計算截圖2</p>
44、;<p><b> 4.5測試</b></p><p><b> 表4-2 測試表</b></p><p><b> 4.6 調(diào)試分析</b></p><p> 在我們組程序功能已經(jīng)基本實現(xiàn)并且正常的情況之后,現(xiàn)在主要完成數(shù)據(jù)的測試,在測試過程中,主要針對老師給的數(shù)據(jù),我先手動
45、的分別對五種算法算出答案,再分別讀入程序運(yùn)行,與手動算出的結(jié)果進(jìn)行反復(fù)對比,在測試中我們發(fā)現(xiàn)了時間片輪轉(zhuǎn)法的算法有點小小的問題,與預(yù)期的結(jié)果不符合,在進(jìn)行了反復(fù)調(diào)試之后得到了正確的結(jié)果,程序正確。</p><p><b> 用戶手冊</b></p><p><b> 1.導(dǎo)入文件包</b></p><p> 圖4-8
46、 讀入程序包</p><p> 2.運(yùn)行讀入數(shù)據(jù)(手動輸入或者文件讀?。?lt;/p><p> 圖4-9 讀入數(shù)據(jù)</p><p> 3.選擇調(diào)度算法點擊Start開始運(yùn)行,可以點擊pause來暫停,點擊甘特圖可以查看進(jìn)程甘特圖</p><p> 圖4-10 算法選擇</p><p><b> 4
47、.輸出結(jié)果</b></p><p> 圖4-11 結(jié)果輸出</p><p><b> 六、程序清單</b></p><p><b> FCFS.java</b></p><p> package lab1;</p><p> import java.u
48、til.Vector;</p><p> public class FCFS extends DispatchMethod{</p><p><b> @Override</b></p><p> public PCB getNext(Vector<PCB> q) {</p><p> // TODO
49、 Auto-generated method stub</p><p><b> PCB p;</b></p><p> if(q.size()>0)</p><p> p=q.remove(0);</p><p><b> else</b></p><p>&
50、lt;b> p=null;</b></p><p><b> return p;</b></p><p><b> }</b></p><p><b> @Override</b></p><p> public int handle(PCB p,V
51、ector<PCB> q) {</p><p> // TODO Auto-generated method stub</p><p> int time=p.getServeTime();</p><p><b> try {</b></p><p> Thread.sleep(time*1000)
52、;</p><p> System.out.println("sleep for "+time);</p><p> } catch (InterruptedException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStac
53、kTrace();</p><p><b> }</b></p><p> p.setTime(p.getEnterTime(),0,p.getPriority());</p><p> return time;</p><p><b> }</b></p><p>
54、<b> }</b></p><p><b> SJF.java</b></p><p> package lab1;</p><p> import java.util.Vector;</p><p> public class SJF extends DispatchMethod{&l
55、t;/p><p><b> @Override</b></p><p> public PCB getNext(Vector<PCB> q) {</p><p> // TODO Auto-generated method stub</p><p> if(q.size()==0)</p>
56、<p> return null;</p><p> int min=0;</p><p> for(int i=0;i<q.size();i++){</p><p> if(q.get(i).getServeTime()<q.get(min).getServeTime())</p><p><b>
57、 min=i;</b></p><p><b> }</b></p><p> PCB temp=q.remove(min);</p><p> return temp;</p><p><b> }</b></p><p><b> @Ove
58、rride</b></p><p> public int handle(PCB p,Vector<PCB> q) {</p><p> // TODO Auto-generated method stub</p><p> int time=p.getServeTime();</p><p><b>
59、 try {</b></p><p> Thread.sleep(time*1000);</p><p> } catch (InterruptedException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace()
60、;</p><p><b> }</b></p><p> p.setTime(p.getEnterTime(),0,p.getPriority());</p><p> return time;</p><p><b> }</b></p><p><b>
61、; }</b></p><p> StaticPriority.java</p><p> package lab1;</p><p> import java.util.Vector;</p><p> public class StaticPriority extends DispatchMethod{</p&
62、gt;<p><b> @Override</b></p><p> public PCB getNext(Vector<PCB> q) {</p><p> // TODO Auto-generated method stub</p><p><b> PCB p;</b></p&
63、gt;<p> if(q.size()==0)</p><p><b> p=null;</b></p><p><b> else{</b></p><p> int max=0;</p><p> for(int i=0;i<q.size();i++){</p
64、><p> if(q.get(i).getPriority()>q.get(max).getPriority())</p><p><b> max=i;</b></p><p><b> }</b></p><p> System.out.println("max: "
65、;+max);</p><p> p=q.get(max);</p><p> q.remove(max);</p><p><b> }</b></p><p><b> return p;</b></p><p><b> }</b><
66、;/p><p><b> @Override</b></p><p> public int handle(PCB p,Vector<PCB> q) {</p><p> // TODO Auto-generated method stub</p><p> int time=p.getServeTime
67、();</p><p><b> try {</b></p><p> Thread.sleep(time*1000);</p><p> } catch (InterruptedException e) {</p><p> // TODO Auto-generated catch block</p>
68、;<p> e.printStackTrace();</p><p><b> }</b></p><p> p.setTime(p.getEnterTime(),0,p.getPriority());</p><p> return time;</p><p><b> }</b
69、></p><p><b> }</b></p><p><b> HRRF.java</b></p><p> package lab1;</p><p> import java.util.Vector;</p><p> public class HRR
70、F extends DispatchMethod{</p><p> public void calculate(Vector<PCB> q){</p><p> for(int i=0;i<q.size();i++){</p><p> PCB temp=q.get(i);</p><p> temp.setPri
71、ority((this.getTime()-temp.getEnterTime()+0.0)/temp.getServeTime()+1);</p><p> System.out.println("time: "+this.getTime()+" calculate priority:"+((double)(this.getTime()-temp.getEnterTi
72、me()+0.0)/temp.getServeTime()+1));</p><p> temp.refresh();</p><p><b> }</b></p><p><b> }</b></p><p><b> @Override</b></p>
73、<p> public PCB getNext(Vector<PCB> q) {</p><p> calculate(q);</p><p> // TODO Auto-generated method stub</p><p> if(q.size()==0)</p><p> return null;&
74、lt;/p><p> int max=0;</p><p> for(int i=0;i<q.size();i++){</p><p> if(q.get(i).getPriority()>q.get(max).getPriority())</p><p><b> max=i;</b></p>
75、;<p><b> }</b></p><p> PCB temp=q.get(max);</p><p> q.remove(max);</p><p> return temp;</p><p><b> }</b></p><p><b&g
76、t; @Override</b></p><p> public int handle(PCB p,Vector<PCB> q) {</p><p> // TODO Auto-generated method stub</p><p> int time=p.getServeTime();</p><p>&
77、lt;b> try {</b></p><p> Thread.sleep(time*1000);</p><p> } catch (InterruptedException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStac
78、kTrace();</p><p><b> }</b></p><p> p.setTime(p.getEnterTime(),0,p.getPriority());</p><p> return time;</p><p><b> }</b></p><p>
79、<b> }</b></p><p><b> Timeslice</b></p><p> package lab1;</p><p> import java.util.Vector;</p><p> public class TimeSlice extends DispatchMe
80、thod{</p><p> int slice=1;</p><p> public TimeSlice(){</p><p> this.needConfig=true;</p><p><b> }</b></p><p> void setSlice(int slice){<
81、;/p><p> this.slice=slice;</p><p><b> }</b></p><p><b> @Override</b></p><p> public PCB getNext(Vector<PCB> q) {</p><p> //
82、 TODO Auto-generated method stub</p><p><b> PCB p;</b></p><p> if(q.size()>0)</p><p> p=q.remove(0);</p><p><b> else</b></p><p
83、><b> p=null;</b></p><p><b> return p;</b></p><p><b> }</b></p><p> public void setConfig(Object o){</p><p> this.slice=((Mai
84、nUI)o).getSlice();</p><p><b> }</b></p><p><b> @Override</b></p><p> public int handle(PCB p,Vector<PCB> q) {</p><p> // TODO Auto-gen
85、erated method stub</p><p><b> try {</b></p><p> Thread.sleep(slice);</p><p> } catch (InterruptedException e) {</p><p> // TODO Auto-generated catch blo
86、ck</p><p> e.printStackTrace();</p><p><b> }</b></p><p> if(p.getServeTime()-slice>0){</p><p><b> try {</b></p><p> Thread.
87、sleep(slice*1000);</p><p> } catch (InterruptedException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }</b>&l
88、t;/p><p> p.setTime(p.getEnterTime(), p.getServeTime()-slice,p.getPriority());</p><p> q.addElement(p);</p><p> return slice;</p><p><b> }</b></p>&
89、lt;p><b> else{</b></p><p><b> try {</b></p><p> Thread.sleep(p.getServeTime()*1000);</p><p> } catch (InterruptedException e) {</p><p>
90、// TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }</b></p><p> int time=p.getServeTime();</p><p> p.setTime(p.getEnterTime(),0
91、,p.getPriority());</p><p> return time;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 七、體會與自
92、我評價</b></p><p> 在這次課程設(shè)計中,黃強(qiáng)主要負(fù)責(zé)文檔的編寫,和講解PPT的制作,包括前期的設(shè)計文檔和PPT,后期的總結(jié)報告,還有就是系統(tǒng)的測試工作,,朱文喆負(fù)責(zé)系統(tǒng)的設(shè)計和代碼的實現(xiàn)部分,在深入地進(jìn)行程序的設(shè)計和,編寫工作,我對這個學(xué)期中學(xué)習(xí)的設(shè)計模式有了新的認(rèn)識,在本次的程序設(shè)計當(dāng)中,我們應(yīng)用了MVC【Model View Controller】(模型-視圖-控制器)的設(shè)計模式,實
93、現(xiàn)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進(jìn)和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中。</p><p> MVC 是一種使用 MVC(Model View Controller 模型-視圖-控制器)設(shè)計創(chuàng)建 Web 應(yīng)用程序的模式:</p><p>
94、; Model(模型)表示應(yīng)用程序核心(比如數(shù)據(jù)庫記錄列表)。</p><p> View(視圖)顯示數(shù)據(jù)(數(shù)據(jù)庫記錄)。</p><p> Controller(控制器)處理輸入(寫入數(shù)據(jù)庫記錄)。</p><p> MVC 模式同時提供了對 HTML、CSS 和 JavaScript 的完全控制。</p><p> Model(
95、模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。</p><p> 通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)。</p><p> View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。</p><p> 通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。</p><p> Controller(控制器)是應(yīng)用程序中處理用戶交互的部分。</p><
96、;p> 通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。</p><p> MVC 分層有助于管理復(fù)雜的應(yīng)用程序,因為您可以在一個時間內(nèi)專門關(guān)注一個方面。例如,您可以在不依賴業(yè)務(wù)邏輯的情況下專注于視圖設(shè)計。同時也讓應(yīng)用程序的測試更加容易。</p><p> MVC 分層同時也簡化了分組開發(fā)。不同的開發(fā)人員可同時開發(fā)視圖、控制器邏輯和業(yè)務(wù)邏輯。</p>
97、<p> 加深了對MVC設(shè)計模式的理解,對Java語言更加熟悉了,這是技術(shù)層面的事情,在文檔編寫方面我也學(xué)到了很多東西,比如如何讓文檔設(shè)計得更加正式,美觀,對word的操作也更加熟練了。</p><p> 通過本次模擬CPU調(diào)度算法,加深了我對操作系統(tǒng)的理解和認(rèn)識,更加熟悉了調(diào)度算法和操作系統(tǒng)的功能結(jié)構(gòu),對以后深入學(xué)習(xí)計算機(jī)我相信會有很大的幫助。</p><p><b
98、> 八、參考文獻(xiàn)</b></p><p> [1](美)西爾伯查茨,(美)高爾文,(美)加根 著 譯者: 鄭扣根Operating System Concepts Seventh, Edition操作系統(tǒng)概念第七版(中文版).高等教育出版社.2010(01).</p><p> [2] 杭誠方,談宏編.操作系統(tǒng)課程設(shè)計教程.上海交通大學(xué)出版社,2008.&
99、lt;/p><p> [3](美)Bruce Eckel 著 譯者:陳昊鵬 Thinking in Java Java編程思想.機(jī)械工業(yè)出版社.01-2006-3149.</p><p> [4]嚴(yán)蔚敏 吳偉明 著.數(shù)據(jù)結(jié)構(gòu)(C語言版).清華大學(xué)出版社.2007.</p><p> [5](美)Clifford A.Shaffer 著.張銘 劉曉丹 等譯.數(shù)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)程序調(diào)度課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計--進(jìn)程調(diào)度程序設(shè)計
- 多核處理器上的操作系統(tǒng)調(diào)度.pdf
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計
- 操作系統(tǒng)課程設(shè)計--作業(yè)調(diào)度
- 操作系統(tǒng)課程設(shè)計報告--處理機(jī)調(diào)度問題
- 操作系統(tǒng)課程設(shè)計——操作系統(tǒng)課程設(shè)計模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計-對處理機(jī)的調(diào)度
- 操作系統(tǒng)課程設(shè)計---作業(yè)調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計---磁盤調(diào)度報告
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--驅(qū)動調(diào)度
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計-進(jìn)程調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計---磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計--進(jìn)程調(diào)度算法
評論
0/150
提交評論