ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:16.33KB ,
资源ID:8995759      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8995759.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(时间片轮转调度算法.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

时间片轮转调度算法.docx

1、时间片轮转调度算法#include #include #include #include/*进程控制块数据结构*/typedef struct node char name10;/*进程名*/int prio; /*进程优先级*/ int round; /*循环轮转法进程每次轮转的时间片*/ int cputime; /*进程累计消耗的CUP时间*/int needtime; /*进程到完成还需要的CUP时间*/int count; /*循环轮转法一个时间片进程运行时间*/char state; /*进程的状态:R:运行,W:等待,F:结束*/struct node *next;/*指向下一个

2、进程的链指针*/ 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 in

3、sert_prio(PCB *q); /在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中; void prior_init(char chose); /进程优先级法初始化将进程按优先级插入到就绪队列里 void priority(char chose); /进程优先级算法总函数void insert_rr(PCB *q); /在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾; void roundrun_init(char chose); /循环轮转法初始化将就绪队列保存为FIFO队列 void roundrun(char chose);

4、/循环轮转法总算法void main()/主函数 char chose= ; while(chose!=e)&(chose!=E) fflush(stdin); system(cls); /*printf(ttt两种进程调度算法的模拟nn); printf(tP.进程优先级算法模拟nn);*/ printf(tR.循环轮转算法模拟nn); printf(tE.退出程序nn); printf(t请输入你的选择:); scanf(%c,&chose); if(chose!=e)&(chose!=E) system(cls); /*if(chose=P)|(chose=p) prior_init(c

5、hose); priority(chose); system(cls); */ /*else */if(chose=r)|(chose=R) roundrun_init(chose); roundrun(chose); system(cls); printf(ntt使用!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(touppe

6、r(a)=P)printf(name cputime needtime priority state n);elseprintf(name cputime needtime count round state n); void print2(char chose,PCB *p)/打印每一行的状态信息if(toupper(chose)=P) printf(%st%dt%dt%dt %cn,p-name,p-cputime,p-needtime,p-prio,p-state); elseprintf(%st%dt%dt%dt%dt%cn,p-name,p-cputime,p-needtime,p-

7、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用来控制就

8、绪队列滚动,S指向插入的队列*/s=q;p=ready;r=p;if(s-prioready-prio)/ 要插入的进程的优先级大于ready的优先级 s-next=ready;ready=s; else/要插入的进程的优先级不大于ready的优先级 while(p) if(p-prio=s-prio) r=p; p=p-next; else break; /找到要插入的位置s-next=p;r-next=s;/*void prior_init(char chose)/*进程优先级法初始化 将进程按优先级插入到就绪队列里 PCB *p; int i,time; char na10; ready

9、=NULL; finish=NULL; run=NULL; printf(tt进程优先级算法模拟全过程nn); printf(输入进程 的个数 N:n); scanf(%d,&N);for(i=0;iname,na);p-cputime=0;p-needtime=time;p-state=W;p-prio=50-time;/设置进程优先值初值if(ready=NULL) ready=p; ready-next=NULL;else insert_prio(p);printf(当前就绪队列的进程的信息n);print(chose);printf(%d个进程已按优先级从高到低进到就绪队列中n,N);

10、 printf(按回车键开始模拟优先级算法.n); fflush(stdin); getchar();firstin();*/*void priority(char chose)/进程优先级算法总函数int i=1;while(run!=NULL)run-cputime+=1;run-needtime-=1;run-prio-=1;if(run-needtime=0) run-next=finish; finish=run; run-state=F; run-prio=0; run=NULL; firstin(); else if(ready!=NULL)&(run-prioprio) run

11、-state=W; insert_prio(run); run=NULL; firstin(); printf(第%d次执行优先级算法n,i+); print(chose); if(run) printf(按回车键继续下一次优先级算法.n); else printf(优先级算法模拟过程结束!n); fflush(stdin); getchar();*/void insert_rr(PCB *q)/在轮转法中,将执行了一个时间片单位(为2), /但尚未完成的进程的PCB,插到就绪队列的队尾;tail-next=q;tail=q;q-next=NULL;void roundrun_init(cha

12、r chose)/*循环轮转法初始化 将就绪队列保存为FIFO队列*/PCB *p;int i,time;char na10;ready=NULL;finish=NULL;run=NULL;printf(tt循环轮转算法模拟全过程nn); 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

13、(当前就绪队列的进程的信息n);print(chose);printf(%d个进程已按FIFO进到就绪队列中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();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1