Vous êtes sur la page 1sur 2

Groupe 2

14/01/2015

Exercice 1

On considère le programme suivant :

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
for(int i=0;i<3;i++)
{
fork(); printf("fork %d \n";i);
}
return(0);
}

1- Expliquez l’exécution de ce programme. Précisez en particulier le nombre total de


processus engendrés par cette exécution. Combien d’occurrences de chaque type
de messages fork i sont affichées ? Quel est l’ordre d’apparition des différents types
de messages ?
2- Expliquer la commande ps -Af. L'utiliser pour reconstituer manuellement l’arbre
de processus correspondant.

Exercice 2

Soit la recherche par dichotomie dans une matrice n x m; les valeurs n et m sont
données via la ligne de commande. Le contenu de la matrice est rempli d'une
manière aléatoire (sans saisie).

1- Implémenter en langage C une recherche séquentielle. Donner le temps


d'exécution de la fonction recherche
2- Implémenter une recherche parallèle sachant la fonction fork. Chaque fils doit
renvoyer au père le résultat de sa recherche (trouvé ou pas, valeur trouvée, temps
d'exécution de la fonction recherche).
3- Comparer les deux résultats.

Exercice 3

Ecrire un programme qui :

- Affiche son numéro pid


- Traite tous les signaux par une fonction "fonction" qui se contente d'afficher le
numéro du signal reçu.
- Traite le signal SIGUSR1 par une fonction "fonction_1" et le signal SIGUSR2 par
"fonction_2".

"fonction_1" affiche le numéro du signal reçu et la liste des utilisateurs de la


machine (appel à who par system("who"))

"fonction_2" affiche le numéro du signal reçu et l'espace disque utilisé sur la


machine (appel à df . par system("df ."))

Lancer le programme et lui envoyer des signaux, dont SIGUSR1 et SIGUSR2, depuis
une autre fenêtre, à l'aide de la commande kill.