您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 操作系统实验一报告-先来先服务FCFS和短作业优先SJF进程调度算法
操作系统实验报告实验一先来先服务FCFS和短作业优先SJF进程调度算法学号:班级:姓名:【实验题目】:先来先服务FCFS和短作业优先SJF进程调度算法【实验目的】通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。【实验内容】问题描述:设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1,…,Tn时刻到达系统,它们需要的服务时间分别为S1,…,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。程序要求如下:1)进程个数n;每个进程的到达时间T1,…,Tn和服务时间S1,…,Sn;选择算法1-FCFS,2-SJF。2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:staticintMaxNum=100;intArrivalTime[MaxNum];intServiceTime[MaxNum];intFinishTime[MaxNum];intWholeTime[MaxNum];doubleWeightWholeTime[MaxNum];doubleAverageWT_FCFS,AverageWT_SJF;doubleAverageWWT_FCFS,AverageWWT_SJF;2)进程调度的实现过程如下:变量初始化;接收用户输入n,T1,…,Tn,S1,…,Sn;算法选择1-FCFS,2-SJF;按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;计算所有进程的平均周转时间和平均带权周转时间;按格式输出调度结果。实验要求:1)上机前认真复习FCFS和SJF进程调度调度算法,熟悉进程调度的执行过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。【源程序】头文件FCFS.h#includeiostream#defineMaxNum100structProcess_struct{intNumber;//进程编号charName[MaxNum];//进程名称intArrivalTime;//到达时间intServiceTime;//开始运行时间intFinishTime;//运行结束时间intWholeTime;//运行时间intrun_flag;//调度标志intorder;//运行次序doubleWeightWholeTime;//周转时间doubleAverageWT_FCFS,AverageWT_SJF;//平均周转时间doubleAverageWWT_FCFS,AverageWWT_SJF;//平均带权周转时间}Process[MaxNum];intN;//实际进程个数intFCFS();//先来先服务intFCFS(){//先来先服务算法inti;inttemp_time=0;//当前时间temp_time=Process[0].ArrivalTime;for(i=0;iN;i++){Process[i].ServiceTime=temp_time;Process[i].FinishTime=Process[i].ServiceTime+Process[i].WholeTime;Process[i].run_flag=1;temp_time=Process[i].FinishTime;Process[i].order=i+1;}return0;}头文件SJF.h#includeiostreamintSJF();//短作业优先intSJF(){//短作业优先算法inttemp_time=0;//当期那时间inti=0,j;intnumber_schedul,temp_counter;//进程编号,当前已执行进程个数floatrun_time;run_time=Process[i].WholeTime;j=1;while((jN)&&(Process[i].ArrivalTime==Process[j].ArrivalTime))//判断是否有两个进程同时到达{if(Process[j].WholeTimeProcess[i].WholeTime){run_time=Process[i].WholeTime;i=j;}j++;}//查找下一个被调度的进程//对找到的下一个被调度的进程求相应的参数number_schedul=i;Process[number_schedul].ServiceTime=Process[number_schedul].ArrivalTime;Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime+Process[number_schedul].WholeTime;Process[number_schedul].run_flag=1;temp_time=Process[number_schedul].FinishTime;Process[number_schedul].order=1;temp_counter=1;while(temp_counterN){for(j=0;jN;j++){if((Process[j].ArrivalTime=temp_time)&&(!Process[j].run_flag)){run_time=Process[j].WholeTime;number_schedul=j;break;}}for(j=0;jN;j++){if((Process[j].ArrivalTime=temp_time)&&(!Process[j].run_flag))if(Process[j].WholeTimerun_time){run_time=Process[j].WholeTime;number_schedul=j;}}//查找下一个被调度的进程//对找到的下一个被调度的进程求相应的参数Process[number_schedul].ServiceTime=temp_time;Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime+Process[number_schedul].WholeTime;Process[number_schedul].run_flag=1;temp_time=Process[number_schedul].FinishTime;temp_counter++;Process[number_schedul].order=temp_counter;}return0;}主程序Main.cpp#includeiostream#includeFCFS.h#includeSJF.husingnamespacestd;intPinput();//进程参数输入intPoutput();//调度结果输出voidmain(){intoption;Pinput();printf(请选择算法:\n);printf(1.先来先服务\n);printf(2.短作业优先\n);printf(0.退出\n);scanf(%d,&option);switch(option){case0:printf(运行结束。\n);break;case1:printf(对进程用先来先服务调度。\n\n);FCFS();Poutput();break;case2:printf(对进程用短作业优先调度。\n\n);SJF();Poutput();break;}}intPinput()//进程参数输入{inti;printf(pleaseinputtheprocessnumber:\n);scanf(%d,&N);for(i=0;iN;i++){printf(***************************************\n);printf(pleaseinputtheprocessof%dth:\n,i+1);printf(pleaseinputthename:\n);scanf(%s,Process[i].Name);printf(pleaseinputtheArrvialTime:\n);scanf(%d,&Process[i].ArrivalTime);printf(pleaseinputtheWholeTime:\n);scanf(%d,&Process[i].WholeTime);Process[i].ServiceTime=0;Process[i].FinishTime=0;Process[i].WeightWholeTime=0;Process[i].order=0;Process[i].run_flag=0;}return0;}intPoutput()//调度结果输出{inti;floatturn_round_time=0,f1,w=0;printf(进程名称到达时间运行时间开始运行时间结束时间执行顺序周转时间带权周转时间\n);for(i=0;iN;i++){Process[i].WeightWholeTime=Process[i].FinishTime-Process[i].ArrivalTime;f1=Process[i].WeightWholeTime/Process[i].WholeTime;turn_round_time+=Process[i].WeightWholeTime;w+=f1;printf(时刻%d:进程%s开始运行。,Process[i].ServiceTime,Process[i].Name);printf(%s,%d,%d,%d,%d,%d,%f,%f\n,Process[i].Name,Process[i].ArrivalTime,Process[i].WholeTime,Process[i].ServiceTime,Process[i].FinishTime,Process[i].order,Process[i].WeightWholeTime,f1);}printf(average_turn_round_timer=%f\n,turn_round_time/N);printf(weight_average_turn_round_timer=%f\n,w/N);return0;}【实例运行结果截图】实例(教材P92-图3-4)进程名ABCDE平均到达时间01234服务时间43524FCFS完成时间47121418周转时间461011149带权周转时间1225.53.52.8SJF完成时间4918613周转时间4816398带权周转时间12.673.11.52.252.1先来先服务算法(FCFS)短作业优先算法(SJF)
本文标题:操作系统实验一报告-先来先服务FCFS和短作业优先SJF进程调度算法
链接地址:https://www.777doc.com/doc-4257068 .html