1
Pr. O.Ibrihich SMI_GL/S4 Système d’Exploitation II Filières : Sciences Mathématiques & Informatiques / Génie Logiciel/S4 Année : 2014-2015 TP1 : Programmation Système sous Linux But : Ces TP ont pour but de maitriser les différents mécanismes de communication interprocessus sous Linux : fork, tubes, signaux IPC, les sémaphores et mémoire partagé. Exercices : 1. Fonction fork() Exercice 1 : Ecrire un programme en C qui permet de créer un processus fils qui dort 10 secondes puis meurt alors que le processus père attend la fin d’exécution du processus fils avant de se terminer. Exercice 2 : Ecrire un programme en C qui permet de créer un processus fils qui dort 10 secondes puis meurt alors que le processus père reste bloqué dans une boucle infinie. 2. Les signaux : Exercice 1 : A l’aide de la fonction signal(), on va traiter le signal SIGALRM en installant la routine de traitement it(). On utilisera ensuite alarm() pour générer le signal SIGALARM au bout de 5 secondes, le programme étant ensuite dans une boucle infinie. Exercice 2 : De la même façon que précédemment, créer un programme en C qui permet de créer le signal sig2.c qui utilise la fonction signal() et traite le signal SIGINT en installant la routine de traitement fin(). Le programme est ensuite dans une boucle infinie. Remarque : Lorsque l'on exécute le programme, il faut faire CTRL + C pour pouvoir activer la routine "fin". On voit alors qu'après appuie sur CTRL + C le programme retourne la ligne suivante : recep 2 signal Exercice 3 : En utilisant fork(), écrire un programme en C qui permet de créer un processus fils qui traite le signal SIGUSR1 en installant la routine de traitement it_fils() et qui reste ensuite bloqué dans une boucle infinie. La routine de traitement it_fils() envoi le signal SIGINT au processus fils en utilisant son pid (getpid()). Le processus père s’endort 5 secondes puis envoie le signal SIGUSR1 au fils. 3. Les Tubes et les Tubes nommés : Exercice 1 : Ecrire un programme en C pipe.c qui fonctionne à partir de la fonction pipe(). On va écrire deux caractères ASCII ‘A’ et ‘B’ dans le tube puis on va fermer le tube en écriture. Remarque : Si on essaye de lire un 3 ème caractère dans le tube on reçoit "Impossible de lire dans le tube !!!" On voit que le fonctionnement d’un tube est de type « First In First Out ». Lorsqu’il est vide, la fonction read renvoie 0. Pr. O.Ibrihich SMI_GL/S4 Exercice 2 : De la même manière que pipe.c, en utilisant la fonction pipe(), écrire un programme pipe2.c qui permet d’installer avec signal() la routine it_sigpipe() de traitement du signal SIGPIPE. Puis fermer le tube en lecture et enfin écrire le caractère ASCII ‘A’ dans le tube. Exercice 3 : Toujours avec pipe() et fork(). Ecrire un programme en C qui permet de créer un processus fils qui lit le tube (read()) alors que le processus père écrit dans le tube le message «Hello fiston». Comme le fils hérite des descripteurs ouverts du père, on peut fermer le tube en écriture pour le fils et en lecture pour le père.

TP_SEII

Embed Size (px)

DESCRIPTION

TP SE II

Citation preview

  • Pr. O.Ibrihich SMI_GL/S4

    Systme dExploitation II Filires : Sciences Mathmatiques & Informatiques / Gnie Logiciel/S4

    Anne : 2014-2015 TP1 : Programmation Systme sous Linux

    But : Ces TP ont pour but de maitriser les diffrents mcanismes de communication interprocessus sous Linux : fork, tubes, signaux IPC, les smaphores et mmoire partag. Exercices :

    1. Fonction fork() Exercice 1 : Ecrire un programme en C qui permet de crer un processus fils qui dort 10 secondes puis meurt alors que le processus pre attend la fin dexcution du processus fils avant de se terminer. Exercice 2 : Ecrire un programme en C qui permet de crer un processus fils qui dort 10 secondes puis meurt alors que le processus pre reste bloqu dans une boucle infinie.

    2. Les signaux : Exercice 1 : A laide de la fonction signal(), on va traiter le signal SIGALRM en installant la routine de traitement it(). On utilisera ensuite alarm() pour gnrer le signal SIGALARM au bout de 5 secondes, le programme tant ensuite dans une boucle infinie. Exercice 2 : De la mme faon que prcdemment, crer un programme en C qui permet de crer le signal sig2.c qui utilise la fonction signal() et traite le signal SIGINT en installant la routine de traitement fin(). Le programme est ensuite dans une boucle infinie. Remarque : Lorsque l'on excute le programme, il faut faire CTRL + C pour pouvoir activer la routine "fin". On voit alors qu'aprs appuie sur CTRL + C le programme retourne la ligne suivante : recep 2 signal Exercice 3 : En utilisant fork(), crire un programme en C qui permet de crer un processus fils qui traite le signal SIGUSR1 en installant la routine de traitement it_fils() et qui reste ensuite bloqu dans une boucle infinie. La routine de traitement it_fils() envoi le signal SIGINT au processus fils en utilisant son pid (getpid()). Le processus pre sendort 5 secondes puis envoie le signal SIGUSR1 au fils.

    3. Les Tubes et les Tubes nomms : Exercice 1 : Ecrire un programme en C pipe.c qui fonctionne partir de la fonction pipe(). On va crire deux caractres ASCII A et B dans le tube puis on va fermer le tube en criture. Remarque : Si on essaye de lire un 3me caractre dans le tube on reoit "Impossible de lire dans le tube !!!" On voit que le fonctionnement dun tube est de type First In First Out . Lorsquil est vide, la fonction read renvoie 0.

    Pr. O.Ibrihich SMI_GL/S4

    Exercice 2 : De la mme manire que pipe.c, en utilisant la fonction pipe(), crire un programme pipe2.c qui permet dinstaller avec signal() la routine it_sigpipe() de traitement du signal SIGPIPE. Puis fermer le tube en lecture et enfin crire le caractre ASCII A dans le tube. Exercice 3 : Toujours avec pipe() et fork(). Ecrire un programme en C qui permet de crer un processus fils qui lit le tube (read()) alors que le processus pre crit dans le tube le message Hello fiston. Comme le fils hrite des descripteurs ouverts du pre, on peut fermer le tube en criture pour le fils et en lecture pour le pre.