1、(2).对给定的序列分别使用上面的几种算法进行调度,计算每种算法下的平均周转时间和平均带权周转时间。3. 实验代码:#includestring.hstdlib.h/*这是先来先服务的程序*/struct fcfs/定义先来先服务结构体、参数char name10;float daodatime;/到达时间float fuwutime;/服务时间float kaishitime;/开始时间float wanchengtime;/完成时间float zhouztime;/周转时间float daiquantime;/带权周转时间;fcfs a100;void input(fcfs *p,int
2、N) /构造一个输入进程的信息的函数,定义结构体指针 int i; for(i=0;i=N-1;i+) printf(输入第%d个进程的名字、到达时间、服务时间:n,i+1); scanf(%s%f%f,&pi.name,&pi.daodatime,&pi.fuwutime);/把输入的信息保存到结构体指针所对应的内存中 /构造一个输出函数void Print(fcfs *p,float daodatime,float fuwutime,float kaishitime,float wanchengtime,float zhouztime,float daiquantime,int N) in
3、t k;执行顺序:);%s,p0.name); for(k=1;k,pk.name);n进程的相关信息如下:n名字t到达t服务t开始t完成t周转t带权周转n for(k=0; %st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn,pk.name,pk.daodatime,pk.fuwutime,pk.kaishitime,pk.wanchengtime,pk.zhouztime,pk.daiquantime); /题目中加入-.2是保留双精度的两位。一般f默认保留六位小数的。 void sort(fcfs *p,int N)/进程根据到达时间进行排序 for(int
4、 i=0; for(int j=0;j=i;j+) if(pi.daodatimename,&daodatime,&fuwutime); p-shengyutime=p-fuwutime;state=就绪; if(rear=NULL) /当输入结束时,把P的数据放到队首,以便执行下一步 head=p;next=NULL; rear=p; else /否则执行时间就为空,队首变成Q t=NULL; q=head; while(q&q-daodatimenext; if(q=head) /而当Q是队首时,则下一个队首变成P,以便每个进程都能够得到时间片 p-next=head; head=p; e
5、lse if(t=rear) /当执行时间片到达队尾时(执行完时),返回给队首P rear-next=p; else /否则给队首P占用执行时间,P执行完后到Q t-next=q; return head;/返回队首void output(struct shijian *head)/定义输出函数 struct shijian *p,*t,*r; int num;请输入时间片:num); while(head!=NULL) /当队首不为空时,把P给队首 r=p=head; while(p!=NULL) /把执行时间给队首 t=head;shengyutime-num; /P的剩余时间=剩余时间-
6、时间片运行 /状态变成运行态 if(p-shengyutimename,t-daodatime,t-fuwutime,t-shengyutime,t-state); t=t- getchar(); /按住回车键观看 if(p-shengyutime=0)/当队首的剩余时间为0时,先把队首改成P的下一个,然后释放内存,删除队首节点 if(p=head) head=p- free(p); p=head; else /否则返回执行,把队尾的下一个指针变成P的下一个指针,队尾的位置移动到队首 r-next=p- p=r- r=p; else /否则把队首的位置给队尾,把队首的状态显示为“就绪”状态 r
7、=p; p=p- /*这是优先服务调度算法的代码*/typedef struct PCB2 char name10;/进程名 int runtime;/要求运行时间 int frist;/定义优先数 char zhuangtai; /定义状态,R为就绪,F为完成struct PCB2 PCBcontrol4;/定义进程控制块数组 void youxian()/构造优先函数 int i,n;请输入进程的个数:n);请输入进程的名字、优先权、运行时间nn;请输入第%d个进程的信息: scanf(PCBcontroli.name,&PCBcontroli.frist,&PCBcontroli.runtime); PCBcontroli.zhuangtai=R/进程初始状态均为就绪 getchar();/等待回车进入下一次运行 int max_frist_process()/确定最大优先级进程子程序 int max=-10;/max为最大优先数,初始化为-10 int i,key;3;i+) if(PCBcontroli.zhuangtai=r)/r表示正在运行 return -1;/返回-1 else if(max/还需要资
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1