版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include#include#includetypedef struct ProcessNode / 进程结点的基本结构 char name; /进程名int service_time; /服务时间int arrive_time; /到达时间int priority; /优先级struct FCFS_time /先到先服务int finish_time; /完成时间 int turnaround_time; /周转时间float weigtharound_time;/带权周转时间FCFS_time; struct SJF_time /短作业优先int finish_time; int tu
2、rnaround_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_time; float weigtharound_time;Pri_time;struct ProcessNode*
3、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(Linklist head); head=read_information();/读入进程的基本信息do p=head-
4、next; printf(n);printf(*进程初始信息输出* n); /输出初始化后的进程基本信息printf(n);printf(进程名称 ); printf(到达时间 ); printf(服务时间 ); printf(优先级 ); printf(n);while(p) printf( %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);/输出进程的调用选择项pri
5、ntf(n);printf(1、FCFS-先到先服务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); printf(n); switch(choice) case 1: FCFS_scheduling(head); break; case 2: SJF_scheduling(head); break; case 3: RR_sc
6、heduling(head); break; case 4: Pri_scheduling(head); break; / case 5: exit(); while(choice!=5);Linklist read_information()/进程读入函数 int i; intnum; / ProcessNode ;Linklist pro;Linklist p; Linklist head; printf(n); printf(*进程调度算法* n);printf(n);printf(请输入进程的个数:); scanf(%d,&num);printf(n);printf(*初始化信息* n
7、);printf(n); head=(Linklist)malloc(sizeof(ProcessNode);/头结点head-next=NULL;p=head; for(i=1;iname);printf( 到达时间: );scanf(%d,&pro-arrive_time);printf( 服务时间: ); scanf(%d,&pro-service_time);printf( 优先级: );scanf(%d,&pro-priority); /pro-next=head-next; head-next=pro;/逆序建链 p-next=pro; p=pro;/顺序建链/p+;pro-nex
8、t=NULL; printf(n); return head; Linklist FCFS_scheduling(Linklist head)/先到先服务算法函数 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
9、_time=p-arrive_time;/避免第一个进程到达时间不为0 while(p) if(p-arrive_timeFCFS_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_time.turn
10、around_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-service_time);/带权周转时间 q=p; p=p-next; p=head-next; pr
11、intf(* FCFS * n);/输出先到先服务调度后的进程信息printf(n);printf(进程名称 ); printf(到达时间 ); printf(服务时间 ); printf(优先级 );printf(完成时间 );printf(周转时间 ); printf(带权周转时间 ); 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_t
12、ime); printf( %d,p-FCFS_time.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;/记录进程个数 int add_flag=0;/进程完成服务个数int service_time_
13、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-next;/将创建的进程队列变为循环队列 p=head-next;q=p;p-SJF_time.finish_time=p-arrive_time+p-
14、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_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; els
15、e 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&p-SJF_time.flag=0)/寻找最短的作业 if(p-next-service_time)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!=se
16、rvice_time_min)p=p-next;/指针指向最短作业 p-SJF_time.finish_time=p-arrive_time+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
17、=0; service_time_min=p-service_time; while(p-arrive_time)SJF_time.finish_time)&kSJF_time.flag=1) p=p-next;+k; else if(p-SJF_time.flag!=1)&(p-service_time)service_time; p=p-next;+k; else p=p-next;+k; p=q-next; r=q; while(p-service_time!=service_time_min)p=p-next;/指针指向最短作业 p-SJF_time.finish_time=q-SJF
18、_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.turnaround_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;num0;n
19、um-)/断开循环队列 q=p;p=p-next;q-next=NULL; p=head-next;/指向链首,输出短作业调度后的进程信息 printf(n); printf(* SJF * n);printf(n);printf(进程名称 ); printf(到达时间 ); printf(服务时间 ); printf(优先级 );printf(完成时间 );printf(周转时间 ); printf(带权周转时间 ); printf(n); while(p) printf( %c ,p-name);printf( %d ,p-arrive_time); printf( %d ,p-servi
20、ce_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=p-next; printf(n); printf(* n); printf(n); return head;Linklist RR_scheduling(Linklist head)/时间片轮转算法Linklist q;/指向前一进程结点 Linklist p;
21、int q_time;/时间片大小int num=0;/记录进程个数 int add_flag=0;/进程完成服务个数 printf(请输入时间片的大小: );scanf(%d,&q_time); p=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
22、=head-next;/将创建的进程队列变为循环队列 p=head-next; q-RR_time.finish_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); printf(n); */ if(p-RR_time.flag_time)(q_time)/服务时间大于时间片
23、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)RR_time.finish_time)/有进程等待 q=p;p=p-next; else /当前进程未完成,无进程等待,指针不向后移 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)RR_time.finish_time)/有进程等待 q=p;p=p-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中德住房储蓄银行春季校园招聘2人备考题库有完整答案详解
- 2026浙江事业单位统考温州市洞头区招聘22人备考题库及参考答案详解(a卷)
- 2026辽宁省债务管理办公室面向机关事业单位选调5人备考题库【考点梳理】附答案详解
- 2026北京对外经济贸易大学非事业编人员招聘7人备考题库及完整答案详解【夺冠系列】
- 2026浙江宁波逸东豪生大酒店招聘7人备考题库附参考答案详解ab卷
- 2026山东日照市教育局直属学校招聘第一批急需紧缺教师29人备考题库及参考答案详解(能力提升)
- 2026四川遂宁射洪平安街道招聘1人备考题库附参考答案详解(综合题)
- 2026新教材人教版二年级下册数学 第8课时 整 理和复习 课件
- 2026东方电气集团数字科技有限公司面向全社会招聘6人备考题库及参考答案详解【典型题】
- 2026浙江宁波东钱湖旅游度假区某国有企业招聘派遣制工作人员备考题库及答案详解【全优】
- 《婚礼策划》课件
- 家务劳动安全教育
- 《达利超现实主义》课件
- 小学组织管理与运行
- 曲面造型中基于网格曲面的建模与分析技术
- MOOC 概率论与数理统计-中国矿业大学 中国大学慕课答案
- 工程项目合作方案计划书
- 高炉基本操作制度
- 安徽中元化工集团有限公司2万吨每年二氯异氰尿酸钠资源综合利用联产2万吨每年三氯异氰尿酸项目环境影响报告书
- 《国际共产主义运动史》课程教学大纲
- YY/T 1836-2021呼吸道病毒多重核酸检测试剂盒
评论
0/150
提交评论