操作系统---先来先服务、短进程调度


#include<iostream>
using namespace std;
static const int MaxNum=100;
int ArrivalTime[MaxNum];
int ServiceTime[MaxNum];
int FinishTime[MaxNum];
int WholeTime[MaxNum];//周转时间;
double WeightWholeTime[MaxNum];//带权周转时间
int visit[MaxNum]={0};
int n;
void creat(){
for(int i=0;i<n;i++)
{FinishTime[i]=0,
WholeTime[i]=0,
WeightWholeTime[i]=0;}

}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void FCFS(){
int beginTime[MaxNum];//进程开始时间;
beginTime[0]=ArrivalTime[0];
FinishTime[0]= beginTime[0]+ServiceTime[0];
//计算第i个进程完成时间
for(int i=1;i<n;i++)
{
if(ArrivalTime[i]<(beginTime[i-1]+ServiceTime[i-1]))
beginTime[i]=beginTime[i-1]+ServiceTime[i-1];
//提前到达,等待前面完成
else
beginTime[i]=ArrivalTime[i];
//后到达,处理机等待;
FinishTime[i]=beginTime[i]+ServiceTime[i];
//计算第i个进程完成的时间
}
//求周转时间;
for(i=0;i<n;i++)
{
WholeTime[i]=FinishTime[i]- ArrivalTime[i];
//周转时间=完成时间-到达时间;
}
//求带权周转时间
for(i=0;i<n;i++)
{
WeightWholeTime[i]=WholeTime[i]/(ServiceTime[i]*1.0);
}


}

double AverageWT_FCFS(){
//FCFS平均周转时间
double sum=0;
for(int i=0;i<n;i++)
{
sum+=WholeTime[i];

}
return sum/(n*1.0);

}

double AverageWWT_FCFS(){
//FCFS平均带权周转时间
double sum=0;
for(int i=0;i<n;i++)
{
sum+=WeightWholeTime[i];

}
return sum/(n*1.0);

}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

int cmp(int use_Time){
//use_Time表示现在系统已经操作多少时间了
int x;//x表示下一个要执行的进程;

for(int i=0;i<n;i++)
{
if(visit[i]==0)
{x=i;break;}
}
x=i;
for( i=0;i<n;i++)
{
if(visit[i]==1)continue;
if(use_Time>=ArrivalTime[i] && ServiceTime[i]<ServiceTime[x])
x=i;

}
//cout<<"x==="<<x<<endl;
return x;

}
void SJF(){
int beginTime[MaxNum];//进程开始时间;
beginTime[0]=ArrivalTime[0];
FinishTime[0]= beginTime[0]+ServiceTime[0];

int pre=0;//完成的进程下标;
visit[0]=1;

for(int j=1;j<n;j++)
{
int i=cmp(FinishTime[pre]);
if(ArrivalTime[i]<(beginTime[pre]+ServiceTime[pre]))
beginTime[i]=beginTime[pre]+ServiceTime[pre];
//提前到达,等待前面完成
else
beginTime[i]=ArrivalTime[i];
//后到达,处理机等待;
FinishTime[i]=beginTime[i]+ServiceTime[i];
//计算第i个进程完成的时间
visit[i]=1;//标记已经访问过了;
pre=i;
}
//求周转时间;
for(int i=0;i<n;i++)
{
WholeTime[i]=FinishTime[i]- ArrivalTime[i];
//周转时间=完成时间-到达时间;
}
//求带权周转时间
for(i=0;i<n;i++)
{
WeightWholeTime[i]=WholeTime[i]/(ServiceTime[i]*1.0);
}


}
double AverageWT_SJF(){
//SJF平均周转时间
double sum=0;
for(int i=0;i<n;i++)
{
sum+=WholeTime[i];

}
return sum/(n*1.0);
}
double AverageWWT_SJF(){
//SJF平均带权周转时间
double sum=0;
for(int i=0;i<n;i++)
{
sum+=WeightWholeTime[i];

}
return sum/(n*1.0);
}
void main(){
freopen("text.txt","rt",stdin);

int i=0;
//cout<<"请输入进程个数"<<endl;
cin>>n;
// cout<<"进程到达系统时刻分别为"<<endl;
for(i=0;i<n;cin>>ArrivalTime[i++]);
// cout<<"进程需要服务时间分别为:"<<endl;
for(i=0;i<n;cin>>ServiceTime[i++]);
FCFS();
cout<<"FCFS平均周转时间"<<AverageWT_FCFS()<<endl;
cout<<"FCFS平均带权周转时间"<<AverageWWT_FCFS()<<endl;
creat();
SJF();
cout<<"SJF平均周转时间"<<AverageWT_SJF()<<endl;
cout<<"SJF平均带权周转时间"<<AverageWWT_SJF()<<endl;
}



优质内容筛选与推荐>>
1、一张图搞懂javascript原型链
2、Python3之hashlib
3、Observer
4、npm常用命令详解
5、Sublime Text3快捷键大全


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号