![操作系统时间片轮转算法与优先级调度算法_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/97220b15-c836-4f89-96ae-234f1a107049/97220b15-c836-4f89-96ae-234f1a1070491.gif)
![操作系统时间片轮转算法与优先级调度算法_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/97220b15-c836-4f89-96ae-234f1a107049/97220b15-c836-4f89-96ae-234f1a1070492.gif)
![操作系统时间片轮转算法与优先级调度算法_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/97220b15-c836-4f89-96ae-234f1a107049/97220b15-c836-4f89-96ae-234f1a1070493.gif)
![操作系统时间片轮转算法与优先级调度算法_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/97220b15-c836-4f89-96ae-234f1a107049/97220b15-c836-4f89-96ae-234f1a1070494.gif)
![操作系统时间片轮转算法与优先级调度算法_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/97220b15-c836-4f89-96ae-234f1a107049/97220b15-c836-4f89-96ae-234f1a1070495.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球5C超快充电池行业调研及趋势分析报告
- 2025年全球及中国火药量器行业头部企业市场占有率及排名调研报告
- 2025融资买卖合同范文
- 酒水购销合同模板
- 分期付款买卖合同参考范文
- 2025太原市购房合同范本范文
- 水果长期供应购销合同范本
- 2025厨房设备购买合同样本
- 灯具购销合同书范本
- 探索未知世界主题班会
- 2024年中考语文 (湖北专用)专题一 字音、字形课件
- T-ACEF 095-2023 挥发性有机物泄漏检测红外成像仪(OGI)技术要求及监测规范
- 2023年全国高考乙卷历史真题试卷及答案
- 骨科手术的术后饮食和营养指导
- 旅游定制师入行培训方案
- 2024年中国南方航空股份有限公司招聘笔试参考题库含答案解析
- 六年级上册数学应用题100题
- 个人代卖协议
- 赏析小说语言(二)
- 【立高食品公司的偿债能力现状及问题分析(论文9000字)】
- 10.《运动技能学习与控制》李强
评论
0/150
提交评论