1、实 验 报 告题目名称C 语言实现调度算法程序设计实验报告-先来先服务 FCFS院系 a 班级 完成时间 指导老师 本次实验成绩主要原理及所参考的资料算法原理:设计程序模拟进程的先来先服务 FCFS 过程。假设有 n 个进程分别在 T1, ,Tn时刻到达系统,它们需要的服务时间分别为 S1, ,Sn。分别采用先来先服务 FCFS 调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计 n 个进程的平均周转时间和平均带权周转时间。程序要求如下:1)进程个数 n;每个进程的到达时间 T1, ,Tn和服务时间 S1, ,Sn。2)要求采用先来先服务 FCFS 调度进程运行,计算每
2、个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻 3:进程 B 开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。主要参考书:计算机操作系统第三版 西安电子科技大学出版社 汤小丹主编主要算法具体实验实现提示:用 C 语言实现提示:1)程序中进程调度时间变量描述如下:static int MaxNum=100;int ArrivalTimeMaxNum;int ServiceTimeMaxNum;int FinishTimeM
3、axNum;int WholeTimeMaxNum;double WeightWholeTimeMaxNum;double AverageWT_FCFS; 调度算法程序设计实验报告步骤double AverageWWT_FCFS;2)进程调度的实现过程如下: 变量初始化; 接收用户输入 n,T 1, ,Tn,S 1, ,Sn; 按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间; 计算所有进程的平均周转时间和平均带权周转时间; 按格式输出调度结果。实验要求1. 程序流程图P=HEAD ; i=0P=Q;P=P-NEXT; P=P-NEXT;Q-STARTTIME=TIMEQ-
4、STATE=T 开始i+;输出执行进程信息结束P-STATE=F?Q-ARRIVETIME TIME?i STARTTIME=ARRIVETIMEQ-STATE=T Y NY NN Y2. 程序源代码调度算法程序设计实验报告#include“stdio.h“#include“stdlib.h“typedef struct PCB /定义进程控制块 char name10; /进程名char state; /运行状态int ArriveTime; /到达时间int StartTime; /进程开始时间int FinishTime; /进程结束时间int ServiceTime; /服务时间flo
5、at WholeTime;/周转时间float WeightWholeTime;/带权周转时间double AverageWT_FCFS; /平均周转时间double AverageWWT_FCFS;/带权平均周转时间struct PCB *next; /指向下个进程pcb;double x=0,y=0;int i;int time; /计时器int n; /进程个数pcb *head=NULL,*p,*q; /进程链表指针void run_FCFS(pcb *p1) /运行未完成的进程time = p1-ArriveTime time? p1-ArriveTime:time;p1-Start
6、Time=time;printf(“n 时刻:%d, 当前开始运行作业%snn“,time,p1-name);time+=p1-ServiceTime;p1-state=T;p1-FinishTime=time;p1-WholeTime=p1-FinishTime-p1-ArriveTime;p1-WeightWholeTime=p1-WholeTime/p1-ServiceTime;x+=p1-WholeTime;y+=p1-WeightWholeTime;p1-AverageWT_FCFS=p1-WholeTime/n;p1-AverageWWT_FCFS=p1-WeightWholeTi
7、me/n;printf(“ 到达时间 开始时间 服务时间 完成时间 周转时间 带权周转时间 n“);printf(“%6d %10d %10d %8d %10.1f %10.2f n “,p1-ArriveTime,p1-StartTime, p1-ServiceTime,p1-FinishTime,p1-WholeTime,p1-WeightWholeTime);printf(“n 平均周转时间 平均带权周转时间 n“);printf(“ %10.2f %10.2fn “,p1-AverageWT_FCFS,p1-AverageWWT_FCFS);void FCFS() /找到当前未完成的进
8、程调度算法程序设计实验报告int i;p=head;for(i=0;istate=F)q=p; /标记当前未完成的进程run_FCFS(q);p=p-next;void getInfo() /获得进程信息并创建进程int num;printf(“n 进程个数:“);scanf(“%d“,for(num=0;numname,if(head=NULL) head=p;q=p;time=p-ArriveTime;if(p-ArriveTime ArriveTime;q-next=p;p-StartTime=0;p-FinishTime=0;p-WholeTime=0;p-WeightWholeTime=0;p-next=NULL;p-state=F;q=p; void main() printf(“先来先服务 FCFS 算法模拟n“);getInfo();p=head;FCFS();调度算法程序设计实验报告3. 程序运行调试结果实验心得这是第一次操作系统的实验是对先来先服务 FCFS 过程进行调度算法的描述,先来先服务调度算法就是每次调度是从就绪队列中选择一个最先进入该队列的进程进行处理。