进程调度(C语言实现)_第1页
进程调度(C语言实现)_第2页
进程调度(C语言实现)_第3页
进程调度(C语言实现)_第4页
进程调度(C语言实现)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include<>#include<>#include<>typedefstructProcessNode{//进度结点的基本构造charname;//进度名intservice_time;//服务时间intarrive_time;//抵达时间intpriority;//优先级structFCFS_time{//先到先服务intfinish_time;//达成时间intturnaround_time;//周转时间floatweigtharound_time;//带权周转时间}FCFS_time;structSJF_time{//短作业优先intfinish_time;intturnaround_time;floatweigtharound_time;intflag;}SJF_time;structRR_time{//时间片轮转的结点intfinish_time;intturnaround_time;floatweigtharound_time;intflag_time;//赋值为进度的服务时间,为0则进度达成}RR_time;structPri_time{//优先权非抢占式intfinish_time;intturnaround_time;floatweigtharound_time;}Pri_time;structProcessNode*next;}ProcessNode,*Linklist;voidmain(){intchoice;Linklistp,head;Linklistread_information();LinklistFCFS_scheduling(LinklistLinklistSJF_scheduling(LinklistLinklistRR_scheduling(LinklistLinklistPri_scheduling(Linklist

head);head);head);head);head=read_information();//读入进度的基本信息do{p=head->next;printf("\n");printf("**********进度初始信息输出**********\n");//输出初始化后的进度基本信息printf("\n");printf("进度名称");printf("抵达时间");printf("服务时间");printf("优先级");printf("\n");while(p){printf("printf("printf("printf("printf("\n");

%c",p->name);%d",p->arrive_time);%d",p->service_time);%d",p->priority);p=p->next;}printf("\n");printf("************************************\n");//printf("\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("

请在

1—5之间选择

:

");scanf("%d",&choice);printf("\n");printf("\n");switch(choice){case1:FCFS_scheduling(head);break;case2:SJF_scheduling(head);break;case3:RR_scheduling(head);break;case4:Pri_scheduling(head);break;//case5:exit();}}while(choice!=5);}Linklistread_information()//进度读入函数{inti;intnum;ProcessNode;Linklistpro;Linklistp;Linklisthead;printf("\n");printf("************进度调动算法************\n");printf("\n");printf("请输入进度的个数:");scanf("%d",&num);printf("\n");printf("*************初始化信息*************\n");printf("\n");head=(Linklist)malloc(sizeof(ProcessNode));//头结点head->next=NULL;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("服务时间:");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");returnhead;}LinklistFCFS_scheduling(Linklisthead)//先到先服务算法函数{Linklistp;Linklistq;//指向前一进度p=head->next;while(p)//初始化进度的达成时间、周转时间、带权周转时间,初值均赋为0{p->=0;p->=0;p->=0;p=p->next;}p=q=head->next;p->=p->arrive_time;//防止第一个进度抵达时间不为0while(p){if(p->arrive_time<=q->//下一进度已抵达,在等候中{p->=(p->service_time)+(q->;//服务时间p->=(p->-(p->arrive_time);//周转时间p->=(float)(p->/(p->service_time);//带权周转时间}else{p->=p->service_time+p->arrive_time;//服务时间p->=(p->-(p->arrive_time);//周转时间p->=(float)(p->/(p->service_time);//带权周转时间}q=p;p=p->next;}p=head->next;printf("********************************FCFS********************************\n");//输出先到先服务调动后的进度信息printf("\n");printf("进度名称");printf("抵达时间");printf("服务时间");printf("优先级");printf("达成时间");printf("周转时间");printf("带权周转时间printf("\n");while(p){

");printf("printf("printf("printf("printf("printf("printf("

%c",p->name);%d",p->arrive_time);%d",p->service_time);%d",p->priority);%d",p->;%d",p->;%",p->;printf("\n");p=p->next;}printf("\n");printf("**********************************************************************\n");printf("\n");returnhead;}LinklistSJF_scheduling(Linklisthead)//短作业优先算法{Linklistp,r;Linklistq;//指向前一进度结点intnum=0;//记录进度个数intadd_flag=0;//进度达成服务个数intservice_time_min;intarrive_time;intk;p=head->next;//首元结点while(p)//初始化进度的达成时间、周转时间、带权周转时间,初值均赋为0{p->=0;p->=0;p->=0;p->=0;++num;q=p;p=p->next;}q->next=head->next;//将创立的进度行列变成循环行列p=head->next;q=p;p->=p->arrive_time+p->service_time;p->=(p->-(p->arrive_time);//周转时间p->=(float)(p->/(p->service_time);//带权周转时间q->=p->;p->=1;add_flag=1;p=p->next;do{if(p->==1){p=p->next;}elseif((p->arrive_time)>(q->){service_time_min=p->service_time;arrive_time=p->arrive_time;while(p->arrive_time==arrive_time&&p->==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->=p->arrive_time+p->service_time;p->=1;++add_flag;p->=(p->-(p->arrive_time);//周转时间p->=(float)(p->/(p->service_time);//带权周转时间q=p;p=r->next;}else{k=0;service_time_min=p->service_time;while(((p->arrive_time)<=(q->)&&k<=num)//找寻最短的作业{if(p->==1){p=p->next;++k;}elseif((p->!=1)&&((p->service_time)<service_time_min)){service_time_min=p->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->=q->+p->service_time;p->=(p->-(p->arrive_time);//周转时间p->=(float)(p->/(p->service_time);//带权周转时间p->=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");printf("\n");printf("进度名称");printf("抵达时间");printf("服务时间");printf("优先级");printf("达成时间");printf("周转时间");printf("带权周转时间printf("\n");while(p){

");printf("printf("printf("printf("printf("printf("printf("

%c",p->name);%d",p->arrive_time);%d",p->service_time);%d",p->priority);%d",p->;%d",p->;%",p->;printf("\n");p=p->next;}printf("\n");printf("**********************************************************************\n");printf("\n");returnhead;}LinklistRR_scheduling(Linklisthead)//时间片轮转算法{Linklistq;//指向前一进度结点Linklistp;intq_time;//时间片大小intnum=0;//记录进度个数intadd_flag=0;//进度达成服务个数printf("请输入时间片的大小:");scanf("%d",&q_time);p=head->next;while(p)//初始化进度的达成时间、周转时间、带权周转时间,初值均赋为0{p->=0;p->=0;p->=0;p->=p->service_time;q=p;++num;p=p->next;}q->next=head->next;//将创立的进度行列变成循环行列p=head->next;q->=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->;printf("\n");*/if((p->>(q_time))//服务时间大于时间片{p->=(q->+(q_time);//累加达成时间p->=(p->-(q_time);if((p->next->arrive_time)<=(p->)//有进度等候{q=p;p=p->next;}else//目行进度未达成,无进度等候,指针不向后移{q=p;}}elseif((p->==0)//进度已经达成{p=p->next;}else{p->=(q->+(p->;p->=0;++add_flag;p->=(p->-(p->arrive_time);//周转时间p->=(float)(p->/(p->service_time);//带权周转时间if((p->next->arrive_time)<(p->)//有进度等候{q=p;p=p->next;}else//目行进度达成,无进度等候,指针向后移//{q=p;q->=p->next->arrive_time;}{p=p->next;q=p;q->=p->arrive_time;}}}while(add_fl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论