操作系統(tǒng)時(shí)間片輪轉(zhuǎn)算法與優(yōu)先級(jí)調(diào)度算法_第1頁(yè)
操作系統(tǒng)時(shí)間片輪轉(zhuǎn)算法與優(yōu)先級(jí)調(diào)度算法_第2頁(yè)
操作系統(tǒng)時(shí)間片輪轉(zhuǎn)算法與優(yōu)先級(jí)調(diào)度算法_第3頁(yè)
操作系統(tǒng)時(shí)間片輪轉(zhuǎn)算法與優(yōu)先級(jí)調(diào)度算法_第4頁(yè)
操作系統(tǒng)時(shí)間片輪轉(zhuǎn)算法與優(yōu)先級(jí)調(diào)度算法_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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、#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct node char name10; /*進(jìn)程標(biāo)識(shí)符*/ int prio; /*進(jìn)程優(yōu)先數(shù)*/ int round; /*進(jìn)程時(shí)間輪轉(zhuǎn)時(shí)間片*/ int cputime; /*進(jìn)程占用CPU時(shí)間*/ int needtime; /*進(jìn)程到完成還要的時(shí)間*/ int count; /*計(jì)數(shù)器*/ char state; /*進(jìn)程的狀態(tài)*/ struct node *next; /*鏈指針*/PCB

2、;PCB *finish,*ready,*tail,*run; /*隊(duì)列指針*/int N; /*進(jìn)程數(shù)*/*將就緒隊(duì)列中的第一個(gè)進(jìn)程投入運(yùn)行*/firstin() run=ready; /*就緒隊(duì)列頭指針賦值給運(yùn)行頭指針*/ run->state='R' /*進(jìn)程狀態(tài)變?yōu)檫\(yùn)行態(tài)*/ ready=ready->next; /*就緒對(duì)列頭指針后移到下一進(jìn)程*/*標(biāo)題輸出函數(shù)*/void prt1(char a) if(toupper(a)='P') /*優(yōu)先數(shù)法*/ printf(" name cputime needtime priorit

3、y staten"); else printf(" name cputime needtime count round staten");/*進(jìn)程PCB輸出*/void prt2(char a,PCB *q) if(toupper(a)='P') /*優(yōu)先數(shù)法的輸出*/ printf(" %-10s%-10d%-10d%-10d %cn",q->name, q->cputime,q->needtime,q->prio,q->state); else/*輪轉(zhuǎn)法的輸出*/ printf(" %

4、-10s%-10d%-10d%-10d%-10d %-cn",q->name, q->cputime,q->needtime,q->count,q->round,q->state);/*輸出函數(shù)*/void prt(char algo) PCB *p; prt1(algo); /*輸出標(biāo)題*/ if(run!=NULL) /*如果運(yùn)行指針不空*/ prt2(algo,run); /*輸出當(dāng)前正在運(yùn)行的PCB*/ p=ready; /*輸出就緒隊(duì)列PCB*/ while(p!=NULL) prt2(algo,p); p=p->next; p=f

5、inish; /*輸出完成隊(duì)列的PCB*/ while(p!=NULL) prt2(algo,p); p=p->next; p=ready; printf("就緒隊(duì)列:"); while(p!=NULL) printf("%st",p->name); p=p->next; printf("n");p=finish; printf("完成隊(duì)列:"); while(p!=NULL) printf("%st",p->name); p=p->next; printf(&qu

6、ot;n"); getch(); /*壓任意鍵繼續(xù)*/*優(yōu)先數(shù)的插入算法*/insert1(PCB *q) PCB *p1,*s,*r; int b; s=q; /*待插入的PCB指針*/ p1=ready; /*就緒隊(duì)列頭指針*/ r=p1; /*r做p1的前驅(qū)指針*/ b=1; while(p1!=NULL)&&b) /*根據(jù)優(yōu)先數(shù)確定插入位置*/ if(p1->prio>=s->prio) r=p1; p1=p1->next; else b=0; if(r!=p1) /*如果條件成立說(shuō)明插入在r與p1之間*/ r->next=s;

7、s->next=p1; else s->next=p1; /*否則插入在就緒隊(duì)列的頭*/ ready=s; /*輪轉(zhuǎn)法插入函數(shù)*/insert2(PCB *p2) tail->next=p2; /*將新的PCB插入在當(dāng)前就緒隊(duì)列的尾*/ tail=p2; p2->next=NULL;/*優(yōu)先數(shù)創(chuàng)建初始PCB信息*/void create1(char alg) PCB *p; int i,time; char na10; ready=NULL; /*就緒隊(duì)列頭指針*/ finish=NULL; /*完成隊(duì)列頭指針*/ run=NULL; /*運(yùn)行隊(duì)列指針*/ printf

8、("Enter name and time of processn"); /*輸入進(jìn)程標(biāo)識(shí)和所需時(shí)間創(chuàng)建PCB*/ for(i=1;i<=N;i+) p=malloc(sizeof(PCB); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->state='W' p->prio=50-time; if(ready!=NULL) /*就緒隊(duì)列不空調(diào)用

9、插入函數(shù)插入*/ insert1(p); else p->next=ready; /*創(chuàng)建就緒隊(duì)列的第一個(gè)PCB*/ ready=p; / clrscr(); system("CLS"); printf(" output of priority:n"); printf("*n"); prt(alg); /*輸出進(jìn)程PCB信息*/ run=ready; /*將就緒隊(duì)列的第一個(gè)進(jìn)程投入運(yùn)行*/ ready=ready->next; run->state='R'/*輪轉(zhuǎn)法創(chuàng)建進(jìn)程PCB*/void crea

10、te2(char alg) PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; printf("Enter name and time of round processn"); for(i=1;i<=N;i+) p=malloc(sizeof(PCB); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time;

11、 p->count=0; /*計(jì)數(shù)器*/ p->state='W' p->round=2; /*時(shí)間片*/ if(ready!=NULL) insert2(p); else p->next=ready; ready=p; tail=p; /clrscr(); system("CLS"); printf(" output of roundn"); printf("*n"); prt(alg); /*輸出進(jìn)程PCB信息*/ run=ready; /*將就緒隊(duì)列的第一個(gè)進(jìn)程投入運(yùn)行*/ ready=r

12、eady->next; run->state='R'/*優(yōu)先數(shù)調(diào)度算法*/priority(char alg) while(run!=NULL) /*當(dāng)運(yùn)行隊(duì)列不空時(shí),有進(jìn)程正在運(yùn)行*/ run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->prio=run->prio-3; /*每運(yùn)行一次優(yōu)先數(shù)降低3個(gè)單位*/ if(run->needtime=0) /*如所需時(shí)間為0將其插入完成隊(duì)列*/ run->next=finish; finish=r

13、un; run->state='F' /*置狀態(tài)為完成態(tài)*/ run=NULL; /*運(yùn)行隊(duì)列頭指針為空*/ if(ready!=NULL) /*如就緒隊(duì)列不空*/ firstin(); /*將就緒對(duì)列的第一個(gè)進(jìn)程投入運(yùn)行*/ else /*沒(méi)有運(yùn)行完同時(shí)優(yōu)先數(shù)不是最大,則將其變?yōu)榫途w態(tài)插入到就緒隊(duì)列*/ if(ready!=NULL)&&(run->prio<ready->prio) run->state='W' insert1(run); firstin(); /*將就緒隊(duì)列的第一個(gè)進(jìn)程投入運(yùn)行*/ prt(al

14、g); /*輸出進(jìn)程PCB信息*/ /*時(shí)間片輪轉(zhuǎn)法*/roundrun(char alg) while(run!=NULL) run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->count=run->count+1; if(run->needtime=0)/*運(yùn)行完將其變?yōu)橥瓿蓱B(tài),插入完成隊(duì)列*/ run->next=finish; finish=run; run->state='F' run=NULL; if(ready!=NULL) firs

15、tin(); /*就緒對(duì)列不空,將第一個(gè)進(jìn)程投入運(yùn)行*/ else if(run->count=run->round) /*如果時(shí)間片到*/ run->count=0; /*計(jì)數(shù)器置0*/ if(ready!=NULL) /*如就緒隊(duì)列不空*/ run->state='W' /*將進(jìn)程插入到就緒隊(duì)列中等待輪轉(zhuǎn)*/ insert2(run); firstin(); /*將就緒對(duì)列的第一個(gè)進(jìn)程投入運(yùn)行*/ prt(alg); /*輸出進(jìn)程信息*/ /*主函數(shù)*/main() char algo; /*算法標(biāo)記*/ /clrscr(); system("CLS"); printf("type the algorithm:P/R(priority/roundrobin)n"); scanf("%c",&algo); /*輸入字符確定算法*/

溫馨提示

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