Tp de de mini ordonnanceur dans systeme d'exp
dalel
-
milou -
milou -
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.
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:
- Tp de de mini ordonnanceur dans systeme d'exp
- Restauration systeme windows 10 - Guide
- Opera mini pc - Télécharger - Navigateurs
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
- Changer code x96 mini - Forum TV & Vidéo
- Tp-link connecté mais pas internet - Forum WiFi