Correction Examen 2
Correction Examen 2
Correction Examen 2
Semestre 2 Session
Principale
2. Quels sont les différents états d’un processus ? Quelles sont les transitions entre ces états ?0.5pts
processeur,
4.Qu'appelle-t-on un processus qui s'est terminé mais son père n'a pas encore lu son code de retour.0.25pts
Processus zombie
5.Que signifie préempter un processus ?
A. Suspendre son exécution au profit d’un autre processus. 0.5pts
B. Arrêter définitivement son exécution au profit d’un autre processus.
C. Geler le processus pour un temps indéterminé (fini).
D. Transférer le processus en zone de swap
6. Qu’est-ce qu’un processus au sens d’un O.S ?0.5pts
A. Une opération d’Entrée/Sortie.
B. Un utilisateur connecté au système et utilisant des ressources.
C. L’instance d’un programme en cours d’exécution.
D. Un fichier statique stocké sur une mémoire de masse.
7.Quel est le rôle d’un ordonnanceur au sein d’un O.S. ? 0.5pts
A. Ordonnancer l'utilisation de la mémoire virtuelle.
B. Ordonnancer les opérations d’E/S.
C. Ordonnancer les interruptions provoquées par les opérations d’E/S.
D. Ordonnancer les processus à exécuter selon un ou des critères.
Exercice 1 : (8 pts)
1.Écrire un programme en langage C qui utilise la fonction dup2 pour rediriger la sortie standard vers un
fichier "file.txt" en utilisant le descripteur de fichier file_desc. Les messages sont écrits dans le fichier en
utilisant la fonction printf. 3.5pts
2
#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#include<fcntl.h>
int main(){
system("touch file.txt");
int file_desc = open("file.txt",O_WRONLY | O_APPEND);
// here the newfd is the file descriptor of stdout (i.e. 1)
dup2(file_desc, 1) ;
// All the printf statements will be written in the file
// "file.txt"
printf("I will be printed in the file file.txt\n");
return 0;
}
2.Écrire un programme tube_anonyme_multi qui consiste à créer deux processus écrivains qui écrivent des
chiffres dans le tube : le premier écrivain écrit les chiffres de 1 à 5 et le deuxième écrivain écrit les
chiffres de 6 à 10. Le processus lecteur lit les chiffres du tube et les ajoute à la somme totale. Finalement,
la sommetotale est affichée à l'écran. 4.5pts
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
3
pipe(pipefd);
if (pid1 == 0) {
// Premier processus écrivain
close(pipefd[0]); // Ferme l'extrémité de lecture du tube sum1=childProcess(1, 5,
pipefd[1]);
} else {
pid2 = fork();
if (pid2 == 0) {
// Deuxième processus écrivain
close(pipefd[0]); // Ferme l'extrémité de lecture du tube sum2=childProcess(6, 10,
pipefd[1]);
} else {
// Processus lecteur
close(pipefd[1]); // Ferme l'extrémité d'écriture du tube
return 0;
}
Exercice 2 : (4 pts)
Soient les codes ci-dessous :
4
Code 1 Code 2
5
Exercice 3 : (5 pts)
On considère l’ensemble des processus suivants :
A-
6
B-
Bonne chance