FCFS CPU调度程序在C++
FCFS CPU Scheduling program in C++
我正在尝试用c ++实现FCFS CPU调度。我有以下代码,它运行无错误,但在某些数字上给了我"垃圾数据",例如所有进程的等待时间、响应时间和周转时间的值,除了第一个计算出来的进程
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class ProcessInfo
{
public:
string ProcessID;
int BurstTime;
int Arrival;
int WaitingTime;
int ResponseTime;
int TurnaroundTime;
};
int main()
{
ProcessInfo P1, P2, P3 = ProcessInfo();
ProcessInfo Array[3] = {P1, P2, P3};
for(int i = 0; i < 3; i++)
{
cout<<"Please enter Process ID for process "<<i<<endl;
cin>>Array[i].ProcessID;
cout<<"Please enter Burst Time for process "<<i<<endl;
cin>>Array[i].BurstTime;
cout<<"Please enter Arrival Time for process "<<i<<endl;
cin>>Array[i].Arrival;
}
if (Array[0].Arrival < Array[1].Arrival && Array[0].Arrival < Array[2].Arrival)
{
if (Array[1].Arrival < Array[2].Arrival)
{
P1.WaitingTime = 0;
P1.ResponseTime = 0;
P1.TurnaroundTime = P1.BurstTime;
P2.WaitingTime = P1.TurnaroundTime - (P2.Arrival - P1.Arrival);
P2.ResponseTime = 0;
P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;
P3.WaitingTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival);
P3.ResponseTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival) ;
P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;
cout<<"Order of processes is: P1, P2, P3"<<endl;
cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;
}
else
if (Array[2].Arrival < Array[1].Arrival)
{
P1.WaitingTime = 0;
P1.ResponseTime = 0;
P1.TurnaroundTime = P1.BurstTime;
P3.WaitingTime = P1.TurnaroundTime - (P3.Arrival - P1.Arrival);
P3.ResponseTime = P3.WaitingTime;
P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;
P2.WaitingTime = P3.TurnaroundTime - (P2.Arrival - P3.Arrival);
P2.ResponseTime = P2.WaitingTime;
P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;
cout<<"Order of processes is: P1, P3, P2"<<endl;
cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;
cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
}
}
else
if(Array[1].Arrival < Array[0].Arrival && Array[1].Arrival < Array[2].Arrival)
{
if (Array[2].Arrival < Array[0].Arrival)
{
P2.WaitingTime = 0;
P2.ResponseTime = 0;
P2.TurnaroundTime = P2.BurstTime;
P3.WaitingTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival);
P3.ResponseTime = P3.WaitingTime;
P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;
P1.WaitingTime = P3.TurnaroundTime - (P1.Arrival - P3.Arrival);
P1.ResponseTime = P1.WaitingTime;
P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;
cout<<"Order of processes is: P2, P3, P1"<<endl;
cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;
cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
}
else
if (Array[0].Arrival < Array[2].Arrival)
{
P2.WaitingTime = 0;
P2.ResponseTime = 0;
P2.TurnaroundTime = P2.BurstTime;
P1.WaitingTime = P2.TurnaroundTime - (P1.Arrival - P2.Arrival);
P1.ResponseTime = P1.WaitingTime;
P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;
P3.WaitingTime = P1.TurnaroundTime - (P3.Arrival - P1.Arrival);
P3.ResponseTime = P3.WaitingTime;
P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime;
cout<<"Order of processes is: P2, P1, P3"<<endl;
cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;
}
}
else
if(Array[2].Arrival < Array[1].Arrival && Array[2].Arrival < Array[0].Arrival)
{
if (Array[1].Arrival < Array[0].Arrival)
{
P3.WaitingTime = 0;
P3.ResponseTime = 0;
P3.TurnaroundTime = P1.BurstTime;
P2.WaitingTime = P3.TurnaroundTime - (P2.Arrival - P3.Arrival);
P2.ResponseTime = P2.WaitingTime;
P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;
P1.WaitingTime = P2.TurnaroundTime - (P1.Arrival - P2.Arrival);
P1.ResponseTime = P1.WaitingTime;
P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;
cout<<"Order of processes is: P3, P2, P1"<<endl;
cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;
cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
}
else
if (Array[0].Arrival < Array[1].Arrival)
{
P3.WaitingTime = 0;
P3.ResponseTime = 0;
P3.TurnaroundTime = P1.BurstTime;
P1.WaitingTime = P3.TurnaroundTime - (P1.Arrival - P3.Arrival);
P1.ResponseTime = P1.WaitingTime;
P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime;
P2.WaitingTime = P1.TurnaroundTime - (P2.Arrival - P1.Arrival);
P2.ResponseTime = P2.WaitingTime;
P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime;
cout<<"Order of processes is: P3, P1, P2"<<endl;
cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl;
cout<<"The response time for P3: "<<P3.ResponseTime<<endl;
cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl;
cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl;
cout<<"The response time for P1: "<<P1.ResponseTime<<endl;
cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl;
cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl;
cout<<"The response time for P2: "<<P2.ResponseTime<<endl;
cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl;
}
}
}
你不初始化变量P1
和P2
,所以这些结构的内容将是未定义的。
这将使以下操作:
P1.TurnaroundTime = P1.BurstTime;
也未定义。
如果需要良好的起始值,请添加默认构造函数。
不要使用 P1
、 P2
和 P3
进行计算。而是使用Array[0]
、Array[1]
和Array[2]
。
#include<iostream>
#include<cstdio>
#include<cstdlib>
int process,*q,i,slice,a=0,at2[10],to[10];
void takeprocess()
{
printf("Enter the total number of processn");
scanf("%d",&process);
}
void takecputime()
{
q=(int*)calloc(process,(sizeof(int)));
for(i=1;i<=process;i++)
{
printf("Enter the CPU burst time for the process P%d : ",i);
scanf("%d",q+i);
to[i]=at2[i]=*(q+i);
}
}
void checkfcfs()
{
int wt1[process];
for(i=1;i<process;i++)
{
a=wt1[i]=*(q+i)+a;
}
a=0;
printf("the waiting time for process P1 is : 0n");
for(i=1;i<process;i++)
{
a=wt1[i]+a;
printf("the waiting time for process P%d is : %dn",i+1,wt1[i]);
}
a=a/process;
printf("the average waiting time for processes are :%dn",a);
printf("the sequence of the processes are as followsn");
for(i=1;i<=process;i++)
{
printf("P%dn",i);
}
}
using namespace std;
int main()
{
takeprocess();
takecputime();
checkfcfs();
return 0;
}
相关文章:
- 如何在boost.fibers中使用work_stealing调度程序
- C - 用STD :: difftime编写调度程序 - 如何在白天检查时间(HH:MM:SS)
- 任务调度程序API错误80041318
- 调度程序有时会在启动时忽略分叉进程
- 如何使用Microsoft PPL轻量级任务调度程序实现后退
- 磁盘调度程序SCAN算法错误
- C++ Arduino Uno 的调度程序
- 使用 Boost 协程实现多任务调度程序和执行程序
- 您将如何在调度程序中实现这种自适应的"软糖因子"?
- 我可以使用cocos2d-x调度程序来延迟一行代码吗
- FCFS CPU调度程序在C++
- C++调度程序的排序功能
- 多次定义"调度程序::_singleton",导入标头两次
- 关于调度程序代码
- 在后台线程上创建的调度程序未关闭时会发生什么情况?如何确保调度程序已正确关闭
- Qt App在任务调度程序启动时不加载sql驱动程序
- 任务调度程序:从当前时刻开始,每小时运行一次任务
- 线程调度程序模拟:唤醒和睡眠Pthread的正确方法
- OpenMP中调度程序对循环变量的处理
- xiAPI:无法更改线程调度程序,请检查实时优先级的用户限制