版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、重 慶 大 學(xué)學(xué) 生 實 驗 報 告實驗課程名稱 操作系統(tǒng)原理 開課實驗室 DS1501 學(xué) 院 軟件學(xué)院 年級 2013 專業(yè)班 軟件工程2 班 學(xué) 生 姓 名 胡其友 學(xué) 號 20131802 開 課 時 間 2015 至 2016 學(xué)年第 一 學(xué)期總 成 績教師簽名洪明堅軟件學(xué)院制操作系統(tǒng)原理實驗報告 開課實驗室: 年 月 日學(xué)院軟件學(xué)院年級、專業(yè)、班2013級軟件工程2班姓名胡其友成績課程名稱操作系統(tǒng)原理實驗項目名 稱指導(dǎo)教師洪明堅教師評語教師簽名:洪明堅年 月 日1實驗?zāi)康模?隨機生成3組非負整數(shù)列表,然后創(chuàng)建3個線程,分別用3種不同的排序算法對列表進行排序 如何生成隨機數(shù)? Ste
2、p1:void srand(uint32_t seed) seed是隨機數(shù)的種子,建議用實驗(一)中實現(xiàn)的系統(tǒng)調(diào)用“time_t time(time_t *loc)” srand(time(NULL) Step2:多次調(diào)用“uint32_t random()”獲得隨機數(shù) 進入圖形模式,沿垂直方向把屏幕分成3個區(qū)域,每個排序線程用一個區(qū)域,動態(tài)顯示排序過程,運行效果如這里所示。 如何進入圖形模式? Step1:調(diào)用listGraphicsModes()輸出系統(tǒng)支持的圖形模式» 該函數(shù)必須在文本模式下運行,才能看到結(jié)果 Step2:選擇一個模式,調(diào)用initGraphics(int mo
3、de)進入圖形模式 如何獲取屏幕的分辨率? 水平:g_mib.XResolution 垂直:g_mib.YResolution 如何打點? void setPixel(int x, int y, COLORREF cr); » (x, y)是點坐標» cr是顏色,用宏定義RGB(r,g,b)生成,其中r,g,b的取值范圍都是0-255 如何從cr中取出r,g,b?用getXValue(cr),其中X=R,G,B 如何退出圖形模式? int exitGraphics();2實驗內(nèi)容: 實現(xiàn)靜態(tài)優(yōu)先級調(diào)度算法 修改task.c中的函數(shù)schedule,實現(xiàn)靜態(tài)優(yōu)先級調(diào)度 在“s
4、truct tcb”中增加線程的靜態(tài)優(yōu)先級屬性nice 一定要加在kstack字段之后! 在函數(shù)sys_task_create中初始化nice=0 nice是整數(shù),取值范圍-NZERO, NZERO-1,值越小優(yōu)先級越高 #define NZERO 20 函數(shù)schedule被調(diào)用時,CPU的中斷已經(jīng)被關(guān)閉 線程0(task0,它的ID=0)是一個特殊的線程,僅當(dāng)沒有其他可運行的線程時,才能調(diào)度task0運行! 實現(xiàn)靜態(tài)優(yōu)先級調(diào)度算法(續(xù)) 增加系統(tǒng)調(diào)用 int getpriority(int tid) 成功返回(nice+NZERO),失敗返回-1 int setpriority(int t
5、id, int prio) 把線程tid的nice設(shè)為(prio-NZERO) prio必須在0,2*NZERO-1 成功返回0,失敗返回-1 注意 如果tid=0,表示獲取/設(shè)置當(dāng)前線程的nice值,而不是task0! 在調(diào)用函數(shù)“struct tcb *get_task(int tid)”獲取struct tcb指針時,一定要用save_flags_cli/restore_flags保護起來 uint32_t flags; struct tcb *tsk; save_flags_cli(flags); tsk = get_task(tid); restore_flags(flags);3實
6、驗步驟: 實現(xiàn)動態(tài)優(yōu)先級調(diào)度算法 在“struct tcb”中,再增加兩個屬性 estcpu:表示線程最近使用了多少CPU時間 在函數(shù)sys_task_create中初始化estcpu=0 每次定時器中斷時:g_task_running->estcpu+,task0除外! 每秒鐘為所有線程(運行、就緒和等待)更新一次 priority:表示線程的動態(tài)優(yōu)先級 priority = PRI_USER_MAX-(estcpu/4)-(nice*2) 取值范圍從0(PRI_USER_MIN)到127(PRI_USER_MAX) 值越大優(yōu)先級越高 每次調(diào)度前,先計算所有線程的priority,再調(diào)
7、度 實現(xiàn)動態(tài)優(yōu)先級調(diào)度算法(續(xù)) 增加一個全局屬性 g_load_avg:表示系統(tǒng)的平均負荷 初值為零,每秒鐘更新一次 g_load_avg=(59/60) ×g_load_avg+(1/60) × nready» nready表示處于就緒狀態(tài)的線程個數(shù),task0除外! 屬性計算 g_load_avg 和線程的estcpu:在定時器的中斷處理函數(shù)(ISR)中計算 文件timer.c中的函數(shù)isr_timer 如何每隔一秒計算一次? (g_timer_ticks % HZ)» =0,表示1秒鐘已經(jīng)過去» 否則,還不到1秒鐘 函數(shù)isr_time
8、r被調(diào)用時,CPU的中斷已經(jīng)被關(guān)閉 線程的priority:在函數(shù)schedule中,調(diào)度之前計算,然后基于priority進行調(diào)度 效率問題 nice ,priority和nready都是整數(shù) 效率不是問題 g_load_avg 和estcpu是實數(shù) 浮點(float-point)表示:精度高,效率低! 定點(fixed-point)表示:精度低,效率高! 文件fixedptc.h中定義了定點數(shù)的類型fixedpt及其運算 如何顯示fixedpt類型變量的值,比如g_load_avg?char num20; fixedpt_str(g_load_avg, num, -2); printk(&
9、quot;g_load_avg = %srn", num); 定點數(shù)的運算 g_task_running->estcpu+g_task_running->estcpu = fixedpt_add(g_task_running->estcpu, FIXEDPT_ONE); g_load_avg = (59/60)*g_load_avg+(1/60)*nreadyfixedpt r59_60 = fixedpt_div(fixedpt_fromint(59), fixedpt_fromint(60);fixedpt r01_60 = fixedpt_div(FIXEDP
10、T_ONE, fixedpt_fromint(60);g_load_avg = fixedpt_add(fixedpt_mul(r59_60, g_load_avg), fixedpt_mul(r01_60, fixedpt_fromint(nready); priority = PRI_USER_MAX-(estcpu/4)-(nice*2)priority = PRI_USER_MAX - fixedpt_toint(fixedpt_div(estcpu, fixedpt_fromint(4) - p->nice*2; 定點數(shù)的運算4實驗報告:動態(tài)優(yōu)先級調(diào)度算法while(selec
11、t!=NULL)select->priority=127 - fixedpt_toint(fixedpt_div(select->estcpu, fixedpt_fromint(4) - select->nice*2;if(select->tid != 0) && (select->state = TASK_STATE_READY) if(my_select->priority<select->priority) my_select=select; else if(my_select->tid=0) my_select=se
12、lect; select=select->next; if(my_select=g_task_running) if(my_select->state = TASK_STATE_READY) return; my_select = task0; /printk("0x%d -> 0x%drn", (g_task_running = NULL) ? -1 : g_task_running->tid, select->tid); g_resched = 0; switch_to(my_select);靜態(tài)優(yōu)先級調(diào)度算法void schedule()struct tcb *select = g_task_head;struct tcb *my_select=g_task_running;while(select!=NULL)if(select->tid != 0) && (select->state = TASK_STATE_READY)/if(my_select=NULL) my_select=select; continue;if(select->nice<=my_select->nice)my_select=select;i
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)大合集人員管理十篇
- 2024年城管督查個人總結(jié)
- 寒假自習(xí)課 25春初中道德與法治八年級下冊教學(xué)課件 第三單元 第五課 第1課時 根本政治制度
- 建筑工程行業(yè)安全管理工作總結(jié)
- 2011年高考語文試卷(大綱版全國Ⅱ卷)(空白卷)
- 化妝品行業(yè)銷售工作總結(jié)
- 小學(xué)數(shù)學(xué)教學(xué)計劃18篇
- 2023年項目部治理人員安全培訓(xùn)考試題含下載答案可打印
- 2023年-2024年項目部安全培訓(xùn)考試題答案往年題考
- 競業(yè)限制協(xié)議書三篇
- 項目部領(lǐng)導(dǎo)施工現(xiàn)場值班帶班交接班記錄表
- 2023年江蘇小高考歷史試卷
- 《運動解剖學(xué)》課程實驗課教案
- 2023年貴州貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團有限公司招聘筆試題庫含答案解析
- 現(xiàn)金盤點表完整版
- 精神病醫(yī)院管理制度
- 事業(yè)單位公開招聘工作人員政審表
- GB/T 25840-2010規(guī)定電氣設(shè)備部件(特別是接線端子)允許溫升的導(dǎo)則
- 2020-2021學(xué)年貴州省黔東南州人教版六年級上冊期末文化水平測試數(shù)學(xué)試卷(原卷版)
- 魯科版化學(xué)必修二 1.1 原子結(jié)構(gòu) 課件
- 國家開放大學(xué)《西方行政學(xué)說》形考任務(wù)1-4參考答案
評論
0/150
提交評論