-
Notifications
You must be signed in to change notification settings - Fork 0
/
pcter.cpp
89 lines (85 loc) · 2.95 KB
/
pcter.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "pcter.h"
#include "chargement.h"
pcter::pcter(){
tme =tma = 0;
}
pcter::~pcter(){
}
void pcter::addProcess(Processus &proc){
l.ajouterProcessus(&proc);
}
void pcter::affectList(){
l = chargerDonneesDepuisFichier("C://Users//cheik//OneDrive//Bureau//data.txt");
}
void pcter::traiterProcessus(){
int nb_processes = l.listProcessSize();
int tour = 0;
while (!l.estVide()){
if(!processeur.estVide() && processeur.premierProcessus()->estEnCalcul() && processeur.premierProcessus()->getTeteTache().temps == 0){
Processus* proc = processeur.premierProcessus();
processeur.defiler();
proc->supprimerTache();
}
if(!disque.estVide() && !disque.premierProcessus()->estEnCalcul() && disque.premierProcessus()->getTeteTache().temps == 0){
Processus* proc = disque.premierProcessus();
disque.defiler();
proc->supprimerTache();
}
l.init();
while (l.existe()){
Processus *proc = l.prochain();
if(proc){
if(!proc->tachesVide() && tour >= proc->getTempsArrivee()){
if(proc->estEnCalcul()){
if(!processeur.recherche(proc->getNomProcessus())){
processeur.enfiler(proc);
}
}
else{
if(!disque.recherche(proc->getNomProcessus()))
disque.enfiler(proc);
}
}
}
}
processeur.sortByTime();
l.init();
while (l.existe()){
int iswaiting = 1;
Processus *proc = l.prochain();
if(proc && tour >= proc->getTempsArrivee()){
if(!proc->tachesVide() && !proc->estEnCalcul())
proc->setEtat("Bloque");
else if(!processeur.estVide() && processeur.estEnTete(proc->getNomProcessus())){
proc->setEtat("Actif");
iswaiting = 0;
}
else if(processeur.recherche(proc->getNomProcessus()))
proc->setEtat("Pret");
else if(proc->tachesVide()){
tma += proc->getTempsAttente();
proc->setTempsFin(tour + 1);
tme += (proc->getTempsFin() - proc->getTempsArrivee());
l.supprimer(proc->getNomProcessus());
}
if(iswaiting && !proc->tachesVide())
proc->upgradeWaiting();
}
}
if(!processeur.estVide()){
processeur.premierProcessus()->decrementerTempsDeTeteListeTache();
}
if(!disque.estVide()){
disque.premierProcessus()->decrementerTempsDeTeteListeTache();
}
tour++;
}
tma /= nb_processes;
tme /= nb_processes;
}
float pcter::getTme(){
return tme;
}
float pcter::getTma(){
return tma;
}