先来先服务和短作业优先调度算法
- 格式:docx
- 大小:47.85 KB
- 文档页数:15
操作系统》实验一实验报告
【实验题目】:先来先服务FCFS 和短作业优先SJF进程调度算法【实验目的】
通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
【实验内容】
问题描述:
设计程序模拟进程的先来先服务FCFS 和短作业优先SJF 调度过程。假设有n个进程分别在T1, ⋯,T n时刻到达系统,它们需要的服务时间分别为S1, ⋯,S n。分别采用先来先服务FCFS和短作业优先SJF 进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n 个进程的平均周转时间和平均带权周转时间。
程序要求如下:
1)进程个数n;每个进程的到达时间T1, ⋯,T n 和服务时间S1, ⋯,S n;选择算法1-FCFS,2-SJF。
2)要求采用先来先服务FCFS 和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;
3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程 B 开始运行”等等;
4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,
所有进程的平均周转时间,带权平均周转时间
【实验过程】
#include
#define MaxNum 100
int ArrivalTime[MaxNum];
double ServiceTime[MaxNum]; double FinishTime[MaxNum]; double WholeTime[MaxNum];
double AVEWholeTime[MaxNum]; double
AVEWeightWholeTime[MaxNum]; double WeightWholeTime[MaxNum]; double AverageWT_FCFS,AverageWT_SJF; double
AverageWWT_FCFS,AverageWWT_SJF; double
AllTime,WeightAllTime;
double a[MaxNum];
int b[MaxNum];
int c[MaxNum]; int d[MaxNum]; void FCFS(); void SJF();
void FCFS()
{
int ProcessNum;
cout<<" --------- 先来先服务算法"< cout<<" 请输入进程个数:"; cin>>ProcessNum; cout<<" 输入进程到达时间:"; cout< for(int i=0;i { cin>>ArrivalTime[i]; //cout< } cout< cout<<"请输入进程服务时间: cout< for(int i=0;i { cin>>ServiceTime[i]; //cout< } cout< for(int i=0;i { FinishTime[i]=ServiceTime[i]; } for(int i=0;i { FinishTime[i+1]=FinishTime[i]+FinishTime[i+1]; } for(int i=0;i { cout<<"时刻"< 完成时间:"; } cout<<"PCFS for(int i=0;i { cout< } cout< for(int i=0;i WholeTime[i]=FinishTime[i]-ArrivalTime[i]; for(int i=0;i { cout< } cout< cout<<"PCFS 平均周转时间:"; for(int i=0;i { AVEWholeTime[i]=WholeTime[i]; //cout< } for(int i=0;i { AVEWholeTime[i+1]=A VEWholeTime[i]+A VEWholeTime[i+1]; //cout< AllTime=A VEWholeTime[i+1]; } cout< AverageWT_FCFS=AllTime/ProcessNum; cout<<" 平均周转时间"< cout<<"PCFS 带权周转时间:"; for(int i=0;i {