Système d’Exploitation 2
(Operating System)
Avec évaluation de compétences et TDs
Cours élaboré par:
Dr. Ing. Takwa Ben Aïcha
Gader
[email protected] Description
2
Responsable : Dr. Ing. Takwa Ben Aïcha Gader
Formation : 1ème année licence (Semestre 2)
Filière: LCS & LCE
Titre du cours: Système d’exploitation 2
Méthodes pédagogiques :
Cours magistral
Travaux dirigés
Volume horaire: 1h30 Cours/semaine
Coefficient : 1
Régime d’examen: mixte
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Fonctionnement
3
Chaque semaine
Un cours et des travaux dirigés
Evaluation des connaissances
Sans documents
Novembre: Devoir surveillé d’1h30
Décembre: Examen de 2h00
Note finale: (DS + 2*Examen)/3
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Objectifs
4
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Plan du cours
5
Chapitre 1: Les processus
Chapitre 2: Les threads
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les Processus
6
CHAPITRE 1
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus- Rappel
7
Notion de Base des Processus
▪ Un processus est une entité dynamique qui représente un programme en cours d'exécution. Il
dispose de ses propres ressources :
▪ Ressources physiques : mémoire, processeur, entrée/sortie, etc.
▪ Ressources logiques : données, variables, fichiers, etc.
▪ Différence entre un processus et un programme :
▪ Un programme est une suite d'instructions statique, écrite sous forme du texte ou du code
source.
▪ Un processus, quant à lui, est une entité dynamique qui exécute un programme. Il
représente le déroulement d'une tâche au sein d'une application ou d'un système
d'exploitation.
▪ NB: Si un système informatique dispose d'un seul processeur, à un instant donné, seul un
processus peut avoir accès à ce processeur.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Rappel
8
Etats d’un Processus
▪ Nouveau: Le SE a créé le processus
▪ 1: Correspond à une interruption ou un événement nécessitant une attente, par exemple une opération
d'entrée/sortie.
▪ 2: Représente une préemption, où le processus actif est interrompu pour permettre à un autre processus
de s'exécuter.
▪ 3: Signifie que le processus est sélectionné par l’ordonnanceur pour être exécuté.
▪ 4: Correspond à la fin de l'événement bloquant, rendant le processus éligible à l'exécution.
▪ Terminé: Le processus n’est plus exécutable
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les process - Rappel
9
Propriétés d’un processus
Dans Windows, Linux, et autres OS, chaque processus est représenté dans le noyau par une structure
appelée PCB (Process Control Block). Il contient :
▪ Son état : (Actif, Suspendu, Attente, Terminé)
▪ Un identifiant unique (PID)
▪ Le compteur ordinal : (Adresse de la prochaine instruction à exécuter)
▪ Ses données mémorisées : (Segments de code, données, pile, tas)
▪ Métadonnées: comme le processus parent, les processus enfants, le groupe auquel il appartient,
les variables d’environnement, les statistiques d’exécution, ainsi que les limites imposées sur les
ressources utilisées (comme la mémoire et le temps processeur).
▪ Ressources ouvertes : toutes les ressources nécessaires à son fonctionnement, telles que les
fichiers ouverts, les connexions E/S, et les sockets.
▪ …
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Rappel
10
Propriétés d’un processus
Identificateurs associés : Chaque processus se voit attribuer plusieurs identificateurs essentiels lors de sa
création :
▪ PID : Numéro unique du processus.
▪ PPID : Numéro du processus père.
▪ UID : Identifiant de l’utilisateur ayant lancé le processus.
▪ GID : Identifiant du groupe associé à l’utilisateur.
→ Ces caractéristiques permettent au SE de suivre, planifier et coordonner les processus dans un
environnement multi-tâches.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Rappel
11
Propriétés d’un processus
▪ Un buffer est une zone de mémoire temporaire utilisée pour stocker les données en transit entre un
composant rapide (processeur) et un composant lent (périphérique d’E/S).
▪ Pourquoi utiliser un buffer ?
▪ Compense les différences de vitesse entre le processeur et les périphériques.
▪ Optimise les performances en permettant l’exécution d’autres tâches pendant les opérations
d’E/S.
▪ Réduit la latence en stockant les données avant leur traitement ou transmission.
▪ Types de buffers :
▪ Buffer d’entrée: Stocke les données avant traitement (clavier, disque).
▪ Buffer de sortie: Conserve les données avant envoi (écran, imprimante).
▪ Buffer circulaire: Réutilise la mémoire pour les flux continus (audio/vidéo).
▪ Exemple : en streaming vidéo/audio, un buffer précharge les données pour éviter les interruptions en
cas de fluctuation du réseau.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Rappel
12
Le bloc de contrôle et le contexte d’un Processus
▪ Pour gérer efficacement chaque processus, le SE utilise une structure de données spécifique appelée
Bloc de Contrôle de Processus (PCB : Process Control Block).
▪ Cette structure joue un rôle crucial dans la sauvegarde et la restauration du contexte du processus.
Rassemble les informations dynamiques essentielles, comme les registres, les compteurs d’instructions
et les indicateurs d’état.
▪ Rôle du PCB : En plus du contexte, le PCB contient des informations sur l’ordonnancement du
processus, comme :
▪ La priorité du processus.
▪ Les pointeurs vers les files d’attente.
▪ D’autres métadonnées nécessaires à la gestion et à la coordination des processus par le SE.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Rappel
13
Le bloc de contrôle et le contexte d’un Processus
➢ Registre vs Buffer
Caractéristique Registre Buffer
Définition Mémoire ultra-rapide intégrée au processeur Mémoire temporaire utilisée pour stocker des
données en transit
Emplacement Situé à l’intérieur du processeur (CPU) Situé dans la RAM ou les périphériques d’E/S
Taille Très petite (quelques bits ou octets) Plus grand (kilooctets, mégaoctets)
vitesse Ultra-rapide (accès direct par le CPU) Moins rapide (dépend de la RAM ou du
périphérique associé)
Rôle Stocke temporairement les instructions, Gère le transfert des données entre des
adresses et résultats des calculs composants de vitesse différente
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
14
Création de Processus
▪ La création d’un processus implique l’attribution d’un identifiant unique et l’initialisation de son état.
→ Cette identification permet de gérer sans ambiguïté les différents processus dans le système.
▪ Lorsqu’un processus est créé, il peut engendrer d’autres processus, créant ainsi une structure
hiérarchique. Le processus créateur est appelé processus père, et les processus créés sont ses processus
fils. Ensemble, ils forment un arbre de processus, où chaqu’un peut être à la fois un père et un fils.
Ancêtre
Père de F5 et F6 et fils de P
Arbre des processus
→ Cette organisation permet au système de déléguer des tâches spécifiques, de gérer les priorités et de
suivre l’exécution des processus de manière efficace.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
15
Exemple:
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
16
Représentation d’un processus sous Linux/Unix
▪ Un processus est représenté dans le noyau Linux par la structure task_struct.
▪ Elle sert de descripteur de processus, contenant toutes les informations nécessaires à son exécution.
▪ Chaque processus est relié aux autres sous forme de liste chaînée, permettant une gestion efficace des
relations parent-enfant.
▪ La structure task_struct est définie dans le fichier <linux/sched.h> et contient plusieurs champs clés :
Principaux champs de task_struct :
▪ state : l’état du processus
▪ prio : priorité du processus pour
l'ordonnancement.
▪ policy : politique d’ordonnancement appliquée au
processus.
▪ parent : référence au processus parent.
▪ tasks : liens vers les autres processus dans la liste
chaînée.
▪ pid : identifiant unique du processus.
liste des processus sous Linux ▪ ...
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
17
Pourquoi déléguer des tâches ?
▪ Lorsqu'un processus père crée des processus fils, il peut leur attribuer des tâches spécifiques à
exécuter. → Cela permet :
▪ Optimisation des ressources : répartition du travail pour éviter la surcharge.
▪ Modularité et robustesse : chaque processus exécute une partie de la tâche de manière
indépendante , facilitant la gestion des erreurs et la fiabilité du système.
▪ Exécution plus rapide : plusieurs processus peuvent fonctionner en parallèle.
▪ Exemple: Compilation de programme
▪ Processus principal : Supervise la compilation.
▪ Processus fils : Compile différents fichiers en parallèle.
▪ Avantages: amélioration de la performance, meilleure gestion des priorités, Système plus efficace et
réactif, …
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
18
Démarrage d'Unix et Organisation des Processus
▪ Étapes principales :
▪ BIOS : Initialise le matériel.
▪ Boot Loader : Charge l’image du noyau.
▪ Start_kernel() : Lance le noyau.
▪ Swapper (Processus 0) : Premier processus créé, gère la mémoire et initie les autres processus.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
19
Démarrage d'Unix et Organisation des Processus
▪ Processus Init (PID = 1, PPID = 0) : Fonctionne dans l'espace utilisateur.
▪ Lance les démons système: processus en arrière-plan qui s'exécute en permanence pour effectuer
des tâches système sans intervention directe de l'utilisateur. (ex. : inetd, crond, lpd).
▪ Gère les sessions utilisateur (via getty, login, shell).
▪ Démarre des commandes et applications (ex. : ls -la, firefox, ./script).
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
20
Démarrage d'Unix et Organisation des Processus
▪ Processus Kthreadd (PID = 2, PPID = 0) : Fonctionne dans l'espace noyau.
▪ Gère les threads essentiels du noyau :
▪ kswapd0 : Gestion de la mémoire.
▪ khelper : Gestion des événements noyau.
▪ kmpathd et rcu_sched : Gestion des tâches asynchrones.
→ Cette organisation garantit une coordination efficace entre l'espace noyau et utilisateur.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
21
Utilisation de fork() pour Créer des Processus sous UNIX
▪ L’appel système fork() permet de créer un processus enfant en dupliquant le processus parent.
▪ Une fois le processus enfant créé, il peut exécuter de nouvelles instructions ou remplacer son
programme en mémoire via exec().
▪ Cycle des Processus :
1. fork()
▪ Crée un processus enfant identique au parent.
▪ Les deux processus continuent leur exécution indépendamment.
2. exec() (côté enfant)
▪ Permet de remplacer le programme courant par un nouveau programme.
▪ Fréquemment utilisé pour lancer une nouvelle application.
3. exit()
▪ Le processus enfant termine son exécution.
▪ Retourne un statut au processus parent.
4. wait() (côté parent) :
▪ Le parent attend la fin de l’enfant pour récupérer son statut d’exit.
▪ Garantit une bonne gestion des ressources système.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
22
Utilisation de fork() pour Créer des Processus sous UNIX
▪ fork()
▪ Génère un nouveau processus en créant une copie complète de l’original : le processus père et
le processus fils.
▪ Les processus deviennent indépendants et sont gérés par l’ordonnanceur.
▪ Chaque processus dispose d’une copie des zones de données, garantissant qu’une modification
dans l’un n’affecte pas l’autre.
▪ Propriétés héritées par le processus fils :
▪ Le même code que le processus parent.
▪ Une copie des données et de l’environnement
(variables d’environnement, chemin).
▪ Les descripteurs de fichiers (avec les mêmes
pointeurs de position).
▪ Les priorités et les signaux*.
*les signaux sont des mécanismes de communication utilisés pour notifier ou interrompre un processus
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
23
Attente d’un processus fils : wait()
▪ Fonctionnement de wait()
▪ Lorsqu’un processus fils termine (exit()), il libère ses ressources mais reste référencé dans la
table des processus en tant que zombie.
▪ Le processus père utilise wait() pour récupérer son statut et supprimer son entrée de la table,
éliminant ainsi le zombie.
▪ Un appel wait() par fils est nécessaire.
▪ Une gestion correcte de wait() garantit la
libération des ressources et empêche
l’accumulation de processus inutilisés.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
24
Attente d’un processus fils : sleep()
▪ La fonction sleep() suspend l’exécution du processus appelant pendant un certain
nombre de secondes spécifié.
▪ Pendant ce temps, le processus est en état de sommeil et ne consomme pas de temps
processeur.
▪ Une fois le délai écoulé, le processus reprend son exécution normalement.
▪ Caractéristiques:
▪ Appel bloquant : le processus est mis en
pause et ne reprend qu’après l’expiration
du temps spécifié.
▪ Utilisation courante : permet de contrôler le
rythme d’exécution d’un programme ou
d’attendre une ressource disponible.
▪ Interruption possible : le sommeil peut être
interrompu par un signal, auquel cas
l’exécution reprend plus tôt.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
25
Résultat attendu en sortie
(pid1 < 0 ou pid2 < 0)
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
26
Suivi de la terminaison d’un processus fils avec wait()
▪ Les macros définies dans <sys/wait.h> permettent d’analyser la fin d’un processus fils après un
appel à wait(). Elles fournissent des informations sur la nature de la terminaison.
▪ Macros essentielles :
▪ WIFEXITED(status) : Renvoie true si le processus fils s’est terminé normalement via exit() ou un return
dans main().
▪ WEXITSTATUS(status) : Retourne le code de sortie du processus fils si WIFEXITED(status) est vrai.
▪ WIFSIGNALED(status) : Renvoie true si le processus fils a été interrompu par un signal (ex. SIGKILL,
SIGSEGV).
▪ WTERMSIG(status) : Retourne le numéro du signal qui a causé la terminaison du processus fils si
WIFSIGNALED(status) est vrai.
▪ Ces macros sont essentielles pour assurer une bonne gestion des processus et diagnostiquer leur fin
(normale ou due à un signal).
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
27
Exemple 1 d’utilisation de la fonction : wait()
Résultat attendu en sortie
Attendre la terminaison d’un processus fils,
sans récupérer son code de retour
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
28
Exemple 2 récupération d’un processus père le PID et le code de retour
Résultat attendu en sortie
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
29
Attente d’un processus fils : waitpid ()
▪ Un processus père utilise wait() pour attendre la fin d’un de ses fils. Mais lorsqu’il y a plusieurs fils,
comment attendre un processus spécifique ?
→ Fonction waitpid():
▪ Permet au processus père d’attendre un fils précis en spécifiant son PID.
▪ Elle retourne:
▪ Le PID du fils terminé, si l’attente est réussie.
▪ -1 en cas d’erreur.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
30
Attente d’un processus fils : waitpid ()
▪ Paramètres:
▪ Pid:
▪ pid > 0 → Attend la fin du processus fils ayant ce PID exact.
▪ pid == 0 → Attend la fin de n'importe quel fils appartenant au même groupe.
▪ pid == -1 → Comportement identique à wait(), attend n'importe quel fils (on peut changé
le groupe d’un processus au cours de sa vie (setpgid() )).
▪ pid < -1 → Attend un fils dont le GID est égal à |pid|.
▪ Status: permet de récupérer le code de retour du fils.
▪ Options: définit le comportement de waitpid() (ex. 0 pour un fonctionnement par défaut).
▪ WNOHANG : ne pas bloquer si aucun fils ne s'est terminé.
▪ WUNTRACED : recevoir des informations sur les fils bloqués même si elles n'ont pas
encore été reçues.
▪ wait(&status) est équivalent à waitpid(-1, &status, 0).
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
31
Partage des ressources entre processus
▪ Lorsqu'un processus parent crée un processus enfant, plusieurs stratégies de partage des ressources
sont possibles :
▪ Partage total : Le parent et l’enfant partagent toutes les ressources (ex : mémoire, fichiers
ouverts, etc.).
▪ Partage partiel : L’enfant hérite d’un sous-ensemble des ressources du parent (ex : copie
des fichiers ouverts, mais mémoire indépendante).
▪ Aucun partage : Le parent et l’enfant n’ont aucune ressource en commun.
▪ Exemple : Lors de la création d’un processus avec fork(), l’enfant hérite des ressources, mais une
séparation peut être effectuée via exec().
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
32
Modes d’exécution des processus
▪ Après la création d’un processus enfant, deux options d’exécution existent :
▪ Exécution simultanée : Le parent et l’enfant s’exécutent en parallèle, indépendamment.
▪ Exécution séquentielle : Le parent attend la fin de l’exécution de l’enfant avant de
poursuivre (ex : wait() en C).
▪ Exemple :
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
33
Utilisation de fork() pour Créer des Processus
sous UNIX
Comment distinguer les deux processus (père et fils) ?
→ par la valeur de retour de l'appel fork()
▪ Valeurs de retour de fork() :
▪ zéro
▪ Renvoyé au processus fils.
▪ Indique qu’il s’agit du nouveau
processus créé.
▪ Valeur positive
▪ Renvoyée au processus père.
▪ Correspond au PID (Process ID) du
processus fils nouvellement créé.
▪ Valeur négative
▪ Indique un échec dans la création du
processus.
▪ Cela peut survenir en cas de manque de
ressources système (mémoire, tables de
processus).
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
34
Programme C créant un processus séparé
remplace le code du fils par le programme /bin/ls
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
35
Création d’un processus séparé via l’API Windows
Création du processus enfant avec
CreateProcess()
Le parent attend la fin du processus fils
▪ CreateProcess() demande beaucoup plus de paramètres pour
contrôler la création du processus.
▪ Contrairement à fork(), le processus enfant ne copie pas l’état du
parent mais démarre une nouvelle exécution.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
36
Utilisation de fork() pour Créer des Processus sous UNIX
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
37
Utilisation de fork() pour Créer des Processus sous UNIX
return 0 exit(status);
▪ Division par zéro.
kill(pid, signal) ▪ Dépassement de mémoire (malloc() échoue).
▪ ...
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
38
Exit()
Kill() Return()
Processus de destruction d'un Processus
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
39
Exemple de terminaison d’un processus avec la méthode kill()
Résultat attendu en sortie
▪ Il force la terminaison immédiate du processus identifié par pid.
▪ Ne peut pas être intercepté ou ignoré par le processus cible.
▪ L'OS libère directement toutes les ressources associées au processus.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
40
Termination des processus avec exit()
▪ La fonction exit(int status) permet de mettre fin à l’exécution d’un processus de manière
explicite.
▪ Dans la bibliothèque <stdlib.h>
▪ Paramètre status : spécifie un code de retour entre 0 et 255, transmis au processus parent.
▪ Par convention :
▪ 0 indique une fin normale.
▪ Une valeur différente de 0 signale une erreur ou une condition spécifique.
▪ Avant la terminaison du processus, exit() :
▪ Exécute les fonctions de nettoyage des bibliothèques standard.
▪ Libère les ressources système allouées (mémoire, fichiers ouverts, etc.).
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Création et destruction d’un
processus
41
▪ Importance du contrôle hiérarchique
▪ Le suivi des processus enfants permet :
▪ Une meilleure gestion des ressources.
▪ La prévention des processus zombies.
▪ Une stabilité accrue du système.
▪ Processus zombies et orphelins
▪ Un processus zombie apparaît si le parent ne récupère pas le statut du fils via wait().
▪ Un processus orphelin survient si le parent termine avant ses enfants.
▪ Une gestion efficace de ces cas évite les pertes de ressources et optimise les performances
du système.
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025
Les processus - Inconvénients
42
Problèmes liés aux processus
Les processus ont certaines limites qui impactent
les performances du système :
▪ Consommation mémoire : chaque processus
dispose de son propre espace, entraînant des
duplications inutiles.
▪ Communication coûteuse : l’échange
d’informations passe par le noyau via des
pipes, files de messages ou mémoire partagée,
ce qui ajoute une latence.
▪ Surcharge du noyau : la création et la gestion des processus sollicitent fortement le système.
→ Les threads sont souvent privilégiés pour optimiser l’utilisation des ressources et réduire ces coûts.
Dr. Ing. T. Ben Aïcha Gader Cours
Système d’Exploitation 2024/2025
Les Threads
43
CHAPITRE 2
Dr. Ing. T. Ben Aïcha Gader Cours Système d’Exploitation II 2024/2025