Un processus est la plus petite unité d'allocation de ressources, et un thread est l'unité de base de la planification du processeur.
Le processus a un espace d'adressage indépendant et le thread n'a pas d'espace d'adressage indépendant, mais il a une pile indépendante et des variables locales.
En multi-processus et multi-thread, le multi-processus est plus robuste que le multi-thread. Étant donné que le processus dispose d'un espace d'adressage indépendant, lorsqu'un processus se termine anormalement, cela n'affectera pas les autres processus ; les threads n'ont pas d'espace d'adressage indépendant, et lorsqu'un thread se termine anormalement, cela peut affecter d'autres threads.
Le coût de création d'un processus est supérieur à celui de la création d'un thread ; le coût du changement de contexte de processus est supérieur au coût du changement de contexte de thread.
2. Quelles sont les méthodes de communication inter-processus ?
Pipeline : (1) Pipe sans nom : utilisé pour la communication inter-processus avec affinité, sous forme de flux d'octets. (2) Tuyaux célèbres : il brise les frontières des relations amoureuses et permet à deux processus non liés de communiquer via des tuyaux sous la forme de flux d'octets.
Message Queue : les données sont transmises par blocs, mais la copie des données de l'espace utilisateur vers l'espace noyau coûte cher.
Mémoire partagée : Il y a un problème de compétition de ressources
Signal : Communication asynchrone
Sémaphore : Exclusion mutuelle synchrone
Sock et communication : Mise en place de deux salles informatiques communication.
3. Algorithme de planification des processus
Algorithme de planification du premier arrivé, premier serviExécution des processus un par un selon l'ordre de rejoindre la file d'attente
Planification du premier travail le plus court ; ing Algorithme ; Donnez la priorité au processus avec le temps d'exécution le plus court
Algorithme de planification de priorité à taux de réponse élevé lors de la planification du processus, calculez d'abord la priorité du taux de réponse, puis sélectionnez le processus avec la priorité du taux de réponse la plus élevée pour exécuter
tranche de temps Algorithme de planification à tour de rôle ; Le temps pendant lequel chaque processus peut s'exécuter est le même, et les processus s'exécutent à tour de rôle en fonction de la tranche de temps
Algorithme de planification de priorité la plus élevée ; avec la priorité la plus élevée
Algorithme de planification de file d'attente de commentaires à plusieurs niveaux Configurez une file d'attente à plusieurs niveaux, avec la priorité de file d'attente de haut en bas et la tranche de temps de petite à grande
4. Qu'est-ce qu'un processus orphelin
(1) Le processus parent se termine avant le processus enfant. À ce stade, le processus enfant devient un processus orphelin.
(2) Réglementation du système Linux : tous les processus orphelins deviennent des processus enfants d'un processus spécial (processus 1, qui est le processus d'initialisation).
5. Quels sont les mécanismes de synchronisation multi-thread ?
6. Brève description de la partition de mémoire du processus
Espace noyau : stocke le code et les données du système d'exploitation
Zone de pile
: stocke les variables locales, les valeurs des paramètres de fonction, etc., cette zone est contrôlée par le système d'exploitation
Zone de mappage de bibliothèque dynamique/mémoire partagée : la bibliothèque dynamique dont dépend le programme exécutable est chargé dans cette zone ; la mémoire partagée mappée par mmap est également dans cette zone
Zone de tas
: Fourni Une zone de mémoire pour que les programmeurs puissent opérer par eux-mêmes avec Malloc/free et new/delete sur cette mémoire.
zone de données lisible et inscriptible
:
(1).bss section : Stocke les variables globales non initialisées et les variables statiques initialisées à 0. .bss段:存储未初始化的、初始化为0的全局变量和静态变量。
(2).data
(2).data : Stockez les variables globales, les variables statiques et les constantes const qui ne sont pas initialisées à 0.
Zone de données en lecture seule : stockez le code binaire, certaines variables const modifiées, les constantes de chaîne, etc.
7.
Les programmeurs utilisent malloc dans le programme pour demander dynamiquement de la mémoire à partir de l'espace tas de la mémoire virtuelle et utilisent free pour libérer la mémoire. Si le programme comporte un grand nombre d'opérations malloc/free et s'exécute pendant une longue période, l'espace de tas de la mémoire virtuelle peut facilement produire une fragmentation de la mémoire
Qu'est-ce que la fragmentation de la mémoire fait référence à l'espace libre discret restant ? dans la mémoire de l'espace tas, mais ne peut pas satisfaire la demande d'allocation de malloc. La fragmentation de la mémoire est divisée en fragmentation externe et fragmentation interne. La figure suivante décrit l'allocation de mémoire d'une partie de l'espace du tas. L'espace du tas est divisé en plusieurs blocs d'allocation en unités de 4 octets. Les blocs blancs représentent la mémoire libre et les blocs bleu clair et bleu foncé représentent la mémoire allouée. Supposons que la plus petite unité d'allocation de mémoire est un bloc d'allocation (4 octets).
Fragmentation externe : Puisqu'il n'y a pas de mémoire libre (bloc blanc) de 4 tailles de blocs d'allocation consécutives dans l'espace du tas, il existe de nombreuses mémoires libres discrètes inférieures à 4 tailles de blocs d'allocation. Ainsi, lorsque malloc(16) s'applique à 16 octets, l'allocation échouera. La raison en est qu'il n'y a pas de mémoire libre pour 4 blocs d'allocation consécutifs, mais il y a de la mémoire libre pour moins de 4 blocs d'allocation. Ces mémoires sont appelées fragments externes.
Fragmentation interne : Puisque la plus petite unité de mémoire allouée est un bloc d'allocation (4 octets), lorsque malloc(5) s'applique pour 5 octets, l'espace du tas se voit allouer deux blocs libres totalisant 8 octets, mais le programme uniquement a besoin de 5 octets, les 3 octets restants (bleu foncé) ne sont pas utilisés, ces 3 octets de mémoire sont appelés fragmentation interne
8. Quelle est la différence entre le tas et la pile ?
Différentes méthodes d'allocation
Stack : automatiquement alloué par le système
Heap : appliqué manuellement par le programmeur
La taille de l'application est différente
Stack : La taille de la mémoire de la zone de pile est fixe, tant que la mémoire demandée est inférieure à la mémoire restante dans la zone de pile, l'allocation peut réussir, sinon la pile débordera.
Tas : la taille de la mémoire de la zone du tas est déterminée par la mémoire virtuelle de l'ordinateur,
9. La différence entre les verrous mutex et les sémaphores
(1) Les sémaphores sont utilisés pour la synchronisation des threads et les verrous mutex sont utilisés pour l'exclusion mutuelle des threads.
(2) Le sémaphore peut être un entier non négatif, qui peut réaliser une synchronisation multithread de plusieurs ressources similaires ; le mutex ne peut être que 0/1, qui ne peut être utilisé que pour un accès mutuellement exclusif à une ressource.
(3) Le sémaphore peut être libéré par un thread et obtenu par un autre thread ; le verrouillage et le déverrouillage du mutex doivent être utilisés respectivement par le même thread, et plusieurs threads doivent faire attention à l'ordre unifié lors de l'utilisation de plusieurs mutex, sinon, cela peut provoquer un blocage.
10. La différence entre la synchronisation et l'asynchrone
Synchronisation : A appelle B et doit attendre que B revienne une fois le traitement terminé avant que A puisse continuer à s'exécuter
Asynchrone : A appelle B, il n'est pas nécessaire d'attendre que B termine le traitement, A peut continuer à s'exécuter, et une fois que B a terminé le traitement, avertir A par rappel, etc. Qu’est-ce qu’une impasse ? Qu’est-ce qui cause l’impasse ?
(1) L'impasse fait référence à une impasse (en attente les uns des autres) causée par plusieurs processus en compétition pour les ressources. Sans force externe, ces processus ne pourront pas avancer.
(2) Raison : ①Ressources système insuffisantes. ② Mauvaise allocation des ressources. ③L'ordre d'avancement du processus est inapproprié.
Quelles sont les quatre conditions nécessaires à une impasse ?
(1)Condition d'exclusion mutuelle : Une ressource ne peut être utilisée que par un seul processus à la fois, et les autres processus ne peuvent qu'attendre.
(2)Conditions de demande et de maintien : Le processus a obtenu au moins une ressource, mais a fait une nouvelle demande de ressource, et la ressource est déjà occupée par d'autres processus. À ce moment, le processus est bloqué, mais le. la ressource obtenue est toujours Attendez.
(3)Condition inprivable : Les ressources obtenues par un processus ne peuvent être privées par d'autres processus et ne peuvent être libérées que par lui-même.
(4)Condition d'attente de boucle : Plusieurs processus forment une relation d'attente de ressources en boucle, de bout en bout.
Remarque : Les quatre conditions ci-dessus sont indispensables.
Comment faire face à une impasse ?
(1) Prévenir les impasses : en fixant certaines restrictions, détruisez les conditions nécessaires à l'impasse.
(2) Évitez les impasses : pendant le processus d'allocation des ressources, utilisez une méthode pour empêcher le système d'entrer dans un état dangereux, évitant ainsi les impasses.
(3) Détecter et supprimer l'impasse : autorisez l'impasse, mais après avoir réussi la détection du système, prenez certaines mesures pour éliminer l'impasse.
Comment éviter les impasses ?
(1)"Conditions de demande et de conservation" brisées :
①Allocation statique, c'est-à-dire que chaque processus s'applique à toutes les ressources dont il a besoin lorsqu'il commence à s'exécuter :
②Allocation dynamique, c'est-à-dire que chaque processus n'occupe pas les ressources du système lorsqu'il demande les ressources dont il a besoin.
(2)Détruire la "condition inaliénable" : Pendant la période de blocage et d'attente d'un processus, les ressources qu'il occupe sont implicitement libérées puis utilisées par d'autres processus, et les ressources bloquées et en attente ne peuvent être redémarrées qu'après avoir obtenu tous les éléments requis. ressources.
(3)Détruisez la « condition d'attente cyclique » : utilisez l'allocation ordonnée des ressources et numérotez toutes les ressources. Les ressources rares utilisent des nombres plus grands. Un processus ne peut demander un nombre plus grand que s'il obtient une ressource avec un nombre plus petit. numéro Ressources numérotées
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!
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn