操作系統(tǒng)課程設(shè)計(jì)設(shè)備管理實(shí)現(xiàn)源代碼_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)設(shè)備管理實(shí)現(xiàn)源代碼_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)設(shè)備管理實(shí)現(xiàn)源代碼_第3頁(yè)
已閱讀5頁(yè),還剩31頁(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ì) 設(shè)備管理實(shí) 現(xiàn)源代碼#in elude <stdio.h>#in elude "iostream.h"#inelude "stdlib.h"#inelude "string.h"struct PCBint id;char n ame10;int size; struct PCB *n ext;struct PCB *running;struct PCB *ready;struct PCB Flocked;struct PCB *q;struct PCB *p;int id=1;int size;char

2、n ame10;/struct DCT/ 設(shè)備char n ame10;int busy;PCB * occupied;PCB * wait ing; struct DCT *n ext;struct COCT* coct;/ 上級(jí)控制器;struct COCT控制器char n ame10;int busy;PCB * occupied;PCB * wait ing; struct COCT *n ext;struct CHCT* chct;/控制器的上級(jí)通道;struct CHCT 通道char n ame10;int busy;PCB * occupied;PCB * wait ing;

3、 struct CHCT *n ext;/struct DCT * dets;struct COCT *eoets;struct CHCT *ehets;void enqueue(int id,char *name,int size,struct PCB *head)struct PCB*n ode=(structPCB*)malloc(sizeof(struct PCB);no de->n ext=0;no de->id=id;strepy (no de->n ame, name);no de->size=size; struct PCB *tmp=head; whi

4、le(tmp->n ext!=0) tmp=tmp->n ext;tmp->n ext=node;struct PCB * dequeue(struct PCB *head) struct PCB * tmp=head->n ex t; if(head-> next!=0)head->n ext=head->n ext- >next; tmp->n ext=0;retur n( tmp);void createProcess()prin tf("nn ame:");sca nf("%s", name)

5、;prin tf("size:");sca nf("%d", &size);prin tf("n");enq ueue(id+, name,size,ready); if(runnin g=0)runnin g=dequeue(ready);void switchProcess()if(ru nnin g!=0&&ready->n ext!=0)enq ueue(r unnin g->id,r unning->n ame,r unning ->size,ready);runnin g=d

6、equeue(ready);elseprintf("沒(méi)有可切換的進(jìn)程n");void blockProcess()if(runnin g=0)printf("沒(méi)有可阻塞的進(jìn)程n");elseenq ueue(r unnin g->id,r unning->n ame,ru nnin g->size,blocked);runnin g=0;if(ready->n ext=O)printf(”沒(méi)有可執(zhí)行的進(jìn)程n");elserunnin g=dequeue(ready);void wakeupProcess()if(bloc

7、ked->n ext=0)printf(“沒(méi)有可激活的進(jìn)程");elseenq ueue(blocked->n ext->id,blocked->n ext->n ame,blocked->next->size,ready);dequeue(blocked);if(runnin g=0)runnin g=dequeue(ready);void termi nateProcess()/ 結(jié)束進(jìn)程if(runnin g=0)printf("沒(méi)有需要結(jié)束的進(jìn)程n");elserunnin g=dequeue(ready);voi

8、d displayProcessstatus()printf(" 就緒態(tài)n");if(ready->n ext=0)printf("當(dāng)前沒(méi)有進(jìn)程在該狀態(tài)n");if(ready->n ext!=0)q=ready->n ex t;while(ready->n ext!=0)prin tf("%s",ready->n ext- >n ame);prin tf("%dn",ready->n ext->size);ready->n ext=ready->n ex

9、t->next;ready->n ext=q;printf(" 執(zhí)行狀態(tài)n");if(running=0) printf("當(dāng)前沒(méi)有進(jìn)程在該狀 態(tài) n");if(ru nnin g!=0)prin tf("%s",ru nnin g->n ame);prin tf("%dn ",r unnin g->size);printf(" 阻塞狀態(tài)n");if(blocked-> next=O) printf("當(dāng)前沒(méi)有進(jìn)程在 該狀態(tài)nn");if(blo

10、cked->n ext!=0)p=blocked->n ex t;while(blocked->n ext!=0)prin tf("%s",blocked->n ext- >n ame);prin tf("%dn",blocked->n ext->size);blocked->n ext = blocked->n ext->next; blocked->n ext=p;/struct DCT * findDCT(char name) /設(shè)備分 配時(shí)找到要添加的設(shè)備struct DCT *t

11、emp = dcts;while(temp->n ext!=NULL)temp = temp->n ex t;if(strcmp(temp->n ame, name)=0) return temp;return NULL;struct CHCT * fin dCha nn el(char name)struct CHCT *temp = chcts;while(temp->n ext!=NULL)temp = temp->n ex t;if(strcmp(temp->n ame, name)=O) return temp;return NULL;struct

12、 COCT * findCon troller(char n ame) struct COCT *temp = cocts;while(temp->n ext!=NULL)temp = temp->n ex t;if(strcmp(temp->n ame, name)=0) return temp;return NULL;voidaddProcesstoWait in g(structPCBwait in g,struct PCB *p) 進(jìn)入進(jìn)程等待隊(duì)列 struct PCB *temp = wait ing; while(temp->n ext!=NULL)temp

13、 = temp->next;/temp->n ext = p;/+temp->n ext = new struct PCB;temp->next->id = p->id;strcpy(temp->n ext- >n ame,p->n ame);temp->n ext->size = p->size;temp->next->n ext = NULL;/+PCB */chct,PCBvoid add(struct PCB * head,struct node)入隊(duì)列struct PCB *tmp=head;whil

14、e(tmp->n ext!=0) tmp=tmp->n ext;tmp->n ext=no de;struct PCB * getFirst(struct PCB *head) 獲得隊(duì)列里的第一個(gè)進(jìn)程retur n head->n ext;void allocateCHCT(struct CHCT*p) 分配 CHCTif(chct->occupied!=0)printf("不能分配通道n"); addProcesstoWaiti ng(chct->wait in g,p);elsechct->occupied=p; printf(

15、"分配成功! n");add(blocked,p);if(ready!=0)runnin g=dequeue(ready);elserunnin g=0;*void allocateCOCT(struct COCT* coct,PCB *p) if(coct->occupied!=0)printf(”不能分配控制器n");addProcesstoWaiting(coct->waiti ng,p); add(blocked,p);if(ready!=O) runnin g=dequeue(ready);elserunnin g=0;return;else

16、coct->occupied=p; allocateCHCT(coct->chct,p);void allocateDCT()char nameDCT10;pri ntf("請(qǐng)輸入設(shè)備名稱(chēng):");sca nf("%s", nameDCT);struct DCT * dct=fi ndDCT( nameDCT); struct PCB * p = running; if(dct!=NULL&&p!=NULL)if(dct->occupied!=0)printf("不能分配設(shè)備n");addProcess

17、toWait in g(dct->wait in g,p); add(blocked,p);if(ready!=0)runnin g=dequeue(ready);elserunnin g=0;return;elsedct->occupied=p; allocateCOCT(dct->coct,p); /+ /*add(blocked,p);if(ready!=0)runnin g=dequeue(ready);elserunnin g=0;return;*/ /+elseprintf("發(fā)生錯(cuò)誤!n");void releaseCHCT(char *na

18、me,struct CHCT* chct,struct PCB* p) /?if(p!=NULL)addProcesstoWait in g(chct->wait in g,p);if(strcmp( name,chct->occupied->n ame)=0)if(chct->waiti ng-> next!=NULL)chct->occupieddequeue(chct->wait in g);elsechct->occupied = NULL; void releaseCOCT(char *name,struct COCT* coct,st

19、ruct PCB* p)if(p!=NULL)addProcesstoWaiti ng(coct->wait in g,p);if(strcmp( name,coct->occupied->n ame)=0)if(coct->wait in g-> next!=NULL)coct->occupieddequeue(coct->wait in g);elsecoct->occupied = NULL;releaseCHCT(name,coct->chct,coct->occupie d); void releaseDCT()char n

20、ameDCT10;printf("請(qǐng)輸入要釋放的設(shè)備名稱(chēng):n");sea nf("%s", nameDCT);char nameP10;printf("請(qǐng)輸入要釋放的進(jìn)程名稱(chēng):n");sea nf("%s", nameP);struct DCT *temp = fin dDCT (n ameDCT);if(strcmp(temp->occupied->n ame, nameP)=O )if(temp->wait in g->n ext!=NULL)temp->occupied dequ

21、eue(temp->wait in g);elsetemp->occupied = NULL;releaseCOCT( nameP,temp->coct,temp->occu pied);elseprintf("沒(méi)有對(duì)應(yīng)的設(shè)備和進(jìn)程!");void addCha nn el(char n ame)struct CHCT * temp=(struct CHCT *)malloc(sizeof(struct CHCT);strcpy(temp->n ame, name);temp->n ext=0;temp->busy=O;temp-&

22、gt;wait ing = new struct PCB;temp->wait ing->n ext = NULL;temp->wait in g=0;temp->occupied=0;struct CHCT * head=chcts;進(jìn)入了chcts隊(duì)列while(head->n ext!=0)head=head->n ex t; head->n ext=temp;void addC on troller(char *n ame,struct chct)增加控制器struct COCT * temp=(struct *)malloc(sizeof(s

23、truct COCT);strcpy(temp->n ame, name); temp->n ext=0;temp->busy=O;temp->wait ing = new struct PCB;temp->wait ing->n ext = NULL;/temp->wait in g=0; /+ temp->occupied=0;temp->chct= chct;struct COCT * head=cocts; cocts隊(duì)列while(head->n ext!=0) head=head->n ex t;CHCT *COCT

24、/進(jìn)入了head->n ext=temp;void addDevice(char *n ame,struct COCT * coct)增加設(shè)備struct DCT * temp=(struct DCT *)malloc(sizeof(struct DCT);strcpy(temp->n ame, name);temp->n ext=0;temp->busy=0;temp->wait ing = new struct PCB;temp->wait ing->n ext = NULL;/temp->wait in g=0;temp->occup

25、ied=0;temp->coct= coc t;struct DCT * head=dcts;while(head->n ext!=0)head=head->n ex t;head->n ext=temp;/添加設(shè)備void add_dct()char newDCT10;printf("請(qǐng)輸入新設(shè)備的名字:n");sea nf("%s", newDCT);char newCOCT10;printf("請(qǐng)輸入要添加到的控制器的名 字:n");sea nf("%s", newCOCT);addD

26、evice( newDCT,fi ndCo ntroller( newCOCT);添加控制器void add_coct()char newCOCT10;printf("請(qǐng)輸入新控制器的名字:n");scanf("%s", newCOCT);char newCHCT10;printf("請(qǐng)輸入要添加到的通道的名字:n");scanf("%s", newCHCT);addC on troller( newCOCT,fi ndCha nn el( newC HCT);添加通道void add_chct()char new

27、CHCT10;printf("請(qǐng)輸入新的通道的名字:n");sea nf("%s", newCHCT);addCha nn el( newCHCT);/+/+ 刪 除 操 作 刪除設(shè)備void deleteDCT(char n ameDCT)/char n ameDCT10;int i=0;/printf("請(qǐng)輸入要?jiǎng)h除DCT的名字:");/sca nf("%s", nameDCT);struct DCT * temp = fin dDCT (n ameDCT); struct DCT * head = dcts;

28、if(temp=NULL)printf("沒(méi)有對(duì)應(yīng)的設(shè)備!n");return ;elsewhile(head->n ext!=O) if(strcmp(temp->n ame,head->n ext- >n ame)=0)if(temp->occupied!=NULL) printf("此設(shè)備現(xiàn)在正在使用不能刪除 n");elsehead->n ext=head->n ext- >next;i+;break;elsehead=head->n ex t;刪除控制器void deleteCOCT(cha

29、r nameCOC T)structCOCT*temp=fi ndC on troller( nameCOCT);struct COCT *head=cocts;if(temp=NULL)printf("沒(méi)有對(duì)應(yīng)的控制器n");return;elsewhile(head->n ext!=0)if(strcmp(temp->n ame,head->n ext- >n ame)= 0)if(temp->occupied!=NULL) printf("此控制器現(xiàn)在正在使用不能刪 除 n");else/ deleteDCT(temp

30、->);head->n ext=head->n ext- >next;break;head=head->n ex t;刪除通道void deleteCHCT(char nameCHC T)structCHCT*temp=fi ndCha nn el( nameCHCT);struct CHCT *head=chcts;if(temp=NULL)printf("沒(méi)有對(duì)應(yīng)的通道n"); return;elsewhile(head->n ext!=0)if(strcmp(temp->n ame,head->n ext- >n

31、ame)=0)if(temp->occupied!=NULL)printf("此通道現(xiàn)在正在使用不能刪除n");else/ deleteDCT(temp->);head->n ext=head->n ext- >next;i+;break;head=head->n ex t;/+ void displayDCT()struct DCT * dct;struct COCT *coct;struct CHCT *chct = chcts;struct PCB *pcb;/while(chct-> next!=NULL)chct = ch

32、ct- >n ex t;prin tf("%s(",chct- >n ame);if(chct->occupied!=0)prin tf("%s",chct->occupied->n ame);prin tf(")");pcb = chct->wait ing->next; /wait ing是頭結(jié)點(diǎn),pcb指向隊(duì)列第一個(gè)進(jìn)程while(pcb!=NULL)prin tf("%s",pcb->n ame);pcb = pcb->n ex t;prin tf(&q

33、uot;n");/coct = cocts;while(coct-> next!=NULL)coct = coct->n ex t;if(strcmp(coct->chct->n ame,chct->n ame)=0)printf("%s(",coct- >n ame);if(coct->occupied!=0)prin tf("%s",coct->occupied->n ame);prin tf(")");pcb = coct->wait ing->n ex

34、 t; while(pcb!=NULL)prin tf("%s",pcb->n ame);pcb = pcb->n ex t;prin tf("n");/dct = dcts;while(dct-> next!=NULL) dct = dct- >n ex t;%s(",dct-> namif(strcmp(dct->coct- >n ame,coct- >n ame)=0) prin tf("e);if(dct->occupied!=0)prin tf("%s"

35、;,dct->occupied->n ame);prin tf(")");pcb = dct->wait ing->n ex t; while(pcb!=NULL)prin tf("%s",pcb->n ame); pcb = pcb->n ex t;prin tf("n");/void mai n()dcts=(struct DCT *)malloc(sizeof(structDCT);dets->n ext=O;cocts=(struct COCT *)malloc(sizeof(stru

36、ctCOCT);cocts->n ext=0;chcts=(struct CHCT *)malloc(sizeof(structCHCT);chcts->n ext=0;addCha nn el("chct1");addCha nn el("chct2");addC on troller("coct1",fi ndCha nn el("chct1"); addCo ntroller("coct2",fi ndCha nn el("chct1");addC on t

37、roller("coct3",fi ndCha nn el("chct2"); addDevice("dct1",fi ndCon troller("coct1");addDevice("dct2",fi ndCo ntroller("coct1");addDevice("dct3",fi ndCon troller("coct2");addDevice("dct4",fi ndCon troller("c

38、oct2");addDevice("dct4",fi ndCon troller("coct3");ready=(struct PCB *)malloc(sizeof(struct PCB);blocked=(struct PCB *)malloc(sizeof(struct PCB);ready->n ext=0;blocked->n ext=0;A:while(1)int choice;int fun cti on;printf("1:創(chuàng)建進(jìn)程 n");printf("2:切換進(jìn)程 n");printf("3:阻塞進(jìn)程 n");printf("4:喚醒進(jìn)程 n")

溫馨提示

  • 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)論