




版權(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 /*沒有運(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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024廣告設(shè)計(jì)師考試案例剖析試題及答案
- 企業(yè)筆試題目大全及答案
- 廣告設(shè)計(jì)師面試考查重點(diǎn) 試題及答案
- 紡織品創(chuàng)新與設(shè)計(jì)的結(jié)合試題及答案
- 三農(nóng)考試題及答案
- 紡織品設(shè)計(jì)師必知的行業(yè)趨勢(shì)試題及答案
- 廣告操作流程助理廣告師考試試題及答案
- 毋庸置疑的規(guī)劃2024年國(guó)際商業(yè)美術(shù)設(shè)計(jì)師試題及答案
- 紡織產(chǎn)品的售后服務(wù)與檢驗(yàn)要求試題及答案
- 消費(fèi)者情感與廣告策略的關(guān)聯(lián)性試題及答案
- GB/T 11032-2020交流無(wú)間隙金屬氧化物避雷器
- 煤礦爆破工培訓(xùn)
- 液化石油氣安全標(biāo)簽
- 水車租賃合同范本(3篇)
- 空港新城特勤消防站施工組織設(shè)計(jì)
- 北師大版三年級(jí)數(shù)學(xué)下冊(cè)競(jìng)賽卷
- 2022山東歷史高考答題卡word版
- 中醫(yī)醫(yī)院兒科建設(shè)與管理指南(試行)
- Q∕SY 1143-2008 三維地質(zhì)建模技術(shù)要求
- 大地構(gòu)造學(xué)派及其構(gòu)造單元匯總
- 麗聲北極星分級(jí)繪本第二級(jí)上Dinner for a Dragon 課件
評(píng)論
0/150
提交評(píng)論