




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct node char name10; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/PCB
2、;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 priorit
3、y 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(" %
4、-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=f
5、inish; /*输出完成队列的PCB*/ while(p!=NULL) prt2(algo,p); p=p->next; p=ready; printf("就绪队列:"); while(p!=NULL) printf("%st",p->name); p=p->next; printf("n");p=finish; printf("完成队列:"); while(p!=NULL) printf("%st",p->name); p=p->next; printf(&qu
6、ot;n"); 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;
7、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
8、("Enter name and time of processn"); /*输入进程标识和所需时间创建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) /*就绪队列不空调用
9、插入函数插入*/ insert1(p); else p->next=ready; /*创建就绪队列的第一个PCB*/ ready=p; / clrscr(); system("CLS"); printf(" output of priority:n"); printf("*n"); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state='R'/*轮转法创建进程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; /*计数器*/ p->state='W' p->round=2; /*时间片*/ if(ready!=NULL) insert2(p); else p->next=ready; ready=p; tail=p; /clrscr(); system("CLS"); printf(" output of roundn"); printf("*n"); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=r
12、eady->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=r
13、un; run->state='F' /*置状态为完成态*/ run=NULL; /*运行队列头指针为空*/ if(ready!=NULL) /*如就绪队列不空*/ firstin(); /*将就绪对列的第一个进程投入运行*/ else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if(ready!=NULL)&&(run->prio<ready->prio) run->state='W' insert1(run); firstin(); /*将就绪队列的第一个进程投入运行*/ prt(al
14、g); /*输出进程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) firs
15、tin(); /*就绪对列不空,将第一个进程投入运行*/ 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(); system("CLS"); 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 投资咨询工程师考试经验分享试题及答案
- 2024年考生须知试题及答案解析
- 2024监理工程师考试的重点突破试题及答案
- 黑龙江民族职业学院《材料科学基础A》2023-2024学年第二学期期末试卷
- 黑龙江省伊春市友好区2025年三年级数学第二学期期末质量检测模拟试题含解析
- 黑龙江省哈尔滨市五常市2025年初三化学试题模拟试卷(三)试题含解析
- 黑龙江省哈尔滨市第六十中学2025年中考化学试题压轴试卷含解析
- 黑龙江省大兴安岭地区塔河县2024-2025学年三年级数学第二学期期末综合测试试题含解析
- 黑龙江省汤原高中2025年高三下学期开年考试生物试题试卷含解析
- 黑龙江省绥化市安达市第七中学2024-2025学年高考第二次模拟考试物理试题文试题含解析
- 资本论第二卷讲义课件
- 班组班前安全教育记录表
- 教科版科学五年级下册全册全套课件【最新版】
- 胎儿颈项透明层(NT)的超声诊断课件
- 工程移交单(标准样本)
- 《最好的未来》合唱曲谱
- 常用材料折弯系数表大全
- 小班语言《坐火车》课件
- FIDIC合同《设计采购施工(EPC)交钥匙工程合同条件》(中英文对照版)
- 环境监测课件:第3章 空气和废气监测2
- 律师刑事诉讼格式文书一至十九
评论
0/150
提交评论