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.

  • 🔗 Définition: SyncL'hinisation coordonne les processus afin qu'ils n'accèdent pas simultanément aux données partagées.
  • ⚠️ Pourquoi nécessaire : Un accès non coordonné à la mémoire partagée conduit à des données incohérentes et erronées.
  • 🧩 Section critique: Les sections Entrée, Critique, Sortie et Reste structurent l'accès sécurisé aux variables partagées.
  • (I.e. Trois règles : Une solution valable doit satisfaire aux principes d'exclusion mutuelle, de progrès et d'attente limitée.
  • Solutions: L'algorithme de Peterson, le matériel de synchronisation, les verrous mutex et les sémaphores résolvent le problème.
  • (I.e. Semaphore: Une variable partagée non négative signalée à l'aide des opérations atomiques wait() et signal().

Processus Synchronisation

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.

Processus SyncTravaux d'honorisation

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

Solutions à la section critique

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;

FAQ

Un mutex permet à un seul thread de verrouiller et de libérer le verrou, garantissant ainsi une exclusion mutuelle stricte. Un sémaphore est un compteur de signalisation qui permet à un ou plusieurs threads d'accéder à des ressources, et donc de coordonner plusieurs accès concurrents.

Une situation de concurrence se produit lorsque deux ou plusieurs processus accèdent simultanément à des données partagées et que le résultat final dépend du moment de leur exécution. SyncL'hydrogénation l'empêche en garantissant qu'un seul processus entre dans la section critique à la fois.

Un blocage survient lorsque deux processus ou plus détiennent chacun une ressource et attendent qu'une ressource soit disponible chez l'autre, empêchant ainsi toute progression. Un ordre de verrouillage judicieux, des délais d'expiration et des algorithmes d'évitement permettent de prévenir les blocages lors de la synchronisation.

Les outils d'IA peuvent analyser le code et son exécution. tracCes outils permettent de repérer les conditions de concurrence, les interblocages et les verrous manquants difficiles à reproduire manuellement. En apprenant les schémas de concurrence courants, ils signalent les accès risqués aux données partagées et indiquent où une synchronisation est nécessaire.

L'IA ne peut garantir la prévention, mais elle réduit les risques. Elle peut recommander les mécanismes de verrouillage appropriés, générer du code thread-safe et exécuter des tests automatisés qui détectent les erreurs de synchronisation. La correction finale dépend toutefois de la vérification et de la validation de la conception de la concurrence par les développeurs.

Résumez cet article avec :