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.
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.
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.
La relation qui se restreint indirectement est appelée relation mutuellement exclusive, par exemple.
"Modèle producteur et consommateur"
compteur+ +
首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
comptoir- -
首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
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)
Qu'il s'agisse d'une ressource matérielle critique ou d'une ressource logicielle critique, plusieurs processus doivent y accéder mutuellement.
Ces zones sont essentiellement des codes
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.
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.
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 ».
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é ».
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则
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.
- 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. .
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 ;
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.
Ne pas renoncer au droit d’attendre
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.
L'instruction TS peut être considérée comme un processus fonction (primitif) dont le processus d'exécution est indivisible.
Utilisez TS pour gérer les sections critiques et définir un verrou pour chaque ressource critique.
C'est ce qu'on appelle une instruction d'échange et est utilisée pour échanger le contenu de deux mots.
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).
Mécanisme de synchronisation des processus sans phénomène « d'attente occupée »
- 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)
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).
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)