Académique Documents
Professionnel Documents
Culture Documents
Dfinitions, exemples
_________________________________________
ENST BCI Informatique
65
_________________________________________
ENST BCI Informatique
66
Programme vs Processus
Programme : Un programme est une suite fige d'instructions, un ensemble statique. Processus : Plusieurs dfinitions existent ; on peut citer : Un processus est l'instance d'excution d'un programme dans un certain contexte pour un ensemble particulier de donnes. On peut aussi caractriser un processus par les tables qui le dcrivent dans l'espace mmoire rserv au systme d'exploitation (partie rsidente du systme). Ces tables dfinissent les contextes matriel (partie dynamique du contexte : contenu des registres...) et logiciel (partie statique du contexte : droits d'accs aux ressources) dans lesquels travaille ce processus. C'est l'tat de la machine un instant t. Plusieurs processus peuvent excuter paralllement le mme programme (notion de rentrance). L'exemple le plus classique est celui des diteurs (edit, vi, emacs, ...). Chacun des utilisateurs simultans de ces programmes travaille dans son propre contexte (le compteur ordinal de leur contexte mmorise leur position dans l'diteur) sur ses donnes propres (fichiers crs et modifis). Remarques : Les performances d'un mme programme seront donc trs diffrentes suivant qu'il se droule dans le contexte d'un processus plus ou moins privilgi. Et le droulement du mme processus pourra se faire trs diffremment suivant la charge de la machine (non dterminisme des processus). Le remplacement sur les ordinateurs dits personnels (du type IBM-PC) de MSDOS par Windows ou Unix les transforme en machine processus au mme titre que les grands systmes. La comprhension et la matrise du fonctionnement de ces machines demande alors le mme niveau de connaissance que celles des mainframes.
Un processus est un programme en excution et son contexte (un objet dynamique). - Dans un environnement monotche la notion de processus est rduite sa plus simple expression. - Dans un systme multitches (ex : Linux, UNIX), plusieurs processus s'excutent "simultanment". Ils doivent se partager l'accs au processeur. - Plusieurs processus peuvent excuter simultanment des copies (ou instances) d'un mme programme. - Plusieurs processus peuvent excuter simultanment la mme copie d'un mme programme : on parle alors de rentrance.
_________________________________________
ENST BCI Informatique
67
_________________________________________
ENST BCI Informatique
68
Dans un systme multitches, plusieurs processus peuvent se trouver simultanment en cours d'excution : ils se partagent l'accs au processeur.
Un processus peut prendre 3 tats : - Etat actif ou lu (running): le processus utilise le processeur. - Etat prt ou ligible (ready: le processus pourrait utiliser le processeur si il tait libre (et si c'tait son tour). - Etat en attente ou bloqu : le processus attend une ressource (ex : fin d'une entre-sortie).
_________________________________________
ENST BCI Informatique
69
_________________________________________
ENST BCI Informatique
70
Le S.E choisit un processus qui deviendra actif parmi ceux qui sont prts. Tout processus qui se bloque en attente d'un vnement (par exemple l'attente de la frappe d'un caractre au clavier lors d'un scanf) passe dans l'tat bloqu tant que l'vnement attendu n'est pas arriv. Lors de l'occurrence de cet vnement, le processus passe dans l'tat prt. Il sera alors susceptible de se voir attribuer le processeur pour continuer ses activits. Les processus en attente sont marqus comme bloqus dans la table des processus. Ils se trouvent gnralement dans la file d'attente lie une ressource (imprimante, disque, ...). Le changement d'tat d'un processus peut tre provoqu par : - un autre processus (qui lui a envoy un signal, par exemple) - le processus lui-mme (appel une fonction d'entre-sortie bloquante, ...) - une interruption (fin de quantum, terminaison d'entre-sortie, ...) La sortie de ltat actif pour passer ltat prt se produit dans le cas des ordonnancements premptifs lorsquun processus plus prioritaire que le processus actif courant devient prt. Dune manire gnrale : - le passage de ltat actif ltat prt est provoqu par le systme en fonction de sa politique dordonnancement (fin de quantum, premption du processus actif si un processus plus prioritaire devient prt dans le cas des politiques premptives, ), - le passage de ltat actif ltat bloqu est provoqu par le programme excut par le processus. On peut citer : opration P sur un smaphore dont le compteur est ngatif, E/S bloquante du type scanf, oprations sleep ou wait sous UNIX).
rveil en attente
blocage
Les oprations que l'on peut effectuer sur les processus sont : - Cration (ex : fork, cration d'un processus sous UNIX), - Destruction (ex : kill -9, destruction d'un processus sous UNIX), - Activation, Dsactivation, Blocage(ex : wait sous UNIX),
_________________________________________
ENST BCI Informatique
71
_________________________________________
ENST BCI Informatique
72
Ordonnancement
Le systme d'exploitation gre les transitions entre les tats. Pour ce faire il maintient une liste de processus ligibles et une liste de processus en attente. Il doit galement avoir une politique d'activation des processus ligibles (ou politique d'allocation du processeur aux processus) : parmi les processus ligibles, faut-il activer celui qui est ligible depuis le plus de temps, celui qui aurait la plus forte priorit ou celui qui demande l'unit centrale pour le temps le plus court ( supposer que cette information soit disponible)? Les processus sont classs dans la file des processus ligibles par l'ordonnanceur (en anglais scheduler). C'est le distributeur (en anglais dispatcher) qui se chargera de leur activation au moment voulu. Afin d'viter qu'un processus accapare l'unit centrale, le systme d'exploitation dclenche un temporisateur chaque fois qu'il alloue l'unit centrale un processus. Quand ce temporisateur expire, si le processus occupe toujours l'unit centrale (il peut avoir t interrompu par un vnement extrieur ou s'tre mis en attente), le systme d'exploitation va le faire passer dans l'tat prt et activer un autre processus de la liste des processus ligibles. La dsactivation d'un processus peut se faire sur expiration du temporisateur ou sur rquisition (en anglais preemption) du processeur central par un autre processus. Un temporisateur peut tre vu comme un systme de compte rebours ou de sablier. On lui donne une valeur initiale qu'il dcrmente au rythme de l'horloge de l'ordinateur jusqu' atteindre la valeur zro. Ici, la valeur initiale du temporisateur est le quantum de temps allou l'excution du processus. A l'expiration du temporisateur le systme d'exploitation est immdiatement prvenu par une interruption. Nous verrons cette notion plus en dtail dans la suite de ce chapitre. D'autres vnements sont signals au systme par des interruptions : c'est le cas des fins d'entres-sorties. Le systme est ainsi prvenu que le ou les processus qui taient en attente sur cette entre-sortie peuvent ventuellement changer d'tat (tre rveills).
Dans un systme multitches, le systme d'exploitation doit grer l'allocation du processeur aux processus. On parle d'ordonnancement des processus.
libration d'une ressource diffrentes files de processus bloqus (une par ressource)!! rveil dsactivation blocage processus lu activation files des processus ligibles!! ordonnanceur
Il existe diffrentes politiques d'allocation : - avec ou sans priorit o sans : premier arriv premier servi (first come, first served : FCFS) o avec : la priorit peut tre fixe ou dynamique il peut y avoir premption, ou non
_________________________________________
ENST BCI Informatique
73
_________________________________________
ENST BCI Informatique
74
Par contexte, on entend toutes les informations relatives l'excution d'un processus, telles que : - l'tat des registres (compteur ordinal, registre d'tat, registres gnraux), - les registres dcrivant l'espace virtuel du processus et son espace physique d'implantation, - les pointeurs de piles, - les ressources accdes (ex : droits d'accs, fichiers ouverts), - autres informations (ex : valeur d'horloge). Le contexte doit tre sauvegard quand le processus est dsactiv ou bloqu et doit tre restaur lorsqu'il est ractiv.
_________________________________________
ENST BCI Informatique
75
_________________________________________
ENST BCI Informatique
76
Les processus sont dcrits dans une table des processus, une entre de cette table donne des informations sur l'tat du processus et permet de retrouver les 3 rgions : code, data et stack, cest--dire instructions, donnes et pile.. Seules les informations dont le systme a besoin en permanence sont dans la table des processus, les autres sont dans la u-structure qui peut tre ventuellement passer sur le disque si ncessaire. Sous Unix, chaque commande lance par un utilisateur est excute dans le cadre d'un processus diffrent, fils du shell avec lequel travaille cet utilisateur. Unix alloue 3 rgions en mmoire pour chaque processus: une rgion pour le code excutable (text segment), une rgion pour la pile (stack segment), une rgion pour les donnes (data segment). Unix mmorise pour chaque processus des informations de gestion du type : identificateur du processus (pid) configuration des registres (pile, compteur ordinal), rpertoire courant, fichiers ouverts, Remarque : Le pointeur vers la table des textes (fichiers excutables !) donne, non pas le dbut du programme excuter mais un pointeur vers ce programme, ce qui permet la fois le partage de code excutable par plusieurs processus diffrents et le dplacement de celui-ci par le systme.
_________________________________________
ENST BCI Informatique
77
_________________________________________
ENST BCI Informatique
78
La primitive fork permet de crer un processus identique au crateur par copie de ses 3 rgions. Le crateur est appel pre (parent process), et le cr est appel fils (child process).
_________________________________________
ENST BCI Informatique
79
_________________________________________
ENST BCI Informatique
80
On illustre ci-contre ce qui se passe en mmoire lors de l'appel la fonction fork. Aprs l'appel fork, les espaces d'adressage du pre et du fils contiennent chacun une case dont le nom est f. La case f situe dans l'espace d'adressage du fils contient zro, la case f qui se trouve dans l'espace du pre contient le numro de processus attribu au fils (le pid, pour process identifier). Voici un exemple d'excution d'un programme mettant en vidence ce mcanisme :
$ cat exo1.c #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main (void) { int f; f = fork(); printf (" Valeur retournee par la fonction fork: %d\n", (int)f); printf (" Je suis le processus numero %d\n", (int)getpid()); return 0; } $ gcc exo1.c -o exo1
Aprs fork :
Compteur ordinal Table des processus Cellule f Pid_du_fils Donnes du pre Code } Cellule f 0 Donnes du fils { f=fork()
Les "pid", la filiation des processus, etc peuvent tre observs en utilisant la commande ps.
_________________________________________
ENST BCI Informatique
81
_________________________________________
ENST BCI Informatique
82
On donne ici le schma fonctionnel dcrivant ce qui se passe lors de l'appel aux fonctions fork, exec, wait et exit. Cet enchanement se retrouve lors de l'appel une commande du shell, et presque toutes les applications multitches sous UNIX utilisent ce schma. Ce schma est purement fonctionnel, dans l'implantation les zones de code ne sont pas dupliques, mais partages tant que l'appel exec n'a pas t fait. Les rgions data et stack sont alloues dynamiquement, la demande. A l'excution de la fonction exec la rgion de code est remplace par le fichier fichier et la pile et les donnes sont rinitialises
Mcanisme "fork-exec" :
pid P pre pid F fils pid P pid P pid F pid P fork pid P pre wait pid P pre
Zombie exec pid F fils pid F exit pid F fils pid P Programme Donnes Pile Fichiers, en particulier 0, 1, 2 et tubes
Remarque : le segment de code n'est pas dupliqu, mais partag : deux pointeurs diffrents dsignent le mme code excutable. Pas de mmoire commune -> les "IPC System V" offrent mmoire partage et smaphores sous Unix (pas vus en BCI).
_________________________________________
ENST BCI Informatique
83
_________________________________________
ENST BCI Informatique
84
On donne ci-contre un exemple propos en TP. Ce programme cr un processus qui va faire appel exec pour excuter le fichier dont on lui passe le nom sur la ligne de commande. Lexcutable sappelle fexec. On va excuter la commande fexec exo1. exo1 est le fichier excutable correspondant au fichier source (appel exo1.c) vu prcdemment :
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main (void){ int f; f = fork(); printf ("Valeur retournee par la fonction fork: %d\n", (int)f); printf ("Je suis le processus numero %d\n", (int)getpid()); }
_________________________________________
ENST BCI Informatique
85
_________________________________________
ENST BCI Informatique
86
1. Dfinitions, exemples
_________________________________________
ENST BCI Informatique
87
_________________________________________
ENST BCI Informatique
88
Intrt du multitches
Un systme propose la multiprogrammation s'il permet de charger simultanment plusieurs processus en mmoire et de leur faire partager le l'unit centrale. Le principe de fonctionnement est de laisser un processus s'excuter jusqu' ce qu'il ait besoin de se mettre en attente (par exemple sur une fin d'entre/sortie). Pendant que ce processus est en attente, un autre processus peut utiliser son tour le processeur. Pour illustrer ce fonctionnement, supposons que l'on ait deux processus A et B excuter, chacun alternant des priodes d'excution dans l'unit centrale et des priodes d'attente. L'excution totale du processus A ncessite 5 units de temps, dont 2 d'attente, celle du processus B ncessite 3 units de temps ,dont 1 d'attente (cf. schma ci-contre). L'excution de ces deux processus sans multiprogrammation prend 8 units de temps. Avec multiprogrammation, elle ne prend plus que 5 units de temps (soit la dure d'excution du processus A)(cf. schma ci-contre). Dans la suite de ce chapitre, nous allons montrer le fonctionnement des systmes qui supportent la multiprogrammation. Il s'agira de dcider comment l'unit centrale est partage entre les processus chargs en mmoire. C'est ce que l'on appelle la politique (ou algorithme ) d'allocation du processeur ou encore politique d'ordonnancement. On peut dcider que c'est le premier processus qui est prt s'excuter qui s'excute (politique Premier Arriv Premier Servi). On peut aussi choisir le processus dont la dure d'excution est la plus courte pour lui attribuer l'unit centrale d'abord (politique Plus Court d'Abord). Nous examinerons diffrentes politiques d'allocation dans la suite de ce chapitre. Plusieurs politiques d'allocations tant possibles, la question se pose de savoir comment les valuer. Il faudra tout d'abord s'assurer que la politique ne cre pas de famine (il y a famine si un processus prt s'excuter n'accde pas l'unit centrale en un temps fini). On pourra ensuite utiliser diffrents critres d'valuation tels que le rendement, le temps de service, le temps d'attente et le temps de rponse, qui sont dfinis dans le paragraphe suivant.
attente d'E/S
attente d'E/S
Problme : quelle politique d'allocation du processeur au processus (ou ordonnacement ou scheduling) choisir pour utiliser le processeur "au mieux" ?
_________________________________________
ENST BCI Informatique
89
_________________________________________
ENST BCI Informatique
90
Rendement (throughput) : Nombre de travaux excuts par unit de temps. Temps de service (turnaround time): Temps qui s'coule entre le moment o un travail est soumis et o il est excut (temps d'accs mmoire + temps d'attente en file des ligibles + temps d'excution dans le processeur et E/S). Temps d'attente (waiting time) : Temps pass dans la file des processus ligibles. Temps de rponse (response time):
degr de multiprogrammation
Temps qui s'coule entre la soumission d'une requte et la premire rponse obtenue.
_________________________________________
ENST BCI Informatique
91
_________________________________________
ENST BCI Informatique
92
First Come First Served (FCFS) Premier Arriv Premier Servi (PAPS)
L'ordre d'excution est identique l'ordre d'arrive dans la file des processus ligibles. Exemple : - On a trois processus 1, 2, 3 excuter de dures d'excution respectives 12 , 2 et 2 units de temps.
P1 0 12
P2 14
P3 16
Diagramme de Gant, algorithme PAPS - Si l'ordre d'arrive est 1, 2, 3, les temps de service respectifs sont 12, 14, et 16 units de temps, et le temps de service moyen est de 14 units de temps. - Mais si l'ordre d'arrive est 2,3,1, le temps de service moyen est 7,6 (2+4+16 / 3).
_________________________________________
ENST BCI Informatique
93
_________________________________________
ENST BCI Informatique
94
On excute d'abord les processus qui ont le temps d'excution le plus court. Problme : comment prdire la dure d'excution des processus a priori ? Solutions : - faire de la prdiction sur la dure d'excution des processus. - faire accompagner la demande d'excution de chaque programme d'une dure maximum d'excution autorise qui est utilise comme dure d'excution. Autre problme : risque de famine (les processus de longue dure peuvent n'avoir jamais accs au processeur si des processus de courte dure arrivent en permanence).
_________________________________________
ENST BCI Informatique
95
_________________________________________
ENST BCI Informatique
96
Priorit
Le principe de l'algorithme de priorit est d'associer une priorit chaque processus. On excute alors les processus de forte priorit avant ceux de plus basse priorit. On peut remarquer que si l'on alloue chaque processus une priorit inversement proportionnelle sa dure, on retrouve l'algorithme PCA. Le problme de l'algorithme de priorit est qu'il y a risque de famine (les processus de faible priorit pouvant n'avoir jamais accs l'unit centrale si des processus de fortes priorit arrivent en permanence). Pour y remdier, on peut utiliser une technique dite de vieillissement (en anglais aging). Le principe est d'accrotre la priorit des processus intervalles de temps rguliers, jusqu' ce qu'ils accdent l'unit centrale.
On associe une priorit chaque processus. Les processus sont excuts par ordre de priorit. Problme : risque de famine. Solution : utiliser une technique dite de vieillissement (aging ) qui augmente priodiquement la priorit des processus. Intrt : certains processus systme doivent tre excuts en priorit.
_________________________________________
ENST BCI Informatique
97
_________________________________________
ENST BCI Informatique
98
Le temps est dcoup en tranches ou quantum de temps. Un quantum de temps est allou chaque processus de la file des processus ligibles tour de rle. Conu pour les systmes "temps partag", afin d'obtenir une utilisation quitable du processeur par les processus prsents en mmoire. Exemple : Si le quantum est d'une unit de temps
P1 P2 P3 P1 0 1 2 3 P2 P3 P1 4 5 6 16
- Temps moyen de service : 9 = (5+6+16 )/ 3, si tous sont prts au temps 0. (Meilleur que celui donn par l'algorithme FCFS pour le mme ordre d'arriv.) - Performances sensibles la taille choisie pour le quantum.
_________________________________________
ENST BCI Informatique
99
_________________________________________
ENST BCI Informatique
100
Les priorits sont calcules de deux faons diffrentes: - Si un processus est arrt par un vnement E (entre-sortie, fonctions wait, pause ...), il est ractiv avec une priorit qui dpend du type de cet vnement. - La priorit des processus prts est directement lie la consommation de temps cpu et au temps qui s'est coul depuis leur dernier accs au processeur.
p Running e/s, wait, pause, ... Fin de quantum 127 Toutes les secondes : p=p_de_base + f(cpu) 60 En attente sur E Asleep
p=f(E)
_________________________________________
ENST BCI Informatique
101
_________________________________________
ENST BCI Informatique
102
1. Dfinitions, exemples
_________________________________________
ENST BCI Informatique
103
_________________________________________
ENST BCI Informatique
104
Un systme d'exploitation dispose de ressources (imprimantes, disques, mmoire, fichiers, base de donnes, ...), que les processus peuvent vouloir partager.
Processus 1
Ressources du systme
Processus n
Fichiers
Mmoire
Imprimante
Processus i
Ils sont alors en situation de concurrence (race) vis--vis des ressources. Il faut synchroniser leurs actions sur les ressources partages.
_________________________________________
ENST BCI Informatique
105
_________________________________________
ENST BCI Informatique
106
Section critique
Il n' y a problme de synchronisation que si un des processus impliqus dans l'accs en parallle la ressource partage la modifie. Si les processus en accs simultan sont tous en mode consultation, il n'y a pas de problme de synchronisation puisque la ressource partage n'est pas modifie.
La partie de programme dans laquelle se font des accs une ressource partage s'appelle une section critique. Dans la plupart des cas l'accs cette section critique devra se faire en exclusion mutuelle , ce qui implique de rendre indivisible ou atomique la squence d'instructions composant la section critique. Exemple : accs une base de donnes. Plusieurs processus peuvent la lire simultanment, mais quand un processus la met jour, tous les autres accs doivent tre interdits.
Processus 1 Programme Processus 2 Programme
Base de donnes
lecture
criture
_________________________________________
ENST BCI Informatique
107
_________________________________________
ENST BCI Informatique
108
Outils de synchronisation
Comment les processus vont-ils synchroniser leurs accs respectifs aux sections critiques ? Les condition d'accs une section critique sont les suivantes : - deux processus ne peuvent tre ensemble en section critique, - un processus bloqu en dehors de sa section critique ne doit pas empcher un autre d'entrer dans la sienne, - si deux processus attendent l'entre dans leurs sections critiques respectives, le choix doit se faire en un temps fini, - tous les processus doivent avoir la mme chance d'entrer en section critique, - pas d'hypothses sur les vitesses relatives des processus (indpendance vis vis du matriel).
Matriels : - emploi d'une instruction de type Test and Set qui teste l'tat d'une case mmoire commune aux deux processus et change sa valeur, - inhibition des interruptions (possible seulement dans le cas d'un processus se droulant en mode privilgi). Logiciels : - smaphores (outils logiciels mis la disposition des utilisateurs par le systme d'exploitation), - algorithmes de synchronisation.
_________________________________________
ENST BCI Informatique
109
_________________________________________
ENST BCI Informatique
110
On utilise une instruction du langage machine parce qu'une instruction de ce niveau est inscable. Lorsque le processeur commence l'excution d'une instruction du langage machine, il va jusqu'au bout mme si une interruption arrive. Les inconvnients de cette technique du TAS sont : - l'attente active (busy waiting) : un processus qui trouve la variable de synchronisation 1 continuera la tester jusqu' ce qu'elle passe 0. Il reste donc actif, alors qu'il pourrait tre suspendu et rang dans une file d'attente. - le fait qu'on ne sait pas qui va prendre la main. Ce problme est li au prcdent. En effet, puisqu'il n'y a pas de gestion de la file des processus en attente sur le passage de la variable 0, le premier qui obtient une rponse satisfaisante au test entre dans sa section critique. Ce n'est pas forcment celui qui la scrute depuis le plus longtemps !
Remarque : cette instruction TAS permet de synchroniser des activits en environnement multiprocesseur. Sur les processeurs SPARC, qui quipent les stations Sun, l'instruction de Test and Set s'appelle ldstub (load store unsigned byte...).
Instruction disponible sur presque toutes les machines (mais on n'a pas toujours le droit de l'utiliser). Quand X vaut 1, cela veut dire que la ressource est prise. Utilisation (X est une variable partage par plusieurs processus, initialise zro) :
Boucle :TAS REG, X CMP REG, 1 BEQ Boucle Section critique X=0
_________________________________________
ENST BCI Informatique
111
_________________________________________
ENST BCI Informatique
112
2 processus P1 et P2 excutent des programmes contenant des sections de code critiques vi- -vis de l'accs une certaine ressource.
Boucle :TAS REG, X CMP REG, 1 BEQ Boucle Section critique X=0
Boucle :TAS REG, X CMP REG, 1 BEQ Boucle Section critique X=0
Inconvnients de cette technique : - Attente active (busy waiting) - On ne sait pas qui va prendre la main.
_________________________________________
ENST BCI Informatique
113
_________________________________________
ENST BCI Informatique
114
Les oprations Init, P et V sont donnes par le SE qui garantit leur atomicit. Il fait en sorte, que, du point de vue des processus impliqus, ces oprations s'excutent sans tre interrompues. Ceci n'est pas forcment vrai d'un point de vue plus global, en effet le systme peut traiter une autre activit, plus importante pour lui, pendant l'excution de ces fonctions.
Il est accessible par les oprations atomiques suivantes: Init(S, val) : S.COMPT = val (nombre d'lments de ressource) et S.FA = vide. - P (Passeren) pour demander un lment de la ressource. P(S) : On dcrmente S.COMPT. Si S.COMPT < 0 alors le processus est mis dans S.FA et passe l'tat bloqu, sinon un lment de ressource lui est allou. - V (Vrijgeven) libre un lment de la ressource. V(S) : On incrmente S.COMPT. Si S.COMPT ! 0 alors on sort un processus de S.FA, il passe dans la file des prts et on peut lui allouer un lment de ressource.
_________________________________________
ENST BCI Informatique
115
_________________________________________
ENST BCI Informatique
116
/****************** Init ********************/ Init(Semaphore *Le_Semaphore, int Valeur) { (*Le_Semaphore).Compteur = Valeur ; (*Le_Semaphore).FiledAttente initialise vide } /****************** P ********************/
void P(Semaphore *Le_Semaphore) { (*Le_Semaphore).Compteur=(*Le_Semaphore).Compteur - 1; if ((*Le_Semaphore).Compteur < 0) { mettre le processus dans la file d'attente et le faire passer dans l'tat bloqu } } /****************** V ********************/
void V(Semaphore *Le_Semaphore){ (*Le_Semaphore).Compteur=(*Le_Semaphore).Compteur + 1; if ((*Le_Semaphore).Compteur <= 0){ sortir un processus de la file d'attente et le faire passer dans l'tat prt } }
_________________________________________
ENST BCI Informatique
117
_________________________________________
ENST BCI Informatique
118
Verrou
Un smaphore dont le compteur est initialis un s'appelle un verrou : quand un processus est dans sa section critique, il empche tous les autres d'entrer dans la leur.
Init (S,1) Processus 1 Processus 2
Remarque : lexclusion mutuelle est un exemple de comptition entre processus pour laccs aux ressources, on va voir quil peut y avoir des interactions en coopration.
_________________________________________
ENST BCI Informatique
119
_________________________________________
ENST BCI Informatique
120
Producteur et consommateur
Un producteur dpose des messages dans un tampon, ceux-ci sont retirs par un consommateur. Les retraits et dpts peuvent tre simultans. Le producteur doit vrifier que le tampon comporte des cases libres avant d'y dposer un message et le consommateur doit s'assurer qu'il y a bien des messages retirer. Si ces conditions ne sont pas requises, le processus (producteur ou consommateur) doit se mettre en attente. Deux smaphores sont utiliss : - S1 qui indique les ressources disponibles pour le producteur, cest-dire le nombre de cases vides, - S2 qui indique les ressources disponibles pour le consommateur, cest-dire le nombre de cases pleines, Ce type de synchronisation est mis en uvre dans le systme Unix sous forme de la primitive pipe. Celle-ci cre un fichier (appel pipe, ou tube en franais) double accs qui ne peut tre lu que si l'on a dj crit dedans et dans lequel on ne peut crire que s'il y a des cases libres. Le systme d'exploitation se charge de la gestion des accs, vitant l'utilisateur le maniement, dlicat, de smaphores. L'utilisateur voit le tampon commun aux processus comme un fichier normal, il sera ouvert par une commande open et manipul avec des read et write. Des mcanismes de ce type peuvent tre fournis par le langage. On citera Ada et Java qui proposent des outils de synchronisation.
Un producteur dpose des messages dans un tampon ; un consommateur retire ces messages du tampon. Le producteur et le consommateur doivent synchroniser leurs actions.
Dpts du producteur Init(S1,N) Init(S2,0) Producteur P(S1) crire (case(i)) i:=suiv_prod(i) V(S2) Consommateur P(S2) lire (case(i)) i:=suiv_cons(i) V(S1)
Retraits du consommateur
2 smaphores sont utiliss : - S1 indique les ressources disponibles pour le producteur (nombre de cases vides), - S2 indique les ressources disponibles pour le consommateur (nombre de cases pleines).
Remarques: Les deux processus sont en situation de coopration. Plus les vitesses des processus diffrent, plus la taille du tampon est grande.
_________________________________________
ENST BCI Informatique
121
_________________________________________
ENST BCI Informatique
122
Lecteur et crivain
Il sagit de grer laccs un fichier partag. Plusieurs consultations (lectures) en parallle sont possibles, mais partir du moment o une mise jour (une criture) est en cours, tous les autres accs, que ce soit en lecture ou en criture, doivent tre interdits.
Scnario pour les lecteurs : Le premier lecteur interdit laccs aux crivains, mais permet cet accs tous les lecteurs qui se prsentent. Le dernier libre la ressource. Scnario pour les crivains : Quand un crivain arrive, il interdit tout autre accs la ressource, il la libre quand il a termin les modifications.
Init(X, 1)
_________________________________________
ENST BCI Informatique
123
_________________________________________
ENST BCI Informatique
124
Lecteur et crivain
Cette solution nest pas correcte : laccs la variable partage Nb_Lect nest pas contrl, on ajoute un verrou XL :
Programme pour les lecteurs
P(SL); Nb_Lect = Nb_Lect + 1; si (Nb_Lect == 1) P(X); V(SL); Consulter P(SL); Nb_Lect = Nb_Lect - 1; si (Nb_Lect == 0) V(X); V(SL);
Linconvnient de cette solution est quelle va sans doute provoquer la famine (starvation) pour les crivains : ds quun lecteur est arriv, il permet laccs un flux ininterrompu de lecteurs. Un crivain voit son tour passer aprs celui du dernier lecteur.
_________________________________________
ENST BCI Informatique
125
_________________________________________
ENST BCI Informatique
126
Lecteur et crivain
On va modifier le scnario prcdent pour quun crivain puisse accder la ressource le plus tt possible, on ajoute un verrou S:
Programme pour les lecteurs
P(S); V(S); P(SL); Nb_Lect = Nb_Lect + 1; si (Nb_Lect == 1) P(X); V(SL); Consulter P(SL); Nb_Lect = Nb_Lect - 1; si (Nb_Lect == 0) V(X); V(SL); V(X); P(X); Modifier V(S) /* Permettre laccs au suivant */ /* Si un ecrivain arrive, le laisser passer */
Les lecteurs sont encore prioritaires, mais il ny plus famine pour les crivains : un crivain peut maintenant interrompre le flot des lecteurs et interdire ceux qui le suivent de lui prendre son tour.
_________________________________________
ENST BCI Informatique
127
_________________________________________
ENST BCI Informatique
128
Interblocage :
Init(X1,1) Init(X2,1) Processus 1 P(X1) P(X2) Section critique V(X2) V(X1) Processus 2 P(X2) P(X1) Section critique V(X1) V(X2)
Certains systmes, comme UNIX, proposent des oprations P et V sur plusieurs smaphores la fois. On peut ainsi remplacer les deux suites P(X1), P(X2) et P(X1), P(X2) par les deux commandes atomiques P(X1, X2) et V(X1, X2).
Famine, cest--dire l'attente indfinie dans la file d'attente. Attention la taille des sections critiques qui doivent tre la plus petite possible.
_________________________________________
ENST BCI Informatique
129
_________________________________________
ENST BCI Informatique
130
Plan
Solutions logicielles - Divers algorithmes, - Lalgorithme de Dekker : le premire solution, - Lalgorithme de Peterson : une solution lgante,
_________________________________________
ENST BCI Informatique
131
_________________________________________
ENST BCI Informatique
132
Solutions logicielles
Nous allons prsenter de faon progressive le premier algorithme rsolvant le problme de lexclusion mutuelle pour deux processus, il sagit de lalgorithme de Dekker. Limitations : On suppose que les oprations de lecture, dcriture et de test dun mot en mmoire sont atomiques. Rappel des conditions d'accs une section critique : exclusion mutuelle pour laccs la section critique, pas d'interblocage, pas d'attente infinie pour entrer dans la section critique, accs quitable.
_________________________________________
ENST BCI Informatique
133
_________________________________________
ENST BCI Informatique
134
Version 1
On considre deux processus Pi et Pj. On suppose ici : - i = 0, - j = 1, la variable partage tour indique lequel des deux processus peut entrer en section critique. Programme excut par le processus Pi
... ... /* attendre */ while (tour != i) {} /* debut de section critique */ ... ... /* fin de section critique */ tour = j; ...
Problme : Les processus ne peuvent entrer en S.C. qu' tour de rle, tour impose un ordre (pas daccs quitable).
_________________________________________
ENST BCI Informatique
135
_________________________________________
ENST BCI Informatique
136
Version 2
Il faudrait connatre l'tat des processus pour savoir lequel d'entre eux peut entrer en S.C.. On remplace alors la variable unique par un tableau partag : Etat[2] dont les lments sont initialiss zro , la valeur 1 signifie que Pi est en S.C. Programme excut par le processus Pi
... ... /* attendre que l'autre processus sorte. */ while (Etat[j] == 1) {} Etat[i] = 1; /* debut de section critique */ ... ... /* fin de section critique */ Etat[i] = 0; ... ...
Problme : Les deux processus Pi et Pj peuvent tre ensemble en S.C. Pour viter cela, on va positionner Etat[i] avant d'entrer en S.C..
_________________________________________
ENST BCI Informatique
137
_________________________________________
ENST BCI Informatique
138
Version 3
La valeur 1 dans la case Etat[i] signifie que Pi veut entrer en S.C.. Programme excut par le processus Pi
... ... /* Le processus indique quil va entrer en S.C. */ Etat[i] = 1; /* Si lautre fait de mme, alors attendre */ while(Etat[j] == 1){ } /* debut section critique */ ... ... /* fin de section critique */ Etat[i] = 0; ... ...
_________________________________________
ENST BCI Informatique
139
_________________________________________
ENST BCI Informatique
140
Version 4
Programme excut par le processus Pi
... ... /* i veut entrer en S.C. */ Etat[i] = 1; /* j veut-il entre en section critique ? */ while(Etat[j] == 1) { /* oui, le laisser passer */ Etat[i] =0; /* attendre (cf. algo. 2) */ while (Etat[j] == 1) { }; /* puis redemander l'accs */ Etat[i] = 1; } /* debut de section critique */ ... ... /* fin de section critique */ Etat[i] = 0; ... ...
Interblocage possible (excutions pas pas parallles et identiques) bien que trs peu probable.
_________________________________________
ENST BCI Informatique
141
_________________________________________
ENST BCI Informatique
142
_________________________________________
ENST BCI Informatique
143
_________________________________________
ENST BCI Informatique
144
Pas d'interblocage : Si Pi et Pj veulent entrer en SC et que tour=i : 1- Pi attend que Etat[j] = 0 2- Pj met Etat[j] 0 et attend que tour change, 3- Pj entre en SC.
_________________________________________
ENST BCI Informatique
145
_________________________________________
ENST BCI Informatique
146
Exclusion mutuelle, pas dinterblocage et attente limite : - interblocage ssi (ce qui est impossible) :
(Etat[j] = 1 ET tour = j) ET (Etat[i] = 1 ET tour = i)
- les deux processus sont ensemble en SC ssi (ce qui est impossible) :
(Etat[j] = 0 OU tour = i) ET (Etat[i] = 0 OU tour = j)
Linitialisation de tour est indiffrente : suivant lordonnancement tour donne le droit dentrer lun ou lautre des processus.
_________________________________________
ENST BCI Informatique
147
_________________________________________
ENST BCI Informatique
148
_________________________________________
ENST BCI Informatique
149