为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

RR时间轮转算法

2017-11-02 10页 doc 24KB 9阅读

用户头像

is_668482

暂无简介

举报
RR时间轮转算法RR时间轮转算法 #include #include #include #include /*杩涚?鎺у埗鍧楁暟鎹 粨鏋?/ typedef struct node { char name[10];/*杩涚?鍚?/ int prio; /*杩涚?浼樺厛绾?/ int round; /*寰 幆杞 浆娉曡繘绋嬫瘡娆?疆杞 殑鏃堕棿鐗?/ int cputime; /*杩涚?绱 娑堣?楃殑CUP鏃堕棿*/ int needtime; /*杩涚?鍒板畬鎴愯繕闇?瑕佺殑CUP鏃堕棿*/ int count...
RR时间轮转算法
RR时间轮转算法 #include #include #include #include /*杩涚?鎺у埗鍧楁暟鎹 粨鏋?/ typedef struct node { char name[10];/*杩涚?鍚?/ int prio; /*杩涚?浼樺厛绾?/ int round; /*寰 幆杞 浆娉曡繘绋嬫瘡娆?疆杞 殑鏃堕棿鐗?/ int cputime; /*杩涚?绱 娑堣?楃殑CUP鏃堕棿*/ int needtime; /*杩涚?鍒板畬鎴愯繕闇?瑕佺殑CUP鏃堕棿*/ int count; /*寰 幆杞 浆娉曚竴涓 椂闂寸墖鍐呰繘绋嬭繍琛屾椂闂?/ char state; /*杩涚?鐨勭姸鎬侊細'R':杩愯 ,'W'锛氱瓑寰?'F'锛氱粨鏉?/ struct node *next;/*鎸囧悜涓嬩竴涓 繘绋嬬殑閾炬寚閽?/ }PCB; PCB *finish,*ready,*tail,*run; /*鎸囧悜涓変釜闃熷垪鐨勯槦棣栫殑鎸囬拡锛? finish涓哄畬鎴愰槦鍒楀ご鎸囬拡锛? ready涓哄氨缁 槦鍒楀ご鎸囬拡锛? tail涓哄氨缁 槦鍒楃殑闃熷熬鎸囬拡锛? run涓哄綋鍓嶈繍琛岃繘绋嬪ご鎸囬拡*/ int N; /*瀹氫箟杩涚?鐨勬暟鐩?/ void firstin(void); //璋冨害灏辩华闃熷垪鐨勭 涓?涓 繘绋嬫姇鍏ヨ繍琛岋紱 void print1(char a); //鎵撳嵃琛ㄥご琛屼俊鎭? void print2(char chose,PCB *p); //鎵撳嵃姣忎竴琛岀殑鐘舵?佷俊鎭? void print(char chose); //鎵撳嵃姣忔墽琛屼竴娆,畻娉曞悗鎵?鏈夌殑杩涚?鐨勭姸鎬佷俊鎭? void insert_prio(PCB *q); //鍦ㄤ紭鍏堟暟绠楁硶涓?灏嗗皻鏈 畬鎴愮殑PCB鎸変紭鍏堟暟椤哄簭鎻掑叆鍒板氨缁 槦鍒椾腑锛? void prior_init(char chose); //杩涚?浼樺厛绾ф硶鍒濆 鍖栧皢杩涚?鎸変紭鍏堢骇鎻掑叆鍒板氨缁 槦鍒楅噷 void priority(char chose); //杩涚?浼樺厛绾х畻娉曟?诲嚱鏁? void insert_rr(PCB *q); //鍦ㄨ疆杞 硶涓 紝灏嗘墽琛屼簡涓?涓 椂闂寸墖鍗曚綅锛堜负2锛夛紝浣嗗皻鏈 畬鎴愮殑杩涚?鐨凱CB锛屾彃鍒板氨缁 槦鍒楃殑闃熷熬锛? void roundrun_init(char chose); void roundrun(char chose); //寰 幆杞 浆娉曞垵濮嬪寲灏嗗氨缁 槦鍒椾繚瀛樹负FIFO闃熷垪 void roundrun(char chose); //寰 幆杞 浆娉曟?荤畻娉? void main() //涓诲嚱鏁? { char chose=' '; while((chose!='e')&&(chose!='E')) { fflush(stdin); system("cls"); printf("\tR.寰 幆杞 浆绠楁硶妯?嫙\n\n"); printf("\tE.閫?鍑虹?搴廫n\n"); printf("\t璇疯緭鍏ヤ綘鐨勯?夋嫨锛?); scanf("%c",&chose); if((chose!='e')&&(chose!='E')) { system("cls"); if((chose=='r')||(chose=='R')) { roundrun_init(chose); roundrun(chose); system("cls"); } } } printf("\n\t\t璋?阿浣跨敤锛侊紒锛乗n"); } void firstin(void) { if(ready!=NULL) { run=ready; ready=ready->next; run->state='R'; run->next=NULL; } else { run=NULL; } } void print1(char a)//鎵撳嵃琛ㄥご琛屼俊鎭? { if(toupper(a)=='P') { printf("name cputime needtime priority state \n"); } else { printf("name cputime needtime count round state \n"); } } void print2(char chose,PCB *p)//鎵撳嵃姣忎竴琛岀殑鐘舵?佷俊鎭? { if(toupper(chose)=='P') { printf("%s\t%d\t%d\t%d\t %c\n",p->name,p->cputime,p->needtime,p->prio,p->state); } else { printf("%s\t%d\t%d\t%d\t%d\t%c\n",p->name,p->cputime,p->needtime,p->count,p- >round,p->state); } } void print(char chose){ PCB *p; print1(chose); if(run!=NULL) { print2(chose,run); } p=ready; while(p!=NULL) { print2(chose,p); p=p->next; } p=finish; while(p!=NULL) { print2(chose,p); p=p->next; } } void insert_prio(PCB *q){ /*鍦ㄤ紭鍏堟暟绠楁硶涓?灏嗗皻鏈 畬鎴愮殑PCB鎸変紭鍏堟暟椤哄簭鎻掑叆鍒板氨缁 槦鍒椾腑锛?/ PCB *p,*s,*r; /*p,r鐢ㄦ潵鎺у埗灏辩华闃熷垪婊氬姩锛孲鎸囧悜鎻掑叆鐨勯槦鍒?/ s=q; p=ready; r=p; if(s->prio>ready->prio) { s->next=ready; ready=s; } else{ while(p) { if(p->prio>=s->prio) { r=p; p=p->next; } else break; } //鎵惧埌瑕佹彃鍏ョ殑浣嶇疆 s->next=p; r->next=s; } } void insert_rr(PCB *q)//鍦ㄨ疆杞 硶涓 紝灏嗘墽琛屼簡涓?涓 椂闂寸墖鍗曚綅 锛堜负2锛夛紝 //浣嗗皻鏈 畬鎴愮殑杩涚?鐨凱CB锛屾彃鍒板氨缁 槦鍒楃殑 闃熷熬锛? { tail->next=q; tail=q; q->next=NULL; } 幆杞 浆娉曞垵濮嬪寲 灏嗗氨缁 槦鍒椾繚瀛void roundrun_init(char chose)/*寰 樹负FIFO闃熷垪*/ { PCB *p; int i,time; char na[10]; ready=NULL; finish=NULL; run=NULL; printf("\t\t寰 幆杞 浆绠楁硶妯?嫙鍏ㄨ繃绋媆n\n"); printf("杈撳叆杩涚? 鐨勪 釜鏁?N:\n"); scanf("%d",&N); for(i=0;iname,na); p->cputime=0; p->needtime=time; p->count=0; p->state='W'; p->round=2; if(ready!=NULL) { insert_rr(p); } else { p->next=ready; ready=p; tail=p; } printf("褰撳墠灏辩华闃熷垪鐨勮繘绋嬬殑淇?伅\n"); print(chose); } printf("%d涓 繘绋嬪凡鎸塅IFO杩涘埌灏辩华闃熷垪涓璡n",N); printf("鎸夊洖杞 ,敭寮?濮嬫ā寰 幆杞 浆绠楁硶.....\n"); fflush(stdin); getchar(); run=ready; ready=ready->next; run->state='R'; } void roundrun(char chose){ int i=1; while(run!=NULL) { run->cputime+=1; run->needtime-=1; run->count+=1; if(run->needtime==0) { run->next=finish; finish=run; run->state='F'; run->prio=0; run=NULL; if(ready!=NULL) { firstin(); } } else { if(run->count==run->round) { run->count=0; if(ready!=NULL) { run->state='W'; insert_rr(run); firstin(); } } } printf("绗?d娆?墽琛屽惊鐜 疆杞 畻娉昞n",i++); print(chose); if(run) { printf("鎸夊洖杞,敭缁х画涓嬩竴娆″惊鐜 疆杞 畻娉?....\n"); } else printf("寰 幆杞 浆绠楁硶妯?嫙杩囩?缁撴潫锛侊紒\n"); fflush(stdin); getchar(); } }
/
本文档为【RR时间轮转算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索