Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SIMULATION DE L'EXÉCUTION DES PROCESSUS


Information sur la source

Catégorie :Divers Classé sous : processus Niveau : Débutant Date de création : 15/04/2006 Vu : 3 990

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

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.
:)
 

Commentaires et avis

signaler à un administrateur
Commentaire de gna le 14/06/2006 17:25:20

salut je trouve que ce projet a été bien fait seulement il fallait ajouter un graphe apres l'execution des processus par exemple pour le quantum apres que le w soit fait tracer le graphe qui le shématise.
Merci et à bientot

signaler à un administrateur
Commentaire de gouessej le 23/11/2006 11:09:44

Les goto c'est pas très propre et ce que tu as écrit n'est pas portable. Ce serait bien que tu changes ça.

signaler à un administrateur
Commentaire de najia2006 le 06/12/2007 08:14:55

qu'es ce que gotoxy et wherey???????

signaler à un administrateur
Commentaire de Renfield le 06/12/2007 10:10:57 administrateur CS

très logiquement, en se basant sur le code et sur leur nom...

gotoxy permet de placer le curseur de texte a une position x,y donnée
wherexy permet de retrouver les coordonnées de ce même curseur de texte.
idem pour wherey, sur l'axe des ordonnées
et enfin, pareil pour wherex

...

signaler à un administrateur
Commentaire de Renfield le 06/12/2007 10:12:21 administrateur CS

a voir dans conio.h, qui est intégré en début du code.

signaler à un administrateur
Commentaire de firaslj le 06/03/2008 11:32:19

l'avez vous avec visual c++

Ajouter un commentaire

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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.