C語(yǔ)言模擬進(jìn)程管理_第1頁(yè)
C語(yǔ)言模擬進(jìn)程管理_第2頁(yè)
C語(yǔ)言模擬進(jìn)程管理_第3頁(yè)
C語(yǔ)言模擬進(jìn)程管理_第4頁(yè)
C語(yǔ)言模擬進(jìn)程管理_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告目錄一 需求分析 6.二 概要設(shè)計(jì) 6.三 詳細(xì)設(shè)計(jì)(含主要代碼) 6四 調(diào)試分析、測(cè)試結(jié)果 1. 2五 用戶(hù)使用說(shuō)明 1.4六 後記 1.4七 參考資料 1.4需求分析在多道處理程序運(yùn)行環(huán)境下,進(jìn)程數(shù)目一般多於處理機(jī)數(shù)目,使得進(jìn)程要通過(guò)競(jìng)爭(zhēng)來(lái) 使用處理機(jī)。這就要求系統(tǒng)能按照某種算法,動(dòng)態(tài)地把處理機(jī)分配給就緒隊(duì)列中一個(gè)進(jìn) 程,使之運(yùn)行,分配處理機(jī)任務(wù)是由金城調(diào)度程序完成。一個(gè)進(jìn)程被創(chuàng)建後,系統(tǒng)爲(wèi) 了便於對(duì)進(jìn)程進(jìn)行管理,將系統(tǒng)中所有進(jìn)程按照其狀態(tài),將其組成不同進(jìn)程隊(duì)列。於 是系統(tǒng)中有運(yùn)行進(jìn)程隊(duì)列、就緒隊(duì)列和各種事件進(jìn)程等待隊(duì)列。進(jìn)程調(diào)度功能就是從 就緒隊(duì)列中挑選一個(gè)進(jìn)程到處理

2、機(jī)上運(yùn)行。進(jìn)程調(diào)度算法有多種,常用有優(yōu)先級(jí)調(diào)度 算法、先來(lái)先服務(wù)算法、時(shí)間片輪轉(zhuǎn)算法。二 概要設(shè)計(jì)一最高優(yōu)先級(jí)優(yōu)先調(diào)度算法動(dòng)態(tài)優(yōu)先數(shù)是指在進(jìn)程創(chuàng)建時(shí)先確定一個(gè)初始優(yōu)先數(shù),以後在進(jìn)程運(yùn)行中隨著進(jìn)程特性改變不斷修改優(yōu)先數(shù),這樣,由於開(kāi)始優(yōu)先數(shù)很低而得不到CPUD進(jìn)程,就能因爲(wèi)等待時(shí)間增長(zhǎng)而優(yōu)先數(shù)變爲(wèi)最高而得到 CPU運(yùn)行。例如:在進(jìn)程獲得一次 CPU後就將其優(yōu)先數(shù)減少 3。或者,進(jìn)程等待時(shí)間超過(guò)某一 時(shí)限時(shí)增加其優(yōu)先數(shù)值,等等。二簡(jiǎn)單輪轉(zhuǎn)法調(diào)度算法所有就緒進(jìn)程按 FCFS排成一個(gè)隊(duì)列,總是把處理機(jī)分配給隊(duì)首進(jìn)程,各進(jìn)程占用 CPUO時(shí)間片相同。即將 CPUD處理時(shí)間劃分成一個(gè)個(gè)相同時(shí)間片,就緒隊(duì)列

3、諸進(jìn) 程輪流運(yùn)行一個(gè)時(shí)間片。當(dāng)一個(gè)時(shí)間片結(jié)束時(shí),如果運(yùn)行進(jìn)程用完它時(shí)間片後還未完 成,就強(qiáng)迫運(yùn)行機(jī)制進(jìn)程讓出 CPU就把它送回到就緒隊(duì)列末尾,等待下一次調(diào)度。 同時(shí),進(jìn)程調(diào)度又去選擇就緒隊(duì)列中隊(duì)首進(jìn)程,分配給它一時(shí)間片,以投入運(yùn)行。直 至所有進(jìn)程運(yùn)行完畢。三短作業(yè)優(yōu)先調(diào)度算法所有就緒進(jìn)程按所需時(shí)間由少到多排成一個(gè)隊(duì)列,依次運(yùn)行隊(duì)列中進(jìn)程,並列表 顯示出來(lái),每個(gè)進(jìn)程開(kāi)始運(yùn)行時(shí)間減去進(jìn)入內(nèi)存時(shí)間就是該進(jìn)程等待時(shí)間,每個(gè)進(jìn) 程結(jié)束運(yùn)行時(shí)間減去進(jìn)入內(nèi)存時(shí)間就是該進(jìn)程周轉(zhuǎn)時(shí)間,每個(gè)進(jìn)程周轉(zhuǎn)時(shí)間除於 服務(wù)時(shí)間就是帶權(quán)周轉(zhuǎn)時(shí)間。三 詳細(xì)設(shè)計(jì)優(yōu)先權(quán)調(diào)度算法:1、用戶(hù)可以自行輸入進(jìn)程數(shù)量,每一個(gè)進(jìn)程由進(jìn)程控制塊

4、(PCB表示,各種隊(duì) 列均采用鏈表數(shù)據(jù)結(jié)構(gòu)。2、進(jìn)程控制塊包含如下信息:進(jìn)程號(hào)、 cpu 時(shí)間、所需要時(shí)間、優(yōu)先數(shù)、狀態(tài) 等等。3、在每次運(yùn)行程序時(shí)都要輸入“進(jìn)程數(shù)量”、“進(jìn)程名稱(chēng)及占用時(shí)間”。4、按照優(yōu)先數(shù)高低進(jìn)行排列5、處理機(jī)調(diào)度隊(duì)首元素運(yùn)行。采用動(dòng)態(tài)優(yōu)先數(shù)辦法,進(jìn)程每運(yùn)行一次優(yōu)先數(shù)減“ 3”, 同時(shí)將已運(yùn)行時(shí)間加“ 1”。6、進(jìn)程運(yùn)行一次後,若要求運(yùn)行時(shí)間不等於已運(yùn)行時(shí)間,則再將它加入就緒隊(duì)列; 否則將其狀態(tài)置為“ F”, 且退出就緒隊(duì)列。7、“ R狀態(tài)進(jìn)程隊(duì)列不爲(wèi)空,則重複上面步驟,直到所有進(jìn)程都成爲(wèi)“ F”狀態(tài)。流程圖:圖.最咼優(yōu)先級(jí)優(yōu)先調(diào)度算法流程圖主要代碼:void priori

5、ty(char algo)PCBq;prtl (algo);for(int i = 0; i0)q.needtime-;if(q.needtime = 0)q.state= 3;if(q.state!=3)q.prio-=3;pp.push(q);while(!pq.empty()q= pq.top();pq.pop(); if(q.needtime = 0) q.state= 3;prt2(algo , q);prt1(algo); pp.push(q);pq = pp;pp = pqempty;printf(*n);f*輸出結(jié)束 n);printf( getchar();二時(shí)間片輪轉(zhuǎn)算法:

6、1、用戶(hù)可以自行輸入進(jìn)程數(shù)量,每一個(gè)進(jìn)程由進(jìn)程控制塊(PCB表示,各種隊(duì)列均采用鏈表數(shù)據(jù)結(jié)構(gòu)。2、按照進(jìn)程輸入先後順序排成一個(gè)隊(duì)列。再設(shè)一個(gè)隊(duì)首指針指向第一個(gè)到達(dá)進(jìn)程首 址。3、執(zhí)行處理機(jī)調(diào)度時(shí),開(kāi)始選擇隊(duì)首第一個(gè)進(jìn)程運(yùn)行。另外,再設(shè)一個(gè)當(dāng)前運(yùn)行進(jìn)程 指針,指向當(dāng)前正在運(yùn)行進(jìn)程。4、考慮到代碼可重用性,輪轉(zhuǎn)法調(diào)度程序和最高優(yōu)先級(jí)優(yōu)先調(diào)度是調(diào)用同一個(gè)??爝M(jìn) 行輸出5、在規(guī)定時(shí)間片內(nèi)進(jìn)程是根據(jù)先來(lái)先服務(wù)方式配列,每個(gè)進(jìn)程只運(yùn)行時(shí)間片大小 時(shí)間然後轉(zhuǎn)到下一個(gè)進(jìn)程運(yùn)行。直到所有進(jìn)程運(yùn)行完?duì)?wèi)止。流程圖圖簡(jiǎn)單輪轉(zhuǎn)法調(diào)度算法流程圖主要代碼:void Roundrun(inttimeSlice)while(r

7、un != NULL) run-cputime = run-cputime + timeSlice; run-needtime= run-needtime- timeSlice; run-ro un d+=timeSlice;run-co un t+;if(run-needtime n eedtime= 0; run-n ext = fi ni sh;finish = run;if(run != tail) tail-next = ready; else ready = NULL;run-state= F;run = NULL;if(ready != NULL) firstin();elsei

8、f(ready != NULL)run-state = W;tail = run;run = ready;/就緒隊(duì)列頭指針賦值給運(yùn)行run - state= R;/進(jìn)程狀態(tài)變?yōu)榈却隣顟B(tài)ready= ready- next; /就緒隊(duì)列頭指針移到下一個(gè)進(jìn)程 prt(r);三短作業(yè)優(yōu)先調(diào)度算法1,用戶(hù)可以自行輸入進(jìn)程數(shù)量,每一個(gè)進(jìn)程由進(jìn)程控制塊(PCB表示,各種隊(duì)列均采用鏈表數(shù)據(jù)結(jié)構(gòu)。2,按照進(jìn)程服務(wù)時(shí)間由少到多順序排成一個(gè)隊(duì)列。再按順序依次執(zhí)行。主要代碼:void short_timefirst(charalgo)PCq; int t; prt3();for(int j = 0; j N ; j

9、+)pj.state = R;for(int i=0;iN;i+)if(p1i.state = W) p1i.waittime=Tim; if(strcmp(,)=0) p1i.state = R;prit(i);p1i.state = F;p1i.cputime=p1i.needtime;p1i.needtime=0; elseprit(i);pj.state = F;pj.cputime=pj.needtime; pj.needtime=0;pj.waittime=Tim;Tim+=pj.cputime;printf(*n);for(int i=O;iSl|w

10、:wrhii,!prnr:Ti5n5j::三丁BJ*耳口匚CpUL時(shí)間所需吋間記敖時(shí)間片卩1URup2H3H宓號(hào)屮B(niǎo)j間所需邨記孰巧可片p23HUflp1星W12F二去i=pll時(shí)間所需叭可記孰時(shí)間片朮離p2H112H2h12F吧時(shí)fl所需邨記共時(shí)間片狀態(tài)4a24FP1H12F附錄#include #include #include #include using namespacestd; typedef struct nodechar name10;int prio;int round;int needtime;int cputime;int count;int state; struct

11、node *next;bool operator (const node& o)const if(state = o.state)return prio o.state;PCB;priority_queue pq,pqempty,pp,qq; PCB *finish,*ready,*tail,*run;int N , Num; typedef struct nodchar name10;int needtime;int cputime;int waittime;int state; struct node *next;PC;PC p10;PC p110;int Tim=0;void first

12、in() run=ready; run-state=R; ready=ready-next;void prt1(char a) if(a=P)printf(*進(jìn)程號(hào)cpu 時(shí)間所需要時(shí)間優(yōu)先數(shù) 狀態(tài)*n);elseprintf(*進(jìn)程號(hào)cpu 時(shí)間所需時(shí)間記數(shù) 時(shí)間片狀態(tài)*n);void prt2(char a,PCB q)if(a=P)printf(* %-10s %-10d %-10d %-10d %-10d *n,,q.cputime,q.needtime+Tim,q.prio,q.state);elseprintf(* %-10s %-10d %-10d %-10d %-1

13、0d %-10c *n,,q.cputime,q.needtime+Tim,q.count,q.round,q.state);void prt22(char a,PCB *q)printf(* %-10s %-10d %-10d %-10d %-10d %-10c*n,q-name,q- cputime,q-needtime,q-count,q-round,q-state);void prt(char algo)PCB *q;prt1(algo); if(run!=NULL)prt22(algo,run); q=ready; while(q!=NULL&q!=run) prt22(

14、algo,q);if(q-next = run) break; else q = q-next; q=finish;while(q!=NULL) prt22(algo,q); q=q-next;getchar();void priority(char algo)PCB q; prt1(algo);for(int i = 0; i0) q.needtime-; if(q.needtime = 0) q.state = 3; if(q.state!=3) q.prio-=3;pp.push(q); while(!pq.empty()q = pq.top(); pq.pop(); if(q.need

15、time = 0)q.state = 3;prt2(algo , q);prt1(algo); pp.push(q);pq = pp;pp = pqempty;printf( * *n);printf(輸出結(jié)束 n);getchar(); void create1(char algo)PCB p;int i,time;char na10;ready=NULL;finish=NULL;run=NULL;printf(輸入進(jìn)程號(hào)和運(yùn)行時(shí)間: n);printf();for(i=1;inext =q; tail=tail-next;void create2(char algo)PCB *p; int

16、 i,time; char na10; ready=NULL; finish=NULL; run=NULL;nn);printf( 輸入進(jìn)程號(hào)和運(yùn)行時(shí)間: printf( ); for(i=1;iname,na); p-cputime=0;p-needtime=time; p-state=W;p-round =0;p-count =0; if(ready!=NULL)insert2(p); elsep-next=ready; ready=p; tail=ready;printf( 時(shí)間片輪轉(zhuǎn)法輸出信息 :n);n);run=ready; ready=ready-next; tail-next

17、=run; run-state=R;prt(algo);void Roundrun(int timeSlice) while(run != NULL) run-cputime = run-cputime + timeSlice; run-needtime = run-needtime - timeSlice; run-round+=timeSlice;run-count+;if(run-needtime needtime = 0; run-next = finish; finish = run;if(run != tail) tail-next = ready; else ready = NU

18、LL; run-state = F; run = NULL;if(ready != NULL) firstin();elseif(ready != NULL)run-state = W;tail = run;run = ready;run - state = R; ready = ready - next; prt(r);printf(輸出結(jié)束 n);n);intvoidcreate3(char algo)cmp(const void *a,const void *b) return (struct nod*)a)-needtime - (struct nod*)b)-needtime;int

19、 i,time;char na10;printf(輸入進(jìn)程號(hào)和運(yùn)行時(shí)間: n);););printf(for(i=0;iN;i+)scanf(%s,na);scanf(%d,&time);if(i!=N) printf( strcpy(,na); pi.cputime=0; pi.needtime=time; pi.waittime=0; pi.state=W;p1i=pi;qsort(p,N,sizeof(p0),cmp);printf( 短作業(yè)優(yōu)先算法輸出信息 :n);printf(*n);void prt3()狀態(tài)printf(* 進(jìn)程號(hào) cpu 時(shí)間 所需要時(shí)間 已等待時(shí)

20、間 *n);void prit(int i)PC q=p1i;printf(* %-10s %-10d %-10d %-10d %-10c *n,,q.cputime,q.needtime,q.waittime,q.state); void short_timefirst(char algo)PC q;int t; prt3();for(int j = 0; j N ; j+) pj.state = R;for(int i=0;iN;i+)if(p1i.state = W) p1i.waittime=Tim;if(strcmp(,)=0) p1i.state = R;pr

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論