Chap8 Gestion Processus Os
Chap8 Gestion Processus Os
Chap8 Gestion Processus Os
Lorsqu'on travaille sur un ordinateur on utilise souvent plusieurs logiciels ou fenêtre de navigation
simultanément. Chacune de ces applications n'est autre qu'un programme qui est exécuté par la machine.
Un programme n'est autre qu'une suite d'instructions écrites, in fine, en langage machine et exécutées une à une
par un processeur.
On a vu qu'un ordinateur, même de nos jours, ne possède qu'un nombre limité de processeurs (un par cœur soit
entre 1 et 8 en 2020).
Pourtant, les systèmes d'exploitation moderne permettent une exécution simultanée (ou concurrente) des
programmes. On parle de système d'exploitation multitâches.
Comment l'ordinateur fait-il alors pour exécuter "en même temps" les instructions des différents programmes
?
Au prochain cycle de son horloge le processeur va lire l'instruction se trouvant à l'adresse "A" et l'exécuter.
Une fois cela fait, il exécutera ensuite la seconde instruction et ainsi de suite.
(On rappelle que l'exécution d'une instruction se décompose elle-même en plusieurs sous-étapes effectuées au
sein du processeur : le chargement (récupérer l'instruction en mémoire), le décodage (déterminer dans la suite
d'octets chargés quelle instruction ils encodent) et l'exécution proprement dite).
En réalité, l'exécution va être interrompue pour permettre au processeur d'exécuter d'autres programmes.
Cette interruption est la clé pour avoir une exécution concurrente des programmes.
Un processus peut créer d'autres processus, c’est-à-dire démarrer l'exécution d'autres programmes. On
parle de processus père et de processus fils.
À la création d'un processus, différents identifiants lui sont associés :
- Un numéro de processus, le PID (Process Identification) ;
- Le numéro du processus père, le PPID ;
- L'identifiant de l'utilisateur qui a démarré le processus noté UID ;
- L'identifiant du groupe de l'utilisateur qui a démarré le processus noté GID ;
Transition 1 : Le processus passe d’élu à bloqué, faute de données pour l'alimenter ou en attendant une
opération d'entrée/sortie.
Transition 2 : Le processus est interrompu soit parce que la tranche de temps qui lui est impartie est achevée
soit parce qu'un processus de plus haute priorité réquisitionne le processeur. Dans ce cas il passe à l’état Prêt.
Transition 3 : Le processus est prêt, il peut alors devenir Élu si processeur est disponible.
Transition 4 : Lorsqu’un processus est bloqué il faut qu’il redevienne prêt pour espérer être ensuite élu.
Soient deux processus A et B qui doivent chacun exécuter une tâche puis attendre le résultat d'entrée ou sortie
et ensuite exécuter une deuxième tâche.
PA-E1 signifie que A Exécute une première tâche et PA-A1 que A est en attente avant de pouvoir exécuter la
2ème tâche.
Il y plusieurs manières de gérer les attentes :
Ici un processus (le B) doit attendre la fin d'un processus qui est placé devant lui dans la file ("premier arrivé,
premier servi"). Ce n'est pas avantageux pour les processus court situé plus loin dans la file.
Ici c'est différent, il est nécessaire d'établir un ordre pour faire de la gestion multitâche.
Il peut y avoir plusieurs files de processus en attente de ressources. Lorsqu'une ressource est libérée et
disponible, c'est l'OS par l'intermédiaire de l'ordonnanceur qui décide l'ordre d'accès à la ressource et active
un processus qui utilise la ressource.
Ce processus est ensuite désactivé pour le replacer dans l'état prêt ou se retrouve dans l'état bloqué s'il a besoin
d'une ressource non disponible (dans ce cas, il rejoint la file d'attente).
L'ordonnanceur gère l'ordre suivant lequel les processus ont accès au processeur etassure la terminaison
du plus grand nombre de processus par unité de temps.
Cet ordonnancement se fait à intervalles de temps régulier grâce au gestionnaire d'interruption.
Le fait pour un processus d’être interrompu s’appelle une commutation de contexte.
Prenons l'exemple suivant. Une personne tape un rapport à l'aide d'un logiciel de traitement de texte. Son
navigateur web est aussi ouvert avec divers onglets pointant vers différents sites.
Afin de pouvoir choisir parmi tous les processus lequel exécuter lors de la prochaine interruption, l'OS
conserve pour chaque processus une structure de données nommée PCB (pour l'anglais Process Control Bloc
ou bloc de contrôle du processus). Le PCB est simplement une zone mémoire dans laquelle sont stockées di-
verses informations sur le processus (état du processus, informations sur la mémoire, le temps de CPU, les
fichiers utilisés, l'identité de l'utilisateur ...).
Un processus est constitué d'une suite d'instructions traitées par le processeur. Ces instructions sont
regroupées en petites séquences appelées "thread" (ou tâche). Un thread est donc une partie du processus qui
s'exécute indépendamment des autres parties.
Chaque cœur ne peut exécuter qu'un seul thread à la fois.
Un processeur peut partager le travail entre deux cœurs logiques qui sont créés à partir d'un seul cœur
physique. Chaque cœur logique va alors traiter séparément un thread ce qui permet au cœur physique de
traiter parallèlement deux threads. C'est ce qu'on appelle le multithreading ou hyperthreading.
Dans les systèmes POSIX, la commande "ps" (process status ou état du processus) permet d'obtenir des
informations sur les processus en cours d'exécution. En tapant "ps --help" on obtient les informations sur la
commande ps.
- "top" permet d'afficher en temps réel les informations similaires à celle de ps. Elle ne fonctionne pas ici
avec cygwin. On utilisera la commande "wmic process".
- "kill n°PID" permet d'interrompre un processus.
- "wmic process"est une commande windows mais qui fonctionne avec le terminal cygwin et qui permet
d'afficher toutes les informations possibles sur les processus windows.
On peut ainsi choisir de ne faire afficher que certaines informations en ajoutant get : "wmic process get
item1,item2 …". En ajoutant /EVERY:1 on peut afficher les informations en temps réel (les temps sont
exprimés en 1/10 000 000 de seconde).
Plusieurs types de ressources sont à la disposition d'un processus : la mémoire RAM, les disques et clés
USB, les fichiers, les périphériques d'entrées et sorties.
Certaines ressources ne peuvent pas être retirées à un processus pendant qu'il les utilise, comme une
imprimante. Alors que d'autres, comme le processeur, peuvent être allouées à un autre processus pendant un
certain temps puis à nouveau allouées au premier processus.
L'accès à une ressource peut être soit partagé entre plusieurs processus, soit exclusif.
Si un processus demande un accès exclusif, il est obligé d'attendre que la ressource soit libérée si elle est
déjà allouée.
Supposons deux processus ayant des accès exclusifs sur les ressources.
Si le premier processus attend une ressource mobilisée par le second qui attend une ressource mobilisée
par le premier, alors il y a un blocage définitif. Ce phénomène s’appelle l’interblocage ou deadlock en
anglais.
Exemple concret
Illustrons ce phénomène avec les deux programmes suivant :
- enregistrer_micro : acquiert la carte son en accès exclusif (pour accéder au micro) et écrit les sons
enregistrés sous un certain format (mp3 ou wav) sur sa sortie standard et s'arrête lorsqu'il al'équivalent
de 10 secondes de son.
- jouer_son : acquiert la carte son en accès exclusif (pour accéder au haut-parleur) et joue le contenu qu'il
reçoit sur son entrée standard.
Les cartes son sont typiquement des périphériques ne pouvant être utilisés que par au plus un processus.
La première ligne de commande appelle le programme enregistrer_micro et enregistre (au moyen d'une
redirection) les octets émis sur sa sortie standard dans le fichier message.mp3.
La deuxième commande utilise l'utilitaire cat pour afficher le contenu du fichier message. mp3 sur la sortie
standard puis redirige cette dernière au moyen de l'opérateur « | » sur l'entrée standard de la commande
jouer_son.
Le premier programme ouvre la carte son. Il commence ensuite à envoyer des données sur sa sortie standard.
Le second programme tente alors d'ouvrir la carte son et se retrouve bloqué. Il ne peut continuer son exé-
cution tant que la carte son n'est pas disponible. Comme le programme jouer_son est bloqué, il ne lit aucun
octet sur son entrée standard. Comme il ne lit aucun octet, le premier programme se retrouve lui aussi bloqué
lorsqu'il tente d'écrire sur sa sortie standard (puisque personne ne lit, les octets s'accumulent dans une zone
mémoire tampon et le programme est bloqué quand cette dernière est pleine). Les deux processus
correspondant à ces deux programmes sont en interblocage :
le processus de jouer_son attend que la carte son soit libre pour progresser et lire son entrée
standard ;