SYSTEME D’EXPLOITATION Gestion des processus et threads Ordonnancement Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Une définition Un processus est l’image dynamique de l’exécution en mémoire centrale d’un programme exécutable dans une zone protégée. A chaque processus est associé le contexte : CO, les registres, pointeur de pile et une zone mémoire (code, pile, données) Francis ROGARD Initiation SE processus et threads
Les états d’un processus Fin En exécution création Élection Prêt Blocage Préemption Déblocage Bloqué Attente ressources Attente processeur Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Le diagramme des états actif utilisateur actif noyau zombie nouveau prêt Endormi ou suspendu Francis ROGARD Initiation SE processus et threads
Le bloc de contrôle (PCB) En plus des données et du code, le chargeur associe au processus le PCB : un identificateur (PID) l’état (élu, bloqué ou prêt) le contexte processeur et mémoire les statistiques les informations sur l’ordonnancement les informations sur ses ressources ce bloc permet de gérer le contexte Francis ROGARD Initiation SE processus et threads
Les threads (processus légers) File exécution Ressources Espace d’adressage Processus monothread Thread 1 Ressources Espace d’adressage Thread 2 Thread 3 Processus multithreads Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads L’ordonnancement La fonction d’ordonnancement va permettre de choisir le processeur élu. Si l’ordonnancement est préemptif, il sera possible de retirer un processus élu en particulier pour assurer un temps de réponse « acceptable » pour chaque processus Francis ROGARD Initiation SE processus et threads
Les dispositifs d’ordonnancement Préemption µP Liste des PCB prêts µP Répartiteur Ordonnanceur µP Liste des PCB bloqués µP Blocage Déblocage Francis ROGARD Initiation SE processus et threads
Les algorithmes de choix Premier arrivé, Premier servi (FIFO) temps d’attente sur les processus longs Par priorité Problème de famine Politique du tourniquet (quantum de temps) Adapter le quantum de temps Francis ROGARD Initiation SE processus et threads
Les politiques d’ordonnancement Unix/Linux : Sur la base des priorités décroissant (1-99) temps réel : fixe (FIFO et priorité) classiques : calcul dynamique (priorité) Windows Sur la base des priorités croissantes (1-32) thread temps réel : fixe (16-32) thread système : dynamique (1-15) Une file d’attente par niveau de priorité Francis ROGARD Initiation SE processus et threads
L’implantation Unix/Linux Le principe de base est d’organiser les processus hiérarchiquement, à chaque nœud est associé un fils (arbre binaire) Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Les caractéristiques Le pid, le ppid L’uid et le gid, l’euid et l’egid Les trois fichiers input, output et error Le niveau de priorité Les temps processeur, mémoire et total utilisateur La quantité de mémoire utilisée Le nom de la primitive en attente de sa mort Francis ROGARD Initiation SE processus et threads
Les mécanismes de création Création par duplication La primitive C fork() crée un processus fils avec duplication du contexte au fils Le père et le fils ont le même nom Création par recouvrement Il n’existe pas un nouveau processus, mais un exécutable récupère le contexte d’un processus existant via le pid La commande exec permet ce type de recouvrement Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads La primitive fork () Le schéma de création du processus dans un programme en langage C : switch ( fork()) { case – 1 : /* erreur */ ; break ; case 0 : /* chez le fils */ ; break ; default : /* chez le père */ } /* code exécuté par les deux processus */ Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads La synchronisation On dispose de trois mécanismes pour synchroniser les processus : L’attente de mort du fils (wait) Les signaux Les sémaphores Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads L’échange de données On dispose de mécanismes pour transférer des données entre deux processus sans utiliser un fichier du disque dur : Les tubes systèmes ou nommés La mémoire partagée Les files de messages Francis ROGARD Initiation SE processus et threads
L’interprète de commandes Le_prompt > ls -l bash fork() wait() execl() ls -l bash Francis ROGARD Initiation SE processus et threads
La programmation de l’interprétation Le schéma d’interprétation : switch ( fork()) { case – 1 : /* erreur */ ; break ; case 0 : execl(« /bin/ls », « ls » ,« -l », NULL); break ; default : wait(0) ; } /* code exécuté par le bash qui affiche le prompt*/ Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads La mort d’un processus La fin de l’exécution de la fonction main() entraîne la mort du processus et la valeur du return est retournée à l’interprète de commandes L’exécution de la primitive exit() ou la commande exit entraîne la fin du processus avec l’envoi de la valeur associée à l’interprète La réception d’un signal entraîne aussi sa mort si le signal n’est pas associé à un traitement spécifique Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Les commandes ps visualisation top visualisation en temps réel nice gestion de la priorité time temps d’exécution kill suppression d’un processus wait attente de la fin du fils exec <commande> recouvrement par la <commande> Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Démarrage du système Le premier processus après l’initialisation est int de pid 1 Les tâches d’int sont : Montage des systèmes de fichiers ( /proc et ceux de /etc/fstab) Mise à l’heure L’activation du swap Le lancement des services (démons) syslog, crond, lpd … Le chargement des modules L’affectation des variables d’environnement Francis ROGARD Initiation SE processus et threads
Le fichier /etc/inittab (1) Ce fichier, lu par init, indique les services à démarrer à l’initialisation. Les services sont regroupés suivant 7 niveaux d’exécution successifs En général : 0 arrêt du système 1,s et S mode mono-utilisateur 2 mode multi-utilisateurs 6 redémarrage Le niveau 3 est utilisé pour les services et 5 pour l’environnement graphique Francis ROGARD Initiation SE processus et threads
Le fichier /etc/inittab (2) Une ligne du fichier comporte les informations suivantes <identifiant> <liste des runlevels> <action> <commande> Les actions sont : Respawn, Once, Wait, Powerfail … Les scripts exécutés suivant les runlevels sont dans le répertoire /etc/rc.d (rc.sysinit, init.d avec les sous répertoires rc0.d, rc1.d …) Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Le script rc Le script rc exécute les fichiers du répertoire correspondant au numéro de runlevel passé en argument (rc 2 rc2.d) Dans le répertoire rc2.d, on trouve les liens symboliques vers des fichiers de /etc/init.d : lrwxrwxrwx 1 root root 15 dec 16 2004 K50xinetd -> ../init.d/xinetd S90crond -> ../init.d/crond Francis ROGARD Initiation SE processus et threads
La hiérarchie des processus /etc/inittab init (pid 1) /etc/passwd /etc/profile /etc/bashrc ~/.bashrc Les démons initialisés par la commande rc suivant les niveaux de priorité crond, lpd, xinetd … login getty bash Le processus de login Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads L’arrêt du système La commande shutdown La commande halt <ctrl> <alt> et <suppr> Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Implantation NT et XP Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Rappel Mode utilisateur Application client Message Sous système protégé (Win32) Appel système Mode noyau Service système Gestionnaire Processus et threads Noyau Francis ROGARD Initiation SE processus et threads Matériel
Initiation SE processus et threads Chaque processus comporte un ou plusieurs threads Le système gère des objets processus et threads Pas de relation père-fils, le gestionnaire de processus crée des instances d’objet pour les sous-systèmes d’environnement qui les gèrent Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Les éléments du thread Le contexte : CO, une pile utilisateur et une noyau, les valeurs des registres, une zone privée pour des données L’espace commun : ce sont les objets du processus via les handles, l’espace d’adressage et toute autre ressource. Francis ROGARD Initiation SE processus et threads
Ressources d’un processus Jeton d’accès Liste des descripteurs espace virtuel Processus thread Table des objets handle 1 handle 2 fichier handle 3 section Objets Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads Les services du noyau Ordonnancement Gestion des interruptions et exceptions interruption asynchrone exception synchrone La synchronisation des processeurs La procédure de reprise du défaut d’alimentation Francis ROGARD Initiation SE processus et threads
Initiation SE processus et threads FIN Francis ROGARD Initiation SE processus et threads