模拟进程调度
来源:互联网 发布:m37560efgp数据手册 编辑:程序博客网 时间:2024/05/21 22:48
/***************************************************
进程的调度算法
1.FCFS
2.SJF
3.RR
t=等待+运行=完成-到达
w=t/运行
2007/6/26
Made by LG
***************************************************/
#include "iostream"
#include "ctime"
#include "vector"
#include "string"
using namespace std;
typedef struct node
{
int name;
time_t arrive;
time_t run;
float ping;
float quan;
struct node *next;
}PCB;
long ot=-1;
float p_ping;
float p_quan;
PCB *init(int num)
{
time_t t;
PCB *head=new PCB;
PCB *s;
char ch[2];
PCB *r=new PCB;
cin.getline(ch,1,'/n');
cout<<"进程名将以顺序命名."<<endl;
time(&t);
srand(t);
for(int i=0;i<num;++i)
{
cin.getline(ch,1,'/n');
if(ch[0]==NULL)
{
time(&t);
s=new PCB;
s->name=i;
if(ot==-1)
{
ot=t;
}
s->arrive=t-ot;
s->run=rand()%20+1;
s->ping=0;
s->quan=0;
if(i==0)
{
head->next=s;
r->next=s;
r=s;
}
else
{
r->next=s;
r=s;
}
}
}
r->next=NULL;
r=NULL;
s=NULL;
delete s;
delete r;
return head;
}
void ismostlong(vector<PCB>::iterator iter,vector<PCB>& v1,vector<PCB>::iterator& answer,long tt)
{
vector<PCB>::iterator t;
t=v1.begin()+1;
long ts;
vector<PCB>::iterator most;
most=NULL;
ts=1000;
// tt=iter->arrive+iter->run;
for(;t!=v1.end();t++)
{
if(t->arrive>=0 && t->arrive<=tt)
{
if(ts>t->run)
{
most=t;
ts=most->run;
// break;
}
}
}
answer=most;
}
int main(void)
{
int jjhhgg;
PCB *head;
cout<<"要创建多少进程:";
cin>>jjhhgg;
head=init(jjhhgg);
PCB *temp=head->next;
vector<PCB> v1;
while(temp)
{
cout<<temp->name<<'/t'<<temp->arrive<<'/t'<<temp->run<<endl;
v1.push_back(*temp);
temp=temp->next;
}
cout<<"选择你要使用的调度算法。"<<endl;
cout<<"1.FCFS"<<endl;
cout<<"2.SJF"<<endl;
cout<<"3.RR"<<endl;
int choose;
cin>>choose;
if(choose==1) //完成
{
cout<<"执行顺序为:"<<endl;
int m=0;
vector<PCB>::iterator iter;
iter=v1.begin();
int wait=0;
while(iter!=v1.end())
{
cout<<iter->name<<" ";
iter->ping=wait+iter->run;
iter->quan=(float)(iter->ping/iter->run);
wait+=iter->run;
p_ping+=iter->ping;
p_quan+=iter->quan;
iter++;
}
cout<<endl;
cout<<"周转时间"<<'/t'<<"带权周转"<<'/t'<<"平均周转"<<'/t'<<"平均带权"<<endl;
for(iter=v1.begin();iter!=v1.end();++iter)
{
cout<<iter->ping<<'/t'<<'/t'<<iter->quan<<'/t'<<'/t'<<p_ping/jjhhgg<<'/t'<<'/t'<<p_quan/jjhhgg<<endl;
}
cout<<endl;
}
else if(choose==2)
{
long tim;
int wait=0;
vector<PCB> peihe;
vector<PCB>::iterator iter;
vector<PCB>::iterator answer;
iter=v1.begin();
cout<<"执行顺序为:"<<endl;
iter->ping=iter->run;
iter->quan=iter->ping/iter->run;
cout<<iter->name<<" ";
//等待时间
tim=iter->arrive+iter->run;
peihe.push_back(*iter);
wait=iter->run;
iter++;
int us=0;
for(;iter;iter++)
{
if(us==jjhhgg-1)
break;
ismostlong(iter,v1,answer,tim);
cout<<answer->name<<" ";
tim+=answer->run;
answer->ping=wait+answer->run;
answer->quan=answer->ping/answer->run;
wait+=answer->run;
p_ping+=answer->ping;
p_quan+=answer->quan;
peihe.push_back(*answer);
us++;
answer->arrive=-1;
}
cout<<endl;
cout<<"周转时间"<<'/t'<<"带权周转"<<'/t'<<"平均周转"<<'/t'<<"平均带权"<<endl;
for(iter=peihe.begin();iter!=peihe.end();++iter)
{
cout<<iter->ping<<'/t'<<'/t'<<iter->quan<<'/t'<<'/t'<<p_ping/jjhhgg<<'/t'<<'/t'<<p_quan/jjhhgg<<endl;
}
cout<<endl;
cout<<endl;
}
else if(choose==3) //完成
{
vector<PCB>::iterator iter;
iter=v1.begin();
int size;
cout<<"输入时间片大小:";
cin>>size;
cout<<"执行顺序为:"<<endl;
long now=iter->arrive;
int tol=0;
int kk;
int wait=0;
vector<int> v2;
vector<int>::iterator i;
int ss;
for(iter=v1.begin();iter!=v1.end();++iter)
{
ss=iter->run;
v2.push_back(ss);
}
iter=v1.begin();
while(true)
{
int ut=0,t; //防止运行时间少于周转时间情况的等待时间出错
if(iter->arrive<=now && iter->run>0)
{
t=iter->run;
kk=size;
while(kk>0)
{
kk--;
cout<<iter->name;
iter->run--;
iter->ping=++wait;
if(iter->run==0)
{
ut=1;
break;
}
}
if(ut==0)
now+=size;
else
now+=t;
}
if(iter->run<=0)
{
if(iter->name>=0)
{
iter->name=-1;
tol++;
}
else
{}
}
if(iter->next==NULL)
{
iter=v1.begin();
}
else
iter++;
if(tol==jjhhgg)
break;
}
cout<<endl;
i=v2.begin();
for(iter=v1.begin();iter!=v1.end();++iter)
{
iter->quan=iter->ping/(*i);
i++;
p_ping+=iter->ping;
p_quan+=iter->quan;
}
// p_ping/=jjhhgg;
// p_quan/=jjhhgg;
cout<<"周转时间"<<'/t'<<"带权周转"<<'/t'<<"平均周转"<<'/t'<<"平均带权"<<endl;
for(iter=v1.begin();iter!=v1.end();++iter)
{
cout<<iter->ping<<'/t'<<'/t'<<iter->quan<<'/t'<<'/t'<<p_ping/jjhhgg<<'/t'<<'/t'<<p_quan/jjhhgg<<endl;
}
cout<<endl;
}
return 0;
}
- 进程调度模拟程序
- 进程调度模拟
- 模拟进程调度
- 进程调度模拟
- 进程调度模拟算法
- 模拟设计进程调度
- 进程调度模拟
- 模拟进程调度
- 模拟进程调度
- 模拟进程调度
- 模拟进程调度算法
- 进程调度模拟
- 处理机进程调度模拟
- C 模拟进程调度
- 进程调度模拟算法
- 进程调度模拟
- 【进程调度】模拟进程调度的过程
- 操作系统进程调度模拟程序
- 让HGE支持网络(1) - HGE网络基础
- 抽象提高可维护性,实例来证明(delphi)
- 打印机十大共性故障的解决方法
- 实验13 应用个人防火墙
- 有关Delphi编译优化的问题
- 模拟进程调度
- 为什么计算机软件开发人才难招??
- IBatisNet的问题总结
- jsp文件得到WebApplicationContext
- 将记录按照某一规律的次序排序
- 46个细节帮你看透一个男人
- div的visibility和display属性区别
- IBatis.Net怎么使用VS 2005来做单元测试
- 用Pop3收取gmail的邮件(摘录)