先来先服务FCFS和短作业优先SJF进程调度算法
- 格式:doc
- 大小:46.00 KB
- 文档页数:6
实验一先来先服务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)上机前认真复习FCFS和SJF进程调度调度算法,熟悉进程调度的执行过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图、发现的问题以及解决方法)。
四、源程序#include<iostream>#include<fstream>#include<iomanip>using namespace std;void FCFS();void SJF();static const int MaxNum=100;int ArrivalTime[MaxNum];//到达时间int ServiceTime[MaxNum];//服务时间int FinishTime[MaxNum];//完成时间int WholeTime[MaxNum];//周转时间double WeightWholeTime[MaxNum];//带权周转时间double AverageWT_FCFS,AverageWT_SJF; //平均周转时间double AverageWWT_FCFS,AverageWWT_SJF;//平均带权周转时间int ServiceTime2[MaxNum];//用于计算SJF的量int Data=0;int PNum=0;int NowTime=0; double x=0,y=0;int i;void main(){int a;cout<<"input pnum:";cin>>PNum;for(i=0;i<PNum;i++){cout<<"input p"<<i+1<<" ArrivalTime:"<<endl;cin>>Data;ArrivalTime[i]=Data;}for( i=0;i<PNum;i++){cout<<"input p"<<i+1<<" ServiceTime:"<<endl;cin>>Data;ServiceTime[i]=Data;ServiceTime2[i]=Data;}cout<<"choose type:"<<endl<<"1-FCFS"<<endl<<"2-SJF";cin>>a;if(a==1){FCFS();}else{SJF();}}void FCFS(){cout<<"-------------------------------------------"<<endl;cout<<" "<<"FCFS"<<" "<<endl;cout<<"-------------------------------------------"<<endl;for(i=0;i<PNum;i++){if(ArrivalTime[i]>NowTime){NowTime=ArrivalTime[i];}NowTime+=ServiceTime[i];FinishTime[i]=NowTime;WholeTime[i]=FinishTime[i]-ArrivalTime[i];WeightWholeTime[i]=(double)WholeTime[i]/ServiceTime[i];}for(i=0;i<PNum;i++){x+=WholeTime[i];y+=WeightWholeTime[i];}AverageWT_FCFS=x/PNum;AverageWWT_FCFS=y/PNum;for(i=0;i<PNum;i++){cout<<"moment "<<FinishTime[i]-ServiceTime[i]<<":p"<<i+1<<"run"<<endl;}cout<<"WholeTime:"<<" "<<"WeightWholeTime"<<endl;for(i=0;i<PNum;i++){cout<<" "<<WholeTime[i]<<setprecision(3)<<" "<<WeightWholeTime[i]<<setprecision(3)<<endl;}cout<<"AverageWT_FCFS:"<<AverageWT_FCFS<<endl;cout<<"AverageWWT_FCFS:"<<AverageWWT_FCFS<<endl;system("PAUSE");}void SJF(){cout<<"-------------------------------------------"<<endl;cout<<" "<<"SJF"<<" "<<endl;cout<<"-------------------------------------------"<<endl;NowTime=0; //SJFx=0;y=0;int smallest=0;NowTime+=ServiceTime[0];FinishTime[0]=NowTime;ServiceTime2[0]=1000000;cout<<"moment "<<FinishTime[0]-ServiceTime[0]<<":p"<<1<<"run"<<endl;int allin=0,j,k;for(i=1;i<PNum;i++){k=1;smallest=0;if(allin==0){j=0;while(ArrivalTime[j]<=NowTime&&j<PNum){j++;if(j>=PNum){allin=1;}} }else{j=PNum;}j=j-1;while(k<=j){if(ServiceTime2[k]==0){k++;}else{if(ServiceTime2[smallest]>ServiceTime2[k]){smallest=k;}k++;}}ServiceTime2[smallest]=0;NowTime+=ServiceTime[smallest];FinishTime[smallest]=NowTime;cout<<"moment"<<FinishTime[smallest]-ServiceTime[smallest]<<":p"<<smallest+1<<"run"<<endl;}for(i=0;i<PNum;i++){WholeTime[i]=FinishTime[i]-ArrivalTime[i];WeightWholeTime[i]=(double)WholeTime[i]/ServiceTime[i];}cout<<"WholeTime"<<" "<<"WeightWholeTime"<<endl;for(i=0;i<PNum;i++){cout<<" "<<WholeTime[i]<<setprecision(3)<<" "<<WeightWholeTime[i]<<setprecision(3)<<endl;}for(i=0;i<PNum;i++){x+=WholeTime[i];y+=WeightWholeTime[i];}AverageWT_SJF=x/PNum;AverageWWT_SJF=y/PNum;cout<<"AverageWT_SJF:"<<AverageWT_SJF<<endl;cout<<"AverageWWT_SJF:"<<AverageWWT_SJF<<endl;system("PAUSE");}五、结果。