Vous êtes sur la page 1sur 15

Système d’Exploitation I : Chapitre II / SMI3

CHAPITRE II

LA GESTION DES PROCESSUS

II.1 Définition d’un processus


Définition :

Un processus est une tache attribuée au processeur. C’est une entité dynamique
correspondant à l’exécution d’une suite d’instructions. Par exemple, un programme en cours
d’exécution sur un ordinateur est un processus.

Identification d’un processus :

Un processus selon le système d’exploitation est un ensemble d’éléments identifiés chacun


par les variables systèmes telles que : les données du processus, la pile, le compteur ordinal,
le pointeur de pile, les contenus de registres …

Un processus a besoin de ressources logiciels et matérielles : le processeur, la mémoire,


l’accès à des périphériques d’entrées/sorties.

Le système d’exploitation identifie chaque processus par son identifiant PID (Process
Identifier) : un nombre entier attribué automatiquement et réside en mémoire tant que le
processus est en mémoire.

Exercice :

A- Consulter la liste des processus encours d’exécution sous le système d’exploitation


MS Windows :

1) Appuyez sur CTRL+ALT+SUPPR,


2) Cliquez sur Gestionnaire des tâches.
3) Cliquez sur l'onglet Processus.
4) Cliquez sur l’onglet détail.
B- Consulter la liste des processus encours d’exécution sous le système d’exploitation
Linux :

1) Démarrer un terminal ;
2) Taper les commandes suivantes :
$ ps
$ ps -ef
$ ps -eh

II.2 Les caractéristiques d’un processus

M. Sabbane : 2020-2021 1
Système d’Exploitation I : Chapitre II / SMI3

Chaque processus possède son PID, attribué automatiquement par le système d’exploitation.
Le système d’exploitation garde en mémoire tous les identifiants d’un processus tant que
celui-ci en état de fonctionnement. Lorsqu’un processus se bloque ou termine sa mission, il
est automatiquement élémine de la mémoire et son identifiant est perdu. Les
caractéristiques

II.2.1. Caractéristiques statiques :

Ce sont les caractéristiques qui ne varient pas au cours du temps de séjour en mémoire
comme :

 Le numéro PID (Process IDentifier),

 Le propriétaire du processus : l’utilisateur qui possède les droits d’accès du processus


aux ressources : ouverture de fichiers...

 Le processus parent dont il hérite la plupart des caractéristiques,

 Le terminal d’attache pour les entrées/sorties.

II.2.2. Caractéristiques dynamiques :

Ce sont les caractéristiques qui varient en fonction de la charge du processeur et de


l’exécution du processus, telles que :

 La priorité,

 L’environnement d’exécution...

 La quantité de ressources consommées (temps unité centrale utilisé...)

II.2.3. Arborescence des processus :

Un processus est toujours créé par un autre processus appelé processus parent. Ainsi tout
processus est issu d’un processus parent sauf le premier. Ce premier processus est appelé
init et son identifiant est égal à 1 (PID = 1).

Lorsqu’un processus père crée un autre processus fils, les deux processus continuent d’être
associés. Le processus enfant peut lui même créer plusieurs processus, formant une
hiérarchie de processus. Un processus a un seul parent et peut avoir 0 ou plusieurs fils.

II.2.4. Type de processus :

Il existe deux types de processus :

Les processus utilisateurs : ce sont les processus déclenchés par l’utilisateur de l’ordinateur,
comme par exemple, les applications en cours d’exécution … tous ces processus sont issus
du Shell de connexion.

M. Sabbane : 2020-2021 2
Système d’Exploitation I : Chapitre II / SMI3

Les processus daemon (démon) : ce sont les processus qui assurent des services et
s’exécutent en arrière-plan plutôt que sous le contrôle direct d'un utilisateur. Ces processus
sont démarrés automatiquement par le système lors de son démarrage. Par exemple, les
processus utiles au fonctionnement système ou les processus utilisateurs mais qui restent
actifs durant l’ouverture d’une session (antivirus, le moteur d’un SGBD …)

II.3 Cycle de vie d’un processus


Le cycle de vie d’un processus désigne l’état du processus depuis sa création jusqu’à son élimination
par le système d’exploitation.

II.3.1 Création d’un processus

La création d’un processus commence par le chargement des instructions, l’allocation de


mémoires et des ressources et passe à l’état prêt. Quatre événements se succèdent pour
créer un processus :

 A l’’initialisation du système, c’est-à-dire au chargement du système, le processus


racine, père tous les autres processus, est créé automatiquement, son identifiant est
id=0.

 Un processus peut lancer un autre processus. Le créateur père et le processus créé


sera désigné comme processus fils. Le processus père ne se termine que lorsque
tous ses fils sont terminés. On a donc une structure arborescente de processus.

 Quand l’utilisateur met à l’exécution une application, celle-ci créer un processus


application. Celui-ci peut faire appel à d’autres applications et donc réer d’autre
processus (fils).

 Le traitement par lot (Batch) créé des processus (imbriqué ou répété) selon
l’architecture du traitement.

II.3.2 Etat d’un processus

Un processus nouvellement créé se trouve sur un état. Il existe trois principaux états : Prêt, Elu,
Bloqué. De même, il existe quatre types transitions entre ces états.

M. Sabbane : 2020-2021 3
Système d’Exploitation I : Chapitre II / SMI3

 L’état Prêt : Le processus est prêt à être exécuté. Il est mis en attente jusqu’à ce que
le système lui libère le processeur (dispatch de l’Ordonnanceur), il passera alors à
l’état Actif.

 L’état actif ou élu : Le processus est en cours d’exécution par le processeur. La


situation du processus évolue en fonction de événements telles que :

– Si le processus épuise le temps qui lui est alloué par le SE, il est remis en file
d’attente des processus à l’état Prêt.

– Si il a besoin d’une ressource non disponible (opérations sur les


périphériques), il est mis en attente prolongée (Interruption : état bloqué)
jusqu’à la libération de la ressource nécessaire.

– Si le processus atteint son terme (se termine normalement) il passe à l’état


Zombie. Dans cette situation, le processus s’est terminé et il ne peut plus
évoluer mais les ressources qu'il a allouées ne sont pas encore libérées car, ça
se peut que ses résultats soient réutilisés ou l’arrêt du processus dépond de la
décision de l’utilisateur.

 L’état bloqué : Le processus est en attente d’une ressource pour terminer. Dès sa
libération il repasse à l’état Prêt.

II.3.3 Transition ente Etat d’un processus

M. Sabbane : 2020-2021 4
Système d’Exploitation I : Chapitre II / SMI3

Le changement d’état d’un processus se fait par transition de l’état de départ à l’état
d’arrivé. Dans ce sens, nous pouvons distinguer les quatre principaux types de transition :

Prêt → Elu : cette transition arrive quand le système d’exploitation alloue le


processeur et le ressources au processus. Ensuite, l’état du processus évolue vers
l’état bloqué, suspendu (Prêt) ou terminé (fin).

Elu → Bloqué : cette transition arrive quand le processus ne peut plus continuer faute
de données manquante ou de ressources de façons générale. Le processus passe donc à
l’état Bloqué, puis à l’état Prêt en attendant le système de lui allouer les ressources
nécessaires à son fonctionnement.

Bloqué → Elu : le déblocage, généralement automatique, met le processus à l’état


d’attente : Prêt. Par exemple, si un processus de connexion internet attend la
réponse de la requête, il est bloqué jusqu’à ce que la réponse soit disponible. A ce
stade il devient à l’état Prêt pour attendre son tour d’exécution.

Elu → Prêt : lorsqu’un processus en cours d’exécution dépasse le temps d’allocution


du processeur ou faute de réponse de périphérique par exemple, le système suspend
l’activité du processus et le met en l’état : Prêt.

Les transitions les plus fréquentes et sont l’élection (Prêt → Elu ) et la suspension (Elu → Prêt ).
La permutation entre ces deux transitions est due à plusieurs causes. Parmi lesquelles, la gestion du
temps de calcul et les ressources par le système d’exploitation. En effet, les systèmes d’exploitation
actuels sont multitâches et multisessions. Cependant, le temps de calcul du processeur ainsi que
l’usage des ressources est distribués d’une manière optimale par le système afin d’assurer un partage
optimal des ressources entre les différents processus. Ceci apparait à l’utilisateur comme une
simultanéité des processus.

Pour une meilleure gestion des ressources, le système utilise un ordonnanceur (scheduler). Celui-ci
partage le temps entre tous les différents processus présents en mémoire. C’est l’ordonnanceur qui
décide quel processus tourne sur le processeur, qui « donne le tour » à chaque processus.

II.3.4. Commutation de contexte (context switch)

Comme il a été évoqué plus haut, le processeur n’exécute qu’un seul processus à la fois.
L’ordonnanceur répartit à tour de rôle la tâche des processeurs sur les différents processus.
Cependant, même si un processus n’est pas terminé, il est suspendu et revient à son état Prêt pour
passer au processus suivant.

Lorsque le système d’exploitation change de processus, une commutation de contexte se produit.


C’est que le système d’exploitation effectue une sauvegarde du contexte du processus suspendu afin
de récupérer par la suite l’état sur lequel il était quand il a été suspendu.

Le contexte est représenté par le Bloc de Contrôle de Processus BCP ou (PCB : Process Control
Block). C’est une structure de données du noyau d'un système d'exploitation et représentant l'état
d'un processus donné. Un BCP contient en général les données suivantes :

M. Sabbane : 2020-2021 5
Système d’Exploitation I : Chapitre II / SMI3

– L'ID du processus (PID), l'ID du processus parent (PPID) et l'ID de l'utilisateur du processus
(UID) ;
– Les valeurs des registres correspondant au processus (l'état courant du processus, selon qu'il
est élu, prêt ou bloqué) ;
– Le compteur ordinal du processus ;
– Le pointeur de pile : indique la position du prochain emplacement disponible dans la pile
mémoire ;
– L'espace d'adressage du processus ;
– La liste des descripteurs de fichiers ;
– La liste de gestion des signaux ;
– D'autres informations telles que le temps CPU accumulé par le processus, etc.

N.B : La commutation de contexte est une opération relativement coûteuse en temps de calcul. Il
existe cependant du matériel qui permet d’accélérer la commutation.

II.3.5. Suppression des processus

Lorsqu’un processus se termine normalement, le système d’exploitation s’en charge à


l’éliminer de la mémoire pour libérer les ressources. Dans le cas contraire, si un processus se
bloque ou son exécution devient indésirable, le cas d’un message d’erreur ou une fenêtre
bloquée, l’arrêt du processus ou sa suppression par l’utilisateur est possible. Il suffit
d’identifier le processus et procéder à son arrêt. Sous MS Windows, il suffit de sélectionner
le processus concerné et cliquer sur le bouton « fin de tâche » situé en bas de la fenêtre à
droite. Sous linux, sur un terminal, lister les processus en cours par la commande « $ ps –a »,
puis taper la commande « $ kill PID », où PID est l’identificateur du processus à supprimer.

II.4 Les interruptions physiques et logiques


La disponibilité permanente du système d’exploitation n’est qu’apparente. En effet, bien que
l’utilisateur communique avec son ordinateur d’une manière interactive, la réponse du
système d’exploitation à un évènement, déclenché par l’utilisateur ou autre processus,
nécessite une gestion souple des transitions. A cet égard, l’ordinateur dispose des
interruptions capables d’arrêter ou de déclencher des processus selon le besoin et dans
l’immédiat. Le gestionnaire d’interruptions récupère les interruptions matérielles et
logicielles et applique le traitement approprié à la cause de ces interruptions.

On distingue au moins 3 niveaux d'interruption :

- les interruptions externes : panne, intervention de l'opérateur, ...


- les déroutements qui proviennent d'une situation exceptionnelle ou d'une erreur liée à
l'instruction en cours d'exécution (division par 0, débordement de mémoire, ...)
- les appels système.

Généralement un numéro de priorité est affecté à un niveau d'interruption pour déterminer


l'ordre de traitement lorsque plusieurs interruptions sont positionnées.

M. Sabbane : 2020-2021 6
Système d’Exploitation I : Chapitre II / SMI3

II.5 Les ressources allouées au processus


On appelle ressource tout ce qui est nécessaire à l'avancement d'un processus (continuation
ou progression de l'exécution) : processeur, mémoire, périphérique, bus, réseau,
compilateur, fichier, message d'un autre processus, etc... Un défaut de ressource peut
provoquer la mise en attente d'un processus.

Un processus demande au système d’exploitation l'accès à une ressource. Certaines


demandes sont implicites ou permanentes (la ressource processeur). Le système
d’exploitation alloue une ressource à un processus. Une fois la ressource allouée, le
processus a le droit de l'utiliser jusqu'à ce qu'il la libère ou jusqu'à ce que le système
d’exploitation reprenne la ressource.

On dit qu'une ressource est en mode d'accès exclusif si elle ne peut être allouée qu’à un seul
processus à la fois. Sinon, on parle de mode d'accès partagé. Un processus possédant une
ressource peut dans certains cas en modifier le mode d'accès.

Exemple : un disque de stockage est une ressource à accès exclusif (un seul accès simultané),
une zone mémoire peut être à accès partagé.

Le mode d'accès à une ressource dépend largement de ses caractéristiques technologiques.


Deux ressources sont dites équivalentes si elles assurent les mêmes fonctions vis à vis du
processus demandeur. Les ressources équivalentes sont groupées en classes afin d'en
faciliter la gestion par l'Ordonnanceur.

II.6 L'ordonnancement des processus


II.6.1. Définitions

On appelle ordonnancement (scheduling) de processus la stratégie d'attribution des


ressources aux processus qui en font la demande. L’ordonnanceur (scheduler) prend en
compte différents critères :

 le temps moyen d'exécution minimal,


 le temps de réponse borné pour les systèmes interactifs,
 le taux d'utilisation élevé du processeur,
 le respect de la date d'exécution au plus tard, pour le temps réel, etc...

Les systèmes multi-utilisateurs à temps partagé et multitâches doivent gérer plusieurs


processus qui peuvent être présents en mémoire centrale en attente d'exécution (à l’état
prêt). Pour ce faire, ces systèmes utilisent leur programme dit ordonnanceur (planificateur,
scheduler). Celui-ci gère les transitions des états des processus (Prêt, Actif,…etc.).

M. Sabbane : 2020-2021 7
Système d’Exploitation I : Chapitre II / SMI3

II.6.2. Les Objectifs d’un Ordonnanceur

Le rôle de l’ordonnanceur est de choisir, parmi tous les processus à l’état prêt, lequel va
devenir élu, c’est-à-dire, passer à l’état d’exécution. Le choix n’est pas aléatoire. Autre,
l’ordre d’emplacement des processus prêt dans la pile, l’ordonnanceur applique une
politique d’ordonnancement pour atteindre des objectifs. Parmi lesquels, nous pouvons
citer :

 Maximiser l’utilisation du processeur,

 Présenter un temps de réponse acceptable,

 Respecter l’égalité entre les processus,

 Optimiser l’usage des ressources, etc.

II.6.3. Les Critères d’ordonnancement

La manière d’ordonnancer les processus conditionne le fonctionnement d’un ordinateur.


Dans ce sens, l’ordonnanceur suit des algorithmes bien définis pour assurer un meilleurs
fonctionnement et selon des critères déterminés. Une telle gestion conduit à la meilleure
performance possible du système. Plusieurs algorithmes sont utilisés par les ordonnanceurs.

La liste suivante passe en revue les critères d’ordonnancement les plus utilisés :

 Le temps d’utilisation du processeur : le temps de calcul alloué à un processus.

 Le partage d’utilisation : le temps pendant lequel est utilisé l’ensemble des


ressources (le processeur, mémoire, périphérique d’E/S…)

 Le débit : le nombre de processus traité pendant une période de temps donnée.

 Le temps de rotation : la durée moyenne pour qu’un processus soit exécuté. Le


temps de rotation d’un processus comprend tout le temps que celui-ci passe dans le
système. Il est inversement proportionnel au débit.

 Le temps d’attente : la durée moyenne qu’un processus passe en attente.

 Le temps de réponse : le temps moyen mit par système pour répondre aux entrées
de l’utilisateur.

 L’équité et égalité: le degré qui mesure les chances d’exécution des processus.

 La priorité : le traitement préférentiel des processus dont le niveau de priorité est


élevé.

M. Sabbane : 2020-2021 8
Système d’Exploitation I : Chapitre II / SMI3

II.6.4 Types d’ordonnancement

Il existe deux types d’ordonnancement :

a. Ordonnancement préemptif : l’ordonnanceur peut interrompre un processus en cours


d’exécution si un nouveau processus plus prioritaire est inséré dans la file d’attente des
Prêts. C’est un ordonnancement avec réquisition.

b. Ordonnancement coopératif : ou ordonnancement jusqu’à achèvement : le processus élu


garde le contrôle jusqu’à l’épuisement du temps qui lui a été alloué même si des processus
plus prioritaires ont atteint la liste des Prêts

II.6.5 Les algorithmes d’ordonnancement

L’ordonnanceur est un programme qui tourne en arrière-plan. Cependant, comme n’importe


quel programme ou application, les concepteurs du programme ordonnanceur se sont basés
sur des algorithmes de traitement. Les algorithmes sont nombreux, certains d’entre eux sont
très connus et présente une popularité en programmation.

a. L’algorithme FIFO (First In First Out)

Comme son nom l’indique, le premier arrivé est le premier sorti ou servi. L'ordonnancement
est fait dans l'ordre d'arrivée en gérant une file unique des processus sans priorité ni
réquisition. Chaque processus s’exécute jusqu’à son terme ; le processus élu est celui qui est
en tête de liste des Prêts : le premier arrivé. Cet algorithme est facile à utiliser, mais il est
loin d'optimiser le temps de traitement moyen.

b. L’algorithme SJF (Shortest Job First)

Dans ce type d’ordonnancement, les processus qui nécessitent moins de temps de calcul
sont élus les premiers. C’est une façon d’organiser le travail du processeur selon la lourdeur
des tâches. Les processus légers sont traité les premiers. Cet algorithme possède
l’inconvénient de la nécessité de connaissance du temps de service à priori et le risque de
blocage des tâches les plus longues.

c. L’algorithme du temps restant le plus court (SRT : Shortest Remaining Time)

L’algorithme du temps restant le plus court, est la version préemptive de l’algorithme


précédent. Chaque fois qu’un nouveau processus est introduit dans la file d’attente des
processus à ordonnancer, l’ordonnanceur compare la valeur estimée du temps de
traitement restant à celle du processus à ordonnancer. Si le temps de traitement du
nouveau processus est inférieur, le processus en cours d’ordonnancement est arrêté. Tout
comme l’algorithme SJF, l’algorithme SRT favorise les travaux courts : les travaux longs en
revanche peuvent être victimes de blocage prolongé.

d. L’algorithme Round Robin

M. Sabbane : 2020-2021 9
Système d’Exploitation I : Chapitre II / SMI3

Selon cet algorithme, le processeur gère une liste circulaire de processus. Chaque processus
dispose d'un quantum de temps de traitement par le processeur. Si le processus en cours de
traitement (Elu) se bloque ou s'achève avant la fin de son quantum, le processeur est
immédiatement alloué au processus suivant. Si le quantum s'achève avant la fin du
processus, le processeur est alloué au processus suivant et le processus interrompu se
positionne en queue de liste.

La faiblesse de cet algorithme réside dans le choix du quantum. Un quantum trop petit
provoque trop de commutations de processus et abaisse l'efficacité du processeur. Un
quantum trop grand augmente le temps de réponse en mode interactif.

e. L’algorithme HPF(Highest Priority First)

Le modèle HPF suppose que tous les processus soient d’importance égale. Ce concept n’est
pas réel. L'attribution de priorité à chaque processus devient nécessaire. L'ordonnanceur élu
le processus à l’état Prêt dont la priorité est la plus élevée. En cas de priorités égales,
l’ordonnanceur utilise l’algorithme FIFO. De même, l’ordonnancement des processus être
forcé ou non.

L’attribution des priorités se base sur plusieurs critères :

 Les propriétés du processus : utilisation de la mémoire, fréquence des E/S,

 Le propriétaire du processus, les coûts d’utilisation (Le temps de calcul pour les
tâches de priorité supérieure),

 Un paramètre quelconque que l’utilisateur peut spécifier.

Certains mécanismes produisent des priorités qui varient de manière dynamique : volume
du temps d’exécution ; alors que d’autre sont statiques (la priorité associée à un utilisateur).

f. Les files d’attente Rétroactives

L’algorithme met en œuvre N files F N (N>1) d’attentes classées de 1 à N. Le temps alloué au


processus (quantum) décroit en fonction de N (T 1>T2…>TN). L’algorithme suit la règle
suivante :

 Un nouveau processus est placé dans FN,

 Un processus sélectionné de la file FN a un temps d’exécution TN. A l’expiration de TN,


le processus est déplacé dans la file (FN-1).

 Si un processus i est bloqué avant d’avoir utilisé la totalité de sa tranche de temps Ti,
il passe à la file de niveau supérieur Ti+1.

 Le processus sélectionné par cet algorithme est le prochain processus de la file la plus
élevée contenant des processus.

M. Sabbane : 2020-2021 10
Système d’Exploitation I : Chapitre II / SMI3

 La sélection au sein d’une file se fait suivant la stratégie FIFO.

II.7 La communication et la synchronisation interprocessus


Le fonctionnement multitâche d’un ordinateur parait évident à l’utilisateur. Ceci ne pourrait
arriver s’il n’existait pas un système complet de gestion des processus. En effet, le
processeur, même en cas d’un ordinateur multiprocesseurs, ne traite qu’une seule tâche à la
fois. Toutefois, l’utilisateur peut lancer plusieurs application en même temps; écouter la
musique, saisir un texte, télécharger un document,… sans parler des diverses applications
qui tournent en arrière plans, telles qu’un anti-virus, l’horloge système, la langue de sais du
clavier, la barre des taches etc…

Outre l’ordonnancement des processus, derrière chaque application, certaines activités de


ces processus déclenche d’autre processus … Par exemple, lors de la saisie d’un texte sur une
application de traitement de texte, une vérification d’orthographe se fait automatiquement,
de même, la sauvegarde automatique du fichier déclenche une écriture sur disque …

Le système d’exploitation a tout prévus pour que les processus communiquent entre eux et
synchronisent leurs actions.

II.7.1 Communication interprocessus


A vrai dire, le système a la main sur le fonctionnement des processus par le biais des
interruptions. Néanmoins, ces processus peuvent communiquer entre eux et partager des
données directement. Ceci donne plus d’efficacité au fonctionnement de l’ordinateur. Par
exemple ; ce qui se passe entre un formulaire login est une requête envoyée par le
navigateur web, le nom utilisateur et le mot de passe est communiqué depuis le formulaire à
la requête.

La communication interprocessus (Inter Process Communication, IPC) consiste à transférer


des données entre les processus. Ceci peut se faire de différentes manières :

M. Sabbane : 2020-2021 11
Système d’Exploitation I : Chapitre II / SMI3

 La mémoire partagée permet aux processus de communiquer simplement en lisant


ou écrivant dans un emplacement mémoire prédéfini.

 La mémoire mappée est similaire à la mémoire partagée, seulement elle associée à


un fichier sur disque.

 Les tubes permettent une communication séquentielle d'un processus à l'autre.

 Les files FIFO sont similaires aux tubes excepté que des processus sans lien peuvent
communiquer car le tube reçoit un nom dans le système de fichiers.

 Les sockets permettent la communication entre des processus sans lien, pouvant se
trouver sur des machines distinctes. Ces types d'IPC diffèrent selon les critères
suivants:

– Ils restreignent ou non la communication à des processus liés (processus


ayant un ancêtre commun), à des processus partageant le même système de
fichiers ou à tout ordinateur connecté à un réseau.

– Un processus communiquant n'est limité qu'à la lecture ou qu'à l'écriture de


données.

– Le nombre de processus pouvant communiquer.

– Les processus qui communiquent sont-ils synchronisés par l'IPC ?

Pour une meilleure utilisation des ressources, les processus communiquent et échangent des
données entre eux. Ceci évite à l’ordonnanceurs d’attendre fréquemment les interruptions.

Partage entre processus

L’un des meilleurs exemples de partage d’information par les processus est le cas des
fichiers. Le contenu d’un fichier écrit par un processus peut être lu par un autre processus.
Seulement, il faut penser à l’ouverture/fermeture du fichier par chaque processus.

Le partage de la mémoire vive est un autre mécanisme de partage de données entre


processus. Nous pouvons imaginer l’écriture et la lecture de plusieurs processus dans un
même emplacement en mémoire.

Communication entre processus

La communication entre des processus devrait se faire au moyen de signalisation. Il en existe


deux types : la signalisation directe (synchrone) et la signalisation indirecte (asynchrone), par
le biais d’une boîte aux lettres.

Prenons par exemple un système doté de deux fonctions de de signalisation :

M. Sabbane : 2020-2021 12
Système d’Exploitation I : Chapitre II / SMI3

 Send-signal(pid, signal_Id) : la fonction envoie un signal de numéro signal_Id au


processus ayant le numéro d’identification pid.

 React-signal(function, signal_Id) : la fonction met en garde le processus à chaque


réception du numéro de signal signal_Id il réponde par exécuter la fonction function.

En associant une signification à différents numéros de signaux, les processus peuvent se


communiquer des informations entre eux.

En conclusion, les processus communiquent entre eux par l’identification des signaux par un
identifiant unique.

Les systèmes d’exploitation ayant la fonctionnalité d’échange de message interprocessus


sont nombreux, et la conception de tels systèmes prend en compte les facteurs suivants :

A quel genre d’objets est envoyé un message ? Il peut s’agir d’un processus, d’une boîte aux
lettres ou d’un tampon de communication ; l’objet peut être identifié par un nom ou un
numéro d’identification.

Comment les processus sont-ils associés aux objets du message ? Le système d’exploitation
peut exiger que toute communication soit précédée d’une primitive qui établit une
connexion avec l’objet de destination. Tout processus peut être autorisé à communiquer
avec l’objet de destination, mais il est possible de mettre en places certaines restrictions. Si
l’objet de destination est une boîte aux lettres ou un tampon de communication, les objets
peuvent être crées automatiquement. Il peut exister un nombre fixe d’objets prédéfinis ou
encore y avoir une primitive pour créer l’objet.

Combien de processus peuvent partager un même objet de messagerie ? Le nombre de


processus en mesure de lire et d’écrire dans l’objet du message peut faire l’objet de diverses
restrictions.

L’objet de messagerie est-il bidirectionnel ou unidirectionnel ? Un processus peut être


limité à un accès en lecture ou à un accès en écriture, mais pas aux deux. L’accès
bidirectionnel peut être autorisé, permettant aux processus de lire et d’écrire à la fois dans
un objet de message.

A combien d’objets de messagerie un processus peut accéder ? Le système d’exploitation


peut imposer des limites à l’échelle du système ou restreindre le nombre d’objets pouvant
être utilisé pour la communication entre deux processus.

Les messages sont-ils de taille fixe ou variable ? S’ils sont de taille variable, le système
d’exploitation peut imposer une taille maximale.

Combien de messages peuvent être stockés dans un objet de message ? La mise en


mémoire tampon des messages peut être inexistante, bornée, non bornée ou basée sur un
mécanisme d’accusé de réception. La mise en tampon reposant sur un mécanisme d’accusé

M. Sabbane : 2020-2021 13
Système d’Exploitation I : Chapitre II / SMI3

de réception. Tous deux sont libres de poursuivre leur exécution une fois la réponse du
récepteur émise.

Les messages sont-ils envoyés par valeur ou par référence ? Les messages envoyés par
référence nécessitent moins de surcharge, mais ils peuvent être modifiés après leur envoi.
Le passage des messages par référence enfreint le principe selon lequel chaque processus
doit recevoir un espace d’adressage indépendant.

Que se passe-t-il si un processus se termine alors qu’un autre processus est bloqué, dans
l’attente d’une action du processus qui vient de s’achever ? Généralement la primitive à
l’origine du blocage renvoie un statut d’erreur en indiquant un échec ou bien le processus
bloqué se termine également.

Examinons les trois mises en œuvre d’un système de messagerie.

Communication directe entre les processus :

- Int send_process(pid, message) : la fonction envoie message au processus avec le numéro


d’identification pid. Le message est copié dans la file de message du récepteur. Tout
processus peut envoyer un message à tout autre processus. Cette primitive ne se bloque
jamais, car un nombre illimité de messages peut résider dans la file du récepteur. Les
messages sont des chaînes de n’importe quelle longueur. Cette primitive échoue si le
processus de destination n’existe pas.

- Int receive_process(pid, message) : la fonction reçoit le prochain message du processus


dont le numéro d’identification est pid et place son contenu dans message. Les messages
sont reçus dans l’ordre où ils sont envoyés. Si pid contient la valeur spéciale 0, il reçoit un
message de n’importe quel processus (en partant du principe qu’aucun processus ne peut
avoir le numéro d’identification 0). La valeur de retour de cette primitive est le numéro
d’identification de processus du processus émetteur. Cette primitive échoue si un processus
émetteur est spécifié n’existe pas.

Communication indirecte entre les processus par le biais d’une boîte de messages :

Le passage du message est réalisé indirectement par le biais d’une boîte aux lettres.

- int create_mailBox(mbx) : crée une boîte aux lettres appelée mbx. Cette primitive échoue
si la boîte aux lettres existe déjà.

- int delete_mailBox(mbx) : supprime une boîte aux lettres appelée mbx. Cette primitive
échoue si le processus qui émet la primitive n’est pas propriétaire de la boîte aux lettres ou
si la boîte aux lettres n’existe pas.

- int send_mailBox(mbx, message) : envoie message dans boîte aux lettres mbx : le message
est copié dans la boîte aux lettres. Tout processus peut envoyer un message à n’importe
quelle boîte aux lettres. L’émetteur est bloqué jusqu’à réception du message. Les messages

M. Sabbane : 2020-2021 14
Système d’Exploitation I : Chapitre II / SMI3

sont des chaînes de n’importe quelle longueur. Cette primitive échoue si la boîte aux lettres
n’existe pas.

- int receive_mailBox(mbx, message) : reçoit le message en provenance de la boîte aux


lettres mbx et place ce message dans message. Les messages sont reçus dans l’ordre de leur
envoi. S’il n’y a aucun message dans la file, reste bloqué jusqu’à ce qu’un message soit
envoyé. Cette primitive échoue si le processus qui émet la primitive n’est pas le propriétaire
de la boîte aux lettres ou si cette dernière n’existe pas.

Communication indirecte entre les processus par le biais d’un canal de communication :

Le dernier exemple repose sur un canal de communication mis en tampon appelé tube
(pipe). A la différence des autres exemples pour lesquels la destination du message était un
numéro d’identification ou un nom pouvant être spécifié par tout processus quel qu’il soit,
les primitives d’envoi et de réception utilisent un descripteur de canal de communication
associé uniquement au processus ayant créé le tube et aux processus fils de ce dernier.

 Void create_pipe(pdr,pdw) : crée un tube, stocke la valeur d’un descripteur de


lecture dans pdr et celle d’un descripteur d’écriture dans pdw. Cette primitive ne
peut connaître d’échec.

 int close(pd) : pour les processus qui émettent cette primitive, ferme le descripteur
pd qui peut être un descripteur de lecture ou d’écriture. Cette primitive échoue si le
descripteur n’est pas ouvert.

 Int send_pipe(pdw, byte) : écrit byte dans le tube associé au descripteur de lecture
pdw. Si le tube contient déjà 4096 octets, cette primitive se bloque jusqu’à ce qu’une
opération de lecture fasse de la place pour d’autres octets dans le tube. Cette
primitive échoue si le descripteur n’est pas ouvert ou si ce tube n’est ouvert à aucun
procesus pour la lecture.

 Int receive_pipe(pdr,byte) : lit un octet byte depuis le tube associé au descripteur de


lecture pdr. Les octets sont lus dans l’ordre dans lequel ils ont été écrits dans le tube.
Si le tube est vide et qu’aucun processus n’a de tube ouvert pour l’écriture, renvoie
une valeur spéciale indiquant que le tube est vide. Sinon, le processus récepteur doit
se bloquer si le tube est vide. Cette primitive échoue si le descripteur n’est pas
ouvert.

M. Sabbane : 2020-2021 15

Vous aimerez peut-être aussi