Vous êtes sur la page 1sur 4

Questions de cours

1. Qu'est-ce qu'un processus zombie ?

a) Un processus qui s'est arrêté de manière inattendue.

b) Un processus qui est en train de s'exécuter en arrière-plan.

c) Un processus qui s'est terminé mais dont le père n'a pas encore récupéré le code de sortie.

2. Comment peut-on éviter la création de processus zombies ?

a) En appelant la fonction wait() dans le processus père.

b) En appelant la fonction exit() dans le processus fils.

c) En utilisant la fonction sleep() dans le processus fils.

3. Quels sont les descripteurs de fichier utilisés pour lire et écrire dans un tube anonyme ?

A. STDIN et STDOUT

B. STDIN et STDERR

C. STDOUT et STDERR

D. Les nouveaux descripteurs retournés par pipe ()

4. Comment savoir si la lecture dans un tube anonyme est terminée ?

A. En appelant la fonction feof().

B. En appelant la fonction ferror().

C. Lorsque le retour de la fonction read() égale à 0.

D. En fermant le descripteur de fichier de lecture.


5. Quelle est la différence entre fork() et exec() ?

A. fork() crée un nouveau processus, tandis que exec() remplace l'image du processus
courant par une nouvelle image.
B. fork() remplace l'image du processus courant par une nouvelle image, tandis que
exec() crée un nouveau processus.
C. fork() et exec() sont deux noms différents pour la même fonction.
D. fork() et exec() ne sont pas des fonctions liées à la création de processus.
Exercice 1:
1. Comment différenciez-vous le processus parent et le processus enfant dans votre code
après avoir appelé fork() ?
Pour différencier le processus parent et le processus enfant après avoir appelé fork(), on
peut utiliser la valeur de retour de la fonction fork(). La fonction fork() retourne le PID
(Process ID) du processus enfant dans le processus parent, et elle retourne 0 dans le
processus enfant
2. Dessiner l'arborescence du programme et donner le nombre d'affichage du message
Hello world! ?

intmain() {
fork();
fork();
fork();
printf("Hello World!\n");
return 0;
}

le nombre d'affichage du message Hello world!: 8 affichages


3. Écrivez un programme en C qui utilise l'appel système fork pour créer une arborescence
de processus en chaîne, où chaque processus enfant crée un autre processus enfant.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#define NUM_CHILDREN 3
void createChild(int N) {
if (N <= 0) {
return;
}
pid_t Pid = fork();
if (Pid < 0) {
// Erreur lors de la création du processus
perror("fork");
return;
} else if (Pid == 0) {
// Début de la fonction récursive createChild (processus enfant)
printf("Je suis le processus enfant (PID %d) de niveau %d\033[0m\n",
getpid(), N);
createChild(N - 1);
// Fin de la fonction récursive createChild (processus enfant)
return;
} else {
// Code exécuté par le processus parent
wait(NULL);
return;
}
}
int main() {
printf("Je suis le processus parent (PID %d)\n", getpid());
createChild(NUM_CHILDREN);
return 0;
}
AFFICHAGE

4. Écrivez un programme en C qui utilise l'appel système fork pour créer une arborescence
de N processus en étoile, où un processus parent crée N processus enfants.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#define NUM_CHILDREN 5
int main() {
pid_t parentPid = getpid();
pid_t Pid;
printf("Je suis le processus parent (PID %d)\n", parentPid);
for (int i = 1; i <= NUM_CHILDREN; i++) {
Pid = fork();
if (Pid < 0) {
// Erreur lors de la création du processus
perror("fork");
return 1;
} else if (Pid == 0) {
// Code exécuté par le processus enfant
printf("Je suis le processus enfant (PID %d) créé par le parent (PID
%d)\n", getpid(), parentPid);
return 0;
}
}
// Attends la fin de tous les processus enfants
while (wait(NULL) > 0);
return 0;
}
AFFICHAGE

Exercice 2:
Cinq processus A, B, C, D et E sont soumis à un calculateur dans cet ordre, mais quasi simultanément.
Ces travaux ne font pas d’entrée-sorties. Leurs durées respectives sont 10, 6,1, 5 et 8 secondes. Dessiner
le diagramme de Gantt pour l’algorithme FCFS et pour l’algorithme de tourniquet avec un quantum de
2s.

FCFS :
A B C D E

0 10 16 17 22 30

L’algorithme de tourniquet :

A8 B4 C D3 E6 A6 B2 D1 E4 A4 B D E2 A2 E A

0 2 4 5 7 9 11 13 15 17 19 21 22 24 26 28 30

Vous aimerez peut-être aussi