版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上#include<stdio.h>#include<stdio.h>#include<malloc.h>typedef struct ProcessNode / 进程结点的基本结构 char name; /进程名int service_time; /服务时间int arrive_time; /到达时间int priority; /优先级struct FCFS_time /先到先服务int finish_time; /完成时间 int turnaround_time; /周转时间float weigtharound_time;/带权周
2、转时间FCFS_time; struct SJF_time /短作业优先int finish_time; int turnaround_time; float weigtharound_time;int flag;SJF_time; struct RR_time /时间片轮转的结点int finish_time; int turnaround_time; float weigtharound_time;int flag_time;/赋值为进程的服务时间,为0则进程完成RR_time; struct Pri_time /优先权非抢占式int finish_time; int turnaround
3、_time; float weigtharound_time;Pri_time;struct ProcessNode*next;ProcessNode,*Linklist;void main() int choice; Linklist p,head; Linklist read_information();Linklist FCFS_scheduling(Linklist head); Linklist SJF_scheduling(Linklist head); Linklist RR_scheduling(Linklist head); Linklist Pri_scheduling(L
4、inklist head); head=read_information();/读入进程的基本信息do p=head->next; printf("n");printf("*进程初始信息输出* n"); /输出初始化后的进程基本信息printf("n");printf("进程名称 "); printf("到达时间 "); printf("服务时间 "); printf("优先级 "); printf("n");while(p) p
5、rintf(" %c ",p->name); printf(" %d ",p->arrive_time); printf(" %d ",p->service_time); printf(" %d ",p->priority); printf("n"); p=p->next;printf("n"); printf("* n");/输出进程的调用选择项printf("n");printf("1、FCF
6、S-先到先服务n");printf("2、SJF-短作业优先n");printf("3、RR-时间片轮转n");printf("4、Pri-优先权调度n"); printf("5、退出n");printf("n");printf("* n");printf("n");printf("请在15之间选择: ");scanf("%d",&choice);printf("n"); pri
7、ntf("n"); switch(choice) case 1: FCFS_scheduling(head); break; case 2: SJF_scheduling(head); break; case 3: RR_scheduling(head); break; case 4: Pri_scheduling(head); break; / case 5: exit(); while(choice!=5);Linklist read_information()/进程读入函数 int i; intnum; / ProcessNode ;Linklist pro;Link
8、list p; Linklist head; printf("n"); printf("*进程调度算法* n");printf("n");printf("请输入进程的个数:"); scanf("%d",&num);printf("n");printf("*初始化信息* n");printf("n"); head=(Linklist)malloc(sizeof(ProcessNode);/头结点head->next=NULL
9、;p=head; for(i=1;i<=num;i+) pro=(Linklist)malloc(sizeof(ProcessNode);/创建进程结点 printf(" 输入第%d个进程信息:n",i);printf(" 请输入进程名: ");fflush(stdin);scanf("%c",&pro->name);printf(" 到达时间: ");scanf("%d",&pro->arrive_time);printf(" 服务时间: "
10、;); scanf("%d",&pro->service_time);printf(" 优先级: ");scanf("%d",&pro->priority); /pro->next=head->next; head->next=pro;/逆序建链 p->next=pro; p=pro;/顺序建链/p+;pro->next=NULL; printf("n"); return head; Linklist FCFS_scheduling(Linklist hea
11、d)/先到先服务算法函数 Linklist p; Linklist q;/指向前一进程 p=head->next; while(p) /初始化进程的完成时间、周转时间、带权周转时间,初值均赋为0 p->FCFS_time.finish_time=0; p->FCFS_time.turnaround_time=0; p->FCFS_time.weigtharound_time=0; p=p->next; p=q=head->next; p->FCFS_time.finish_time=p->arrive_time;/避免第一个进程到达时间不为0 w
12、hile(p) if(p->arrive_time<=q->FCFS_time.finish_time)/下一进程已到达,在等待中 p->FCFS_time.finish_time=(p->service_time)+(q->FCFS_time.finish_time);/服务时间 p->FCFS_time.turnaround_time=(p->FCFS_time.finish_time)-(p->arrive_time);/周转时间 p->FCFS_time.weigtharound_time=(float)(p->FCFS
13、_time.turnaround_time)/(p->service_time);/带权周转时间 else p->FCFS_time.finish_time=p->service_time+p->arrive_time;/服务时间 p->FCFS_time.turnaround_time=(p->FCFS_time.finish_time)-(p->arrive_time);/周转时间 p->FCFS_time.weigtharound_time=(float)(p->FCFS_time.turnaround_time)/(p->se
14、rvice_time);/带权周转时间 q=p; p=p->next; p=head->next; printf("* FCFS * n");/输出先到先服务调度后的进程信息printf("n");printf("进程名称 "); printf("到达时间 "); printf("服务时间 "); printf("优先级 ");printf("完成时间 ");printf("周转时间 "); printf("带权周
15、转时间 "); printf("n"); while(p) printf(" %c ",p->name);printf(" %d ",p->arrive_time); printf(" %d ",p->service_time); printf(" %d ",p->priority); printf(" %d",p->FCFS_time.finish_time); printf(" %d",p->FCFS_ti
16、me.turnaround_time); printf(" %0.2f",p->FCFS_time.weigtharound_time); printf("n");p=p->next; printf("n"); printf("* n"); printf("n"); return head;Linklist SJF_scheduling(Linklist head)/短作业优先算法 Linklist p,r;Linklist q;/指向前一进程结点 int num=0;/记录进程个数
17、 int add_flag=0;/进程完成服务个数int service_time_min;int arrive_time;int k;p=head->next;/首元结点 while(p) /初始化进程的完成时间、周转时间、带权周转时间,初值均赋为0 p->SJF_time.finish_time=0; p->SJF_time.turnaround_time=0; p->SJF_time.weigtharound_time=0; p->SJF_time.flag=0; +num; q=p; p=p->next; q->next=head->ne
18、xt;/将创建的进程队列变为循环队列 p=head->next;q=p;p->SJF_time.finish_time=p->arrive_time+p->service_time; p->SJF_time.turnaround_time=(p->SJF_time.finish_time)-(p->arrive_time);/周转时间 p->SJF_time.weigtharound_time=(float)(p->SJF_time.turnaround_time)/(p->service_time);/带权周转时间q->SJF
19、_time.finish_time=p->SJF_time.finish_time; p->SJF_time.flag=1;add_flag=1;p=p->next; do if(p->SJF_time.flag=1)p=p->next; else if(p->arrive_time)>(q->SJF_time.finish_time) service_time_min=p->service_time; arrive_time=p->arrive_time; while(p->arrive_time=arrive_time&am
20、p;&p->SJF_time.flag=0)/寻找最短的作业 if(p->next->service_time)<(p->service_time)service_time_min=p->next->service_time;p=p->next; else p=p->next; p=q->next; r=q; while(p->service_time!=service_time_min)p=p->next;/指针指向最短作业 p->SJF_time.finish_time=p->arrive_time
21、+p->service_time; p->SJF_time.flag=1;+add_flag; p->SJF_time.turnaround_time=(p->SJF_time.finish_time)-(p->arrive_time);/周转时间 p->SJF_time.weigtharound_time=(float)(p->SJF_time.turnaround_time)/(p->service_time);/带权周转时间 q=p;p=r->next; else k=0; service_time_min=p->service
22、_time; while(p->arrive_time)<=(q->SJF_time.finish_time)&&k<=num)/寻找最短的作业 if(p->SJF_time.flag=1) p=p->next;+k; else if(p->SJF_time.flag!=1)&&(p->service_time)<service_time_min) service_time_min=p->service_time; p=p->next;+k; else p=p->next;+k; p=q-&
23、gt;next; r=q; while(p->service_time!=service_time_min)p=p->next;/指针指向最短作业 p->SJF_time.finish_time=q->SJF_time.finish_time+p->service_time; p->SJF_time.turnaround_time=(p->SJF_time.finish_time)-(p->arrive_time);/周转时间 p->SJF_time.weigtharound_time=(float)(p->SJF_time.turn
24、around_time)/(p->service_time);/带权周转时间 p->SJF_time.flag=1;+add_flag; /q=p;p=p->next; q=p;p=r->next; while(add_flag!=num); for(p=head->next;num>0;num-)/断开循环队列 q=p;p=p->next;q->next=NULL; p=head->next;/指向链首,输出短作业调度后的进程信息 printf("n"); printf("* SJF * n");p
25、rintf("n");printf("进程名称 "); printf("到达时间 "); printf("服务时间 "); printf("优先级 ");printf("完成时间 ");printf("周转时间 "); printf("带权周转时间 "); printf("n"); while(p) printf(" %c ",p->name);printf(" %d "
26、,p->arrive_time); printf(" %d ",p->service_time); printf(" %d ",p->priority); printf(" %d",p->SJF_time.finish_time); printf(" %d",p->SJF_time.turnaround_time); printf(" %0.2f",p->SJF_time.weigtharound_time); printf("n");p=
27、p->next; printf("n"); printf("* n"); printf("n"); return head;Linklist RR_scheduling(Linklist head)/时间片轮转算法Linklist q;/指向前一进程结点 Linklist p;int q_time;/时间片大小int num=0;/记录进程个数 int add_flag=0;/进程完成服务个数 printf("请输入时间片的大小: ");scanf("%d",&q_time); p
28、=head->next; while(p) /初始化进程的完成时间、周转时间、带权周转时间,初值均赋为0 p->RR_time.finish_time=0; p->RR_time.turnaround_time=0; p->RR_time.weigtharound_time=0; p->RR_time.flag_time=p->service_time; q=p; +num; p=p->next; q->next=head->next;/将创建的进程队列变为循环队列 p=head->next; q->RR_time.finish
29、_time=p->arrive_time;do /* printf("n"); printf("* n"); printf(" %c ",p->name); printf(" %d ",p->arrive_time); printf(" %d ",p->service_time); printf(" %d ",p->priority); printf(" %d",p->RR_time.finish_time); prin
30、tf("n"); */ if(p->RR_time.flag_time)>(q_time)/服务时间大于时间片 p->RR_time.finish_time=(q->RR_time.finish_time)+(q_time);/累加完成时间 p->RR_time.flag_time=(p->RR_time.flag_time)-(q_time); if(p->next->arrive_time)<=(p->RR_time.finish_time)/有进程等待 q=p;p=p->next; else /当前进程
31、未完成,无进程等待,指针不向后移 q=p; else if(p->RR_time.flag_time)=0)/进程已经完成 p=p->next; else p->RR_time.finish_time=(q->RR_time.finish_time)+(p->RR_time.flag_time); p->RR_time.flag_time=0; +add_flag; p->RR_time.turnaround_time=(p->RR_time.finish_time)-(p->arrive_time);/周转时间 p->RR_time.weigtharound_time=(float)(p->RR_time.turnaround_time)/(p->service_time);/带权周转时间 if(p->next->arrive_time)<(p->RR_time.finish_time)/有进程等待 q=p;p=p->next; else /当前进程完成,无进程等待,指针向后移/ q=p; q->RR_time.finish_time=p->next->arrive_time; p=p->n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兼职导游(领队)劳务合同
- 医用气体紧急施工合同
- 水泥生产制造工:初级测试题
- 水轮机检修工考试考试题(题库版)
- 水利水电工程考点(题库版)
- 2024届广东省惠州市英华学校八下物理期末教学质量检测试题及答案解析
- 山西省高平市2023-2024学年八下物理期末质量检测试题及答案解析
- 安徽省合肥市肥西县2023-2024学年八年级物理第二学期期末联考试题及答案解析
- 北京市昌平区第五中学2023-2024学年物理八下期末达标检测试题及答案解析
- 2024年药物临床前研究服务项目合作计划书
- 2023-2024学年江苏省南京玄武区六校联考八下物理期末教学质量检测试题及答案解析
- MOOC 儿科学-四川大学 中国大学慕课答案
- T-CRHA 028-2023 成人住院患者静脉血栓栓塞症风险评估技术
- 初中历史中考中考冲刺-山东省威海市2023年初中学业考试历史模拟试题及答案word版
- 部编版一年级拼音过关测试卷
- 加强应急管理提高突发事件应对风险控制能力(PPT 108页).ppt
- 人力资源外包合作方案.ppt
- 营养讲座第四篇-- 丹参银杏茶.ppt
- 医学的起源与发展
- 国家开放大学-01803_应用写作(汉语)_形考任务参考答案
- 皇金管家VIP接待手册(doc 36页).doc
评论
0/150
提交评论