Processus Synchronisation : problème de section critique dans le système d'exploitation
⚡ Résumé intelligent
Processus SyncL'harmonisation consiste à coordonner l'exécution des processus afin qu'aucun processus n'accède simultanément aux mêmes données ou ressources partagées. Elle prévient les incohérences de données dans les systèmes multiprocessus en contrôlant l'accès à la section critique.

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.
Cela est particulièrement nécessaire dans un système multiprocessus lorsque plusieurs processus s'exécutent simultanément et que plusieurs processus tentent d'accéder en même temps à la même ressource ou donnée partagée.
Cela peut entraîner une incohérence des données partagées. Ainsi, une modification effectuée par un processus n'est pas nécessairement répercutée lorsque d'autres processus accèdent aux mêmes données partagées. Pour éviter ce type d'incohérence, les processus doivent être synchronisés.
Comment procéder SyncLa hronisation fonctionne ?
Par exemple, le processus A modifie les données à un emplacement mémoire tandis qu'un autre processus B tente de lire les données à partir de la mémoire. 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 Sortie permet aux autres processus en attente dans la section Entrée d'accéder à la section Critique. Elle vérifie également qu'un processus ayant terminé son exécution doit être supprimé par cette section.
- Section Reste : Toutes les autres parties de CodeLes sections qui ne font pas partie de la section critique, d'entrée et de sortie sont appelées la section restante.
Qu’est-ce que le problème de section critique ?
Une section critique est un segment de code accessible par un seul processus à un instant précis. Cette section comprend des ressources de données partagées auxquelles doivent accéder les autres processus.
- 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 faire respecter 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 lorsqu'aucun processus n'est présent dans la section critique et qu'un processus souhaite y entrer. Dans ce cas, les processus qui ne sont pas dans leur section restante doivent décider, dans un délai fini, qui doit y entrer.
- En attente liée : Lorsqu'un processus demande l'accès à sa section critique, le nombre de processus pouvant y accéder simultanément est limité. Une fois cette limite atteinte, le système doit autoriser la demande d'accès à la section critique.
Solutions à la section critique
En cours SyncL'histonisation, la section critique joue un rôle primordial, de sorte que le problème doit être 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 aux problèmes de section critique. Cet algorithme a été développé par un informaticien du nom de Peterson, d'où son nom.
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 maintenu, initialisé à false. Ainsi, lorsqu'un processus souhaite accéder à la section critique, il doit activer son indicateur FLAG[i]. Par exemple, si Pi souhaite y accéder, il définira FLAG[i]=TRUE.
- Une autre variable appelée TURN indique le numéro du 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, le tour est 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 permettant à un processus d'acquérir un verrou lors de son entrée dans la section critique et de le libérer à sa sortie.
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
SyncL'archivage matériel 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 verrous mutex, 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 Il s'agit simplement d'une variable non négative partagée entre les threads. C'est un autre algorithme ou une autre solution au problème de la section critique. C'est un mécanisme de signalisation : un thread en attente d'un sémaphore peut être signalé par un autre thread.
Il utilise deux opérations atomiques : 1) attendre et 2) signaler la synchronisation du processus.
Exemple
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


