操作系統(tǒng)實驗報告-單處理機系統(tǒng)的進程調(diào)度_第1頁
操作系統(tǒng)實驗報告-單處理機系統(tǒng)的進程調(diào)度_第2頁
操作系統(tǒng)實驗報告-單處理機系統(tǒng)的進程調(diào)度_第3頁
操作系統(tǒng)實驗報告-單處理機系統(tǒng)的進程調(diào)度_第4頁
操作系統(tǒng)實驗報告-單處理機系統(tǒng)的進程調(diào)度_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗二單處理機系統(tǒng)的進程調(diào)度一.實驗?zāi)康模?)加深對進程概念的理解,明確進程與程序的區(qū)別。(2)深入了解系統(tǒng)如何組織進程、創(chuàng)建進程。(3)進一步認(rèn)識如何實現(xiàn)處理機調(diào)度。二.實驗內(nèi)容編寫程序完成單處理機系統(tǒng)中的進程調(diào)度,要求采用時間片輪轉(zhuǎn)調(diào)度算法。三.實驗原理在早期的時間片輪轉(zhuǎn)法中,系統(tǒng)將所有的就緒進程按先來先服務(wù)的原則,排成一個隊列,每次調(diào)度時,把CPU分配給隊首進程,并令其執(zhí)行一個時間片.時間片的大小從幾ms到幾百ms.當(dāng)執(zhí)行的時間片用完時,由一個計時器發(fā)出時鐘中斷請求,調(diào)度程序便據(jù)此信號來停止該進程的執(zhí)行,并將它送往就緒隊列的末尾;然后,再把處理機分配給就緒隊列中新的隊首進程,同時也讓它執(zhí)行一個時間片.這樣就可以保證就緒隊列中的所有進程,在一給定的時間內(nèi),均能獲得一時間片的處理機執(zhí)行時間.四.實驗部分源程序#include<stdio.h>#include<time.h>#include<stdlib.h>/*********************以下是全局?jǐn)?shù)據(jù)結(jié)構(gòu)和變量***********************//*PCB結(jié)構(gòu)*/structPCB{intpname;intpri;intruntime;intwaittime;structPCB*next;}pcb[7];structPCB*running;/*運行指針*/structPCB*Hready;/*高優(yōu)先級就緒隊列頭指針*/structPCB*Lready;/*低優(yōu)先級隊列頭指針*/structPCB*wait;/*等待隊列頭指針*/intA=0;/**************************以下是函數(shù)說明****************************/voiddelay();/*利用循環(huán)實現(xiàn)延遲*/voidproc(structPCB*running);/*模擬進程3-9*/voidInsertIntoQueueTail(structPCB**head,structPCB*node);/*將node插入到head所指示的隊列的尾部*/intproc_switch();/*進程調(diào)度函數(shù)*/voidproc_wait();/*進程等待函數(shù)*/intproc_wakeup();/*進程喚醒函數(shù)*//************************以下是函數(shù)定義及注釋************************/main()/*主函數(shù)*/{inti;/*初始化,創(chuàng)建進程3-9,置低優(yōu)先級,等待時間為0,依次插入低優(yōu)先級隊列*/for(i=0;i<3;i++){pcb[i].pname=i+3;pcb[i].pri=0;pcb[i].waittime=0;InsertIntoQueueTail(&Lready,&pcb[i]);}wait=NULL;Hready=NULL;/*等待隊列和高優(yōu)先級隊列為空*/printf("\n模擬進程調(diào)度開始:\n");/*模擬進程調(diào)度開始*/for(;;){switch(A){case0:/*無進程等待調(diào)度,打印信息并返回*/if(!proc_switch()){printf("/n沒有進程在運行返回:\n");getchar();}break;case1:proc_wait();break;case3:case4:case5:case6:proc(running);break;default:printf("\nerror!");exit(-1);}}}/*功能:延遲一個時間片*//*入口參數(shù):無*//*出口參數(shù):無*/voiddelay(){inti,j;for(i=0;i<20000;i++)for(j=0;j<10000;j++){}}/*功能:進程3-9*//*入口參數(shù):運行指針*//*出口參數(shù):無*/voidproc(structPCB*running){inti;srand((unsigned)time(NULL));/*顯示當(dāng)前運行的進程的id*/printf("\n現(xiàn)在進程%d正在運行\(zhòng)n",running->pname);/*當(dāng)前進程執(zhí)行running->runtime個時間片*/for(i=running->runtime;i>0;i--){/*顯示剩余的時間片*/printf("剩余的時間片為%d\n",i);/*延遲*/delay();proc_wakeup();/*產(chǎn)生一個1到1000的隨機數(shù),若該隨機數(shù)小余300,當(dāng)前進程等待,*/if((rand()%1000+1)<300){printf("進程%d開始等待.\n",running->pname);A=1;return;}}/*顯示時間片耗盡,進程轉(zhuǎn)為低優(yōu)先級就緒狀態(tài)*/printf("進程%d時間片耗盡\n",running->pname);InsertIntoQueueTail(&Lready,running);A=0;return;}/*功能:將一個節(jié)點插入隊列尾部*//*入口參數(shù):隊列頭指針地址head,待插入結(jié)點node*//*出口參數(shù):無*/voidInsertIntoQueueTail(structPCB**head,structPCB*node){structPCB*p;node->next=NULL;/*被插入隊列為空*/if(*head==NULL){*head=node;return;}/*被插入隊列不為空*/else{p=*head;/*找到隊列的最后一個結(jié)點*/while(p->next!=NULL)p=p->next;p->next=node;}}/*功能:進程調(diào)度*//*入口參數(shù):無*//*出口參數(shù):若調(diào)度成功,返回1,否則返回0*/intproc_switch(){/*若高優(yōu)先級就緒隊列和低優(yōu)先級就緒隊列均為空,則循環(huán)執(zhí)行進程喚醒*/while(Hready==NULL&&Lready==NULL)if(!proc_wakeup())return0;/*若高優(yōu)先級就緒隊列非空,則執(zhí)行其第一個進程,分配2個時間片*/if(Hready!=NULL){running=Hready;Hready=Hready->next;running->runtime=2;}/*若高優(yōu)先級就緒隊列為空,則執(zhí)行低優(yōu)先級就緒隊列的第一個進程,分配5個時間片*/else{running=Lready;Lready=Lready->next;running->runtime=5;}/*把調(diào)度進程的id賦給A*/A=running->pname;return1;}/*功能:進程等待。將當(dāng)前運行進程置高優(yōu)先級,等待時間為20,插入等待隊列尾部*//*入口參數(shù):無*//*出口參數(shù):無*/voidproc_wait(){structPCB*p;running->pri=1;running->waittime=10;InsertIntoQueueTail(&wait,running);A=0;return;}/*功能:進程喚醒*//*入口參數(shù):無*//*出口參數(shù):若等待隊列為空,則返回0,否則返回1*/intproc_wakeup(){structPCB*p,*last,*MoveToReady;p=wait;/*等待隊列為空,返回0*/if(p==NULL)return0;/*延遲*/delay();/*等待隊列中每個進程的等待時間減1*/while(p!=NULL){p->waittime-=1;p=p->next;}p=wait;/*從等待隊列中摘除等待時間為0的進程,插入到高優(yōu)先級就緒隊列的尾部*/while(p!=NULL){if(p->waittime==0){MoveToReady=p;if(p==wait)wait=p->next;elselast->next=p->next;p=p->next;InsertIntoQueueTail(&Hready,MoveToReady);}else{p=p->next;}}

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論