8
votes

Différence entre l'espace d'adressage du processus parent et son processus enfant sous Linux?

Je suis confus à propos de quelque chose. J'ai lu que lorsqu'un enfant est créé par un processus parent, l'enfant reçoit une copie de l'espace d'adressage de son parent. Qu'est-ce que cela signifie par copie? Si j'utilise le code ci-dessous, il imprime la même valeur pour la variable 'A' qui se trouve sur le tas à la fois à l'enfant et à la mère. Alors qu'est-ce qui se passe ici? XXX


2 commentaires

Notez que, à la fois parent et enfant, vous faites pas Imprimer l'adresse de variable A . Vous imprimez la valeur de la variable A (qui est de type pointeur).


Avez-vous vu une réponse que vous avez aimé?


5 Réponses :


3
votes

une copie signifie exactement que, une copie bit-idée de l'espace d'adresses . À toutes fins utiles, les deux copies sont indiscernables, jusqu'à ce que vous commenciez à écrire en un (les modifications ne sont pas visibles dans l'autre copie).


0 commentaires

2
votes

avec Fourchette () Le processus d'enfant reçoit un nouvel espace d'adressage où tout le contenu de l'espace d'adressage parent est copié (en fait, les noyaux modernes utilisent copie-écriture ).

Cela signifie que si vous modifiez a ou la valeur pointée par elle dans un processus, l'autre processus voit toujours l'ancienne valeur.


0 commentaires

2
votes

Vous obtenez deux tas, et puisque les adresses de mémoire sont traduites dans différentes parties de la mémoire physique, les deux ont la même adresse de mémoire virtuelle.


0 commentaires

27
votes

L'enfant reçoit une copie exacte de l'espace d'adresses des parents, ce qui est susceptible d'être présenté dans le même format que l'espace d'adressage parent. Je dois souligner que chacun aura son propre espace d'adressage virtuel pour sa mémoire, de sorte que chacun pouvait avoir les mêmes données à la même adresse, mais dans différents espaces d'adresses. En outre, Linux utilise la copie sur l'écriture lors de la création de processus d'enfants. Cela signifie que le parent et l'enfant partageront l'espace d'adressage parent jusqu'à ce que l'un d'entre eux soit une écriture, à laquelle la mémoire sera copiée physiquement à l'enfant. Cela élimine des copies inutiles lorsque EXEC Un nouveau processus. Puisque vous allez simplement écraser la mémoire avec un nouvel exécutable, pourquoi la supporter la copie?


0 commentaires

4
votes

Oui, vous obtiendrez la même adresse virtuelle, mais rappelez-vous que chacun est de son propre processus d'espaces d'adresse virtuelle. Jusqu'à ce qu'il y ait une opération de copie sur écriture effectuée, tout est partagé. Ainsi, lorsque vous essayez de travailler Strcpy ou de toute opération d'écriture, la copie-écriture a lieu, ce qui signifie que l'adresse virtuelle de processus d'enfant du pointeur A sera mise à jour pour le processus d'enfant, mais pas pour le processus parent.


0 commentaires