Tp de de mini ordonnanceur dans systeme d'exp

Fermé
dalel - 25 mai 2010 à 10:39
 milou - 25 mai 2010 à 23:08
Bonjour, je suis une etudiant en 2ém année technologie de web j'ai un tp dans systeme d'exploitation suivant

miniproc.cpp

#include<signal.h>
#include<iostream>
#include<unistd.h>
using namespace std;
int n;
void interrupt(int s)
{
cout<< ++n<< ">Ceci est un bon exercice pour comprendre le "
<< "\n mecanisme des signaux..." << endl;
signal(s,interrupt);
}

int main(int argc, char *argv[])
{
// Initialisation du compteur de ligne :
n=0;
// Pour des raisons pratiques...

cout << "Mon PID est : "<< getpid() <<endl;
signal(SIGUSR1, interrupt);
//Boucle infinie :
while (1)
{
pause();
}
return 0;
}

miniord.cpp

#include<iostream>
#include<signal.h>
#include<stdlib.h>
#include<unistd.h>
using namespace std;

//Numero de processus actuel, et pid correspondants :
int procactuel, pid1, pid2;

//Donne la main aux processus l'un apres l'autre :
void swap(int s)
{
if(procactuel ==0)
{
cout<<" Main au processus 2" <<endl;
kill(pid2, SIGUSR1);
procactuel=1;
}
else
{
cout<< "Main au processus 1" <<endl;
kill(pid1, SIGUSR1);
procactuel=0;
}

// Reprise :
alarm(1);
signal(s, swap);
}

void detruit (int s)
{
// L'ordonnanceur entraine dans sa chute les deux
// processus fils :
kill(pid1, SIGINT);
kill(pid2, SIGINT);

int mypid=getpid();
kill(mypid,SIGINT);
}

int main(int argc, char * argv[])
{
// Recuperation des parametres :
pid1=atoi(argv[1]);
pid2=atoi(argv[2]);

// Verification des deux pid:
if(pid1<=0 || pid2<=0)
{
cout <<"Usage : miniordo <pid1> <pid2>\n"
<< " Execute de maniere alternative deux processus <pid1> et <pid2> ." <<endl;
return 0;
}

// Declaration des fonctions de traitement d'interruption :
signal(SIGALRM, swap);
signal(SIGINT,detruit);

//Initialisation :
cout<< "Pressez CTRL-C pour quitter !" <<endl;
cout<< "Mini-ordonnanceur pret. "<<endl;
procactuel=0;
kill(pid1,SIGUSR1);
alarm(1);

//boucle infinie :
while (1)
{
pause();
}
return 0;
}

utilisation: lancez trois terminaux, puis exécutez dans deux d'entre eux le programme miniproc.cpp puis
démarrez dans le troisième terminal le programme miniordo.cpp ,avec comme argument les pid des deux
processus maintenant en attente, pour quitter l'ordonnanceur, il n'ya pas mieux qu'un bon CTRL-C
TRAVAIL DEMANDé
1.dans un rapport qui ne dépasse pas 3 pages expliquer le fonctionnement de cet ordonnanceur en indiquant la politique d'ordonnancement utilisée
2.ajouter un 3ém processus et adapter cet ordonnanceur pour le cas SJF.






A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 mai 2010 à 10:44
0
d$l pas envie de lire jusqu'à la fin !
Si Mme Saba passe par là, elle va vous aider ....
;-)
0