Processus Synchronisation : problème de section critique dans le système d'exploitation
Qu'est-ce que le processus Synchronisation ?
Processus Synchronisation est la tâche de coordonner l’exécution des processus de manière à ce qu’aucun processus ne puisse avoir accès aux mêmes données et ressources partagées.
Il est particulièrement nécessaire dans un système multi-processus lorsque plusieurs processus s'exécutent ensemble et que plusieurs processus tentent d'accéder simultanément à la même ressource ou aux mêmes données partagées.
Cela peut conduire à une incohérence des données partagées. Ainsi, le changement apporté par un processus ne se reflète pas nécessairement lorsque d’autres processus accèdent aux mêmes données partagées. Pour éviter ce type d’incohérence des données, les processus doivent être synchronisés les uns avec les autres.
Comment procéder SyncLa hronisation fonctionne ?
Par exemple, le processus A modifie les données dans un emplacement mémoire pendant qu'un autre processus B essaie de lire les données du même emplacement mémoire. Il existe une forte probabilité que les données lues par le deuxième processus soient erronées.
Sections d'un programme
Voici quatre éléments essentiels de la section critique :
- Section d'entrée : Cela fait partie du processus qui décide de l'entrée d'un processus particulier.
- Section critique: Cette partie permet à un processus de saisir et de modifier la variable partagée.
- Section de sortie : La section de sortie permet aux autres processus qui attendent dans la section d'entrée d'entrer dans les sections critiques. Il vérifie également qu'un processus ayant terminé son exécution doit être supprimé via cette section.
- Section Reste : Toutes les autres parties du Code, qui ne figurent pas dans les sections Critique, Entrée et Sortie, sont connues sous le nom de Section Reste.
Qu’est-ce que le problème de section critique ?
Une section critique est un segment de code auquel un processus de signal peut accéder à un moment précis. La section se compose de ressources de données partagées auxquelles d'autres processus devaient accéder.
- L'entrée dans la section critique est gérée par la fonction wait() et elle est représentée par P().
- La sortie d'une section critique est contrôlée par la fonction signal(), représentée par V().
Dans la section critique, un seul processus peut être exécuté. Les autres processus, en attente d'exécution de leur section critique, doivent attendre que le processus en cours termine son exécution.
Règles pour la section critique
La section critique doit appliquer les trois règles :
- Exclusion mutuelle: L'exclusion mutuelle est un type spécial de sémaphore binaire utilisé pour contrôler l'accès à la ressource partagée. Il comprend un mécanisme d'héritage de priorité pour éviter les problèmes étendus d'inversion de priorité. Pas plus d’un processus ne peut s’exécuter dans sa section critique à la fois.
- Progrès: Cette solution est utilisée lorsque personne n'est dans la section critique et que quelqu'un veut y entrer. Ensuite, les processus qui ne sont pas dans leur section de rappel devraient décider qui doit y entrer, dans un temps fini.
- En attente liée : Lorsqu'un processus demande à accéder à une section critique, il existe une limite spécifique quant au nombre de processus pouvant accéder à sa section critique. Ainsi, lorsque la limite est atteinte, le système doit autoriser la requête adressée au processus pour accéder à sa section critique.
Solutions à la section critique
En cours Synchronisation, la section critique joue le rôle principal pour que le problème soit résolu.
Voici quelques méthodes largement utilisées pour résoudre le problème des sections critiques.
Solution de Peterson
La solution de Peterson est une solution largement utilisée pour les problèmes de sections critiques. Cet algorithme a été développé par l'informaticien Peterson, c'est pourquoi il est appelé solution de Peterson.
Dans cette solution, lorsqu’un processus s’exécute dans un état critique, l’autre processus n’exécute que le reste du code, et l’inverse peut se produire. Cette méthode permet également de garantir qu'un seul processus s'exécute dans la section critique à un moment précis.
Exemple
PROCESS Pi FLAG[i] = true while( (turn != i) AND (CS is !free) ){ wait; } CRITICAL SECTION FLAG[i] = false turn = j; //choose another process to go to CS
- Supposons qu'il existe N processus (P1, P2,… PN) et que chaque processus, à un moment donné, nécessite d'entrer dans la section critique.
- Un tableau FLAG[] de taille N est conservé, ce qui est faux par défaut. Ainsi, chaque fois qu'un processus nécessite d'entrer dans la section critique, il doit définir son indicateur sur vrai. Par exemple, si Pi veut entrer, il définira FLAG[i]=TRUE.
- Une autre variable appelée TURN indique le numéro de processus qui attend actuellement d'entrer dans le CS.
- Le processus qui entre dans la section critique en sortant changerait le TURN en un autre numéro de la liste des processus prêts.
- Exemple : le tour est 2 puis P2 entre dans la section critique et en sortant, tour = 3 et donc P3 sort de la boucle d'attente.
SyncMatériel d'honorisation
Parfois, les problèmes de la section critique sont également résolus par le matériel. Certains systèmes d'exploitation offrent une fonctionnalité de verrouillage dans laquelle un processus acquiert un verrou lorsqu'il entre dans la section critique et libère le verrou après l'avoir quitté.
Ainsi, lorsqu’un autre processus tente d’accéder à la section critique, il ne pourra pas y accéder car il est verrouillé. Il ne peut le faire que s’il est libre en acquérant lui-même la serrure.
Verrous mutex
SyncLe matériel de synchronisation n'est pas une méthode simple à mettre en œuvre pour tout le monde, c'est pourquoi une méthode logicielle stricte connue sous le nom de Mutex Locks a également été introduite.
Dans cette approche, dans la section d'entrée du code, un LOCK est obtenu sur les ressources critiques utilisées à l'intérieur de la section critique. Dans la section de sortie, ce verrou est libéré.
Semaphore Solution
Semaphore est simplement une variable non négative et partagée entre les threads. Il s'agit d'un autre algorithme ou solution au problème de la section critique. Il s'agit d'un mécanisme de signalisation et d'un thread qui attend un sémaphore, qui peut être signalé par un autre thread.
Il utilise deux opérations atomiques, 1) attendre et 2) signaler pour la synchronisation du processus.
Exemple
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;
Résumé
- La synchronisation des processus consiste à coordonner l'exécution des processus de manière à ce que deux processus ne puissent pas accéder aux mêmes données et ressources partagées.
- Quatre éléments de la section critique sont 1) Section d'entrée 2) Section critique 3) Section de sortie 4) Section de rappel
- Une section critique est un segment de code auquel un processus de signal peut accéder à un moment précis.
- Les trois règles incontournables qui doivent être appliquées par section critique sont : 1) Exclusion mutuelle 2) Solution de processus 3) Attente limitée
- L'exclusion mutuelle est un type spécial de sémaphore binaire utilisé pour contrôler l'accès à la ressource partagée.
- La solution de processus est utilisée lorsque personne ne se trouve dans la section critique et que quelqu'un souhaite y participer.
- Dans la solution d'attente liée, après qu'un processus a fait une demande pour accéder à sa section critique, il existe une limite au nombre d'autres processus pouvant accéder à leur section critique.
- La solution de Peterson est une solution largement utilisée pour les problèmes de sections critiques.
- Les problèmes de la section critique sont également résolus par la synchronisation du matériel
- SyncLe matériel de synchronisation n'est pas une méthode simple à mettre en œuvre pour tout le monde, c'est pourquoi la méthode logicielle stricte connue sous le nom de Mutex Locks a également été introduite.
- Semaphore est un autre algorithme ou solution au problème de la section critique.