




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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;/*指向下一个进程的链指针*/ 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),但尚未完成的进程的PCB,插到就绪队列的队尾; void roundrun_init(char chose); /循环轮转法初始化将就绪队列保存为FIFO队列 void roundrun(char chose); /循环轮转法总算法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(chose); 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(toupper(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-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指向插入的队列*/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=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); 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-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(char 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(当前就绪队列的进程的信息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=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年静脉输液外渗应急演练方案、脚本及总结(2篇)
- 2025年电子商务师职业技能知识考试题与答案
- 摩托车复工安全知识培训课件
- 摩托摔车安全知识培训内容课件
- 摔跤力量训练课件
- 摄影博主基础知识培训课件
- 烹饪技术考试试题及答案
- 2025新款购房合同
- 2025混凝土班组合同范文
- 搭船的鸟课件
- 附件1:中国联通动环监控系统B接口技术规范(V3.0)
- 箱变设备台账
- 管道工程隐蔽验收记录表
- GB/T 1185-2006光学零件表面疵病
- 微课(比喻句)讲课教案课件
- 银行间本币市场业务简介
- 2023年厦门东海职业技术学院辅导员招聘考试笔试题库及答案解析
- 辽阳市出租汽车驾驶员从业资格区域科目考试题库(含答案)
- (完整版)剑桥通用五级PET考试练习题
- DB32- 4385-2022《锅炉大气污染物排放标准》
- 钢丝绳课件-图文
评论
0/150
提交评论