Cours : Processus
Nous commençons à présent l'étude du fonctionnement d'un système multiprogrammé. Dans ce cours, nous nous intéressons à la
fonction d'exécution : elle recouvre principalement deux notions : celle de processus ,qui correspond à l'image d'un programme
qui s'exécute et celle d'
ordonnancement
qui correspond au problème de l'allocation du processeur et donc du partage du processeur entre différents
processus
.
1 Notion de processus
1.1 Rappel sur la chaine de production d'un programme exécutable.
La chaine de production de programme (figure 1) transforme un programme écrit dans un langage de haut niveau en un programme
dit exécutable, écrit en langage machine. Cette transformation s'effectue à l'aide de plusieurs étapes : L'utilisateur saisit
son programme à l'aide de l'éditeur de texte qui crée un fichier sur le disque que l'on appelle le fichier source. Ce fichier
source est ensuite compilé à l'aide d'un compilateur dépendant du langage de programmation utilisé et dont le rôle est de
vérifier que la syntaxe du langage est respectée et de générer alors l'équivalent du programme source en langage machine :
on obtient alors sur disque le fichier objet. Ce fichier objet est ensuite soumis à l'éditeur de liens dont le rôle est de
résoudre les références externes, c'est-à-dire par exemple, d'associer les appels système inclus dans le programme à leur
adresse dans le système. L'éditeur de liens produit sur disque le fichier exécutable. Lorsque l'utilisateur demande l'exécution
de son programme, le fichier exécutable est alors monté en mémoire centrale : c'est l'étape de chargement. Le système alloue
de la place mémoire pour placer le code et les données du programme.
 |
Fig 1 : Chaine de production de programme
|
|
|
Pour le
système d'exploitation
Unix, les étapes suivantes permettent de passer d'un fichier source à un processus
- saisie du fichier source avec un éditeur tel que vi : programme.c
- compilation et production du fichier programme.o :
cc -c programme.c <return>
- édition des liens et production du fichier exécutable programme :
ld -o programme programme.o <return>
- chargement et création du processus :
programme <return>
|
1.2 L'exécution d'un programme
La figure 2 représente l'exécution du programme à un niveau qui est celui de l'architecture matérielle de la machine. Le programme
à exécuter est placé en mémoire centrale à partir de l'emplacement d'adresse 102. Le processeur a commencé l'exécution du
programme : la première instruction de celui-ci a été chargée dans le registre instruction (RI) et le Compteur Ordinal (CO)
contient l'adresse de la prochaine instruction à exécuter soit 103. Lorsque l'instruction courante aura été exécutée, le processeur
chargera dans la registre RI l'instruction pointée par le CO, soit add Imm R1 5 et le compteur ordinal prendra la valeur 104.
L'exécution de l'instruction add Imm R1 5 va modifier le contenu du registre PSW puisque c'est une instruction arithmétique
: les flags de signe, de nullité etc... sont mis à jour. On voit donc qu'à chaque étape d'exécution du programme, le contenu
des registres du compteur ordinal évolue. De même le contenu de la mémoire centrale peut être modifié : écriture, lecture
dans la pile (Push, Pop), modification des données par une instruction Store. On appelle processus l'image de l'état du processeur
et de la mémoire au cours de l'exécution d'un programme. Le programme est statique et le processus représente la dynamique
de son exécution. Lors de l'étape de chargement, le système alloue de la place mémoire pour placer le code et les données
du programme et crée la pile d'exécution de ce qui est en train de devenir un processus. Il alloue alors une structure de
donnée descriptive du processus destinée à regrouper toutes les informations du contexte du processus : le bloc de contrôle
du processus. Le
processus
est alors créé. Il est prêt à s'exécuter.
 |
Fig 2 : Exécution d'un programme
|
|
1.3 Le processus
Définition : Processus
- Un processus est un programme en cours d'exécution auquel est associé un environnement processeur (CO, PSW, RSP, registres
généraux) et un environnement mémoire appelés contexte du processus.
- Un processus est l'instance dynamique d'un programme et incarne le fil d'exécution de celui-ci dans un espace d'adressage
protégé (objets propres : ensemble des instructions et données accessibles)
- Un programme réentrant est un programme pour lequel il peut exister plusieurs processus en même temps
1.3.1 Les états du processus
Lors de son exécution, un processus est caractérisé par un état :
- lorsque le processus obtient le processeur et s'exécute, il est dans l'état élu. L'état élu est l'état d'exécution du processus.
- lors de cette exécution, le processus peut demander à accéder à une ressource (réalisation d'une entrée/sortie, accès à une
variable protégée) qui n'est pas immédiatement disponible : le processus ne peut pas poursuivre son exécution tant qu'il n'a
pas obtenu la ressource (par exemple, le processus doit attendre la fin de l'entrée/sortie qui lui délivre les données sur
lesquelles il réalise les calculs suivants dans son code) : le processus quitte alors le processeur et passe dans l'état bloqué.
L'état bloqué est l'état d'attente d'une
ressource
autre que le processeur.
- lorsque le processus a enfin obtenu la ressource qu'il attendait, celui-ci peut potentiellement reprendre son exécution. Cependant,
nous nous sommes placés dans le cadre de systèmes multiprogrammés, c'est-à-dire qu'il y a plusieurs programmes en mémoire
centrale et donc plusieurs processus.. Lorsque le processus est passé dans l'état bloqué, le processeur a été alloué à un
autre processus. Le processeur n'est donc pas forcément libre. Le processus passe alors dans l'état prêt. L'état Prêt est
l'état d'attente du processeur.
- Le passage de l'état prêt vers l'état élu constitue l'opération d'élection. Le passage de l'état élu vers l'état bloqué est
l'opération de blocage. Le passage de l'état bloqué vers l'état prêt est l'opération de déblocage.
Un processus est toujours crée dans l'état prêt. Un processus se termine toujours à partir de l'état élu (sauf anomalie).
 |
Fig 3 : Etats d'un processus
|
|
|
La figure ci-dessous présente le graphe d'états simplifié pour un processus Unix. Un processus évolue entre trois modes au
cours de son exécution : le mode utilisateur qui est le mode normal d'exécution, le mode noyau en mémoire qui est le mode
dans lequel se trouve un processus prêt ou bloqué (endormi) et le mode swappé qui est le mode dans lequel se trouve un processus
bloqué (endormi) déchargé de la mémoire centrale. En effet, le système Unix décharge de la mémoire centrale les processus
endormis depuis trop longtemps (ils sont alors dans l'état Endormi swappé). Ces processus réintègrent la mémoire centrale
lorsqu'ils redeviennent prêts (transition de l'état prêt swappé vers l'état prêt). Un processus qui se termine passe dans
un état dit zombi. Il y reste tant que son PCB n'est pas entièrement démantelé par le système.
 |
Etats d'un processus Unix -graphe simplifié-
|
|
|
1.3.2 Le bloc de contrôle du processus (PCB)
Le bloc de contrôle d'un processus (PCB) contient les informations suivantes :
- un identificateur unique du processus (un entier) : le PID
- l'état courant du processus (élu, prêt, bloqué)
- le contexte processeur du processus : la valeur du CO, la valeur des autres registres du processeur
- le contexte mémoire : ce sont des informations mémoire qui permettent de trouver le code et les données du processus en mémoire
centrale
- des informations diverses de comptabilisation pour les statistiques sur les performances système
- des informations liées à l'
ordonnancement
du processus. Le PCB permet la sauvegarde et la restauration du contexte mémoire et du contexte processeur lors des opérations
de
commutations de contexte
.
 |
Fig 4 : Bloc de contrôle d'un processus
|
|
|
Nous prenons en exemple la structure du bloc de contrôle de processus dans le
système d'exploitation
Unix. Le bloc de contrôle du processus est divisé en deux parties :
- chaque processus dispose d'une entrée dans une table générale du système, la table des processus. Cette entrée contient les
informations sur le processus qui sont toujours utiles au système quel que soit l'état du processus : l'identificateur du
processus (pid), l'état du processus, les informations d'ordonnancement, les informations mémoire, c'est-à-dire l'adresse
des régions mémoire allouées au processus.
- chaque processus dispose également d'une autre structure, la Zone U. Cette Zone U contient d'autres informations concernant
le processus, mais ce sont des informations qui peuvent être temporairement "swappées" sur le disque.
 |
Bloc de contrôle d'un processus Unix
|
|
|
|