2022年先来先服务短作业优先定义 .pdf
操作系统实验一内容要求【实验题目】:先来先服务 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)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 实验要求:1)上机前认真复习FCFS 和 SJF 进程调度调度算法,熟悉进程调度的执行过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图) 。源程序#include #include #define Number 100 void main() int ArrivalNumber,ServiceNumber,i; cout输入进程数目:num; for(i=0;inum;i+) cout 第i+1ArrivaliServicei; struct statedd/声明结构 bool doneF,doneS; int arrivalTime,serviceTime,FinishTime1,WholeTime1,FinishTime2,WholeTime2; float WeightWholeTime1,WeightWholeTime2; ; statedd processNumber;/声明结构变量数组int timeflyF=0,timeflyS=0; int j,k,nextproF,nextproS; / 初始化for(i=0;inum;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - processi.doneF = false; processi.doneS = false; processi.FinishTime1 = 0; processi.WholeTime1 = 0; processi.WeightWholeTime1 = 0; processi.FinishTime2 = 0; processi.WholeTime2= 0; processi.WeightWholeTime2 =0; processi.arrivalTime= Arrivali; processi.serviceTime= Servicei; / 获取最先到达的进程下标first int first=0; for(i=1;iArrivali) first=i; processfirst.doneF=true; processfirst.doneS=true; processfirst.FinishTime1 = processfirst.serviceTime + processfirst.arrivalTime; processfirst.FinishTime2 = processfirst.serviceTime + processfirst.arrivalTime; timeflyF += processfirst.arrivalTime+processfirst.serviceTime; timeflyS += processfirst.arrivalTime+processfirst.serviceTime; / 接下去到达的进程coutfcfs-1endlsjf-2endlfcfs&sjf-3choose; if(choose=1|choose=3) / fcfs for(j=1;jnum;j+) nextproF = num+1; for(k =0 ; knum; k+ ) if( !processk.doneF ) if( processk.arrivalTime processk.arrivalTime ) nextproF = k; / 获取到达时刻最先的进程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - / 处理processnextproF.FinishTime1 = processnextproF.serviceTime + timeflyF; timeflyF += processnextproF.serviceTime; processnextproF.doneF=true; if(choose=2|choose=3) / SJF for(j=1;jnum;j+) nextproS = num+1; for(k=0 ; knum; k+ ) if(!processk.doneS) if( processk.arrivalTime processk.serviceTime ) nextproS = k; / 获取服务时间最小的进程 / 处理processnextproS.FinishTime2 = processnextproS.serviceTime + timeflyS; timeflyS += processnextproS.serviceTime; processnextproS.doneS=true; /= float Fz=0,Fdq=0,Sz=0,Sdq=0;/ for(i=0;inum;i+) processi.WholeTime1=processi.FinishTime1-processi.arrivalTime; Fz += processi.WholeTime1; processi.WeightWholeTime1 =(processi.WholeTime1*1.0)/processi.serviceTime; Fdq += processi.WeightWholeTime1 ; processi.WholeTime2=processi.FinishTime2-processi.arrivalTime; Sz += processi.WholeTime2; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - processi.WeightWholeTime2=(processi.WholeTime2*1.0)/processi.serviceTime; Sdq += processi.WeightWholeTime2; if(choose=1|choose=3) /输出couttendl; coutFCFS 运行结果如下 :endl; coutsetw(10) 进程 ID ; coutsetw(10) 完成时间 ; coutsetw(10) 周转时间 ; coutsetw(10) 带权周转时间 endl; for(i=0;inum;i+) coutsetw(10)i+1 ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.FinishTime1 ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.WholeTime1 ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.WeightWholeTime1 endl; cout平均周转时间为:setiosflags(ios:fixed)setprecision(2)Fz/numendl; cout平均带权周转时间为:setiosflags(ios:fixed)setprecision(2)Fdq/numendl; /- if(choose=2|choose=3) couttendl; coutSJF 运行结果如下 :endl; coutsetw(10) 进程 ID ; coutsetw(10) 完成时间 ; coutsetw(10) 周转时间 ; coutsetw(10) 带权周转时间 endl; for(i=0;inum;i+) coutsetw(10)i+1 ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.FinishTime2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.WholeTime2 ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.WeightWholeTime2 endl; cout平均周转时间为:setiosflags(ios:fixed)setprecision(2)Sz/numendl; cout平均带权周转时间为:setiosflags(ios:fixed)setprecision(2)Sdq/numendl; 程序截图如下::fcfs: Sjf: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - Fcfs&sjf: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -