版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 設(shè)計(jì)時(shí)間: 2012-1-1至2012-1-08 </p><p> 姓名: 學(xué)號(hào): </p><p><b> 組員:</b></p><p> 專業(yè)年級(jí): </p><p><b> 一.設(shè)計(jì)目的:</b></p>
2、<p> 通過課程設(shè)計(jì), 加深對(duì)操作系統(tǒng)各資源管理模塊的理解,掌握操作系統(tǒng)的基本原理及功能, 具有初步分析實(shí)際操作系統(tǒng)、設(shè)計(jì)、構(gòu)造和開發(fā)現(xiàn)代操作系統(tǒng)的基本能力。</p><p><b> 二.設(shè)計(jì)內(nèi)容:</b></p><p> 2.題目:進(jìn)程調(diào)度算法的設(shè)計(jì)</p><p><b> 設(shè)計(jì)要求:</b>&
3、lt;/p><p> ?、僭O(shè)計(jì)進(jìn)程控制塊PCB表結(jié)構(gòu),分別適用于優(yōu)先數(shù)調(diào)度算法和循環(huán)輪轉(zhuǎn)調(diào)度算法。</p><p> ②建立進(jìn)程就緒隊(duì)列。對(duì)兩種不同算法編制入鏈子程序。</p><p> ?、劬幹苾煞N進(jìn)程調(diào)度算法:1)優(yōu)先數(shù)調(diào)度;2)循環(huán)輪轉(zhuǎn)調(diào)度</p><p> 開發(fā)環(huán)境:VC++6.0</p><p><b&
4、gt; 設(shè)計(jì)技術(shù)參數(shù):</b></p><p> ?、俦境绦蛴脙煞N算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度,每個(gè)進(jìn)程可有三個(gè)狀態(tài),并假設(shè)初始狀態(tài)為就緒狀態(tài)。</p><p> ?、跒榱吮阌谔幚恚绦蛑械哪尺M(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶給定。</p><p> ③在優(yōu)先數(shù)算法中,優(yōu)先數(shù)的值為50與運(yùn)行時(shí)
5、間的差值,即P_TIME-process->needtime。進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,CPU時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。在輪轉(zhuǎn)算法中,采用固定時(shí)間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了2個(gè)單位),這時(shí),CPU時(shí)間片數(shù)加2,進(jìn)程還需要的時(shí)間片數(shù)減2,并排列到就緒隊(duì)列的尾上。</p><p> ?、軐?duì)于遇到優(yōu)先數(shù)一致的情況,采用FIFO策略解決。</p><p
6、><b> 三.設(shè)計(jì)過程</b></p><p> 個(gè)人負(fù)責(zé)實(shí)現(xiàn)的功能:</p><p> /函數(shù)功能:優(yōu)先級(jí)法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法 </p><p> void FirstInsert(PCB *q)</p><p><b> {</b></p><p&
7、gt; PCB *p,*s,*r; /*p,*r用來控制就緒隊(duì)列滾動(dòng),S指向插入的隊(duì)列*/</p><p> int b; /*b作為插入控制標(biāo)志的*/ </p><p><b> s=q;</b></p><p><b> p=READY;</b></p><p><b> r
8、=p;</b></p><p><b> b=1;</b></p><p> if(s->PRIO>=READY->PRIO)</p><p><b> {</b></p><p> s->next=READY;</p><p>
9、 READY=s; </p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> while((p!=NULL)&&b)</p><p&g
10、t;<b> {</b></p><p> if(p->PRIO>=s->PRIO)</p><p><b> {</b></p><p><b> r=p;</b></p><p> p=p->next;</p><p&g
11、t;<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> b=0;</b></p><p><b> }</b></p><p&
12、gt;<b> } </b></p><p> s->next=p;</p><p> r->next=s;</p><p><b> }</b></p><p><b> }</b></p><p> //函數(shù)功能:時(shí)間片輪轉(zhuǎn)算
13、法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法 </p><p> void SecondInsert(PCB *q)</p><p><b> {</b></p><p> tail->next=q;</p><p><b> tail=q;</b></p><p> q-
14、>next=NULL;</p><p><b> }</b></p><p><b> 設(shè)計(jì)思路</b></p><p> 首先設(shè)計(jì)分成兩個(gè)主要部分:</p><p> 1、優(yōu)先級(jí)法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法:</p><p> *p,*r用來控制就緒隊(duì)列滾
15、動(dòng),*S指向插入的隊(duì)列,再比較p和s的進(jìn)程的優(yōu)先度大小,如果大于等于則直接加到首部。否則和第二個(gè)再比較,p指向下一個(gè)進(jìn)程,r指向p的上一個(gè)進(jìn)程,如果p==NULL,則將新進(jìn)程插到隊(duì)尾。否則s的next指向p,r的next指向s。</p><p> 2時(shí)間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法:</p><p> 直接將要插進(jìn)的進(jìn)程插進(jìn)就緒隊(duì)尾即可,也就是將尾部的進(jìn)程的next指向新插進(jìn)
16、隊(duì)列。tail指向新插進(jìn)程的地址。</p><p><b> 算法和流程圖</b></p><p> Main函數(shù)流程圖:</p><p> P R</p><p><b> 優(yōu)先數(shù)算法流程圖:</b></p><p>
17、<b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> N</b></p><p><b
18、> Y</b></p><p> 循環(huán)輪轉(zhuǎn)調(diào)度算法流程圖:</p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b
19、></p><p><b> N</b></p><p><b> Y</b></p><p><b> Y</b></p><p><b> N</b></p><p> 四.操作界面截圖及分析</p>
20、<p> 優(yōu)先數(shù)調(diào)度算法運(yùn)行過程:</p><p><b> 回車直至結(jié)束:</b></p><p> 時(shí)間輪轉(zhuǎn)調(diào)度算法運(yùn)行過程:</p><p><b> 回車直至結(jié)束:</b></p><p><b> 五.設(shè)計(jì)總結(jié):</b></p>
21、<p> 通過這次課程設(shè)計(jì),加深了對(duì)進(jìn)程調(diào)度算法的理解,掌握了操作系統(tǒng)中利用軟件工程的方法和思想來設(shè)計(jì)大型軟件的過程?;菊莆諏?shí)際操作系統(tǒng)、設(shè)計(jì)、構(gòu)造和開發(fā)的基本能力。將課本上學(xué)習(xí)到的理論知識(shí)與實(shí)際編程想結(jié)合,提高了實(shí)踐的能力和經(jīng)驗(yàn),為以后進(jìn)一步深造和鉆研有關(guān)操作系統(tǒng)的學(xué)科建立了扎實(shí)的基礎(chǔ)。</p><p> 但是,我發(fā)現(xiàn)這個(gè)程序還有很多缺點(diǎn),例如界面不好,進(jìn)程允許重命名的情況,這個(gè)都是需要做進(jìn)一步
22、的改進(jìn)的,但是時(shí)間比較倡促,現(xiàn)在就不進(jìn)行改進(jìn)了。</p><p> 還有如果自己親手寫還需要很長(zhǎng)時(shí)間!</p><p><b> 附錄:</b></p><p> 各程序主要函數(shù)及注釋</p><p> #include <stdio.h></p><p> #include
23、 <stdlib.h></p><p> #include <string.h></p><p> #include <ctype.h></p><p> //進(jìn)程控制塊PCB的設(shè)計(jì)</p><p> typedef struct node </p><p><b>
24、; {</b></p><p> char Name[10]; //進(jìn)程名</p><p> int PRIO; //進(jìn)程的優(yōu)先級(jí)</p><p> int ROUND; //進(jìn)程分配的時(shí)間片 </p><p> int CpuTime; //進(jìn)程消耗的CUP時(shí)間</p><p>
25、 int NeedTime; //進(jìn)程需要的CUP時(shí)間</p><p> int Count; //進(jìn)程運(yùn)行時(shí)間</p><p> char State; //進(jìn)程的狀態(tài):'R':運(yùn)行,'W':等待,'F':結(jié)束</p><p> struct node *next;//指向下一個(gè)進(jìn)程的指針
26、</p><p><b> }PCB;</b></p><p> void Begin(void); //將進(jìn)程就緒隊(duì)列中第一個(gè)放進(jìn)運(yùn)行隊(duì)列 </p><p> void PRINTF1(char a); //打印進(jìn)程標(biāo)志信息</p><p> void PRINTF2(char a); //輸出單個(gè)進(jìn)程信
27、息的函數(shù)</p><p> void PRINTF(char CH); // 輸出所有進(jìn)程信息的函數(shù)------1</p><p> void pcreate_task(char CH);//采用優(yōu)先級(jí)進(jìn)程調(diào)度法時(shí),進(jìn)程初始化函數(shù) </p><p> void rcreate_task(char CH); //采用時(shí)間片輪轉(zhuǎn)法進(jìn)程調(diào)度法時(shí),進(jìn)程初始化函數(shù)&
28、lt;/p><p> void PRIOrity(char CH);//采用優(yōu)先級(jí)進(jìn)程調(diào)度法時(shí),進(jìn)程調(diào)度函數(shù) </p><p> void RoundRun(char CH); //采用時(shí)間片輪轉(zhuǎn)調(diào)度函數(shù)--------2 </p><p> void FirstInsert(PCB *q); //優(yōu)先級(jí)法調(diào)度將進(jìn)程插入到就緒隊(duì)列 </p><
29、p> void SecondInsert(PCB *q);//時(shí)間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊(duì)列-----3</p><p> PCB *Finish,*READY,*tail,*RUN;/*指向三個(gè)隊(duì)列的隊(duì)首的指針,tail為就緒隊(duì)列的隊(duì)尾指針*/ </p><p> int N;/*定義進(jìn)程的數(shù)目*/ </p><p> /*main 函數(shù),運(yùn)
30、行直到用戶退出*/</p><p> int main()</p><p><b> {</b></p><p><b> char CH;</b></p><p> char flag='Y'; //設(shè)定標(biāo)志位初始值為 ‘Y’</p><p>
31、 char f=1; </p><p> while(toupper(flag)=='Y') // toupper(int c)返回對(duì)應(yīng)字母的大寫值。</p><p><b> {</b></p><p> printf("| O(∩_∩)O 選擇菜單
32、 |\n");</p><p> printf("| 選擇一: 優(yōu)先級(jí)調(diào)度請(qǐng)按 ‘P’ |\n");</p><p> printf("| 選擇二: 時(shí)間輪轉(zhuǎn)法調(diào)度請(qǐng)按‘R’ |\n");<
33、/p><p><b> if(f==0)</b></p><p><b> {</b></p><p> getchar();</p><p><b> }</b></p><p> scanf("%c",&CH);&l
34、t;/p><p> printf("請(qǐng)輸入進(jìn)程的數(shù)目:\n");</p><p><b> if(f==0)</b></p><p><b> {</b></p><p> getchar();</p><p><b> }</b&g
35、t;</p><p> scanf("%d",&N);</p><p> if((CH=='p')||(CH=='P')) //如果選擇p 則執(zhí)行優(yōu)先級(jí)調(diào)度算法</p><p><b> {</b></p><p> pcreate_task(CH
36、); </p><p> PRIOrity(CH);</p><p><b> } </b></p><p> else if((CH=='r')||(CH=='R')) //如果選擇r 則選擇執(zhí)行時(shí)間片輪轉(zhuǎn)算法</p><p><b> {&l
37、t;/b></p><p> rcreate_task(CH);</p><p> RoundRun(CH);</p><p><b> }</b></p><p> printf("繼續(xù)請(qǐng)按 Y,按任意鍵退出。 \n ");</p><p> scanf(&q
38、uot;%c",&flag);</p><p><b> f=0;</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p>&
39、lt;p> //函數(shù)功能: 將優(yōu)先級(jí)調(diào)度算法的進(jìn)程就緒隊(duì)列中第一個(gè)運(yùn)行,插入運(yùn)行隊(duì)列。 </p><p> void Begin(void) //將就緒態(tài)的進(jìn)程,調(diào)入cpu運(yùn)行,并將狀態(tài)改為運(yùn)行態(tài) R</p><p><b> {</b></p><p> if(READY!=NULL) </p><p&g
40、t;<b> {</b></p><p> RUN=READY; //就緒態(tài)改為運(yùn)行態(tài)</p><p> READY=READY->next; //等待隊(duì)列中,刪除被改為運(yùn)行態(tài)的進(jìn)程</p><p> RUN->State='R'; //狀態(tài)改為運(yùn)行態(tài)</p><p> RUN-
41、>next=NULL;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> RUN=NULL; //如果沒有就緒態(tài)的進(jìn)程,則無法將進(jìn)程轉(zhuǎn)為運(yùn)行態(tài)。</p>&l
42、t;p><b> }</b></p><p><b> }</b></p><p><b> /*</b></p><p> 函數(shù)功能:輸出進(jìn)程信息的標(biāo)題函數(shù) </p><p> 函數(shù)原型:void PRINTF1(char a)</p><
43、p> 函數(shù)參數(shù):char a :a=='p'為優(yōu)先級(jí),=='r'為時(shí)間片輪轉(zhuǎn) </p><p> 函數(shù)返回值:void</p><p><b> */</b></p><p> void PRINTF1(char a)</p><p><b> {</b&g
44、t;</p><p> if(toupper(a)=='P')</p><p><b> {</b></p><p> printf("進(jìn)程名 耗時(shí) 需時(shí) 優(yōu)先級(jí) 狀態(tài) \n");</p><p><b> }</b></p><
45、p><b> else</b></p><p><b> {</b></p><p> printf("進(jìn)程名 耗時(shí) 需時(shí) 已用時(shí) 時(shí)間片 狀態(tài) \n"); </p><p><b> } </b></p><p><b>
46、; }</b></p><p><b> /*</b></p><p> 函數(shù)功能:輸出單個(gè)進(jìn)程信息的函數(shù) </p><p> 函數(shù)原型:void PRINTF2(char a,PCB *p)</p><p> 函數(shù)參數(shù):char a :a=='p'為優(yōu)先級(jí),=='r'
47、;為時(shí)間片輪轉(zhuǎn) </p><p> PCB *p 為指向待輸出的進(jìn)程控制塊的指針 </p><p> 函數(shù)返回值:void</p><p><b> */</b></p><p> void PRINTF2(char a,PCB *p)</p><p><b> {&l
48、t;/b></p><p> if(toupper(a)=='P')</p><p><b> {</b></p><p> printf("%s %d %d %d %c\n",p->Name,p->CpuTime,p->NeedTime
49、,p->PRIO,p->State);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("%s %d %d
50、%d %d %c\n",p->Name,p->CpuTime,p->NeedTime,p->Count,p->ROUND,p->State);</p><p><b> }</b></p><p><b> }</b></p><p><b>
51、/*</b></p><p> 函數(shù)功能:輸出所有進(jìn)程信息的函數(shù) </p><p> 函數(shù)原型:void PRINTF(char CH)</p><p> 函數(shù)參數(shù):char a :a=='p'為優(yōu)先級(jí),=='r'為時(shí)間片輪轉(zhuǎn) </p><p> 函數(shù)返回值:void</p>
52、<p><b> */</b></p><p> void PRINTF(char CH)</p><p><b> {</b></p><p><b> PCB *p;</b></p><p> PRINTF1(CH);</p><p&
53、gt; if(RUN!=NULL)</p><p><b> {</b></p><p> PRINTF2(CH,RUN);</p><p><b> }</b></p><p><b> p=READY;</b></p><p> whil
54、e(p!=NULL)</p><p><b> {</b></p><p> PRINTF2(CH,p);</p><p> p=p->next;</p><p><b> }</b></p><p><b> p=Finish;</b>
55、</p><p> while(p!=NULL)</p><p><b> {</b></p><p> PRINTF2(CH,p);</p><p> p=p->next;</p><p><b> }</b></p><p> g
56、etchar();</p><p><b> }</b></p><p> //函數(shù)功能:優(yōu)先級(jí)法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法 </p><p> void FirstInsert(PCB *q)</p><p><b> {</b></p><p> PCB *p
57、,*s,*r; /*p,r用來控制就緒隊(duì)列滾動(dòng),S指向插入的隊(duì)列*/</p><p> int b; /*b作為插入控制標(biāo)志的*/ </p><p><b> s=q;</b></p><p><b> p=READY;</b></p><p><b> r=p;</b>
58、;</p><p><b> b=1;</b></p><p> if(s->PRIO>=READY->PRIO)</p><p><b> {</b></p><p> s->next=READY;</p><p> READY=s;
59、 </p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> while((p!=NULL)&&b)</p><p><b>
60、 {</b></p><p> if(p->PRIO>=s->PRIO)</p><p><b> {</b></p><p><b> r=p;</b></p><p> p=p->next;</p><p><b>
61、 }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> b=0;</b></p><p><b> }</b></p><p><b>
62、 } </b></p><p> s->next=p;</p><p> r->next=s;</p><p><b> }</b></p><p><b> }</b></p><p> //函數(shù)功能:時(shí)間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊(duì)
63、列算法 </p><p> void SecondInsert(PCB *q)</p><p><b> {</b></p><p> tail->next=q;</p><p><b> tail=q;</b></p><p> q->next=NUL
64、L;</p><p><b> }</b></p><p> //函數(shù)功能:采用優(yōu)先級(jí)進(jìn)程調(diào)度法時(shí),進(jìn)程初始化函數(shù) </p><p> void pcreate_task(char CH)</p><p><b> {</b></p><p><b> P
65、CB *p;</b></p><p> int i,time;</p><p> char na[10]; //定義一個(gè)數(shù)組</p><p> READY=NULL; //將就緒隊(duì)列、運(yùn)行隊(duì)列和運(yùn)行結(jié)束隊(duì)列清空</p><p> Finish=NULL; //
66、隊(duì)列清空</p><p> RUN=NULL; //隊(duì)列清空</p><p> for(i=0;i<N;i++) //循環(huán)輸入N個(gè)進(jìn)程,插入到隊(duì)列中</p><p><b> {</b></p><p> p=(PCB*)malloc(sizeof(PCB)); //
67、為進(jìn)程申請(qǐng)空間</p><p> printf("輸入進(jìn)程名字:\n");</p><p> scanf("%s",na);</p><p><b> again: ;</b></p><p> printf("輸入進(jìn)程%s的時(shí)間:\n",na);&l
68、t;/p><p> scanf("%d",&time); //獲取時(shí)間</p><p> if(time<=0) //判斷輸入時(shí)間有效性</p><p><b> {</b></p><p> printf("輸入出錯(cuò)!請(qǐng)?jiān)俅屋斎?!\n");
69、</p><p> goto again;</p><p><b> }</b></p><p> strcpy(p->Name,na);</p><p> p->CpuTime=0; //cpu所用時(shí)間設(shè)初值為0</p><p> p->NeedTim
70、e=time; //將時(shí)間傳給所需時(shí)間</p><p> p->State='W'; //進(jìn)程狀態(tài)變?yōu)榫途w態(tài)。</p><p> p->PRIO=50-time; //優(yōu)先級(jí)減小</p><p> if(READY==NULL) //如果就緒態(tài)隊(duì)列為空,則將該進(jìn)程作為頭結(jié)點(diǎn),插入就緒隊(duì)
71、列。</p><p><b> {</b></p><p><b> READY=p;</b></p><p> READY->next=NULL;</p><p> } //如果就緒隊(duì)列非空,則插入就緒隊(duì)列。</p><
72、;p><b> else</b></p><p><b> {</b></p><p> FirstInsert(p);</p><p><b> }</b></p><p> printf("進(jìn)程優(yōu)先級(jí)調(diào)度信息如下:\n");</p&
73、gt;<p> PRINTF(CH); </p><p><b> }</b></p><p> Begin(); //開始運(yùn)行函數(shù)。</p><p><b> }</b></p><p> //函數(shù)功能:采用時(shí)間片輪轉(zhuǎn)法進(jìn)程調(diào)度法時(shí)
74、,進(jìn)程初始化函數(shù) </p><p> void rcreate_task(char CH)</p><p><b> {</b></p><p><b> PCB *p;</b></p><p> int i,time; //初始化定義,跟上面的差不多</p><p&
75、gt; char na[10];</p><p> READY=NULL; //定義都初始化為空</p><p> Finish=NULL;</p><p><b> RUN=NULL;</b></p><p> for(i=0;i<N;i++)</p><p><b&g
76、t; {</b></p><p> p=(PCB*)malloc(sizeof(PCB)); //為進(jìn)程控制塊申請(qǐng)動(dòng)態(tài)空間</p><p> printf("請(qǐng)輸入進(jìn)程名字:\n");</p><p> scanf("%s",na);</p><p> again: ;&
77、lt;/p><p> printf("請(qǐng)輸入該進(jìn)程%s的運(yùn)行時(shí)間:\n",na);</p><p> scanf("%d",&time);</p><p> if(time<=0)</p><p><b> {</b></p><p>
78、printf("輸入有誤!請(qǐng)?jiān)俅屋斎?!\n");</p><p> goto again;</p><p><b> }</b></p><p> strcpy(p->Name,na);</p><p> p->CpuTime=0;</p><p> p-
79、>NeedTime=time;</p><p> p->Count=0;</p><p> p->State='W';</p><p> p->ROUND=3; //設(shè)時(shí)間片為3,可以設(shè)置其他數(shù)</p><p> if(READY!=NULL) //如果就緒隊(duì)列不為空,則將該進(jìn)程插入就緒
80、隊(duì)列中。</p><p><b> {</b></p><p> SecondInsert(p); </p><p><b> }</b></p><p> else //如果就緒隊(duì)列為空,則以該進(jìn)程為頭結(jié)點(diǎn),初始化就緒隊(duì)列。</p><p>&
81、lt;b> {</b></p><p> p->next=READY;</p><p><b> READY=p;</b></p><p><b> tail=p;</b></p><p><b> }</b></p><p
82、> printf("進(jìn)程時(shí)間片輪轉(zhuǎn)法調(diào)度信息如下:\n ");</p><p> PRINTF(CH);</p><p><b> }</b></p><p> RUN=READY; //開始運(yùn)行</p><p> READY=READY->next;</p>
83、<p> RUN->State='R';</p><p><b> }</b></p><p> //函數(shù)功能:采用優(yōu)先級(jí)進(jìn)程調(diào)度法時(shí),進(jìn)程調(diào)度函數(shù) </p><p> void PRIOrity(char CH)</p><p><b> {</b><
84、;/p><p> while(RUN!=NULL) //只要運(yùn)行態(tài) 不為空則繼續(xù)運(yùn)行</p><p><b> {</b></p><p> RUN->CpuTime+=1; //運(yùn)行時(shí)間加 1</p><p> RUN->NeedTime-=1; //需要時(shí)間 減1</p><p
85、> RUN->PRIO-=3; //運(yùn)行后 優(yōu)先級(jí)減少3</p><p> if(RUN->NeedTime==0) //運(yùn)行所需時(shí)間為0是 插入調(diào)度結(jié)束隊(duì)列 Finish</p><p><b> {</b></p><p> RUN->next=Finish;</p><p>
86、; Finish=RUN;</p><p> RUN->State='F'; //表示結(jié)束</p><p> RUN=NULL; //設(shè)置為空</p><p> Begin(); </p><p><b> }</b></p>
87、<p><b> else</b></p><p><b> {</b></p><p> if((READY!=NULL)&&(RUN->PRIO<READY->PRIO)) //如果就緒態(tài)不為空,且優(yōu)先級(jí)較低,則為就緒態(tài)等待運(yùn)行。</p><p><b>
88、 {</b></p><p> RUN->State='W';</p><p> FirstInsert(RUN);</p><p><b> RUN=NULL;</b></p><p><b> Begin();</b></p><p&
89、gt;<b> }</b></p><p><b> }</b></p><p> PRINTF(CH);</p><p><b> }</b></p><p><b> }</b></p><p> //函數(shù)功能:采用
90、時(shí)間片輪轉(zhuǎn)法進(jìn)程調(diào)度函數(shù) </p><p> void RoundRun(char CH)</p><p><b> {</b></p><p> while(RUN!=NULL)</p><p><b> {</b></p><p> RUN->CpuTim
91、e=RUN->CpuTime+1; //cpu時(shí)間+1</p><p> RUN->NeedTime=RUN->NeedTime-1;//需要時(shí)間-1</p><p> RUN->Count=RUN->Count+1; //運(yùn)行時(shí)間+1</p><p> if(RUN->NeedTime==0) //直到所需時(shí)間為0
92、,則改為Finish態(tài)</p><p><b> { </b></p><p> RUN->next=Finish;</p><p> Finish=RUN;</p><p> RUN->State='F'; //狀態(tài)改為完成</p><p><b>
93、; RUN=NULL;</b></p><p> if(READY!=NULL)</p><p><b> {</b></p><p><b> Begin();</b></p><p> } </p><p><b> }&
94、lt;/b></p><p> else //所需時(shí)間不為0</p><p><b> {</b></p><p> if(RUN->Count==RUN->ROUND) //cpu分配的時(shí)間和時(shí)間片相等 則設(shè)運(yùn)行時(shí)間為0</p><p><b> {</b><
95、/p><p> RUN->Count=0; </p><p> if(READY!=NULL) //就緒隊(duì)列不為空,則將進(jìn)程改為就緒態(tài),插入就緒隊(duì)列。</p><p><b> { </b></p><p> RUN->State='W';//運(yùn)行態(tài)改為就緒態(tài)</p&
96、gt;<p> SecondInsert(RUN);</p><p><b> Begin();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p&
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)_進(jìn)程調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---進(jìn)程調(diào)度的模擬實(shí)現(xiàn)
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì) (2)
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度模擬設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度子系統(tǒng)模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--驅(qū)動(dòng)調(diào)度
- 操作系統(tǒng)程序調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)---多級(jí)反饋隊(duì)列進(jìn)程調(diào)度算法
評(píng)論
0/150
提交評(píng)論