Partage de technologie

OS_Synchronisation et exclusion mutuelle

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

2024-07-04 : Notes d'étude sur la synchronisation du système d'exploitation et l'exclusion mutuelle


Les processus ou programmes simultanés perdront leur fermeture une fois exécutés. Autrement dit, si deux programmes utilisent une ressource partagée dans des zones distinctes, les résultats de chaque exécution peuvent être différents.
Insérer la description de l'image ici
La raison en est que nous n'avons pas protégé la ressource partagée x à laquelle le programme a et le programme b doivent accéder.


9.1 Concepts de base de synchronisation et d'exclusion mutuelle

9.1.1 Relation de synchronisation

La relation mutuellement restrictive est la synchronisation. Une compréhension simple de la synchronisation est qu'il doit y avoir un ordre dans l'exécution des processus.
Insérer la description de l'image ici


9.1.2 Relation mutuellement exclusive

La relation qui se restreint indirectement est appelée relation mutuellement exclusive, par exemple.
Insérer la description de l'image ici


9.1.3 Ressources critiques

  • Les ressources auxquelles un seul processus est autorisé à accéder sur une période donnée sont appelées ressources critiques (ou ressources exclusives).
  • Pour le partage des ressources critiques, l'exclusion mutuelle doit être utilisée entre les processus

"Modèle producteur et consommateur"
Insérer la description de l'image icicompteur+ +

首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

comptoir- -

首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Insérer la description de l'image ici

Solution : traiter le compteur comme une ressource critique et permettre au processus d'accéder mutuellement au compteur variable (vous apprendrez le mécanisme de synchronisation plus tard)


9.1.4 Section critique

Qu'il s'agisse d'une ressource matérielle critique ou d'une ressource logicielle critique, plusieurs processus doivent y accéder mutuellement.
Insérer la description de l'image ici
Ces zones sont essentiellement des codes

  • Zone d'entrée
  • section critique
  • Zone de sortie
  • superficie restante

9.1.5 Les mécanismes de synchronisation doivent suivre des règles

  • Libre de laisser entrer

Lorsqu'aucun processus ne se trouve dans la section critique, cela indique que les ressources de la section critique sont inactives. Un processus qui demande à entrer dans la section critique doit être autorisé à entrer immédiatement dans sa propre section critique pour utiliser efficacement les ressources.

  • Si vous êtes occupé, attendez

Lorsqu'un processus existant entre dans la section critique, cela indique que la ressource critique est en cours d'accès. Par conséquent, les autres processus essayant d'entrer dans la section critique doivent attendre pour garantir un accès mutuellement exclusif à la ressource critique.

  • attente limitée

Pour les processus qui nécessitent l'accès à des ressources critiques, ils doivent s'assurer qu'ils peuvent accéder à leur propre section critique dans un délai limité pour éviter de tomber dans un état « d'attente de mourir ».

  • cède et attends

Lorsqu'un processus ne peut pas accéder à sa propre section critique, le processeur (CPU) doit être libéré immédiatement pour éviter que le processus ne tombe dans un état « d'attente occupé ».


9.2 Mécanisme de synchronisation du logiciel

9.2.1 Méthode à marque unique

  • Définissez une variable entière publique pour indiquer s'il y a un processus dans la section critique, il attendra une vérification de boucle dans la zone d'entrée une fois que le processus quitte la section critique, l'indicateur. sera modifié dans la zone de sortie.
  • La méthode à indicateur unique définit une variable entière publique turn pour indiquer le numéro de processus autorisé à entrer dans la section critique. Lorsque turn=0, le processus P0 est autorisé à entrer dans la section critique.
  • Lorsque turn=1, le processus P1 est autorisé à entrer dans la section critique, et en sortant de la section critique, le droit d'utiliser la section critique est donné à un autre processus (lorsque Pi sort de la section critique, soit turn=j)

Insérer la description de l'image ici
Insérer la description de l'image ici
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则


9.2.2 Méthode de première vérification par double marquage

La méthode de première vérification à double indicateur définit un tableau booléen flag[2] pour marquer la volonté de chaque processus d'entrer dans la section critique. flag[i]=true signifie que Pi veut entrer dans la section critique.

  • Avant que Pi n'entre dans la section critique, vérifiez d'abord si l'autre partie est entrée dans la section critique. Si c'est le cas, attendez.
  • Sinon, définissez flag[i] sur true avant d'entrer dans la section critique
  • Lorsque Pi quitte la section critique, définissez flag[i] sur false

Insérer la description de l'image ici

Insérer la description de l'image ici

  • La boucle while est équivalente au mécanisme des feux de circulation
  • Placer le drapeau de l'autre partie équivaut à changer le feu de circulation de l'autre partie.
  • Cependant, étant donné que les deux processus vérifient d'abord le drapeau [regardez d'abord le feu de circulation] et que les deux sont faux [les deux feux verts] au départ, il est possible que les deux processus passent le feu de circulation en même temps et entrent ensemble dans la section critique. .

9.2.3 Méthode de post-inspection à double marquage

La méthode de post-vérification à double drapeau vérifiera le drapeau de l'autre partie, puis définira le sien. Ces deux opérations ne peuvent pas être effectuées en une seule fois, de sorte que les deux processus peuvent entrer dans la section critique en même temps. une méthode a été conçue, qui définit d'abord son propre drapeau, puis vérifie le drapeau de l'autre partie, si le drapeau de l'autre partie est vrai, attendez sinon, entrez dans la section critique ;

Insérer la description de l'image ici
Insérer la description de l'image ici


9.2.4 Algorithme de Peterson

L'algorithme de Peterson combineméthode de marque uniqueetMéthode de post-vérification à double noteL'idée est d'utiliser flag[] pour résoudre le problème d'accès mutuellement exclusif et d'utiliser turn pour résoudre le problème de famine.

Si les deux parties sont en compétition pour accéder à la section critique, le processus peut être autorisé à donner à l'autre partie la possibilité d'accéder à la section critique.
Avant que chaque processus n'entre dans la section critique, il définit son propre drapeau et définit le drapeau de tour autorisé à entrer. Après cela, il détecte le drapeau et le tour de l'autre partie en même temps pour s'assurer qu'un seul processus est autorisé à entrer à ce moment-là. les deux parties demandent à entrer dans la section critique en même temps.
Insérer la description de l'image ici
Ne pas renoncer au droit d’attendre
Insérer la description de l'image ici


9.3 Mécanisme de synchronisation matérielle

Il est difficile pour un logiciel de résoudre le problème de l'exclusion mutuelle de chaque processus de l'accès à la section critique, et il présente de grandes limites. Par conséquent, l'ordinateur fournit des instructions matérielles spéciales pour résoudre le problème.

9.3.1 Désactiver les interruptions

(1) Définition de la désactivation des interruptions

  • La désactivation des interruptions a été discutée dans les principes de composition informatique. Elle fait référence à la modification d'un bit dans le registre PSW du CPU. Ce bit contrôlera si le CPU actuel répondra à l'interruption correspondante. Cette interruption ne peut bloquer que les interruptions masquables. Les interruptions non masquables ne peuvent pas être arrêtées
  • La planification des processus dans le système d'exploitation repose sur des interruptions, telles que des interruptions d'horloge.
  • Lors de l'exécution d'un processus dans la section critique, le système informatique arrête les interruptions, ce qui ne déclenchera pas la planification et il n'y aura pas de commutation de processus ou de thread.

(2) Inconvénients de la désactivation des interruptions

  • Une mauvaise utilisation des terminaux peut entraîner de graves conséquences
  • Si le temps d'arrêt est trop long, cela affectera l'efficacité du système.
  • La méthode de désactivation des interruptions ne s'applique pas aux systèmes multi-CPU. La désactivation des interruptions sur un processeur n'empêche pas le processus d'exécuter le même code critique sur d'autres processeurs.

9.3.2 Commande Test-and-Set (commande TS)

Insérer la description de l'image ici

L'instruction TS peut être considérée comme un processus fonction (primitif) dont le processus d'exécution est indivisible.

  • le verrou a deux états :
    • *lock=FALSE indique que la ressource est libre
    • *lock=TRUE indique que la ressource est utilisée

Utilisez TS pour gérer les sections critiques et définir un verrou pour chaque ressource critique.

  • La valeur initiale est FALSE, indiquant que les ressources critiques sont inactives.
  • Avant que le processus n'entre dans la section critique, il utilise d'abord TS pour tester le verrou. S'il est FAUX, il peut saisir et attribuer la valeur VRAI au verrou, fermant ainsi la ressource critique.

9.3.3 Commande d'échange

Insérer la description de l'image ici
C'est ce qu'on appelle une instruction d'échange et est utilisée pour échanger le contenu de deux mots.

  • Définissez un verrou de variable booléenne global pour chaque ressource critique, avec une valeur initiale de FALSE.
  • Utilisez les instructions matérielles ci-dessus pour terminer le processus d'exclusion mutuelle
  • Cependant, cette méthode entraînera également un test continu du processus d'accès et un état « d'attente occupé », ce qui n'est pas conforme au principe du « droit d'attente ».

9.4 Mécanisme du sémaphore

9.4.1 Sémaphore entier

Il est défini comme un entier S utilisé pour représenter le nombre de ressources. Il n'y a que trois opérations pour ce sémaphore entier : initialisation (attribution d'une valeur initiale), attente (décrémentation), signal (incrémentation).
Insérer la description de l'image ici

  • L'attente et le signal sont des opérations atomiques et ne peuvent pas être interrompus pendant l'exécution.
  • Lorsqu'un processus modifie un sémaphore, aucun autre processus ne peut modifier le sémaphore en même temps.

9.4.2 Sémaphore d'enregistrement

Mécanisme de synchronisation des processus sans phénomène « d'attente occupée »

  • En plus d'une valeur variable entière utilisée pour représenter le nombre de ressources
  • Il est également nécessaire d'ajouter une liste chaînée de processus L pour relier tous les processus en attente de la ressource.

Insérer la description de l'image ici

  • L'opération d'attente est équivalente à l'opération P
  • L'opération signal est équivalente à l'opération V
  • Juste deux noms différents, les fonctions sont exactement les mêmes
  • attendre(A) = P(A)
  • signal(B) = V(A)

(1) Utilisez le sémaphore pour réaliser l'exclusion mutuelle des processus

Définissez un sémaphore mutuellement exclusif mutex=1, puis placez la section critique pour chaque processus afin d'accéder aux ressources critiques entre wait(mutex) et signal(mutex).
Insérer la description de l'image ici


(2) Utilisez des sémaphores pour réaliser la synchronisation des processus

Définissez un sémaphore de synchronisation S=0, de sorte que le signal d'instruction (S) qui doit être exécuté en premier, puis l'attente (S)
Insérer la description de l'image ici