




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上重 慶 大 學(xué)學(xué) 生 實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)課程名稱(chēng) 操作系統(tǒng)原理 開(kāi)課實(shí)驗(yàn)室 重慶大學(xué)DS1501 學(xué) 院 軟件工程 年級(jí) 2013 專(zhuān)業(yè)班 學(xué) 生 姓 名 學(xué) 號(hào) 開(kāi) 課 時(shí) 間 2015 至 2016 學(xué)年第 一 學(xué)期總 成 績(jī) 教師簽名洪明堅(jiān)重慶大學(xué)軟件 學(xué)院制操作系統(tǒng)原理實(shí)驗(yàn)報(bào)告 開(kāi)課實(shí)驗(yàn)室:DS1501 2016 年 1月 6 日學(xué)院軟件學(xué)院年級(jí)、專(zhuān)業(yè)、班姓名成績(jī)課程名稱(chēng)操作系統(tǒng)原理實(shí)驗(yàn)項(xiàng)目名 稱(chēng)線程及其調(diào)度指導(dǎo)教師教師評(píng)語(yǔ)教師簽名:年 月 日一、 實(shí)驗(yàn)?zāi)康模ㄜ浖枨笪臋n)掌握線程的創(chuàng)建掌握線程的調(diào)度a) 靜態(tài)優(yōu)先級(jí)調(diào)度b) 動(dòng)態(tài)優(yōu)先級(jí)調(diào)度二、實(shí)驗(yàn)原理(軟件設(shè)
2、計(jì)文檔) 系統(tǒng)調(diào)用接口,線程相關(guān)函數(shù): Step1:定義線程函數(shù)void tsk_foo(void *pv) printf("This is task foo with tid=%drn“, task_getid(); task_exit(0); Step2:申請(qǐng)用戶(hù)棧unsigned char *stack_foo; stack_foo = (unsigned char *)malloc(1024*1024); 線程退出后,才能把用戶(hù)棧用free釋放掉! Step3:創(chuàng)建線程int tid_foo; tid_foo = task_create(stack_foo+1024*1024
3、, tsk_foo, (void *)0); 三、使用儀器、材料(軟硬件開(kāi)發(fā)環(huán)境)Notepad+expenv四、實(shí)驗(yàn)步驟(實(shí)現(xiàn)的過(guò)程)隨機(jī)生成3組非負(fù)整數(shù)列表,創(chuàng)建3個(gè)線程,分別用3種不同的排序算法(插入,冒泡,選擇)對(duì)列表進(jìn)行排序三線程:void tsk_foo_line1(void *pv)int m;int i;int arry50;srand(time(NULL);for (i = 0; i<50; i+)m = random() % 200;if (m<0) m = 0 - m; draw(i * 10, 0, 0 + m);arryi = m;sort_m(arry,
4、 50, 0);task_exit(0);void tsk_foo_line2(void *pv)int m;int i;int arry50;srand(time(NULL);for (i = 0; i<50; i+)m = random() % 200;if (m<0) m = 0 - m; draw(i * 10, 345, 345 + m);arryi = m;sort_x(arry, 50, 345);task_exit(0);void tsk_foo_line3(void *pv)int m;int i;int arry50;srand(time(NULL);for (
5、i = 0; i<50; i+)m = random() % 200;if (m<0) m = 0 - m; draw(i * 10, 690, 690 + m);arryi = m;sort_c(arry, 50, 690);task_exit(0);void draw(int x, int y1, int y2)int i;for (i = y1; i<y2; i+)setPixel(i, x, RGB(255, 255, 255);void resetBK(int x, int y1, int y2)int i;for (i = y1; i<y2; i+)setP
6、ixel(i, x, RGB(0, 0, 0);三排序:冒泡void sort_m(int* arry, int n, int l)int i, j, tem;int t = 500 / n;for (i = 0; i<n; i+)for (j = 0; j<n - i - 1; j+)if (*(arry + j)>*(arry + j + 1)resetBK(j*t, l, l + *(arry + j);resetBK(j*t + t, l, l + *(arry + j + 1);tem = *(arry + j);*(arry + j) = *(arry + j +
7、 1);*(arry + j + 1) = tem;draw(j*t, l, l + *(arry + j);draw(j*t + t, l, l + *(arry + j + 1);插入void sort_c(int* arry, int n, int l)int i, j, key;int t = 500 / n;for (j = n - 2; j >= 0; j-)key = *(arry + j); i = j + 1;resetBK(j*t, l, l + key);while (i<n && *(arry + i)<key)*(arry + i -
8、 1) = *(arry + i);draw(i*t - t, l, l + *(arry + i - 1);i = i + 1;*(arry + i - 1) = key;draw(i*t - t, l, l + key);選擇void sort_x(int* arry, int n, int l)int i=0, j=0, lowindex = 0;int t = 500 / n;for (i = 0; i<n; i+) lowindex = i;for (j = n - 1; j>i; j-)if (arryj < arrylowindex)lowindex = j;i
9、f (lowindex != i)resetBK(i*t, l, l + *(arry + i);resetBK(lowindex*t, l, l + *(arry + lowindex);int temp = arryi;arryi = arrylowindex;arrylowindex = temp; draw(i*t, l, l + *(arry + i);draw(lowindex*t, l, l + *(arry + lowindex);線程控制塊tcb中增加nice屬性,在函數(shù)sys_task_create中初始化nice=0/*系統(tǒng)調(diào)用getpriority的執(zhí)行函數(shù)獲取當(dāng)前線程
10、的優(yōu)先級(jí)*/int sys_getpriority(int tid)if(tid=0) return g_task_running->nice+NZERO;/獲取當(dāng)前線程的nice值uint32_t flags; struct tcb *tsk;save_flags_cli(flags);tsk = get_task(tid);restore_flags(flags); return tsk->nice+NZERO; /獲取線程的nice值/*系統(tǒng)調(diào)用setpriority的執(zhí)行函數(shù)調(diào)整當(dāng)前線程的優(yōu)先級(jí)*/把線程tid的nice設(shè)為(prio-NZERO)int sys_setpr
11、iority(int tid, int prio)uint32_t flags; struct tcb *tsk;if(tid=0) save_flags_cli(flags);g_task_running->nice=prio-20;/設(shè)置當(dāng)前線程的nice值restore_flags(flags);return 0;/if(tsk=NULL) return -1;if (prio<0) prio = 0; /prio必須在0,2*NZERO-1if(prio>40) prio=40;save_flags_cli(flags);tsk = get_task(tid); /用
12、save_flags_cli/restore_flags保護(hù)restore_flags(flags);tsk->nice=prio-20;/設(shè)置線程的nice值return 0;把這兩個(gè)個(gè)函數(shù)做成系統(tǒng)調(diào)用,分別是getpriority(int tid),setpriority(int tid, int prio)靜態(tài)調(diào)度schedule:void schedule()struct tcb *select = g_task_head;struct tcb *my_select=g_task_running;while(select!=NULL)if(select->tid != 0)
13、 &&(select->state = TASK_STATE_READY)/if(my_select=NULL) my_select=select; continue;if(select->nice<=my_select->nice)/選擇等待隊(duì)列里的線程優(yōu)先級(jí)高的my_select=select;if(my_select->tid=0)/跳過(guò)task0運(yùn)行my_select=select;select=select->next; if(my_select=g_task_running) if(g_task_running->state
14、 = TASK_STATE_READY) return;my_select = task0; /僅當(dāng)沒(méi)有其他可運(yùn)行的線程時(shí),才能調(diào)度 g_resched = 0; switch_to(my_select);線程控制塊tcb中增加estcpu屬性,在函數(shù)sys_task_create中初始化estcpu=0;增加priority屬性,在函數(shù)sys_task_create中初始化priority=0;timer.c中增加全局變量g_load_avg:表示系統(tǒng)的平均負(fù)荷用浮點(diǎn)(float-point)表示g_load_avg和estcpu:精度高,效率低動(dòng)態(tài)調(diào)度schedule:void sched
15、ule() struct tcb *select=g_task_head;struct tcb *my_select=g_task_running;while (select != NULL)select->priority = 127 - fixedpt_toint(fixedpt_div(select->estcpu, fixedpt_fromint(4) - select->nice * 2; /計(jì)算所有線程的priority select = select->next;/動(dòng)態(tài)優(yōu)先級(jí)select = g_task_head;while(select!=NULL)i
16、f(select->tid != 0) &&(select->state = TASK_STATE_READY) if(my_select->priority<select->priority) my_select=select;/選擇等待隊(duì)列里的線程優(yōu)先級(jí)高的 else if(my_select->tid=0) my_select=select; select=select->next; if(my_select=g_task_running) if(my_select->state = TASK_STATE_READY) re
17、turn; 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);timer.c中添加如下g_task_running->estcpu = fixedpt_add(g_task_running->estcpu, FIXEDPT_ONE);/計(jì)算線程使用CPU時(shí)間estcpuif(g_timer_ticks %
18、HZ=0)/每隔一秒計(jì)算一次int nready=0; /表示處于就緒狀態(tài)的線程個(gè)數(shù)struct tcb *my_select=g_task_head;int nice;/g_task_running->nice;/my_select=g_task_head;fixedpt ratio;while(my_select!=NULL)if(my_select->state=TASK_STATE_READY) nready+;nice=my_select->nice;ratio = fixedpt_mul(FIXEDPT_TWO, g_load_avg); /每秒鐘為所有線程(運(yùn)行
19、、就緒和等待)更新一次ratio = fixedpt_div(ratio, fixedpt_add(ratio, FIXEDPT_ONE);my_select->estcpu = fixedpt_add(fixedpt_mul(ratio,my_select->estcpu), fixedpt_fromint(nice);my_select=my_select->next;fixedpt r59_60 = fixedpt_div(fixedpt_fromint(59), fixedpt_fromint(60);/計(jì)算系統(tǒng)的平均負(fù)荷g_load_avgfixedpt r01_6
20、0 = fixedpt_div(FIXEDPT_ONE,fixedpt_fromint(60);g_load_avg = fixedpt_add(fixedpt_mul(r59_60, g_load_avg), fixedpt_mul(r01_60, fixedpt_fromint(nready);主函數(shù):int mode = 0x0118;initGraphics(mode);int y = 0;for (y = 0; y < g_mib.YResolution; y+)setPixel(g_mib.XResolution / 3, y, RGB(0, 125, 125);setPixel(g_mib.XResolution / 3 * 2, y, RGB(0, 125, 125);int* pcode_exit;/申請(qǐng)用戶(hù)棧unsigned char* stack_foo1 = (unsigned char *)malloc(1024 * 1024);unsigned char* stack_foo2 = (unsigned char *)malloc(1024 * 1024);unsigned char* stack_foo3 = (unsigned char *)malloc(1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年信息處理考試深化試題及答案
- 高考語(yǔ)文復(fù)習(xí)突破口及試題與答案2023
- 行政管理的道德困境與試題答案解析
- 高考數(shù)學(xué)集中訓(xùn)練模塊試題及答案
- 倉(cāng)庫(kù)出現(xiàn)火災(zāi)應(yīng)急預(yù)案(3篇)
- 高考數(shù)學(xué)解題效率提升分享試題及答案
- 通信公司火災(zāi)應(yīng)急預(yù)案(3篇)
- 采油樹(shù)火災(zāi)應(yīng)急預(yù)案(3篇)
- 銀行火災(zāi)應(yīng)急疏散預(yù)案(3篇)
- VB編程問(wèn)答環(huán)節(jié)的試題與答案
- 《智能財(cái)務(wù)與經(jīng)營(yíng)分析》課程教學(xué)大綱
- 采訪技巧與效率提升
- 生命科學(xué)簡(jiǎn)史知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋中國(guó)科學(xué)技術(shù)大學(xué)
- 農(nóng)村電網(wǎng)改造項(xiàng)目實(shí)施方案
- 醫(yī)療糾紛防范及法律責(zé)任課件
- 公司招標(biāo)書(shū)范本大全(三篇)
- 正念減壓療法詳解課件
- 知識(shí)產(chǎn)權(quán)管理體系講解課件
- 彩鋼板除銹噴漆施工方案
- 國(guó)家開(kāi)放大學(xué)(山東)《地域文化(本)》形考任務(wù)1-3+終結(jié)性考核參考答案
- 2022年高考數(shù)學(xué)試卷(上海)(秋考)(解析卷)
評(píng)論
0/150
提交評(píng)論