版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <stdio.h>#include <stdlib.h>#include <string.h>#include<windows.h>/*进程控制块数据结构*/typedef struct node char name10;/*进程名*/int prio; /*进程优先级*/ int round; /*循环轮转法进程每次轮转的时间片*/ int cputime; /*进程累计消耗的CUP时间*/int needtime; /*进程到完成还需要的CUP时间*/int count; /*循环轮转法一个时间片内进程运行时间*/char
2、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 prin
3、t2(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,插到就绪队列的队
4、尾; 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&qu
5、ot;);*/ 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); sys
6、tem("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;
7、 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&quo
8、t;,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!=N
9、ULL) 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->prio>ready->prio)/ 要插入的进程的优先级大于ready的优先级 s->next=ready;ready=s; else/要插入的进程的优先
10、级不大于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("输入进程 的个
11、数 N:n"); scanf("%d",&N);for(i=0;i<N;i+)p=(PCB*)malloc(sizeof(PCB); printf("输入第%d个进程名n",i+1);scanf("%s",na); printf("完成进程需要的时间片数n");scanf("%d",&time);strcpy(p->name,na);p->cputime=0;p->needtime=time;p->state='W'p-&g
12、t;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
13、;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->prio<ready->prio) run->state='W' insert_prio(run); ru
14、n=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 rou
15、ndrun_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;i<N;i+)p=(PCB*)malloc(sizeof(PCB); printf("输入第%d个进程名n",i+1);scanf(&quo
16、t;%s",na); printf("完成进程需要的时间片数n");scanf("%d",&time);strcpy(p->name,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(cho
17、se);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-&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年榆林市横山区艾好峁卫生院招聘备考题库及答案详解参考
- 2026年正定产业投资控股集团有限公司下属子公司面向社会公开招聘工作人员24人备考题库及一套答案详解
- 公共交通服务质量投诉调查处理制度
- 2026年纳雍县面向社会公开招聘城市社区工作者9人实施备考题库附答案详解
- 2026年河源市暨南大学附属第五医院招聘52人备考题库及答案详解一套
- 2026年杭州文化投资发展有限公司招聘备考题库附答案详解
- 宁夏银行2026年度校园招聘备考题库及完整答案详解1套
- 2026年润曜(北京)国际医药科技有限公司招聘备考题库及一套完整答案详解
- 2026年杭州市政苑小学、秀水小学诚聘数学、英语老师(非事业)备考题库及答案详解参考
- 企业员工培训与素质发展计划目标制度
- 北京通州产业服务有限公司招聘参考题库新版
- 2026年医务科工作计划
- 【数学】2025-2026学年北师大版七年级数学上册 期末提升训练卷
- 2026年枣庄科技职业学院单招综合素质考试模拟试题带答案解析
- 2025高三生物二轮复习进度安排
- 2025年陕西延安市直事业单位选聘工作人员历年高频重点提升(共500题)附带答案详解
- 福建省部分地市2025届高中毕业班第一次质量检测 化学试卷(含答案)
- 夫妻债务约定协议书
- 腕关节综合征
- 上海建桥学院简介招生宣传
- 《智慧教育黑板技术规范》
评论
0/150
提交评论