用C语言实现FCFS

Python018

用C语言实现FCFS,第1张

是编程还是直接做啊?

直接做的话,假设为p1,p2,p3,p4,p5

调度顺序肯定是p1,p2,p3,p4,p5

平均周转时间

p1:3-0=3

p2:9-2=7

p3:13-4=9

p4:18-6=12

p5:20-8=12

平均:(3+7+9+12+12)/5=8.6

这样写应该可以:

#include<iostream.h>

#include<stdio.h>

struct pcb{

char pno

int come_time //到达时间

int run_time //服务时间

}

float fcfs(pcb pro[],int n)

{

struct pcb temp

int i,j,k //time为当前时间

float weight_time=0,time=0 //记录周转时间的和

//temp=(pcb)malloc(sizeof(pcb))

cout<<"进程调度情况如下:"<<endl

cout<<"进程号 到达时间服务时间周转时间:"<<endl

//选择排序过程,按到达时间升序排列

for(i=0i<n-1i++)

{

k=i

for(j=i+1j<nj++)

if(pro[k].come_time>pro[j].come_time)

k=j

if(k!=i)

{

temp=pro[i]

pro[i]=pro[k]

pro[k]=temp

}

}

for(i=0i<ni++)

{ time+=pro[i].run_time

weight_time+=(time-pro[i].come_time)/pro[i].run_time //(time-pro[i].come_time)/pro[i].run_time为排序后第i个进程的周转时间

cout<<pro[i].pno<<" "<<pro[i].come_time<<" "<<pro[i].run_time<<" "<<(time-pro[i].come_time)/pro[i].run_time<<endl

}

return weight_time/=n //返回平均带权周转时间

}

void insert(pcb pro[],pcb pro1,int start,int end)//将一pcb类型的元素插入到有序数组中,最后还保持有序

{

int i=end

while((i--)>start)

if(pro[i].run_time>pro1.run_time)pro[i+1]=pro[i]

pro[i]=pro1

}

float sjp(pcb pro[],int n)

{

int i,first=0,count,flag[20],k,min

float time=0,weight_time=0

//调度第一个到达内存的进程

for(i=1i<ni++)

{

if(pro[first].come_time>pro[i].come_time) first=i

flag[i]=0

}

flag[first]=1

time=(float)pro[first].run_time

weight_time=1

cout<<pro[first].pno<<" "<<pro[first].come_time<<""<<pro[first].run_time<<" "<<weight_time<<endl

//pro_temp[0]=pro[first]

count=n-1

while(count)

{

k=0

min=32767 //设置一个较大的阈值,

for(i=0i<ni++) //找到一个未被访问的,作业较短的且已经到达内存的作业调度

if((i!=first)&&(flag[i]==0)&&(time>=pro[i].come_time)&&(min>pro[i].run_time))

{

k=i

min=pro[i].run_time

}

flag[k]=1 //访问后置标记为访问

time+=pro[k].run_time

weight_time+=(time-pro[k].come_time)/pro[k].run_time

cout<<pro[k].pno<<" "<<pro[k].come_time<<""<<pro[k].run_time<<""<<(time-pro[k].come_time)/pro[k].run_time<<endl

count-- //每调度一个作业,count减1

}

return weight_time/=n

}

void main()

{

pcb pro[5]={{'C',2,5},{'A',0,4},{'B',1,3},{'D',3,2},{'E',4,4}}

cout<<fcfs(pro,5)<<endl

cout<<sjp(pro,5)<<endl

}