0% ont trouvé ce document utile (0 vote)
4 vues4 pages

TP4 Linux CréationProcess

Ce document présente un TP sur la création de processus et de threads sous Linux, avec des exercices pratiques utilisant les fonctions fork() et pthread_create(). Les objectifs incluent la compréhension des mécanismes de création de processus, l'héritage des données, et le partage des données entre threads. Les exercices demandent d'écrire et d'analyser des programmes en C, en mettant l'accent sur le comportement des processus père et fils ainsi que sur la gestion des threads.

Transféré par

fst.scolarite
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 DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues4 pages

TP4 Linux CréationProcess

Ce document présente un TP sur la création de processus et de threads sous Linux, avec des exercices pratiques utilisant les fonctions fork() et pthread_create(). Les objectifs incluent la compréhension des mécanismes de création de processus, l'héritage des données, et le partage des données entre threads. Les exercices demandent d'écrire et d'analyser des programmes en C, en mettant l'accent sur le comportement des processus père et fils ainsi que sur la gestion des threads.

Transféré par

fst.scolarite
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 DOCX, PDF, TXT ou lisez en ligne sur Scribd

UESMB 101

Systèmes d'exploitation : principes, programmation et virtualisation

TP4 : Création de processus sous linux


Objectifs :

 Comprendre les mécanismes de création de process sous linux


 Comprendre le mécanisme de fonctionnement des processus père, fils et
l’héritage des données
 Comprendre le mécanisme de fonctionnement des threads et le partage des
données.

Outils nécessaires

 Machine virtuelle CNAM (créée avec Mme Safa Rjichi)

I. Création de processus avec fork ()

Exercice 1 :
1. Ecrire le programme C suivant et l’enregistrer sous le nom de TP1.c

#include<stdio.h>
#include <unistd.h>// lesprimitifs de base de POSIX y compris fork()
#include <sys/types.h>// bibliothèque des types spéciaux
int main (void)
{
fork ();
printf("Job done by father and fils\n");
return 0;
}
2. Ouvrir le terminal,
a. Utiliser le compilateurgcc pour compiler votre code avec la commande suivante :
gcc -o TP1 TP1.c
b. Puis l’exécuter avec la commande :./ TP1
c. Combien de printf vous obtenez ? Expliquer le résultat
3. Rajouter un deuxième fork () juste après la première, Combien de printf vous obtenez ?
Analyser et expliquez le résultat obtenu. Donner l’arborescence des processus crées.

Hanene BeN FRADJ 1


Exercice 2 : Séparer le traitement du processus père et celui du processus fils
1. Editer,compiler puis exécuter le code suivant sur votre VM:

#include <stdio.h>
#include <unistd.h>
#include<sys/types.h>
int main (void)
{
int PIDNUMBER;
printf("Hello I'm the father\n");
PIDNUMBER= fork ();
if (PIDNUMBER==0) -- traitement du processus fils
{
printf("Hello I'm the son with PID %d\n", PIDNUMBER);
printf("job done by son\n");
}
Else --traitement du processus père
{
printf("Hello again, I'm the the father with PID %d\n", PIDNUMBER);
printf("job done by father\n");
}
printf("job done by father and son\n");-- traitementcommun pour les 2 processus
return 0;
}
2. donner le résultat de l’affichage des printf et analyser le résultat
Exercice 3 : Héritage des processus fils (coursexple3.c)
Ecrire un programme C qui crée 2 processus (1 père et 1 fils) ainsi qu’une variable globale m
de type entier et initialiser à 2.
 Le processus père incrémente la variable m, affiche qu’il est père ainsi que la
valeur de m, 5 fois chaque 1s. vous pouvez utiliser le primitif sleep (intn ) qui
suspend l’exécution du processus appelant pour une durée de n secondes.
 Le processus fils multiplie m par 2, affiche qu’il est fil ainsi que la valeur de m ; 5
fois chaque 2s
1. Compiler puis exécuter votre code
2. Analyser l’affichage ainsi que les valeurs de m pour le processus père et fils, qu’est ce
que vous constatez ? Pourquoi ?

II. Création de processus avec pthread_create()


Le principal inconvénient de la création de process avec le primitive fork() est le fait de
dupliquer le code du père pour chaque fils créée ce qui engendre une empreinte mémoire
importante. Pour remédier à ce problème, on a eu recours à la création de fils léger avec le
primitifpthread_createde la bibliothèque « pthread.h » qui implémente la norme POSIX
1003.1c.
Exercice 1 : Création de thread

Hanene BeN FRADJ 2


1. Editer le code suivant, le compiler puis l’exécuter
2. Donner le résultat d’affichage et analyser

#include<pthread.h>
#include<stdio.h>
#include <unistd.h>
# include <stdlib.h>
void* f1(void *i) //function f1 variable, void*type retourne tous variables d’entrée (int, char, string,….
{
printf(“hello from thread1\n\r”);
pthread_exit(0);
}
int main()
{
pthread_t thread1; // pthread_t declarer dans #include<pthread.h>
printf(“hello from the father\n”); // the father
pthread_create (& thread1,NULL, f1, NULL); // null c’est un type void *
pthread_join (thread1, NULL) ; - le processus père attend la fin du thread fils pour se terminer
return EXIT_SUCCESS;
}

3. Modifier le code précèdent afin d’avoir 2 threads, thread1 et thread2 : chacune affiche
respectivement ce message :

printf(“hello from thread1\n\r”);


printf(“hello from thread2\n\r”);

Exercice 2 : passage de paramètres au thread ( thread1.c)


Le passage d’une donnée au thread est possible avec le primitive pthread_create() via son
dernier argument ( en rouge).

#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,

void *(*start_routine)(void*), void *arg);

1. Modifier le code précédent pour déclarer dans le main deux variablesx et y : Int x =3 ;
Char y= ‘A ‘

Hanene BeN FRADJ 3


2. Passer ces 2 variables, en paramètre, respectivement au thread 1 et thread 2 lors de leur
création.
3. En récupérant ces données, les 2 thread, les affiche avec un printf.
4. Compiler et exécuter votre code.

Exercice 3 : Création de plusieurs threads( thread1.c)


Ecrire un programme C qui permet de créer 20 threads qui exécutent tous la même fonction
f1.
Vous pouvez déclarer un tableau de 20 éléments de type pthread_t
pthread_t thread[20];
1. A son exécution, chaque thread doit afficher son numéro
2. Exécuter le code et analyser le résultat.
3. Changer votre code pour déclarer une variable globale de type int var. initialiser cette
variable dans la main à 5.
4. Modifier le printf des threads afin que chacune affiche son numéro ainsi que la valeur de
cette variable globale.
5. Analyser le résultat et énumérer les conséquences

Hanene BeN FRADJ 4

Vous aimerez peut-être aussi