




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)實(shí) 驗(yàn) 報(bào) 告課程名稱操作系統(tǒng)實(shí)驗(yàn)課程編號0906553實(shí)驗(yàn)項(xiàng)目名稱時(shí)間片輪轉(zhuǎn)調(diào)度學(xué)號年級姓名專業(yè)學(xué)生所在學(xué)院指導(dǎo)教師實(shí)驗(yàn)室名稱地點(diǎn) 哈爾濱工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院第七講 時(shí)間片輪轉(zhuǎn)調(diào)度一、實(shí)驗(yàn)概述1. 實(shí)驗(yàn)名稱時(shí)間片輪轉(zhuǎn)調(diào)度2. 實(shí)驗(yàn)?zāi)康?)調(diào)試 EOS 的線程調(diào)度程序,熟悉基于優(yōu)先級的搶先式調(diào)度。 2)為 EOS 添加時(shí)間片輪轉(zhuǎn)調(diào)度,了解其它常用的調(diào)度算法。3. 實(shí)驗(yàn)類型驗(yàn)證型實(shí)驗(yàn),設(shè)計(jì)型實(shí)驗(yàn)4. 實(shí)驗(yàn)內(nèi)容(1)準(zhǔn)備實(shí)驗(yàn)(2)閱讀控制臺命令“rr”相關(guān)的源代碼(3)調(diào)試線程調(diào)度程序(4)為 EOS 添加時(shí)間片輪轉(zhuǎn)調(diào)度 (5)修改線程時(shí)間片的大小二、實(shí)驗(yàn)環(huán)境WINDOWS XP系
2、統(tǒng),EOS操作系統(tǒng)三、實(shí)驗(yàn)過程1. 設(shè)計(jì)思路和流程圖開始執(zhí)行控制臺命令rr,查看沒有時(shí)間片輪轉(zhuǎn)調(diào)度的執(zhí)行效果調(diào)試當(dāng)前線程不被搶先的情況調(diào)試當(dāng)前線程被搶險(xiǎn)的情況為EOS添加時(shí)間片輪轉(zhuǎn)調(diào)度修改線程時(shí)間片的大小結(jié)束2. 算法實(shí)現(xiàn)3. 需要解決的問題及解答4. 主要數(shù)據(jù)結(jié)構(gòu)、實(shí)現(xiàn)代碼及其說明5. 源程序并附上注釋VOIDPspRoundRobin(VOID)/*+功能描述:時(shí)間片輪轉(zhuǎn)調(diào)度函數(shù),被定時(shí)計(jì)數(shù)器中斷服務(wù)程序 KiIsrTimer 調(diào)用。參數(shù):無。返回值:無。-*/if(NULL!=PspCurrentThread&Running =PspCurrentThread-State)/判斷中斷線程
3、是否仍處于運(yùn)行狀態(tài)PspCurrentThread-RemainderTicks-;/時(shí)間片減少if(PspCurrentThread-RemainderTicks=0)/判斷時(shí)間片是否為0PspCurrentThread-RemainderTicks=TICKS_OF_TIME_SLICE;/時(shí)間片大小設(shè)置if(BIT_TEST(PspReadyBitmap,PspCurrentThread-Priority)/判斷是否有線程的優(yōu)先級于被中斷線程優(yōu)先級相同PspReadyThread(PspCurrentThread);/將被中斷線程轉(zhuǎn)入就緒狀態(tài),并將其插入對應(yīng)優(yōu)先級就緒隊(duì)列的隊(duì)尾retur
4、n 0;/返回一個(gè)值6. 程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果(1) 閱讀控制臺命令“rr”相關(guān)的源代碼1)按 F7 生成在本實(shí)驗(yàn) 3.1 中創(chuàng)建的 EOS Kernel 項(xiàng)目。2)按 F5 啟動(dòng)調(diào)試。3)待 EOS 啟動(dòng)完畢,在 EOS 控制臺中輸入命令“rr”后按回車。(2)調(diào)試當(dāng)前線程不被搶先的情況1)結(jié)束之前的調(diào)試。2)在 ke/sysproc.c 文件的 ThreadFunction 函數(shù)中,調(diào)用 fprintf 函數(shù)的代碼行(第 680 行)添加一個(gè)斷點(diǎn)。3) 按 F5 啟動(dòng)調(diào)試。4) 待 EOS 啟動(dòng)完畢,在 EOS 控制臺中輸入命令“rr”后按回車?!皉r”命令開始執(zhí)行后,會(huì)在斷點(diǎn)處中斷
5、。5) 查看 ThreadFunction 函數(shù)中變量 pThreadParameter-Y 的值應(yīng)該為 0,說明正在調(diào)試的是第 0個(gè)新建的線程。6) 激活虛擬機(jī)窗口,可以看到第 0 個(gè)新建的線程還沒有在控制臺中輸出任何內(nèi)容,原因是 fprintf函數(shù)還沒有執(zhí)行。7) 激活 OS Lab 窗口后按 F5 使第 0 個(gè)新建的線程繼續(xù)執(zhí)行,又會(huì)在斷點(diǎn)處中斷。再次激活虛擬機(jī)窗口,可以看到第 0 個(gè)新建的線程已經(jīng)在控制臺中輸出了第一輪循環(huán)的內(nèi)容。可以多按幾次 F5 查看每輪循環(huán)輸出的內(nèi)容。8) 在 ps/sched.c 文件的 PspSelectNextThread 函數(shù)中,調(diào)用 BitScanRev
6、erse 函數(shù)掃描就緒位圖的代碼行(第 384 行)添加一個(gè)斷點(diǎn)。9) 按 F5 繼續(xù)執(zhí)行,當(dāng)有定時(shí)計(jì)數(shù)器中斷發(fā)生時(shí)(每 10ms 一次),就會(huì)在新添加的斷點(diǎn)處中斷。10) 在“調(diào)試”菜單的“窗口”中選擇“監(jiān)視”,激活“監(jiān)視”窗口(此時(shí)按 F1 可以獲得關(guān)于“監(jiān)視”窗口的幫助)。11) 在“監(jiān)視”窗口中添加表達(dá)式“/t PspReadyBitmap”,以二進(jìn)制格式查看就緒位圖的值。此時(shí)就緒位圖的值應(yīng)該為 100000001,表示優(yōu)先級為 8 和 0 的兩個(gè)就緒隊(duì)列中存在就緒線程。(注意,如果就緒位圖的值不是 100000001,就繼續(xù)按 F5,直到就緒位圖變?yōu)榇酥担?2) 在“ 調(diào)試 ”菜
7、單中選 擇“ 快速 監(jiān)視”, 在“ 快速 監(jiān)視” 對話 框的 “表達(dá) 式” 中輸 入表達(dá) 式“*PspCurrentThread”后,點(diǎn)擊“重新計(jì)算”按鈕,可以查看當(dāng)前正在執(zhí)行的線程(即被中斷的線程)的線程控制塊中各個(gè)域的值。其中優(yōu)先級(Priority 域)的值為 8;狀態(tài)(State 域)的值為 2(運(yùn)行態(tài));時(shí)間片(RemainderTicks 域)的值為 6;線程函數(shù)(StartAddr 域)為ThreadFunction。綜合這些信息即可確定當(dāng)前正在執(zhí)行的線程就是新建的第 0 個(gè)線程。關(guān)閉“快速監(jiān)視”對話框。13) 在“監(jiān)視”窗口中添加表達(dá)式“ListGetCount(&PspRea
8、dyListHeads8)”,查看優(yōu)先級為 8 的就緒隊(duì)列中就緒線程的數(shù)量,值為 19。說明除了正在執(zhí)行的第 0 個(gè)新建的線程外,其余 19 個(gè)新建的線程都在優(yōu)先級為 8 的就緒隊(duì)列中。ListGetCount 函數(shù)在文件 rtl/list.c 中定義。14) 按 F10 單步 調(diào)試 ,BitScanReverse 函數(shù) 會(huì)從 就緒 位圖 中掃 描最 高優(yōu) 先級 ,并 保存 在變 量HighestPriority 中。查看變量 HighestPriority 的值為 8。15) 繼續(xù)按 F10 單步調(diào)試,直到在 PspSelectNextThread 函數(shù)返前停止(第 465 行),注意觀察線
9、程調(diào)度執(zhí)行的每一個(gè)步驟。(3)調(diào)試當(dāng)前線程被搶先的情況1) 選擇“調(diào)試”菜單中的“刪除所有斷點(diǎn)”,刪除之前添加的所有斷點(diǎn)。2) 在 ps/sched.c 文件的 PspSelectNextThread 函數(shù)的第 395 行添加一個(gè)斷點(diǎn)。3) 按 F5 繼續(xù)執(zhí)行,激活虛擬機(jī)窗口,可以看到第 0 個(gè)新建的線程正在執(zhí)行。4) 在虛擬機(jī)窗口中按下一次空格鍵,EOS 會(huì)在之前添加的斷點(diǎn)處中斷。5) 在“監(jiān)視”窗口中查看就緒位圖的值為 1000000000000000100000001,說明此時(shí)在優(yōu)先級為 24的 就 緒 隊(duì) 列 中 存 在 就 緒 線 程 。 在 “ 監(jiān) 視 ” 窗 口 中 添 加 表
10、達(dá) 式“ListGetCount(&PspReadyListHeads24)”,其值為 1,說明優(yōu)先級為 24 的就緒隊(duì)列中只有一個(gè)就緒線程。掃描就緒位圖后獲得的最高優(yōu)先級的值 HighestPriority 也就應(yīng)該是 24。6) 按 F10 單步調(diào)試一次,執(zhí)行的語句會(huì)將當(dāng)前正在執(zhí)行的第 0 個(gè)新建的線程,放入優(yōu)先級為 8 的就緒隊(duì)列的隊(duì)首?!氨O(jiān)視”窗口中顯示的優(yōu)先級為 8 的就緒隊(duì)列中的線程數(shù)量就會(huì)增加 1,變?yōu)?20。7) 繼續(xù)按 F10 單步調(diào)試,直到在第 444 行中斷執(zhí)行,注意觀察線程調(diào)度執(zhí)行的每一個(gè)步驟。此時(shí),正在執(zhí)行的第 0 個(gè)新建的線程已經(jīng)進(jìn)入了“就緒”狀態(tài),讓出了 CPU。
11、線程調(diào)度程序接下來的工作就是選擇優(yōu)先級最高的非空就緒隊(duì)列的隊(duì)首線程作為當(dāng)前運(yùn)行線程,也就是讓優(yōu)先級為 24 的線程在 CPU 上執(zhí)行。8) 按 F10 單步調(diào)試一次,當(dāng)前線程 PspCurrentThread 指向了優(yōu)先級為 24 的線程??梢栽凇翱焖俦O(jiān)視”窗口中查看表達(dá)式“*PspCurrentThread”的值,注意線程控制塊中 StartAddr 域的值為IopConsoleDispatchThread 函數(shù)(在文件 io/console.c 中定義),說明這個(gè)優(yōu)先級為 24 的線程是控制臺派遣線程。9) 繼續(xù)按 F10 單步調(diào)試,直到在 PspSelectNextThread 函數(shù)返回
12、前(第 465 行)中斷執(zhí)行,注意觀察線程調(diào)度執(zhí)行的每一個(gè)步驟。此時(shí),優(yōu)先級為 24 的線程已經(jīng)進(jìn)入了“運(yùn)行”狀態(tài),在中斷返回后,就可以開始執(zhí)行了。在“監(jiān)視”窗口中,就緒位圖的值變?yōu)?100000001,優(yōu)先級為 24 的就緒隊(duì)列中線程的數(shù)量變?yōu)?0,就緒位圖和就緒隊(duì)列都是在剛剛被調(diào)用過的 PspUnreadyThread 函數(shù)(在文件 ps/sched.c 中定義)內(nèi)更新的。10) 刪除所有斷點(diǎn)后結(jié)束調(diào)試。(4)為 EOS 添加時(shí)間片輪轉(zhuǎn)調(diào)度1)代碼修改完畢后,按 F7 生成 EOS 內(nèi)核項(xiàng)目。2)按 F5 啟動(dòng)調(diào)試。3)在 EOS 控制臺中輸入命令“rr”后按回車。應(yīng)能看到 20 個(gè)線程輪流執(zhí)行的效果,如圖 (5) 修改線程時(shí)間片的大小1)在 OS Lab 的“項(xiàng)目管理器”窗口中找到 ps/psp.h 文件,雙擊打開此文件。2) 將 ps/psp.h 第 104 行定義的 TICKS_OF_TIME_SLICE 的值修改為 1。3) 按 F7 生成 EOS 內(nèi)核項(xiàng)目。4) 按 F5 啟動(dòng)調(diào)試。5)
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國嬰兒紙尿片行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 2020-2025年中國冷鮮肉行業(yè)發(fā)展前景預(yù)測及投資戰(zhàn)略研究報(bào)告
- 2021-2026年中國健腦茶市場供需現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 2025年中國鋼筋拉直機(jī)行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 雇人開車送貨合同協(xié)議書
- 餐廳合作協(xié)議書合同模板
- 餐飲入股合同及分紅協(xié)議
- 餐飲員工合同協(xié)議書范本
- 餐飲干冰塊采購合同范本
- 餐飲承包合同協(xié)議書樣本
- 腦卒中溶栓護(hù)理課件
- 2025年城建技師考試題庫及答案
- 2025年中國LTCC技術(shù)行業(yè)市場現(xiàn)狀、前景分析研究報(bào)告(智研咨詢發(fā)布)
- 租賃住房培訓(xùn)課件下載
- 房管員試題資料
- 2025至2030中國扭蛋機(jī)行業(yè)市場發(fā)展現(xiàn)狀及商業(yè)模式與投融資戰(zhàn)略報(bào)告
- 2024年蘇州昆山國創(chuàng)投資集團(tuán)有限公司招聘筆試真題
- 商場吸煙區(qū)管理制度
- 2025年四川省成都市中考地理真題(原卷版)
- 糖尿病足截肢術(shù)后護(hù)理
- 廣東省東莞市2022-2023學(xué)年高二下學(xué)期期末物理試題(含答案)
評論
0/150
提交評論