Les raisons de l'impasse sous Linux sont : 1. L'impasse causée par la concurrence pour des ressources qui ne peuvent pas être préemptées ; 2. L'impasse causée par la concurrence pour les ressources consommables ; et séquence incorrecte de libération des ressources, entraînant une impasse du processus).
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
1. La notion de blocage :
Si chaque processus (ou thread) d'un groupe de processus (ou threads) est en attente, cela ne peut être provoqué que par d'autres processus (ou threads) du groupe de processus, alors le groupe de processus (ou threads) est bloqué (Deadlock).
2. Raisons du blocage :
(1) Blocage causé par la concurrence pour les ressources non préemptives
Par exemple : blocage provoqué lors du partage de fichiers
Il existe deux processus P1 et P2 dans le système. . Ils sont tous deux prêts à écrire deux fichiers F1 et F2. Ces deux ressources sont réutilisables et non préemptives. Si le processus P1 ouvre F1 en même temps, le processus P2 ouvre le fichier F2. Lorsque P1 veut ouvrir F2, il est bloqué car F2 est déjà occupé. Lorsque P2 veut ouvrir 1, il est bloqué car F1 est déjà occupé. temps, il n'y aura pas de connexion sans fil. L'attente continue de former une impasse.
(2) Blocage causé par la concurrence pour les ressources consommables
Par exemple : blocage causé par la communication des processus
Il y a trois processus P1, P2 et P3 dans le système, m1, m2 et m3 sont 3 consommables ressource. D'une part, le processus P1 génère le message m1 et l'envoie à P2, et d'autre part, il reçoit le message m3 de P3. D'une part, le processus P2 génère le message m2 et l'envoie à P3, et d'autre part, il reçoit le message m1 de P1. De même, le processus P3 d'une part génère le message m3 et l'envoie à P1, et d'autre part reçoit le message m2 de P2.
Si les trois processus envoient d'abord des messages générés par eux-mêmes, puis reçoivent des messages des autres, ils peuvent fonctionner sans problème sans impasse. Cependant, si les trois processus reçoivent d'abord des messages des autres sans générer de messages, une attente éternelle créera une impasse.
(3) Ordre incorrect d'avancement du processus provoquant une impasse : pendant le processus en cours, l'ordre de demande et de libération des ressources est inapproprié, ce qui entraîne une impasse du processus.
Dans l'image ci-dessus, si vous avancez dans l'ordre de la courbe 1, les deux processus peuvent être complétés en douceur ; si vous avancez dans l'ordre de la courbe 2, les deux processus peuvent être complétés en douceur ; de la courbe 3, les deux processus peuvent être complétés en douceur. Terminé ; si vous avancez dans l'ordre de la courbe 4, les deux processus entreront dans la zone dangereuse D. À ce moment, P1 conserve la ressource R1 et P2 conserve la ressource R2. dans un état dangereux. Si vous continuez à avancer, cela peut se produire.
3. Conditions nécessaires à l'impasse
(1) Conditions d'exclusion mutuelle. Les ressources demandées par un processus (thread) ne peuvent être occupées que par un seul verrou de processus (thread) sur une période donnée.
(2) Conditions de demande et de retenue. Un processus (thread) occupe déjà au moins une ressource, mais une nouvelle demande de ressource est effectuée et la ressource est occupée par un autre processus (thread).
(3) Condition non préemptive (condition non préemptive). Les ressources acquises par un processus (thread) ne peuvent pas être préemptées avant d'être épuisées.
(4) Condition d'attente de boucle (condition d'attente de boucle). Lorsqu'une impasse se produit, il doit y avoir un processus (thread) - une chaîne circulaire de ressources.
4. Évitement des impasses, prévention et solutions
L'évitement des impasses consiste à faire attention pour éviter l'apparition éventuelle d'une impasse pendant le fonctionnement du système.
Les trois premières conditions d'apparition d'une impasse sont les conditions nécessaires à l'apparition d'une impasse, c'est-à-dire les conditions qui doivent être remplies pour qu'une impasse se produise. Au lieu de l'existence de ces trois conditions, une impasse se produira. se produira certainement, donc tant qu'il est logiquement évité. La quatrième condition peut éviter une impasse.
L'idée de base de l'évitement des blocages : le système vérifie dynamiquement chaque demande de ressources émise par le processus que le système peut satisfaire et décide d'allouer des ressources en fonction des résultats de la vérification si le système est susceptible de se bloquer après l'allocation ; il ne sera pas attribué ; sinon il est attribué.
(1) Méthodes couramment utilisées pour éviter les impasses :
1. Algorithme du banquier, idée de base : Dans la méthode pour éviter les impasses, le processus est autorisé à demander des ressources de manière dynamique, mais. le système est Avant d'allouer des ressources, vous devez d'abord calculer la sécurité des ressources allouées. Si l'allocation ne fera pas entrer le système dans un état dangereux, allouez-la, sinon attendez.
(2) Prévention des impasses :1. Destruction de la condition « inaliénable » : Lorsqu'un processus occupe une ressource puis postule pour une autre ressource mais ne peut la satisfaire, il quittera la ressource initialement occupée. (3) Méthodes pour résoudre une impasse : Il existe actuellement deux méthodes, l'une consiste à empêcher l'impasse de se produire ; l'autre consiste à permettre qu'une impasse se produise, puis à la résoudre une fois qu'elle s'est produite. Il existe 4 méthodes spécifiques : 1. Prévenir les impasses. Empêchez les blocages de se produire en définissant certaines limites strictes pour détruire les conditions de blocage, mais cette méthode entraînera une faible utilisation des ressources du système. 2. Évitez les blocages. Dans le processus d'allocation dynamique des ressources, une méthode est utilisée pour empêcher le système d'entrer dans un état dangereux et éviter une impasse. Cette approche permet une utilisation plus élevée des ressources au détriment de contraintes plus faibles. 3. Détecter les impasses. Autoriser les blocages pendant le fonctionnement du système. En mettant en place un mécanisme de détection dans le système, il peut détecter rapidement si un blocage s'est réellement produit, déterminer avec précision les processus et les ressources liés au blocage, puis prendre des mesures pour résoudre le blocage. 4. Sortez de l'impasse. Il s'agit d'une mesure qui accompagne la détection des blocages et est utilisée pour libérer le processus de l'état de blocage. Recommandations associées : "
Cette stratégie est complexe et coûteuse à mettre en œuvre. Parce qu'une ressource est privée de force après avoir été utilisée pendant un certain temps, cela entraînera l'échec de l'étape précédente du travail.
2. Détruisez la condition « demander et conserver » : adopter une stratégie statique d'allocation de ressources unique, c'est-à-dire appliquer toutes les ressources avant l'exécution du processus, exécuter si satisfait, sinon attendre, afin qu'il ne soit pas occupé et appliqué pour.
3. Détruire la condition « d'exclusion mutuelle » : Cette stratégie est presque impossible, car l'exclusivité mutuelle des ressources est déterminée par sa propre nature.
4. Détruire la condition « d'attente circulaire » : numéroter toutes les ressources du système de manière séquentielle. Le principe général est que les ressources de plus en plus rares ont des numéros plus grands. Lorsqu'un processus demande des ressources, il doit suivre strictement l'ordre des numéros de ressources, sinon le système ne les attribuera pas. Autrement dit, un processus ne peut s'appliquer qu'à des ressources avec des nombres plus grands, lorsqu'il obtient des ressources avec des nombres plus petits ; lors de la libération de ressources, cela doit être effectué par ordre décroissant de nombres ;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!