Accueil > > > SIMULATION DE L'EXÉCUTION DES PROCESSUS
SIMULATION DE L'EXÉCUTION DES PROCESSUS
Information sur la source
Description
ce programme simule l'exécution des processus suivant les algorithmes FIFO, LIFO, PAR PRIORITE et PAR QUANTUM DE TEMPS
Source
- #include<iostream.h>
- #include<dos.h>
- #include<conio.h>
- #include<stdlib.h>
-
-
- const int maxc=100;
- const int maxtaches=100;
- const int maxcar=10;
-
- char ch[maxtaches][maxcar];//pour sauvegarder les codes saisis
- int nb=0;//nbre d elts dans ch
-
- class processus;
-
- class ordonnanceur
- {
- processus *p;
- public:
- ordonnanceur();
- ~ordonnanceur();
- void ajouter_proc(char*,char*,int,int,int);
- void desactiver_proc(processus*);
- void activer_proc(processus*);
- void ordonner_proc_fifo();
- void ordonner_proc_lifo();
- void ordonner_proc_prio();
- void fifo();
- void lifo();
- void priorite();
- void quantum();
- void executer_proc();
- void executer_proc_quantum();
- void modifier();
- processus* selectionner_proc(char*);
- processus* processus_non_execute();
- void affichage_tout_proc();
- };
-
-
-
- class processus
- {
-
- char code[maxcar];
- int prio;
- char nom[maxcar];
- bool actif;
- int inst_ar,t_ex,t_cons;
- processus* suiv;
-
- public:
- friend void ordonnanceur::ajouter_proc(char*,char*,int,int,int);
- processus();
- processus(char*,char*,int,int,int);
- void affichage_proc_coursd_execution();
- void affichage_proc_coursd_execution_quantum(int);
- void affichage_donnees_proc();
- void modifie_proc();
- char* getcode(){return code;}
- char* getnom(){return nom;}
- int& getprio(){return prio;}
- int& getinst_ar(){return inst_ar;}
- int& gett_ex(){return t_ex;}
- int& gett_cons(){return t_cons;}
- bool& getactif(){return actif;}
- processus* getsuiv(){return suiv;}
-
- };
-
-
-
-
-
- processus::processus()
- {
- strcpy(code,"\0");
- prio=0;
- strcpy(nom,"\0");
- actif=false;
- inst_ar=0;
- t_ex=0;
- t_cons=0;
- suiv=NULL;
- }
-
- processus::processus(char*cod,char* n,int priorite,int temps_ex,int inst_arriv)
- {
- strcpy(code,cod);
- strcpy(nom,n);
- prio=priorite;
- t_ex=temps_ex;
- t_cons=0;;
- inst_ar=inst_arriv;
- suiv=NULL;
- actif=false;
- }
-
-
- ordonnanceur::ordonnanceur()
- {
- p=NULL;
- }
-
-
- ordonnanceur::~ordonnanceur()
- {
- processus* q;
- while(p!=NULL)
- {
- q=p;
- p=p->getsuiv();
- delete q;
- }
- }
-
- void ordonnanceur::ajouter_proc(char* cod,char* n,int priorite,
- int temps_ex,int inst_arriv)
- {
- static processus* dernier_proc;
-
- if(p==NULL)//insertion du 1er processus
- {
- p=new processus(cod,n,priorite,temps_ex,inst_arriv);
- dernier_proc=p;
- }
- else
- {
- dernier_proc->suiv=new processus( cod,n,priorite,temps_ex,inst_arriv);
- dernier_proc=dernier_proc->suiv;
- }
- }
-
-
- bool existe_deja(char* cod)
- {
-
- int k=0;
- while((k<nb)&&strcmp(cod,ch[k]))
- k++;
- return(k!=nb);
- }
-
-
- char* saisie_code()
- {
- int i=0;
- static char cod[maxc];
- do
- {
- i++;
- if(i==1)
- cout<<"donner un code"<<endl;//si c'est la 1ere fois
- else
- if(strlen(cod)>9)
- cout<<"donner un code de longueur <10"<<endl;
- else
- cout<<"ce code existe deja, donnez un autre"<<endl;
- cin>>cod;
- }
- while(existe_deja(cod)||strlen(cod)>9);
- strcpy(ch[nb],cod);
- nb++;
- return(cod);
- }
-
- char* saisie_nom()
- {
- int j=0;
- static char n[maxc];
- do
- {
- j++;
- if(j==1)
- cout<<"donner un nom"<<endl;
- else
- cout<<"donner un nom de longueur <10"<<endl;
- cin>>n;
- }
- while(strlen(n)>9);
- return(n);
- }
-
- void saisir_donnees_proc(int i,char* cod,char* n,int& priorite,
- int& temps_ex,int& inst_arriv)
- {
- cout<<"\t\tla saisie du processus "<<(i+1)<<endl<<endl;
-
- strcpy(n,saisie_nom());
- strcpy(cod,saisie_code());
- do
- {
- cout<<"donner la priorite"<<endl;
- cin>>priorite;
- }
- while(priorite<1);
- do
- {
- cout<<"donner l instant d arrivee"<<endl;
- cin>>inst_arriv;
- }
- while(inst_arriv<1);
- do
- {
- cout<<"donner le temps d execution"<<endl;
- cin>>temps_ex;
- }
- while(temps_ex<1);
-
- }
-
- void permuter(processus* j,processus* q) //permuter 2 processus
- {
- char ch[maxcar];
- int aux;
- strcpy(ch,j->getcode());
- strcpy(j->getcode(),q->getcode());
- strcpy(q->getcode(),ch);
- strcpy(ch,j->getnom());
- strcpy(j->getnom(),q->getnom());
- strcpy(q->getnom(),ch);
- aux=j->getprio();
- j->getprio()=q->getprio();
- q->getprio()=aux;
- aux=j->getinst_ar();
- j->getinst_ar()=q->getinst_ar();
- q->getinst_ar()=aux;
- aux=j->gett_ex();
- j->gett_ex()=q->gett_ex();
- q->gett_ex()=aux;
- aux=j->gett_cons();
- j->gett_cons()=q->gett_cons();
- q->gett_cons()=aux;
- aux=j->getactif();
- j->getactif()=q->getactif();
- q->getactif()=aux;
- }
-
-
-
-
-
- void ordonnanceur::ordonner_proc_fifo()
- {
- processus* j;
- processus* q=p;
-
- while(q->getsuiv())
- {
- j=q->getsuiv();
- while(j)
- {
- if(j->getinst_ar()<q->getinst_ar())
- permuter(j,q) ;
- j=j->getsuiv();
- }
- q=q->getsuiv();
- }
- }
-
-
- void ordonnanceur::ordonner_proc_lifo()
- {
- processus* j;
- processus* q=p;
-
- while(q->getsuiv())
- {
- j=q->getsuiv();
- while(j)
- {
- if(j->getinst_ar()>q->getinst_ar())
- permuter(j,q) ;
- j=j->getsuiv();
- }
- q=q->getsuiv();
- }
- }
-
-
-
- void ordonnanceur::ordonner_proc_prio()
- {
- processus* j;
- processus* q=p;
-
- while(q->getsuiv())
- {
- j=q->getsuiv();
- while(j)
- {
- if(j->getprio()>q->getprio())
- permuter(j,q) ;
- j=j->getsuiv();
- }
- q=q->getsuiv();
- }
- }
-
- void ordonnanceur::desactiver_proc(processus* q)
- {
- q->getactif()=false;
- }
-
-
- void processus::affichage_proc_coursd_execution()
- {
- t_cons=0;//au cas ou on reexecute le processus
-
- gotoxy(1,wherey());
- cout<<code;
- gotoxy(11,wherey());
- cout<<nom;
- gotoxy(22,wherey());
- cout<<inst_ar;
- gotoxy(37,wherey());
- cout<<prio;
- gotoxy(49,wherey());
- cout<<t_ex;
- gotoxy(60,wherey());
- cout<<t_cons;
- gotoxy(73,wherey());
- cout<<actif;
-
- while(t_cons<t_ex)
- {
- sleep(1);
- t_cons++;
- gotoxy(60,wherey());
- cout<<t_cons;
- }
- gotoxy(73,wherey());
- cout<<0;
- cout<<endl<<endl;
- }
-
-
- void ordonnanceur::activer_proc(processus* q)
- {
- q->getactif()=true;
- }
-
- void affichage_entete()
- {
- cout<<"code";
- gotoxy(11,wherey());
- cout<<"nom";
- gotoxy(20,wherey());
- cout<<"t_arrivee";
- gotoxy(35,wherey());
- cout<<"priorite";
- gotoxy(49,wherey());
- cout<<"t_ex";
- gotoxy(59,wherey());
- cout<<"t_cons";
- gotoxy(71,wherey());
- cout<<"actif";
- cout<<endl<<endl;
- }
- void ordonnanceur::executer_proc()
- {
- processus* q=p;
- affichage_entete();
- while(q)
- {
- activer_proc(q);
- q->affichage_proc_coursd_execution();
- desactiver_proc(q);
- q=q->getsuiv();
- }
- }
-
-
- processus* ordonnanceur::processus_non_execute()
- {
- processus* q=p;
- while((q)&&(q->gett_cons()==q->gett_ex()))
- q=q->getsuiv();
- return q;
- }
-
- void processus::affichage_proc_coursd_execution_quantum(int quant)
- {
-
- int compt=0;
- if(t_cons<t_ex)
- {
-
- gotoxy(1,wherey());
- cout<<code;
- gotoxy(11,wherey());
- cout<<nom;
- gotoxy(22,wherey());
- cout<<inst_ar;
- gotoxy(37,wherey());
- cout<<prio;
- gotoxy(49,wherey());
- cout<<t_ex;
- gotoxy(60,wherey());
- cout<<t_cons;
- gotoxy(73,wherey());
- cout<<actif;
-
- while((t_cons<t_ex)&&(compt<quant))
- {
- sleep(1);
- t_cons++;
- compt++;
- gotoxy(60,wherey());
- cout<<t_cons;
- }
-
- gotoxy(73,wherey());
- cout<<0;
- cout<<endl<<endl;
-
- }
- }
-
-
- void ordonnanceur::executer_proc_quantum()
- {
- processus* q=p;
- int quant;
-
- do
- {
- cout<<"donner le quantum"<<endl;
- cin>>quant;
- }
- while(quant<1);
- affichage_entete();
-
- while(q)
- {
- q->gett_cons()=0;
- q=q->getsuiv();
- }
-
- while(processus_non_execute())
- {
- q=processus_non_execute();
- while(q)
- {
- activer_proc(q);
- q->affichage_proc_coursd_execution_quantum(quant);
- desactiver_proc(q);
- q=q->getsuiv();
- }
- }
- }
-
- void ordonnanceur::fifo()
- {
- clrscr();
- cout<<endl;
- cout<<"execution des processus suivant l algo FIFO:"<<endl;
- cout<<"-------------------------------------------"<<endl<<endl<<endl;
- ordonner_proc_fifo();
- executer_proc();
- cout<<"tapez sur une touche pour continuer"<<endl;
- getch();
- }
-
-
-
- void ordonnanceur::lifo()
- {
- clrscr();
- cout<<endl;
- cout<<"execution des processus suivant l algo LIFO:"<<endl;
- cout<<"-------------------------------------------"<<endl<<endl<<endl;
- ordonner_proc_lifo();
- executer_proc();
- cout<<"tapez sur une touche pour continuer"<<endl;
- getch();
- }
-
-
- void ordonnanceur::priorite()
- {
- clrscr();
- cout<<endl;
- cout<<"execution des processus suivant l algo base sur la priorite:"<<endl;
- cout<<"-----------------------------------------------------------"<<endl<<endl<<endl;
- ordonner_proc_prio();
- executer_proc();
- cout<<"tapez sur une touche pour continuer"<<endl;
- getch();
- }
-
-
-
- void ordonnanceur::quantum()
- {
- clrscr();
- cout<<endl;
- cout<<"execution des processus suivant l algo ROUND ROBIN:"<<endl;
- cout<<"--------------------------------------------------"<<endl<<endl<<endl;
- ordonner_proc_fifo();
- executer_proc_quantum();
- cout<<"tapez sur une touche pour continuer"<<endl;
- getch();
- }
-
- processus* ordonnanceur::selectionner_proc(char* cod)
- {
- processus* q=p;
- while((q!=NULL)&&strcmp(q->getcode(),cod))
- q=q->getsuiv();
- return q;
- }
-
- void supprimecod_ch(char* cod)
- {
- int i=0;
- while(strcmp(cod,ch[i]))
- i++;
- while(i<nb-1)
- {
- strcpy(ch[i],ch[i+1]);
- i++;
- }
- nb--;
- }
-
-
- void processus::modifie_proc()
- {
- clrscr();
- int choix;
- char cod[maxcar];
- cout<<"que voulez_vous changer ?"<<endl<<endl;
- cout<<"1- changer le nom"<<endl;
- cout<<"2- changer le code"<<endl;
- cout<<"3- changer la priorite"<<endl;
- cout<<"4- l instant d arrivee"<<endl;
- cout<<"5- le temps d execution demande"<<endl<<endl;
- do
- {
- cout<<"tapez le numero correspondant a votre demande: ";
- cin>>choix;
- }
- while((choix<1)||(choix>5));
- cout<<endl;
- switch(choix)
- {
- case 1: strcpy(nom,saisie_nom());
- break;
- case 2: strcpy(cod,code);
- strcpy(code,saisie_code());
- supprimecod_ch(cod);
- break;
- case 3: do
- {
- cout<<"donner la priorite"<<endl;
- cin>>prio;
- }
- while(prio<1);
- break;
- case 4: do
- {
- cout<<"donner l instant d arrivee"<<endl;
- cin>>inst_ar;
- }
- while(inst_ar<1);
- break;
- case 5: do
- {
- cout<<"donner le temps d execution"<<endl;
- cin>>t_ex;
- }
- while(t_ex<1);
- break;
- }
-
-
- t_cons=0;
- }
-
-
- void processus::affichage_donnees_proc()
- {
- cout<<"nom="<<nom<<" code="<<code<<" priorite="<<prio<<" inst_ar="<<inst_ar;
- cout<<" t_ex="<<t_ex<<" t_cons="<<t_cons<<" actif="<<actif<<endl<<endl;
- }
-
-
- void ordonnanceur::affichage_tout_proc()
- {
- processus* q=p;
- cout<<"affichage des processus:"<<endl;
- cout<<"************************"<<endl<<endl<<endl;
- while(q)
- {
- q->affichage_donnees_proc();
- q=q->getsuiv();
- }
- }
-
-
-
-
- void ordonnanceur::modifier()
- {
- char cod[maxc];
- int i=0;
- do
- {
- if(i==0)
- cout<<"donner le code du processus a modifier"<<endl;
- else
- cout<<"ce code n existe pas, donnez un autre"<<endl;
- cin>>cod;
- i++;
- }
- while(existe_deja(cod)==false);
- processus*q=selectionner_proc(cod);
- q->modifie_proc();
- cout<<endl<<endl<<"apres modification, le processus devient:"<<endl<<endl;
- q->affichage_donnees_proc();
- cout<<endl<<"tapez sur une touche pour continuer";
- getch();
- }
-
-
- void main()
- {
- int nb_tache,i,choix;
- ordonnanceur o;
- char cod[maxcar],n[maxcar];
- int priorite,temps_ex,inst_arriv;
- do
- {
- cout<<"donner le nombre de taches presentes"<<endl;
- cin>>nb_tache;
- }
- while((nb_tache<=0)||(nb_tache>maxtaches));
-
- for(i=0;i<nb_tache;i++)
- {
- saisir_donnees_proc(i,cod,n,priorite,temps_ex,inst_arriv);
- o.ajouter_proc(cod,n,priorite,temps_ex,inst_arriv);
- }
- clrscr();
- cout<<endl;
- o.affichage_tout_proc();
- cout<<endl<<endl<<"tapez sur une touche pour continuer";
- getch();
- debut:
- ;
-
- clrscr();
- cout<<endl;
- cout<<"voici les differentes taches possibles:"<<endl;
- cout<<"***************************************"<<endl<<endl;
- cout<<"1- affichage de tous les processus"<<endl;
- cout<<"2- modifier les donnees d un processus"<<endl;
- cout<<"3- voir l execution des processus suivant l algo FIFO"<<endl;
- cout<<"4- voir l execution des processus suivant l algo LIFO"<<endl;
- cout<<"5- voir l execution des processus suivant l algo base sur la priorite"<<endl;
- cout<<"6- voir l execution des processus suivant l algo ROUND ROBIN"<<endl;
- cout<<"7- quitter"<<endl<<endl<<endl;
- do
- {
- cout<<"tapez le numero correspondant a votre demande "<<endl;
- cin>>choix;
- }
- while((choix<1)||(choix>7));
- clrscr();
- switch(choix)
- {
- case 1: o.affichage_tout_proc();
- cout<<"tapez sur une touche pour continuer"<<endl;
- getch();
- break;
- case 2: o.modifier();
- break;
- case 3: o.fifo();
- break;
- case 4: o.lifo();
- break;
- case 5: o.priorite();
- break;
- case 6: o.quantum();
- break;
- case 7: exit(1);
- break;
- }
-
- goto debut;
-
- }
#include<iostream.h>
#include<dos.h>
#include<conio.h>
#include<stdlib.h>
const int maxc=100;
const int maxtaches=100;
const int maxcar=10;
char ch[maxtaches][maxcar];//pour sauvegarder les codes saisis
int nb=0;//nbre d elts dans ch
class processus;
class ordonnanceur
{
processus *p;
public:
ordonnanceur();
~ordonnanceur();
void ajouter_proc(char*,char*,int,int,int);
void desactiver_proc(processus*);
void activer_proc(processus*);
void ordonner_proc_fifo();
void ordonner_proc_lifo();
void ordonner_proc_prio();
void fifo();
void lifo();
void priorite();
void quantum();
void executer_proc();
void executer_proc_quantum();
void modifier();
processus* selectionner_proc(char*);
processus* processus_non_execute();
void affichage_tout_proc();
};
class processus
{
char code[maxcar];
int prio;
char nom[maxcar];
bool actif;
int inst_ar,t_ex,t_cons;
processus* suiv;
public:
friend void ordonnanceur::ajouter_proc(char*,char*,int,int,int);
processus();
processus(char*,char*,int,int,int);
void affichage_proc_coursd_execution();
void affichage_proc_coursd_execution_quantum(int);
void affichage_donnees_proc();
void modifie_proc();
char* getcode(){return code;}
char* getnom(){return nom;}
int& getprio(){return prio;}
int& getinst_ar(){return inst_ar;}
int& gett_ex(){return t_ex;}
int& gett_cons(){return t_cons;}
bool& getactif(){return actif;}
processus* getsuiv(){return suiv;}
};
processus::processus()
{
strcpy(code,"\0");
prio=0;
strcpy(nom,"\0");
actif=false;
inst_ar=0;
t_ex=0;
t_cons=0;
suiv=NULL;
}
processus::processus(char*cod,char* n,int priorite,int temps_ex,int inst_arriv)
{
strcpy(code,cod);
strcpy(nom,n);
prio=priorite;
t_ex=temps_ex;
t_cons=0;;
inst_ar=inst_arriv;
suiv=NULL;
actif=false;
}
ordonnanceur::ordonnanceur()
{
p=NULL;
}
ordonnanceur::~ordonnanceur()
{
processus* q;
while(p!=NULL)
{
q=p;
p=p->getsuiv();
delete q;
}
}
void ordonnanceur::ajouter_proc(char* cod,char* n,int priorite,
int temps_ex,int inst_arriv)
{
static processus* dernier_proc;
if(p==NULL)//insertion du 1er processus
{
p=new processus(cod,n,priorite,temps_ex,inst_arriv);
dernier_proc=p;
}
else
{
dernier_proc->suiv=new processus( cod,n,priorite,temps_ex,inst_arriv);
dernier_proc=dernier_proc->suiv;
}
}
bool existe_deja(char* cod)
{
int k=0;
while((k<nb)&&strcmp(cod,ch[k]))
k++;
return(k!=nb);
}
char* saisie_code()
{
int i=0;
static char cod[maxc];
do
{
i++;
if(i==1)
cout<<"donner un code"<<endl;//si c'est la 1ere fois
else
if(strlen(cod)>9)
cout<<"donner un code de longueur <10"<<endl;
else
cout<<"ce code existe deja, donnez un autre"<<endl;
cin>>cod;
}
while(existe_deja(cod)||strlen(cod)>9);
strcpy(ch[nb],cod);
nb++;
return(cod);
}
char* saisie_nom()
{
int j=0;
static char n[maxc];
do
{
j++;
if(j==1)
cout<<"donner un nom"<<endl;
else
cout<<"donner un nom de longueur <10"<<endl;
cin>>n;
}
while(strlen(n)>9);
return(n);
}
void saisir_donnees_proc(int i,char* cod,char* n,int& priorite,
int& temps_ex,int& inst_arriv)
{
cout<<"\t\tla saisie du processus "<<(i+1)<<endl<<endl;
strcpy(n,saisie_nom());
strcpy(cod,saisie_code());
do
{
cout<<"donner la priorite"<<endl;
cin>>priorite;
}
while(priorite<1);
do
{
cout<<"donner l instant d arrivee"<<endl;
cin>>inst_arriv;
}
while(inst_arriv<1);
do
{
cout<<"donner le temps d execution"<<endl;
cin>>temps_ex;
}
while(temps_ex<1);
}
void permuter(processus* j,processus* q) //permuter 2 processus
{
char ch[maxcar];
int aux;
strcpy(ch,j->getcode());
strcpy(j->getcode(),q->getcode());
strcpy(q->getcode(),ch);
strcpy(ch,j->getnom());
strcpy(j->getnom(),q->getnom());
strcpy(q->getnom(),ch);
aux=j->getprio();
j->getprio()=q->getprio();
q->getprio()=aux;
aux=j->getinst_ar();
j->getinst_ar()=q->getinst_ar();
q->getinst_ar()=aux;
aux=j->gett_ex();
j->gett_ex()=q->gett_ex();
q->gett_ex()=aux;
aux=j->gett_cons();
j->gett_cons()=q->gett_cons();
q->gett_cons()=aux;
aux=j->getactif();
j->getactif()=q->getactif();
q->getactif()=aux;
}
void ordonnanceur::ordonner_proc_fifo()
{
processus* j;
processus* q=p;
while(q->getsuiv())
{
j=q->getsuiv();
while(j)
{
if(j->getinst_ar()<q->getinst_ar())
permuter(j,q) ;
j=j->getsuiv();
}
q=q->getsuiv();
}
}
void ordonnanceur::ordonner_proc_lifo()
{
processus* j;
processus* q=p;
while(q->getsuiv())
{
j=q->getsuiv();
while(j)
{
if(j->getinst_ar()>q->getinst_ar())
permuter(j,q) ;
j=j->getsuiv();
}
q=q->getsuiv();
}
}
void ordonnanceur::ordonner_proc_prio()
{
processus* j;
processus* q=p;
while(q->getsuiv())
{
j=q->getsuiv();
while(j)
{
if(j->getprio()>q->getprio())
permuter(j,q) ;
j=j->getsuiv();
}
q=q->getsuiv();
}
}
void ordonnanceur::desactiver_proc(processus* q)
{
q->getactif()=false;
}
void processus::affichage_proc_coursd_execution()
{
t_cons=0;//au cas ou on reexecute le processus
gotoxy(1,wherey());
cout<<code;
gotoxy(11,wherey());
cout<<nom;
gotoxy(22,wherey());
cout<<inst_ar;
gotoxy(37,wherey());
cout<<prio;
gotoxy(49,wherey());
cout<<t_ex;
gotoxy(60,wherey());
cout<<t_cons;
gotoxy(73,wherey());
cout<<actif;
while(t_cons<t_ex)
{
sleep(1);
t_cons++;
gotoxy(60,wherey());
cout<<t_cons;
}
gotoxy(73,wherey());
cout<<0;
cout<<endl<<endl;
}
void ordonnanceur::activer_proc(processus* q)
{
q->getactif()=true;
}
void affichage_entete()
{
cout<<"code";
gotoxy(11,wherey());
cout<<"nom";
gotoxy(20,wherey());
cout<<"t_arrivee";
gotoxy(35,wherey());
cout<<"priorite";
gotoxy(49,wherey());
cout<<"t_ex";
gotoxy(59,wherey());
cout<<"t_cons";
gotoxy(71,wherey());
cout<<"actif";
cout<<endl<<endl;
}
void ordonnanceur::executer_proc()
{
processus* q=p;
affichage_entete();
while(q)
{
activer_proc(q);
q->affichage_proc_coursd_execution();
desactiver_proc(q);
q=q->getsuiv();
}
}
processus* ordonnanceur::processus_non_execute()
{
processus* q=p;
while((q)&&(q->gett_cons()==q->gett_ex()))
q=q->getsuiv();
return q;
}
void processus::affichage_proc_coursd_execution_quantum(int quant)
{
int compt=0;
if(t_cons<t_ex)
{
gotoxy(1,wherey());
cout<<code;
gotoxy(11,wherey());
cout<<nom;
gotoxy(22,wherey());
cout<<inst_ar;
gotoxy(37,wherey());
cout<<prio;
gotoxy(49,wherey());
cout<<t_ex;
gotoxy(60,wherey());
cout<<t_cons;
gotoxy(73,wherey());
cout<<actif;
while((t_cons<t_ex)&&(compt<quant))
{
sleep(1);
t_cons++;
compt++;
gotoxy(60,wherey());
cout<<t_cons;
}
gotoxy(73,wherey());
cout<<0;
cout<<endl<<endl;
}
}
void ordonnanceur::executer_proc_quantum()
{
processus* q=p;
int quant;
do
{
cout<<"donner le quantum"<<endl;
cin>>quant;
}
while(quant<1);
affichage_entete();
while(q)
{
q->gett_cons()=0;
q=q->getsuiv();
}
while(processus_non_execute())
{
q=processus_non_execute();
while(q)
{
activer_proc(q);
q->affichage_proc_coursd_execution_quantum(quant);
desactiver_proc(q);
q=q->getsuiv();
}
}
}
void ordonnanceur::fifo()
{
clrscr();
cout<<endl;
cout<<"execution des processus suivant l algo FIFO:"<<endl;
cout<<"-------------------------------------------"<<endl<<endl<<endl;
ordonner_proc_fifo();
executer_proc();
cout<<"tapez sur une touche pour continuer"<<endl;
getch();
}
void ordonnanceur::lifo()
{
clrscr();
cout<<endl;
cout<<"execution des processus suivant l algo LIFO:"<<endl;
cout<<"-------------------------------------------"<<endl<<endl<<endl;
ordonner_proc_lifo();
executer_proc();
cout<<"tapez sur une touche pour continuer"<<endl;
getch();
}
void ordonnanceur::priorite()
{
clrscr();
cout<<endl;
cout<<"execution des processus suivant l algo base sur la priorite:"<<endl;
cout<<"-----------------------------------------------------------"<<endl<<endl<<endl;
ordonner_proc_prio();
executer_proc();
cout<<"tapez sur une touche pour continuer"<<endl;
getch();
}
void ordonnanceur::quantum()
{
clrscr();
cout<<endl;
cout<<"execution des processus suivant l algo ROUND ROBIN:"<<endl;
cout<<"--------------------------------------------------"<<endl<<endl<<endl;
ordonner_proc_fifo();
executer_proc_quantum();
cout<<"tapez sur une touche pour continuer"<<endl;
getch();
}
processus* ordonnanceur::selectionner_proc(char* cod)
{
processus* q=p;
while((q!=NULL)&&strcmp(q->getcode(),cod))
q=q->getsuiv();
return q;
}
void supprimecod_ch(char* cod)
{
int i=0;
while(strcmp(cod,ch[i]))
i++;
while(i<nb-1)
{
strcpy(ch[i],ch[i+1]);
i++;
}
nb--;
}
void processus::modifie_proc()
{
clrscr();
int choix;
char cod[maxcar];
cout<<"que voulez_vous changer ?"<<endl<<endl;
cout<<"1- changer le nom"<<endl;
cout<<"2- changer le code"<<endl;
cout<<"3- changer la priorite"<<endl;
cout<<"4- l instant d arrivee"<<endl;
cout<<"5- le temps d execution demande"<<endl<<endl;
do
{
cout<<"tapez le numero correspondant a votre demande: ";
cin>>choix;
}
while((choix<1)||(choix>5));
cout<<endl;
switch(choix)
{
case 1: strcpy(nom,saisie_nom());
break;
case 2: strcpy(cod,code);
strcpy(code,saisie_code());
supprimecod_ch(cod);
break;
case 3: do
{
cout<<"donner la priorite"<<endl;
cin>>prio;
}
while(prio<1);
break;
case 4: do
{
cout<<"donner l instant d arrivee"<<endl;
cin>>inst_ar;
}
while(inst_ar<1);
break;
case 5: do
{
cout<<"donner le temps d execution"<<endl;
cin>>t_ex;
}
while(t_ex<1);
break;
}
t_cons=0;
}
void processus::affichage_donnees_proc()
{
cout<<"nom="<<nom<<" code="<<code<<" priorite="<<prio<<" inst_ar="<<inst_ar;
cout<<" t_ex="<<t_ex<<" t_cons="<<t_cons<<" actif="<<actif<<endl<<endl;
}
void ordonnanceur::affichage_tout_proc()
{
processus* q=p;
cout<<"affichage des processus:"<<endl;
cout<<"************************"<<endl<<endl<<endl;
while(q)
{
q->affichage_donnees_proc();
q=q->getsuiv();
}
}
void ordonnanceur::modifier()
{
char cod[maxc];
int i=0;
do
{
if(i==0)
cout<<"donner le code du processus a modifier"<<endl;
else
cout<<"ce code n existe pas, donnez un autre"<<endl;
cin>>cod;
i++;
}
while(existe_deja(cod)==false);
processus*q=selectionner_proc(cod);
q->modifie_proc();
cout<<endl<<endl<<"apres modification, le processus devient:"<<endl<<endl;
q->affichage_donnees_proc();
cout<<endl<<"tapez sur une touche pour continuer";
getch();
}
void main()
{
int nb_tache,i,choix;
ordonnanceur o;
char cod[maxcar],n[maxcar];
int priorite,temps_ex,inst_arriv;
do
{
cout<<"donner le nombre de taches presentes"<<endl;
cin>>nb_tache;
}
while((nb_tache<=0)||(nb_tache>maxtaches));
for(i=0;i<nb_tache;i++)
{
saisir_donnees_proc(i,cod,n,priorite,temps_ex,inst_arriv);
o.ajouter_proc(cod,n,priorite,temps_ex,inst_arriv);
}
clrscr();
cout<<endl;
o.affichage_tout_proc();
cout<<endl<<endl<<"tapez sur une touche pour continuer";
getch();
debut:
;
clrscr();
cout<<endl;
cout<<"voici les differentes taches possibles:"<<endl;
cout<<"***************************************"<<endl<<endl;
cout<<"1- affichage de tous les processus"<<endl;
cout<<"2- modifier les donnees d un processus"<<endl;
cout<<"3- voir l execution des processus suivant l algo FIFO"<<endl;
cout<<"4- voir l execution des processus suivant l algo LIFO"<<endl;
cout<<"5- voir l execution des processus suivant l algo base sur la priorite"<<endl;
cout<<"6- voir l execution des processus suivant l algo ROUND ROBIN"<<endl;
cout<<"7- quitter"<<endl<<endl<<endl;
do
{
cout<<"tapez le numero correspondant a votre demande "<<endl;
cin>>choix;
}
while((choix<1)||(choix>7));
clrscr();
switch(choix)
{
case 1: o.affichage_tout_proc();
cout<<"tapez sur une touche pour continuer"<<endl;
getch();
break;
case 2: o.modifier();
break;
case 3: o.fifo();
break;
case 4: o.lifo();
break;
case 5: o.priorite();
break;
case 6: o.quantum();
break;
case 7: exit(1);
break;
}
goto debut;
}
Conclusion
ce programme est développé dans le cadre d'un mini_projet lors de mes études. j'attends toutes vos remarques ou suggestions. :)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
processus sous linux [g++] [ par satanik_mike ]
Bonjour,Je suis en train de d?velopper un serveur POP, SMTP en C++ sous linux, mais je bloque sur une petit probl?me d'ex?cution.J'ai fait un ex?cutbl
COMMENT ARRETER UN PROCESSUS [ par bily ]
Vegeta :-)Salut les colleguesje voudrais savoir quelle est la commande qui me permettra d'arreter un processus , un programme qui tourne quoi, genre
le "kill(0,SIGTERM)" de Linux sous Win32 ? [ par Wulfaz ]
je cherche une fonction C pour winNT & win98, équivalente à celle sous Linux/Unix : kill(0,SIGTERM). Pour ceux qui ne la connaisse pas elle envoie un
commande PS [ par golgorak ]
salut a tous ;je cherche a refaire la commande PS sous linux en c sous GTK+, mais je n'arrive pas a trouve l'adresse du tableau des processus ou une f
buter un processus sans poser de questions !! [ par kubiak ]
Bonjour les gens...Je cherche comment on peut faire pour killer une applications ou un proc en ligne de commande (c pour mettre dans un *.bat)Ou alors
mon programme se ferme pas corectement [ par loicus ]
J'ai un bug, mon programme ne se ferme pas corectement, cad :Il se ferme mais sont processus reste actif quand je fais Ctrl alt del et que j'affiche l
POUR LES PRO : le gestionnaire des tâches [ par bily ]
Vegeta :-)comment faire pour lire le contennue du gestionnaire des tâches "ctrl+alt+del"et comment faire la distinction entre un processusdemmarrer pa
question sur programmation linux [ par yolhaiji ]
YOL.HAI.JIsalut:je voulais savoir comment sur linux peut on etablir une connexion entre un processus pere et ces deux processus fils avec les pipes (
Changer le nom d'un processus [ par highcobra ]
Est-il possible de changer le nom d'un processus dans la liste affichée par windows ???High_Cobra ;)
block touche system utile [ par Tautau ]
bon j'ai geleré pour trouver tout ca et ce n'est peut etre pas la meilleur facon de le faire mais je vous en fais part //// Ce sont des codes que j'ai
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|