基于多隊(duì)列反饋的進(jìn)程調(diào)度_第1頁(yè)
基于多隊(duì)列反饋的進(jìn)程調(diào)度_第2頁(yè)
基于多隊(duì)列反饋的進(jìn)程調(diào)度_第3頁(yè)
基于多隊(duì)列反饋的進(jìn)程調(diào)度_第4頁(yè)
基于多隊(duì)列反饋的進(jìn)程調(diào)度_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上操作系統(tǒng)綜合實(shí)訓(xùn)項(xiàng)目設(shè)計(jì)文檔【大綱】(不用打印,提交電子稿即可!)一、 基本信息項(xiàng)目名稱:成人姓名、學(xué)號(hào)、完成日期項(xiàng)目名稱:基于時(shí)間片的多隊(duì)列反饋的進(jìn)程管理系統(tǒng)完成日期:2017.5.24二、 實(shí)驗(yàn)內(nèi)容與目的實(shí)驗(yàn)內(nèi)容:編寫(xiě)程序完成單處理器系統(tǒng)的進(jìn)程調(diào)度,要求采用基于時(shí)間片多隊(duì)列反饋式調(diào)度策略調(diào)度策略。具體內(nèi)容:1.確定PCB內(nèi)容及其組織方式。2.要求模擬進(jìn)程空閑(新)、就緒、運(yùn)行、阻塞和完成5個(gè)狀態(tài)。3.實(shí)現(xiàn)進(jìn)程創(chuàng)建、進(jìn)程調(diào)度、進(jìn)程阻塞、進(jìn)程喚醒和進(jìn)程撤銷5個(gè)原語(yǔ)。4.能夠模擬進(jìn)程從生到滅的完整過(guò)程。實(shí)驗(yàn)?zāi)康? 1.加深進(jìn)程概念理解,明確進(jìn)程與程序區(qū)別。2.理解操作系

2、統(tǒng)中進(jìn)程的組織、創(chuàng)建和調(diào)度等方法。三、 主要設(shè)計(jì)思路和流程圖設(shè)計(jì)思路:1定義數(shù)據(jù)結(jié)構(gòu)2.設(shè)置隊(duì)列3.創(chuàng)建進(jìn)程4.創(chuàng)建的進(jìn)程進(jìn)入就緒隊(duì)列5.多級(jí)反饋調(diào)度1.)在第一就緒隊(duì)列里的進(jìn)程被調(diào)度運(yùn)行,進(jìn)程狀態(tài)由等待變?yōu)檫\(yùn)行,設(shè)置時(shí)間片計(jì)數(shù)器,每次運(yùn)行加1,時(shí)間片滿后,該進(jìn)程出隊(duì)列,進(jìn)入下一級(jí)別的就緒隊(duì)列。若是在最后一級(jí)別的隊(duì)列,則在該隊(duì)列中進(jìn)行時(shí)間片輪轉(zhuǎn)調(diào)度2.)運(yùn)行進(jìn)程若是被阻塞的話,該進(jìn)程出就緒隊(duì)列,進(jìn)入阻塞隊(duì)列,狀態(tài)變?yōu)樽枞麘B(tài)3.)若是喚醒被阻塞進(jìn)程,則阻塞進(jìn)程根據(jù)其時(shí)間片計(jì)數(shù)器計(jì)入相應(yīng)的就緒隊(duì)列4.)撤銷進(jìn)程,該進(jìn)程直接出就緒隊(duì)列四、 主要數(shù)據(jù)結(jié)構(gòu)及其說(shuō)明typedef struct Node

3、char name20; char state;/進(jìn)程所處的狀態(tài),N新建,W等待,B阻塞,R運(yùn)行,F(xiàn)結(jié)束int round;/時(shí)間片計(jì)數(shù)器 int time;/運(yùn)行時(shí)間 struct Node *next;LinkQueueNode,*PCB;/定義PCBtypedef struct LinkQueueNode *front; LinkQueueNode *rear;LinkQueue;/定義隊(duì)列void initQueue(LinkQueue *Q)/隊(duì)列的初始化函數(shù)void Initializa()/初始化所有隊(duì)列void RunPrintf()/打印運(yùn)行隊(duì)列void BlockPrint

4、f()/打印阻塞隊(duì)列void ReadyPrintf(LinkQueue q)/打印就緒隊(duì)列void putout()/輸出函數(shù)void EnterQueue(LinkQueue *Q,PCB *p)/進(jìn)程插入隊(duì)列函數(shù)int DeleteQueue(LinkQueue *Q,PCB *p)/進(jìn)程出隊(duì)列void TransferRun(LinkQueue *q1,LinkQueue *q2,PCB q)/進(jìn)程出就緒隊(duì)列,入運(yùn)行隊(duì)列void Transfer(LinkQueue *q1,LinkQueue *q2,PCB q)/進(jìn)程喚醒或阻塞時(shí)隊(duì)列轉(zhuǎn)換的函數(shù)int MultiDiapatch()/

5、調(diào)度函數(shù),若此隊(duì)列運(yùn)行的進(jìn)程時(shí)間片滿,則進(jìn)入下一級(jí)隊(duì)列int run()/模擬運(yùn)行void block()/模擬阻塞void wake()/模擬喚醒int Createprocess(LinkQueue *Q)/進(jìn)程的創(chuàng)建void meanu()/菜單函數(shù)五、 程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果六、 源程序并附上注釋【可是另一個(gè)源程序文件,在此應(yīng)說(shuō)明該文件名】#include#include#include#includetypedef struct Node char name20; char state;/進(jìn)程所處的狀態(tài),N新建,W等待,B阻塞,R運(yùn)行,F(xiàn)結(jié)束int round;/時(shí)間片計(jì)數(shù)器 i

6、nt time;/運(yùn)行時(shí)間 struct Node *next;LinkQueueNode,*PCB;/定義PCBtypedef struct LinkQueueNode *front; LinkQueueNode *rear;LinkQueue;int count=0;LinkQueue qRun,qBlock,qReady1,qReady2,qReady3,qReady4;/定義四個(gè)就緒隊(duì)列void initQueue(LinkQueue *Q)/隊(duì)列的初始化函數(shù) Q-front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode); if(Q-f

7、ront!=NULL) Q-rear=Q-front; Q-front-next=NULL; void Initializa()/初始化所有隊(duì)列 initQueue(&qRun); initQueue(&qBlock);initQueue(&qReady1);initQueue(&qReady2);initQueue(&qReady3);initQueue(&qReady4);void RunPrintf()/打印運(yùn)行隊(duì)列PCB p;printf(運(yùn)行隊(duì)列:); p=qRun.front-next; while(p) printf(%st,p-name); p=p-next; p=qRun.f

8、ront-next; printf(n需要時(shí)間:); while(p) printf(%dt,p-time); p=p-next; printf(n進(jìn)程狀態(tài):); p=qRun.front-next;while(p) printf(%ct,p-state); p=p-next; void BlockPrintf()/打印阻塞隊(duì)列PCB p; printf(nn阻塞隊(duì)列:); p=qBlock.front-next; while(p) printf(%st,p-name); p=p-next; printf(n需要時(shí)間:); p=qBlock.front-next;while(p) printf

9、(%dt,p-time); p=p-next; printf(n進(jìn)程狀態(tài):); p=qBlock.front-next; while(p) printf(%ct,p-state); p=p-next; void ReadyPrintf(LinkQueue q)/打印就緒隊(duì)列PCB p; p=q.front-next; while(p) printf(%st,p-name); p=p-next; printf(n需要時(shí)間:); p=q.front-next;while(p) printf(%dt,p-time); p=p-next; printf(n進(jìn)程狀態(tài):); p=q.front-next;

10、while(p) printf(%ct,p-state); p=p-next; void putout()/輸出函數(shù) PCB p; printf(*n); printf(*多級(jí)反饋調(diào)度*);printf(n*n); printf(說(shuō)明:程序中四個(gè)就緒隊(duì)列的時(shí)間片分別為10,15,20,30);printf(n*n);printf(*菜單*n); printf(1.創(chuàng)建進(jìn)程 2.阻塞進(jìn)程 3.喚醒進(jìn)程 4.撤銷進(jìn)程 0.退出n); printf(*n); RunPrintf();BlockPrintf();printf(nn隊(duì) 列1:);ReadyPrintf(qReady1);printf(n

11、n隊(duì) 列2:);ReadyPrintf(qReady2);printf(nn隊(duì) 列3:);ReadyPrintf(qReady3);printf(nn隊(duì) 列4:);ReadyPrintf(qReady4);printf(n*n);void EnterQueue(LinkQueue *Q,PCB *p)/進(jìn)程插入隊(duì)列函數(shù) (*p)-next=NULL; Q-rear-next=*p; Q-rear=*p;int DeleteQueue(LinkQueue *Q,PCB *p)/進(jìn)程出隊(duì)列 if(Q-front=Q-rear) return 0; *p=Q-front-next; Q-front-

12、next=(*p)-next; if(Q-rear=*p) Q-rear=Q-front; return 1;void TransferRun(LinkQueue *q1,LinkQueue *q2,PCB q)/進(jìn)程出就緒隊(duì)列,入運(yùn)行隊(duì)列 DeleteQueue(q1,&q); q-state=R; EnterQueue(q2,&q);void runprocess()PCB p;int state1=0,state2=0,state3=0,state4=0;/state來(lái)判斷就緒隊(duì)列是否還有進(jìn)程 if(qReady1.front!=qReady1.rear) TransferRun(&qR

13、eady1,&qRun,p);state1=1; elseif(qReady2.front!=qReady2.rear) TransferRun(&qReady2,&qRun,p);state2=1;elseif(qReady3.front!=qReady3.rear) TransferRun(&qReady3,&qRun,p);state3=1;elseif(qReady4.front!=qReady4.rear) TransferRun(&qReady4,&qRun,p);state4=1;if(state1=0&state2=0&state3=0&state4=0)printf(隊(duì)列中無(wú)

14、就緒進(jìn)程!);elsesystem(cls);putout();void Transfer(LinkQueue *q1,LinkQueue *q2,PCB q)/進(jìn)程喚醒或阻塞時(shí)隊(duì)列轉(zhuǎn)換的函數(shù) DeleteQueue(q1,&q); q-state=W; EnterQueue(q2,&q);int MultiDiapatch()/調(diào)度函數(shù),若此隊(duì)列運(yùn)行的進(jìn)程時(shí)間片滿,則進(jìn)入下一級(jí)隊(duì)列 PCB p;qRun.front-next-time-;+count;if(qRun.front-next-time=0)DeleteQueue(&qRun,&p);free(p);runprocess();co

15、unt=0;elseif(qRun.front-next-round=count)if(count=10)qRun.front-next-round=15;Transfer(&qRun,&qReady2,p); if(count=15)qRun.front-next-round=20;Transfer(&qRun,&qReady3,p); if(count=20)qRun.front-next-round=30;Transfer(&qRun,&qReady4,p); if(count=30)qRun.front-next-round=30;Transfer(&qRun,&qReady4,p);

16、runprocess(); count=0;int run()/模擬運(yùn)行 if(qRun.front=qRun.rear)/運(yùn)行隊(duì)列空,則進(jìn)行進(jìn)程隊(duì)列轉(zhuǎn)換 runprocess();elseMultiDiapatch();system(cls);putout();void block()/模擬阻塞 PCB p;if(qRun.front!=qRun.rear)/運(yùn)行隊(duì)列不為空,則運(yùn)行進(jìn)程出運(yùn)行隊(duì)列,進(jìn)入阻塞隊(duì)列 DeleteQueue(&qRun,&p);p-state=B;EnterQueue(&qBlock,&p);system(cls);putout();elsesystem(cls);

17、putout();printf(隊(duì)列中沒(méi)有進(jìn)程在運(yùn)行!);void wake()/模擬喚醒 PCB p;if(qBlock.front!=qBlock.rear)/根據(jù)時(shí)間片;來(lái)決定進(jìn)入的就緒隊(duì)列 if(qBlock.front-next-round=10) Transfer(&qBlock,&qReady1,p);elseif(qBlock.front-next-round=15) Transfer(&qBlock,&qReady2,p);elseif(qBlock.front-next-round=20) Transfer(&qBlock,&qReady3,p);elseif(qBlock

18、.front-next-round=30) Transfer(&qBlock,&qReady4,p);elsesystem(cls);putout();printf(無(wú)等待進(jìn)程!);void endprocess() PCB p;if(qRun.front=qRun.rear)printf(信息提示:無(wú)運(yùn)行進(jìn)程,請(qǐng)按Enter鍵運(yùn)行進(jìn)程!);elseDeleteQueue(&qRun,&p);free(p);system(cls);putout();printf(信息提示:選擇菜單功能或按Enter鍵執(zhí)行進(jìn)程!);int CompareStr(LinkQueue q,char name20)/

19、比較字符串是否相同 PCB p; p=q.front-next; while(p)if(strcmp(p-name,name)=0)return 0;p=p-next;return 1;int CompareName(char name20)PCB p;p=qRun.front-next;int flag;flag=CompareStr(qRun,name);if(flag=0) return 0; flag=CompareStr(qBlock,name); if(flag=0) return 0; flag=CompareStr(qReady1,name); if(flag=0) retur

20、n 0; flag=CompareStr(qReady2,name); if(flag=0) return 0; flag=CompareStr(qReady3,name); if(flag=0) return 0; flag=CompareStr(qReady4,name); if(flag=0) return 0; return 1;int Createprocess(LinkQueue *Q)/進(jìn)程的創(chuàng)建 PCB p;char n20;p=(PCB)malloc(sizeof(LinkQueueNode);printf(進(jìn)程名: );fflush(stdin);scanf(%s,&n);

21、while(!CompareName(n)/判斷是否創(chuàng)建了已經(jīng)創(chuàng)建過(guò)的進(jìn)程 printf(已經(jīng)有相同名字的進(jìn)程存在);printf(n請(qǐng)重新輸入未創(chuàng)建過(guò)的進(jìn)程:);fflush(stdin);scanf(%s,&n);strcpy(p-name,n);printf(所需時(shí)間: );fflush(stdin);scanf(%d,&(p-time);while(p-timetime);p-state=W; p-round=10; p-next=NULL; EnterQueue(Q,&p);void meanu()/菜單函數(shù) char c;printf(n選擇功能:);scanf(%c,&c);while(1) if(c=1) Createprocess(&qReady1); syste

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論