TP n°4 : Opérations sur les processus (2)
Exercice 1 :
1) Donnez un programme en C qui permet de créer un processus fils , ou le père affiche un message
indiquant qu'il est le père et donne son propre PID ainsi que celui du fils.
2) Le processus fils affiche un message indiquant qu'il est le fils et donne son PID, il devrait afficher le
contenu détaillé du répertoire racine (root) en utilisant la fonction de recouvrement execv
3) Le processus père devrait attendre la terminaison de l’exécution de son fils et afficher sa valeur de retour.
4) Modifiez le programme en utilisant les appels systèmes execlp et execvp.
5) Ajoutez une variable d’environnement au processus fils HOME en utilisant execle ou execv.
Exercice 2 :
1) Écrire un programme en C qui demande à l'utilisateur de saisir un nombre, puis tente de diviser ce
nombre par zéro, le programme doit gérer cette erreur en affichant un message d'erreur personnalisé
grâce à un gestionnaire de signal (SIGFPE).
2) Écrire un programme en C qui met le processus en pause en attendant un signal. Lorsque l'utilisateur
envoie un signal d'interruption (Ctrl+C), le programme doit afficher un message indiquant que le signal a
été reçu, puis continuer son exécution.
Modifier le programme de tel sorte à ce que l’action par défaut sera attaché au signal SIGINT avec
SIG_DFL ensuite appliqué SIG_IGN pour que le signal soit ignoré.
3) Écrire un programme en C qui déclenche une alarme après 10 secondes. Lorsque les 10 secondes se
sont écoulées, un gestionnaire de signal affiche un message indiquant que le temps est écoulé. Pendant
ce temps, le programme reste en pause en attente de l'expiration de l'alarme.
4) Exécutez le programme suivant et interprétez ses résultats :
int k;
void segv(){printf("Signal SIGSEGV %d Reçu, %d a provoqué la violation de mémoire\n",SIGSEGV,k);
exit(EXIT_FAILURE);}
int main() {
signal(SIGSEGV,segv);
char *buffer[2]={"Hello1","Hello2"};
for (k=0;;k++) {printf("%s num %d\n",buffer[k],k);} return 0;}
5) Écrire un programme en C qui crée un processus fils à l'aide de la fonction fork(). Le processus fils affiche
son identifiant (PID) et affiche un message ("hello") en boucle indéfiniment.
Le processus père, après une seconde d'attente (sleep), envoie un signal SIGSTOP pour suspendre le
processus fils, il devrait ensuite être en attente pendant un certain temps pour ensuite envoyé un signal
SIGCONT pour reprendre l'exécution du processus fils, le pere devra etre en attente encor une fois un
moment avant d’envoyer un signal SIGKILL pour tuer le processus fils.
Remarque : Le programme doit afficher des messages à chaque étape indiquant quel signal est envoyé et
quelle action est effectuée.
Remarque : Les numéros des signaux peuvent être obtenues avec la commande kill -l
bibliothèques (headers) utilisées :
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<signal.h>
1
TD n°2 : Ordonnanceur des processus
Exercice 1 :
Soit un système monoprocesseur ordonnance l’exécution des processus des deux tableaux suivant ou chaque
processus est caractérisé par son numéro, son temps d'arrivée (TA), et son temps d'exécution (TE)
Processus Temps Temps
d’arrivée d’exécution
P1 0 3
P2 2 6
P3 4 4
P4 6 5
P5 8 2
1. Donnez le diagramme de Gantt pour chaqu’un des algorithmes suivants : FIFO, SJF, SRTF, Round Robin
(quantum = 5 unités de temps)
2. Calculez le temps de résidence, le temps d’attente et le temps de réponse (pour chaque processus)
3. Calculez le temps de séjour moyen/le temps d’attente moyen.
4. Calculez le temps moyen de réponse pour l’algorithme SRTF
Processus Temps Temps Priorité Priorité
d’arrivée d’exécution
P1 0 5 4 4
P2 2 4 2 2
P3 2 2 6 6
P4 4 4 3 3
5. Donnez le diagramme de Gantt pour l’algorithme de priorité avec réquisition, sachant que la priorité la plus
élevé est celle qui est la plus grande (exemple : P3)
6. Calculez le temps de résidence, le temps d’attente et le temps de réponse (pour chaque processus)
7. Calculez le temps de séjour moyen/le temps d’attente moyen.
Exercice 2 :
Cinq (5) processus arrivent pratiquement en même instant t=0 leur temps d’exécution respectif est estimé à
10, 6, 2, 4 et 8 unités de temps leur priorités respectives sont 3, 5, 2, 1 et 4 respectivement, la valeur 1
correspond à une priorité la plus élevé (selon Linux), en utilisant l’algorithme d’ordonnancement avec priorité
(files multi-niveaux) et réquisition, les quantums sont les suivant Q1=6 unités, Q2 = 4 unités, Q3=Q4=Q5 = 5
unités
1. Donnez le schéma d’exécution des processus (Diagramme de Gantt)
2. Déterminez le temps moyen d’exécution des processus et le temps de moyen d’attente
Dr. M. Baba Ahmed