27 unsigned long int Process::currentNumber = 0;
34 std::vector<double> burst(1);
35 std::shared_ptr<Process> job = std::make_shared<Process>(task.pid, 1, burst, std::vector<double>(), task.priority);
39 job->deadline = task.deadline;
40 job->deadlineTime = task.deadlineTime;
41 job->period = task.period;
42 job->bcet = task.bcet;
43 job->wcet = task.wcet;
45 job->jobNumber = task.jobNumber + 1;
46 job->randomDist = task.randomDist;
54 assert(randomGenerator !=
nullptr);
56 std::vector<double> cpuBurst = std::vector<double>(nbBursts);
57 std::vector<double> ioBurst = std::vector<double>(nbBursts);
58 for (
int i = 0;
i < nbBursts;
i++)
60 cpuBurst[
i] = randomGenerator->
drawExp(cpuLambda)*100;
61 ioBurst[
i] = randomGenerator->
drawExp(ioLambda);
63 std::shared_ptr<Process> p = std::make_shared<Process>(
Process::getNewPid(), nbBursts, cpuBurst, ioBurst);
77 std::vector<double> cpuBurst = std::vector<double>(nbBursts);
78 std::vector<double> ioBurst = std::vector<double>(nbBursts);
79 std::cerr <<
"in Process, wcet is " << wcet <<
"\n";
82 std::shared_ptr<Process> p = std::make_shared<Process>(pid, nbBursts, cpuBurst, ioBurst, priority);
83 p->setRtParams(dl, T, wcet, bcet);
101 randomGenerator = gen;
118 if(currentNumber++ > maxNumber)
119 throw std::runtime_error(
"too many processes created");
124 if(currentNumber++ > maxNumber)
125 throw "too many processes created";
129 nbBursts = task.nbBursts;
130 cpuBurst = std::vector<double>(nbBursts);
131 ioBurst = std::vector<double>(nbBursts);
132 for (
int i = 0;
i < nbBursts;
i++)
134 cpuBurst[
i] = task.cpuBurst[
i];
135 ioBurst[
i] = task.ioBurst[
i];
137 priority = task.priority;
139 deadline = task.deadline;
141 period = task.period;
144 jobNumber = task.jobNumber;
145 randomDist = task.randomDist;
176 return currentBurst < nbBursts;
186 return cpuBurst[currentBurst];
191 if (nbBursts > currentBurst && ioBurst.size() > 0)
192 return ioBurst[currentBurst];
203 void Process::setDuration()
205 assert(nbBursts == 1);
206 assert(bcet <= wcet);
207 double duration = (randomDist ==
nullptr ? 1.0 : randomDist->draw());
208 duration = bcet + (wcet-bcet)*duration;
209 cpuBurst[0] = duration;
224 deadlineTime = deadline + startTime;
243 cpuBurst[--currentBurst] = aow;
258 stream <<
"Processs "<<pid<<
":\n";
259 stream <<
" priority: "<<priority<<
"\n";
260 stream <<
" Bursts:\n";
261 for (
int i = 0;
i < nbBursts;
i++)
263 stream <<
" "<<
i <<
". CPU: "<< cpuBurst[
i] <<
"\n";
264 stream <<
" IO: " << ioBurst[
i] <<
"\n";
266 stream <<
" Power coefficient: "<<
powerCoeff<<
"\n";
269 stream <<
" This proces IS real-time\n";
270 stream <<
" Deadline: "<< deadline <<
"\n";
272 stream <<
" Period: "<< period <<
"\n";
276 stream <<
" This process IS NOT real-time\n";
void setDurationDistribution(std::shared_ptr< Utils::BoundedRandomDistribution > randomDist)
static unsigned long int getMaxNumber()
returns the maximum number of process that can ever be created
void updateCurrentAow(double aow)
double getDeadlineTime() const
static std::shared_ptr< Process > createRealTimeTask(double wcet, double T, double dl, int pid, int priority=0, double bcet=0.0)
creates a real time task
static void setRandomGenerator(Utils::RandomGenerator *gen)
specify what random generator to use for interactive task length
static std::shared_ptr< Process > createProcess(double cpuLambda, double ioLambda)
creates an "interactive" process
static int getNewPid()
returns new process identifier. The value returned gets incremented at each call
double getDeadline() const
void incrementJobNumber()
void setDeadlineTimeFromStartTime(double startTime)
void setPriority(int pri)
unsigned int getJobNumber() const
double drawExp(double lambda)
double getCurrentIoTime() const
Process(int pid, int nbBursts, std::vector< double > cpuBursts, std::vector< double > ioBursts, int priority=0)
void setRtParams(double dl, double T, double wcet, double bcet)
static std::shared_ptr< Process > createNextJob(const Process &task)
create the next job for a task
void print(std::ostream &stream) const
void setPowerCoeff(double)
double getCurrentCpuAow() const
static void end()
call this function before any other