操作系统——进程调度模拟实验

用 C++语言实现对 N (N=5)个进程的调度模拟,可以采用如先到先服务FCFS,简单轮转法 Round Robin、 优先权高者优先算法 Highest Priority First,高响应比优先调度算法HRRN 等,运行结果显示了模拟调度算法的具体过程和给出了周转时间和平均周转时间的结果。

这里我只是用了普通的数组来实现的,较简单,实现的功能也比较少。本人三流学校大三还是编程菜鸟,这也是我在博客园的第一篇博客,各位大佬将就着看看,有什么建议也希望你们能不吝赐教!
以下是具体实现代码和调试结果:

#include<iostream>
#include<stdio.h>
using namespace std;
int rr()
{
int l=1;
int d=0;
int b[6];
int running[6];
int arrivetime[6];
cout<<"输入进程工作所需时间 running 队列"<<endl;
for(int i=1;i<=5;i++)
{
cin>>running[i];
}
cout<<"输入进程到达时间 arrivetime 队列"<<endl;
for(int i=1;i<=5;i++)
{
cin>>arrivetime[i];
}
int k=0;
for(int m=1;m<6;m++)
{
k=k+running[m];
}
for(int j=1;j<=k;j++)
{
if(l>=6)
{
l=l%5;
if(l==0)
{
l=5;
}
if(running[l]==0)
{
bool x=false;
for(int c=l+1;c<6;c++)
{
if(running[c]!=0)
{
running[c]--;
x=true;
break;
}
}
if(x==false)
{
for(int c=1;c<l;c++)
{
if(running[c]!=0)
{
running[c]--;
break;
}
}
}
l=l+1;
}
else
{
running[l]--;
l=l+1;
}
}
else
{
if(running[l]==0)
{
bool x=false;
for(int c=l+1;c<6;c++)
{
if(running[c]!=0)
{
running[c]--;
x=true;
break;
}
}
if(x==false)
{
for(int c=1;c<l;c++)
{
if(running[c]!=0)
{
running[c]--;
break;
}
}
}
l=l+1;
}
else
{
running[l]--;
l=l+1;
}
}
cout<<"完成第"<<j<<"个时间片的情况是:"<<endl;
cout<<"running 队列"<<endl;
for(int f=1;f<6;f++)
{
cout<<running[f]<<'\t';
if(running[f]==0)
{
b[f]=j-arrivetime[f];
running[f]=-1;
}
}
cout<<'\n'<<"arrivetime 队列"<<endl;
for(int r=1;r<6;r++)
{
cout<<arrivetime[r]<<'\t';
}
cout<<'\n';
}
cout<<"周转时间队列为:"<<endl;
for(int u=1;u<6;u++)
{
cout<<b[u]<<'\t';
d=d+b[u];
}
cout<<'\n';
cout<<"平均周转时间为:"<<d/5<<endl;
cout<<"进程共需运行"<<k<<"个时间片这么长时间"<<endl;
return 0;
}

int fcfs()
{
int h=0;
double b[6];
int running[6];
int arrivetime[6];
cout<<"输入进程工作所需时间 running 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>running[i];
}
cout<<"输入进程到达时间 arrivetime 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>arrivetime[i];
}
int a=arrivetime[1];
for(int j=1;j<6;j++)
{
a=a+running[j];
running[j]=0;
b[j]=a-arrivetime[j];
cout<<"第"<<j<<"个进程结束的时间是"<<a<<endl;
cout<<"running 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<running[k]<<'\t';
if(running[k]==0)
{
running[k]=-1;
}
}
cout<<'\n'<<"arrivetime 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<arrivetime[k]<<'\t';
}
cout<<'\n';
}
cout<<"周转时间队列为:"<<endl;
for(int j=1;j<6;j++)
{
cout<<b[j]<<'\t';
h=h+b[j];
}
cout<<'\n';
cout<<"平均周转时间为:"<<h/5<<endl;
return 0;
}

int hpf()
{
int d=0;
int b[6];
int running[6];
int arrivetime[6];
int por[6];
int r;
cout<<"输入进程工作所需时间 running 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>running[i];
}
cout<<"输入进程到达时间 arrivetime 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>arrivetime[i];
}
int a=arrivetime[1];
cout<<"输入进程优先级 priority 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>por[i];
}
por[1]=0;
r=running[1];
running[1]=0;
b[1]=r-arrivetime[1];
cout<<"第1个进程结束的时间是"<<r<<endl;
cout<<"running 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<running[k]<<'\t';
if(running[k]==0)
{
running[k]=-1;
}
}
cout<<'\n';
cout<<"priority 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<por[k]<<'\t';
}
for(int j=2;j<6;j++)
{
int q=2;
int w=q;
for(int p=3;p<6;p++)
{
if(por[w]<por[p])
{
w=p;
}
}
r=r+running[w];
b[w]=r-arrivetime[w];
por[w]=0;
running[w]=0;
cout<<'\n';
cout<<"第"<<j<<"个进程结束的时间是"<<r<<endl;
cout<<"running 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<running[k]<<'\t';
if(running[k]==0)
{
running[k]=-1;
}
}
cout<<'\n';
cout<<"priority 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<por[k]<<'\t';
}
}
cout<<'\n';
cout<<"周转时间队列为:"<<endl;
for(int u=1;u<6;u++)
{
cout<<b[u]<<'\t';
d=d+b[u];
}
cout<<'\n';
cout<<"平均周转时间为:"<<d/5<<endl;
return 0;
}

int hrrn()
{
double d=0;
double b[6];
double running[6];
double arrive[6];
double por[6];
cout<<"输入进程工作所需时间 running 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>running[i];
}
cout<<"输入进程到达时间 arrivetime 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>arrive[i];
}
cout<<"输入进程优先级 priority 队列"<<endl;
for(int i=1;i<6;i++)
{
cin>>por[i];
}
double r;
r=running[1]+arrive[1];
b[1]=r-arrive[1];
cout<<"第1个进程结束的时间是"<<r<<endl;
running[1]=0;
cout<<"running 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<running[k]<<'\t';
if(running[k]==0)
{
running[k]=-1;
}
}
cout<<'\n'<<"arrivetime 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<arrive[k]<<'\t';
}
cout<<'\n'<<"priority 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<por[k]<<'\t';
}
for(int g=2;g<6;g++)
{
por[g]=(r-arrive[g]+running[g])/running[g];
}
for(int j=2;j<6;j++)
{
int q=2;
int w=q;
for(int p=3;p<6;p++)
{
if(por[w]<por[p])
{
w=p;
}
}
r=r+running[w];
b[w]=r-arrive[w];
running[w]=0;
cout<<'\n'<<"第"<<j<<"个进程结束的时间是"<<r<<endl;
cout<<"running 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<running[k]<<'\t';
if(running[k]==0)
{
running[k]=-1;
}
}
cout<<'\n'<<"arrivetime 队列为"<<endl;
for(int k=1;k<6;k++)
{
cout<<arrive[k]<<'\t';
}
cout<<'\n'<<"priority 队列为"<<endl;
for(int k=1;k<6;k++)
{
if(running[k]==-1)
{
por[k]=0;
}
cout<<por[k]<<'\t';
}
por[w]=0;
for(int g=2;g<6;g++)
{
if(running[g]==0)
{
por[g]=0;
}
else
por[g]=(r-arrive[g]+running[g])/running[g];
}
}
cout<<'\n';
cout<<"周转时间队列为:"<<endl;
for(int u=1;u<6;u++)
{
cout<<b[u]<<'\t';
d=d+b[u];
}
cout<<'\n';
cout<<"平均周转时间为:"<<d/5<<endl;
return 0;
}

int main()
{
int c;
while(true)
{
cout<<"1:先来先服务调度算法"<<endl;
cout<<"2:优先级调度算法"<<endl;
cout<<"3:时间片调度算法"<<endl;
cout<<"4:高响应比调度算法"<<endl;
cout<<"请输入序号:"<<endl;
cin>>c;
switch(c)
{
case 1:fcfs();
break;
case 2:hpf();
break;
case 3:rr();
break;
case 4:hrrn();
break;
default:cout<<"输入有误,重新输入!"<<endl;
break;
}
}
return 0;
}

 

转载于:https://www.cnblogs.com/CIan-722/p/6088842.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值