




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校管樂(lè)團(tuán)管理制度
- 學(xué)校課間餐管理制度
- 學(xué)生小組化管理制度
- 學(xué)生餐資金管理制度
- 安全與文明管理制度
- 安全警示室管理制度
- 完善公司化管理制度
- 實(shí)操培訓(xùn)室管理制度
- 審計(jì)局考核管理制度
- 客運(yùn)車聯(lián)營(yíng)管理制度
- 如皋護(hù)士招聘題目及答案
- 護(hù)理網(wǎng)格化管理制度
- 國(guó)家開(kāi)放大學(xué)《中國(guó)法律史》期末機(jī)考題庫(kù)
- 國(guó)家開(kāi)放大學(xué)《管理學(xué)基礎(chǔ)》期末機(jī)考題庫(kù)
- 浙江省溫州市樂(lè)清市2023-2024學(xué)年四年級(jí)下學(xué)期數(shù)學(xué)期末考試試卷(含答案)
- 2025中考英語(yǔ)書(shū)面表達(dá)終極押題(附范文)
- 2025年高考真題-數(shù)學(xué)(全國(guó)一卷) 無(wú)答案
- 2025《政務(wù)數(shù)據(jù)共享?xiàng)l例》解讀課件
- 國(guó)開(kāi)電大《公司金融》形考任務(wù)1234答案
- 江蘇省鎮(zhèn)江市江南中學(xué)2025屆七下數(shù)學(xué)期末調(diào)研試題含解析
- 安徽省歷年中考作文題與審題指導(dǎo)(2015-2024)
評(píng)論
0/150
提交評(píng)論