




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include stdio.h#include stdlib.h#include string.htypedef struct node char name10; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/PCB;PCB *finish,*ready,*tail,*run; /*队列指针*/int N; /*进程数*/*将就绪队列中的第一个进程投入运行*/firstin() run=ready; /*就绪队列头指针赋值给运行头指针*/ run-state=R; /*进程状态变为运行态*/ ready=ready-next; /*就绪对列头指针后移到下一进程*/*标题输出函数*/void prt1(char a) if(toupper(a)=P) /*优先数法*/ printf( name cputime needtime priority staten); else printf( name cputime needtime count round staten);/*进程PCB输出*/void prt2(char a,PCB *q) if(toupper(a)=P) /*优先数法的输出*/ printf( %-10s%-10d%-10d%-10d %cn,q-name, q-cputime,q-needtime,q-prio,q-state); else/*轮转法的输出*/ printf( %-10s%-10d%-10d%-10d%-10d %-cn,q-name, q-cputime,q-needtime,q-count,q-round,q-state);/*输出函数*/void prt(char algo) PCB *p; prt1(algo); /*输出标题*/ if(run!=NULL) /*如果运行指针不空*/ prt2(algo,run); /*输出当前正在运行的PCB*/ p=ready; /*输出就绪队列PCB*/ while(p!=NULL) prt2(algo,p); p=p-next; p=finish; /*输出完成队列的PCB*/ while(p!=NULL) prt2(algo,p); p=p-next; getch(); /*压任意键继续*/*优先数的插入算法*/insert1(PCB *q) PCB *p1,*s,*r; int b; s=q; /*待插入的PCB指针*/ p1=ready; /*就绪队列头指针*/ r=p1; /*r做p1的前驱指针*/ b=1; while(p1!=NULL)&b) /*根据优先数确定插入位置*/ if(p1-prio=s-prio) r=p1; p1=p1-next; else b=0; if(r!=p1) /*如果条件成立说明插入在r与p1之间*/ r-next=s; s-next=p1; else s-next=p1; /*否则插入在就绪队列的头*/ ready=s; /*轮转法插入函数*/insert2(PCB *p2) tail-next=p2; /*将新的PCB插入在当前就绪队列的尾*/ tail=p2; p2-next=NULL;/*优先数创建初始PCB信息*/void create1(char alg) PCB *p; int i,time; char na10; ready=NULL; /*就绪队列头指针*/ finish=NULL; /*完成队列头指针*/ run=NULL; /*运行队列指针*/ printf(Enter name and time of processn); /*输入进程标识和所需时间创建PCB*/ for(i=1;iname,na); p-cputime=0; p-needtime=time; p-state=w; p-prio=50-time; if(ready!=NULL) /*就绪队列不空调用插入函数插入*/ insert1(p); else p-next=ready; /*创建就绪队列的第一个PCB*/ ready=p; clrscr(); printf( output of priority:n); printf(*n); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready-next; run-state=R;/*轮转法创建进程PCB*/void create2(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;iname,na); p-cputime=0; p-needtime=time; p-count=0; /*计数器*/ p-state=w; p-round=2; /*时间片*/ if(ready!=NULL) insert2(p); else p-next=ready; ready=p; tail=p; clrscr(); printf( output of roundn); printf(*n); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready-next; run-state=R;/*优先数调度算法*/priority(char alg) while(run!=NULL) /*当运行队列不空时,有进程正在运行*/ run-cputime=run-cputime+1; run-needtime=run-needtime-1; run-prio=run-prio-3; /*每运行一次优先数降低3个单位*/ if(run-needtime=0) /*如所需时间为0将其插入完成队列*/ run-next=finish; finish=run; run-state=F; /*置状态为完成态*/ run=NULL; /*运行队列头指针为空*/ if(ready!=NULL) /*如就绪队列不空*/ firstin(); /*将就绪对列的第一个进程投入运行*/ else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if(ready!=NULL)&(run-prioprio) run-state=W; insert1(run); firstin(); /*将就绪队列的第一个进程投入运行*/ prt(alg); /*输出进程PCB信息*/ /*时间片轮转法*/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)/*运行完将其变为完成态,插入完成队列*/ run-next=finish; finish=run; run-state=F; run=NULL; if(ready!=NULL) firstin(); /*就绪对列不空,将第一个进程投入运行*/ else if(run-count=run-round) /*如果时间片到*/ run-count=0; /*计数器置0*/ if(ready!=NULL) /*如就绪队列不空*/ run-state=W; /*将进程插入到就绪队列中等待轮转*/ insert2(run); firstin(); /*将就绪对列的第一个进程投入运行*/ prt(alg); /*输出进程信息*/ /*主函数*/main() char algo; /*算法标记*/ clrscr(); printf(type the algorithm:P/R(priority/roundrobin)n); scanf(%c,&algo); /*输入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 麻风日宣传课件
- 2025年度绿色生态农产品独家代理销售合同
- 二零二五年度茶楼品牌形象设计合同
- 二零二五年度社区服务场地租赁合同范本
- 2025版互联网医疗平台数据共享与合作开发合同
- 二零二五年木门行业供应链合作合同
- 二零二五年度绿色高效厂房建设施工合同范本
- 二零二五年度广告行业简易劳动合同模板
- 2025版智能仓储物流技术服务费合同范本
- 2025版智慧停车系统地下车库车位使用权租赁协议
- 2024年江西省修水县事业单位公开招聘教师岗考试题带答案分析
- 线上教育培训课程购买协议
- 三一挖机保养手册
- 烟道安装安全协议书
- 医疗健康行业数字营销战略解析
- 2025年(第一季度)电网工程设备材料信息参考价(加密)
- 急危重症护理学练习题(含答案解析)
- 气管切开患者的管理和康复治疗意见解读
- 2025榆林能源集团有限公司招聘工作人员(473人)笔试参考题库附带答案详解
- 硬件开发外包合同协议
- 民政局笔试题及答案
评论
0/150
提交评论