#include<stdio.h>
#include<string.h>
#include<iostream.h>
const int MAXNUM=10; //定义最大进程数
//定义进程结构体
typedef struct node
{
char name[10]; //名称
int status; //状态
int time; //服务时间
int PRI; //优先级
int finished; //完成标志
int finish_time; //完成时间
int wait_time; //等待时间
}pcb;
pcb pcbs[MAXNUM];
int count; //定义数量
//初始化,将数据全部置为空
void initial()
{
int i;
for(i=0;i<MAXNUM;i++)
{
strcpy(pcbs[i].name,"");
pcbs[i].status=0;
pcbs[i].time=0;
pcbs[i].PRI=0;
pcbs[i].finished=0;
pcbs[i].wait_time=0;
pcbs[i].finish_time=0;
}
count=0;
}
int input() //输入进程信息
{
int i;
count=0;
cout<<"*******************************"<<endl;
cout<<"**进 程 调 度 系 统 **"<<endl;
cout<<"**廖德云 计算机06级1班54号 **"<<endl;
cout<<"*******************************"<<endl;
cout<<" "<<endl;
cout<<"请输入就绪进程数(最大数为10):"<<endl;
cin>>i;
while(i)
{
cout<<"---->请输入第"<<count+1<<"条记录<----"<<endl;
cout<<"^^^^…^^^^^请输入进程名: ^^^^^…^^^^"<<endl;
scanf("%s",pcbs[count].name);
cout<<"^^^…^^^^^^请输入服务时间:^^^^^…^^^"<<endl;
scanf("%d",&pcbs[count].time);
cout<<"请输入进程优先级(数越小,优先级越高):"<<endl;
scanf("%d",&pcbs[count].PRI);
count++;
i--;
}
//显示所输入的信息
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"所有进程信息:"<<endl;
cout<<"进程名 服务时间 优先级"<<endl;
for(i=0;i<count;i++)
{
cout<<" "<<pcbs[i].name<<" "<<pcbs[i].time<<" "<<pcbs[i].PRI<<endl;
}
return(1);
}
//将数据的完成时间和等待时间和完成标志置为0,以供其他算法使用
void init()
{
int i;
for(i=0;i<MAXNUM;i++)
{
pcbs[i].finished=0;
pcbs[i].wait_time=0;
pcbs[i].finish_time=0;
}
}
//优先级调度算法
int PRI()
{
int i,j,p;
int passed_time=0;
int total;
int queue[MAXNUM]; //定义队列
int current_PRI;
for(i=0;i<count;i++)
{
current_PRI=100;
for(j=0;j<count;j++)
{
if((pcbs[j].finished==0)&&(pcbs[j].PRI<current_PRI))
{
p=j;
current_PRI=pcbs[j].PRI;
}
}
queue[i]=p;
pcbs[p].finished=1;
pcbs[p].wait_time+=passed_time;
pcbs[p].finish_time=pcbs[p].wait_time+pcbs[p].time;
passed_time+=pcbs[p].time;
}
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"优先级调度算法:"<<endl;
cout<<"进程名 等待时间 完成时间"<<endl;
for(i=0;i<count;i++)
{
cout<<" "<<pcbs[queue[i]].name<<" "<<pcbs[queue[i]].wait_time<<" "<<pcbs[queue[i]].finish_time<<endl;
}
total=0;
for(i=0;i<count;i++)
{
total+=pcbs[i].wait_time;
}
return total;
}
//先来先服务算法
int FCFS()
{
int i,j;
int total;
//输出数据结果
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"FCFS调度算法:"<<endl;
cout<<"进程名 等待时间 完成时间"<<endl;
for(i=0;i<count;i++)
{
pcbs[i].finish_time=pcbs[i].wait_time+pcbs[i].time;
cout<<" "<<pcbs[i].name<<" "<<pcbs[i].wait_time<<" "<<pcbs[i].finish_time<<endl;
for(j=i+1;j<count;j++)
{
pcbs[j].wait_time+=pcbs[i].time;
}
}
total=0;
for(i=0;i<count;i++)
{
total+=pcbs[i].wait_time;
}
return total;
}
//主函数
void main()
{
int flag;
int fcfstotal;
int PRItotal;
initial(); //调用初始化函数
flag=input(); //调用输入进和信息函数
if(flag==1)
{
fcfstotal=FCFS();
init();
PRItotal=PRI();
}
//输出两种算法的总体情况
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"调 度 算法 "<<"总等待时间 "<<"平均等待时间"<<endl;
cout<<"先来先服务 算法: "<<fcfstotal<<" "<<fcfstotal/count<<endl;
cout<<"优先 权 算法: "<<PRItotal<<" "<<PRItotal/count<<endl;
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
}
jinchengdiaodu.rar_jinchengdiaodu
版权申诉
59 浏览量
2022-09-14
15:48:17
上传
评论
收藏 2KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/2416af5c19524431b870352d943af459_weixin_42659196.jpg!1)
周楷雯
- 粉丝: 80
- 资源: 1万+