0% ont trouvé ce document utile (0 vote)
25 vues3 pages

TD Introduction Aux Systèmes D'exploitation - Série 2: Objectif

Ce document présente des exercices sur les appels systèmes fork, wait et exec dans le cadre des systèmes d'exploitation. Les exercices incluent des exemples de code en C pour illustrer la création et la gestion de processus, ainsi que des questions sur l'arborescence des processus et la gestion des processus zombies. L'objectif est de maîtriser ces concepts fondamentaux pour le développement d'applications utilisant des processus.

Transféré par

koukabikoukabi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
25 vues3 pages

TD Introduction Aux Systèmes D'exploitation - Série 2: Objectif

Ce document présente des exercices sur les appels systèmes fork, wait et exec dans le cadre des systèmes d'exploitation. Les exercices incluent des exemples de code en C pour illustrer la création et la gestion de processus, ainsi que des questions sur l'arborescence des processus et la gestion des processus zombies. L'objectif est de maîtriser ces concepts fondamentaux pour le développement d'applications utilisant des processus.

Transféré par

koukabikoukabi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TD Introduction aux Systèmes d’Exploitation - Série 2

Objectif : Maîtriser les Appels Systèmes (fork, wait et exec) pour la


Création et Recouvrement de Processus.
Rappel :
Exemple d'utilisation de la fonction ” fork ( ) ”

# include <unistd.h>
# include <stdio.h>
...
int pid;
pid = fork ( );
if (pid == - 1)
{/*code si échec: printf (” le fork ( ) a échoué \n ”)*/}
if (pid == 0)
{ /* code exécuté par le processus fils */ }
else
{ /* code exécuté par le processus père */ }
...

Exercice 1 :

Objectif : Apprendre à utiliser les Données en cas de Fork

Considérer le programme suivant :

#include <stdio.h>
#include <unistd.h>

int i = 0;

int main(void)
{
if (fork())
printf("Je suis le père, i vaut %d\n", ++i);
else
printf("Je suis le fils, i vaut %d\n", ++i);
return 0;
}

Dire ce qui est affiché par ce programme, et dans quel ordre.

1
Exercice 2 :

Objectif : Apprendre à Tracer un Arbre de Processus (fork)

Considérez le programme C suivant :

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

void main()

{
int p1, p2, p3, p4;
if ((p1=fork( ))==0)
if ((p2=fork( ))==0)
f2( );
else
f1( );
else
if ((p3=fork())==0)
f3( );
else
if ((p4=fork())==0)
f4( );
sleep (3);
while (wait (NULL)>0) ;
}

1) Tracez l'arborescence des processus créés par ce programme si les fonctions f1, f2, f3 et f4 se terminent
par exit().

2) Ce programme produit-il des processus zombies? Justifiez.

Exercice 3 :

Objectif : Apprendre à interpréter des Itérations comprenant fork

Soit le programme suivant :

/* Fichier pere_fils1.c */

#include <unistd.h>
#define N ...

void main ()

2
{ int i;
int pid, ppid, npid;
pid = (int) getpid();
printf(’’ Debut du processus n° : %d \n’’, pid );
for ( i = 1 ; i < N ; i++ )
{
npid = ( int ) fork();
pid = (int) getpid();
ppid = (int) getppid();
printf(’’Le processus est %d , le père est : %d’’, pid,ppid) ;
}
printf(’’ \t \t \t Fin du processus n° : %d \n’’, pid );
}

Combien de processus sont créés pour N=2, N=3, N=4... ? Donner l’arborescence des processus.

Exercice 4 :

Objectif : Apprendre à développer un interpréteur de commande en utilisant les fonctions système


fork, wait et exec.

Ecrire un programme shell (interpréteur de commandes) qui affiche le prompt, lit une commande
provenant du terminal, crée un fils, attend qu'il exécute la commande et lit la commande suivante quand le
fils se termine.
Pour afficher le prompt et lire la commande, utiliser respectivement les fonctions void type_prompt(void)
et void read_cmde(char *commande, char * parametres []) sans écrire leurs codes.

Vous aimerez peut-être aussi