操作系統(tǒng)處理機(jī)調(diào)度實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)處理機(jī)調(diào)度實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)處理機(jī)調(diào)度實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)處理機(jī)調(diào)度實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)處理機(jī)調(diào)度實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)試驗(yàn)匯報(bào)學(xué)號(hào)姓名時(shí)間12月16日專業(yè)網(wǎng)絡(luò)工程班級(jí)5班試驗(yàn)題目:處理機(jī)調(diào)度試驗(yàn)?zāi)繕?biāo):(1)經(jīng)過編寫程序?qū)崿F(xiàn)進(jìn)程或作業(yè)先來先服務(wù)、高優(yōu)先權(quán)、按時(shí)間片輪轉(zhuǎn)調(diào)度算法,深入掌握進(jìn)程調(diào)度概念和算法,加深對(duì)處理機(jī)分配了解。(2)了解Linux中進(jìn)程(線程)調(diào)度機(jī)制。(3)學(xué)習(xí)使用Linux中進(jìn)程(線程)調(diào)度算法,掌握對(duì)應(yīng)與調(diào)度關(guān)于函數(shù)。試驗(yàn)內(nèi)容與步驟:程序說明:

1)先來先服務(wù)算法:假如早就緒進(jìn)程排在就緒隊(duì)列前面,遲就緒進(jìn)程排在就緒隊(duì)列后面,那么先來先服務(wù)(FCFS:firstcomefirstservice)總是把當(dāng)前處于就緒隊(duì)列之首那個(gè)進(jìn)程調(diào)度到運(yùn)行狀態(tài)。2)輪轉(zhuǎn)法就是按一定時(shí)間片(記為q)輪番運(yùn)行各個(gè)進(jìn)程。假如q是一個(gè)定值,則輪轉(zhuǎn)法是一個(gè)對(duì)各進(jìn)程機(jī)會(huì)均等調(diào)度方法。3)優(yōu)先級(jí)調(diào)度基本思想是,把當(dāng)前處于就緒隊(duì)列中優(yōu)先級(jí)最高進(jìn)程投入運(yùn)行,而不論各進(jìn)程下一個(gè)CPU周期長(zhǎng)短和其余原因。詳細(xì)步驟:分析問題,提出處理問題算法編制程序程序調(diào)試統(tǒng)計(jì)試驗(yàn)結(jié)果,以及思索是否能夠改進(jìn)算法程序及運(yùn)行結(jié)果:#include<stdio.h>#include<stdlib.h>#defineP_NUM5#defineP_TIME50enumstate{ ready, execute, block, finish};structpcbb{ charname[4]; intpriority;//數(shù)越大優(yōu)先級(jí)越高 intcputime;//已占用CPU時(shí)間 intneedtime;//執(zhí)行時(shí)間 intcount; enumstateprocess; structpcbb*next;};typedefstructpcbbpcb;voiddisplay_menu(){ printf("CHOOSETHEALGORITHM:\n"); printf("1PRIORITY\n"); printf("2ROUNDROBIN\n"); printf("3EXIT\n");}pcb*get_process(){ pcb*q; pcb*p;//頭指針 pcb*t;//尾指針 inti=0; printf("inputnameandtime\n"); while(i<P_NUM){ q=(pcb*)malloc(sizeof(pcb)); scanf("%s",q->name); scanf("%d",&q->needtime); q->cputime=0; q->priority=P_TIME-q->needtime; q->process=ready; q->next=NULL; if(i==0){ p=q; t=q; } else{ t->next=q; t=q; } i++; } returnp;}voidfree_process(pcb*p){ pcb*q; while(p!=NULL){ q=p; p=p->next; free(q); }}voiddisplay(pcb*p){ printf("namecputimeneedtime priority state\n"); while(p){ printf("%s",p->name); printf(" "); printf("%d",p->cputime); printf(" "); printf("%d",p->needtime); printf(" "); printf("%d",p->priority); printf(" "); switch(p->process){ caseready:printf("ready\n");break; caseexecute:printf("execute\n");break; caseblock:printf("block\n");break; casefinish:printf("finish\n");break; } p=p->next; }}intprocess_finish(pcb*q){ intb1=1; while(b1&&q){ b1=b1&&q->needtime==0; q=q->next; } returnb1;}voidcpuexe(pcb*q){ pcb*t=q; inttp=0; while(q){//讓t指向優(yōu)先級(jí)最高進(jìn)程 if(q->process!=finish){ q->process=ready; if(q->needtime==0){ q->process=finish; } } if(tp<q->priority&&q->process!=finish){ tp=q->priority; t=q; } q=q->next; } if(t->needtime!=0){ t->priority-=3;//每執(zhí)行一次優(yōu)先級(jí)降低三個(gè)單位 t->needtime--; t->process=execute; t->cputime++; }}voidpriority_cal(){ pcb*p; p=get_process(); intcpu=0; while(!process_finish(p)){//就緒隊(duì)列中還有進(jìn)程 cpu++; printf("cputime:%d\n",cpu); cpuexe(p);//選擇優(yōu)先級(jí)最高進(jìn)程執(zhí)行一個(gè)時(shí)間單位 display(p);//每調(diào)度一次就顯示次 sleep(2); } free_process(p);//釋放全部進(jìn)程 printf("Allprocesseshavefinished\n");}pcb*get_process_round(){ pcb*q; pcb*p;//頭指針 pcb*t;//尾指針 inti=0; printf("inputnameandtime\n"); while(i<P_NUM){ q=(pcb*)malloc(sizeof(pcb)); scanf("%s",q->name); scanf("%d",&q->needtime); q->cputime=0; q->count=0; q->process=ready; q->next=NULL; if(i==0){ p=q; t=q; } else{ t->next=q; t=q; } i++; } returnp;}voidcpu_round(pcb*q){ if(q->needtime==1)q->cputime++;else q->cputime+=2; q->needtime-=2; if(q->needtime<0){ q->needtime=0; } q->count++; q->process=execute;}pcb*get_next(pcb*k,pcb*head){ pcb*t; t=k; do{ t=t->next; }while(t&&t->process==finish); if(t==NULL){ t=head; //k是剛才被執(zhí)行節(jié)點(diǎn),假如t->next=k,所明就緒隊(duì)列除了k和t以外都已結(jié)束,按照時(shí)間片輪轉(zhuǎn)算法,該t執(zhí)行 while(t->next!=k&&t->process==finish){ t=t->next; } } returnt;}voidset_state(pcb*p){ while(p){ if(p->needtime==0){ p->process=finish; } if(p->process==execute){ p->process=ready; } p=p->next; }}voiddisplay_round(pcb*p){ printf("namecputimeneedtime count state\n"); while(p){ printf("%s",p->name); printf(" "); printf("%d",p->cputime); printf(" "); printf("%d",p->needtime); printf(" "); printf("%d",p->count); printf(" "); switch(p->process){ caseready:printf("ready\n");break; caseexecute:printf("execute\n");break; caseblock:printf("block\n");break; casefinish:printf("finish\n");break; } p=p->next; }}voidround_cal(){ pcb*p; pcb*r; p=get_process_round(); intcpu=0; r=p; while(!process_finish(p)){//就緒隊(duì)列中還有進(jìn)程 if(r->needtime==1) cpu+=1; else cpu+=2;//時(shí)間片長(zhǎng)度是2 cpu_round(r); r=get_next(r,p);//取得下一個(gè)需要執(zhí)行進(jìn)程 printf("cputime:%d\n",cpu); display_round(p);//每調(diào)度一次就顯示次 set_state(p); sleep(2); } free_process(p);//釋放全部進(jìn)程}main(){ display_menu(); intk; scanf("%d",&k); switch(k){ case1:priority_cal();break; case2:round_cal();break; case3:break; default:printf("YOUHAVENOTCHOOSEANYALGORITHM!\n"); }}優(yōu)先級(jí)調(diào)度:時(shí)間片輪轉(zhuǎn)調(diào)度:先來先服務(wù)調(diào)度算法及結(jié)果:#include<stdio.h>#include<stdlib.h>intSUM=0,K=0;typedefstructlink{ inttime; intaverageTime; intpriority; structlink*next;}linknode;linknode*creat(){ intn,m; linknode*head,*r,*s; head=r=(linknode*)malloc(sizeof(linknode)); printf("輸入各進(jìn)程處理時(shí)間和優(yōu)先級(jí)并以兩個(gè)0為結(jié)束標(biāo)志:\n"); while(scanf("%d%d",&n,&m)&&n&&m) { s=(linknode*)malloc(sizeof(linknode)); K++; s->time=n; s->priority=m; s->averageTime=0; r->next=s; r=s; } r->next=NULL; returnhead;}linknode*seekAverageTime(linknode*head){ intsum=0; linknode*p; p=head->next; while(p) { sum=sum+p->time;p->averageTime=sum; p=p->next;SUM+=sum; }}voidprint(linknode*head){ linknode*p; p=head->next; printf("各進(jìn)程處理時(shí)間為:"); while(p) { printf("%-4d",p->averageTime); p=p->next; } printf("

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論