TP Se
TP Se
TP Se
Département d'informatique
Système d’exploitation
Niveau: Licence 2
Group:5
TP5: Mini-Projet 1
Realized by:
• HAMMADI Mohammed 161832017273
Dirge:
Mr. Tahraoui
Exercice 1
Le programme utilise la fonction fork() pour
créer des processus enfants. Il initialise une
variable "i" à 1 et incrémente "i" dans chaque
processus enfant créé jusqu'à ce que 10
processus enfants soient créés. Le programme
affiche ensuite la valeur finale de "i", qui est 11
Exercice 2
l’arbre des processus.
Exercice 3
programme C qui génère une chaîne de processus linéaire, où chaque
processus créé en crée un autre jusqu'à atteindre le processus final 'pn'.
p1-->p2-->p3-->p4-->pn
#include <stdio.h>
#include <unistd.h>
int main() {
int i, n = 5;
if (fork() == 0) {
printf("Je suis le processus p%d, mon PID est %d, le PID de mon
père est %d\n", i, getpid(), getppid());
} else {
wait(NULL);
break;
if (i > n) {
printf("Je suis le processus pn, mon PID est %d, le PID de mon père
est %d\n", getpid(), getppid());
return 0;
Exercice 4
programme C qui permet de réaliser la communication suivante:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {
int pipefd[2];
pid_t pid;
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
if (pid == 0) {
close(pipefd[1]);
close(pipefd[0]);
reversed[i] = buffer[n-i-1];
}
reversed[n] = '\0';
exit(EXIT_SUCCESS);
} else {
close(pipefd[0]);
close(pipefd[1]);
wait(NULL);
return 0;
Exercice 5
trois processus qui communiquent au moyen de pipes nommés selon
l’architecture .
p1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
int tube1_fd;
char message[50];
int a, b;
if (tube1_fd == -1) {
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
if (close(tube1_fd) == -1) {
exit(EXIT_FAILURE);
return EXIT_SUCCESS;
p2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
// Create tube1
mkfifo("tube1", 0666);
int fd1;
char buffer[1024];
close(fd1);
int a = atoi(a_str);
int b = atoi(b_str);
// Perform calculation
int result;
if (strcmp(op_str, "+") == 0) {
result = a + b;
} else {
printf("Invalid operator\n");
exit(1);
// Create tube2
mkfifo("tube2", 0666);
int fd2;
exit(0);
p3:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
// Create tube2
mkfifo("tube2", 0666);
char buffer[1024];
close(fd2);
int a = atoi(a_str);
int b = atoi(b_str);
// Perform calculation
int result;
if (strcmp(op_str, "+") == 0) {
result = a + b;
} else {
printf("Invalid operator\n");
exit(1);
}
// Open tube3 for writing
int fd3;
char message[1024];
close(fd3);
exit(0);
Exercice 6
Les cinq processus fils sont fork0, fork1, fork2, fork3 et fork4.
fork1 (PID 2402) crée fork3 (PID 2404) et fork4 (PID 2405)