Chaque page allouée au processus (qu'il s'agisse d'une page de mémoire virtuelle contenant la pile ou le tas) est copiée pour que le processus dupliqué puisse y accéder.
En fait, il n'est pas copié dès le début, il est défini sur Copy-on-Write, ce qui signifie qu'une fois que l'un des processus (parent ou enfant) essaie de modifier une page, il est copié afin qu'ils ne se nuisent pas, et ont toujours accès à toutes les données du point de bifurcation().
Par exemple, les pages de code, celles sur lesquelles l'exécutable réel a été mappé en mémoire, sont généralement en lecture seule et sont donc réutilisées parmi tous les processus fourchus - elles ne seront pas copiées à nouveau, car personne n'y écrit, seulement lu, etc. la copie sur écriture ne sera jamais nécessaire.
Plus d'informations sont disponibles ici et ici.
Après un fork, l'enfant est complètement indépendant du parent, mais peut hériter de certaines choses qui sont des copies du parent. Dans le cas du tas, l'enfant aura conceptuellement une copie du tas des parents au moment du fork. Cependant, les modifications apportées à l'en-tête dans l'espace d'adressage de l'enfant ne modifieront que la copie de l'enfant (par exemple, par copie sur écriture).
Quant à la documentation :j'ai remarqué que la documentation indique généralement que tout est copié, sauf pour bla, bla bla.
La réponse courte est "sale en écriture" - la réponse plus longue est .. beaucoup plus longue.
Mais à toutes fins utiles - le modèle de travail qui, au niveau C, est sûr à supposer est que juste après le fork (), les deux processus sont absolument identiques - c'est-à-dire que l'enfant obtient une copie exacte à 100% - (mais pour un tout petit bit autour de la valeur de retour de fork()) - puis commence à diverger lorsque chaque côté modifie sa mémoire, sa pile et ses tas.
Donc, votre conclusion est légèrement erronée - l'enfant commence avec les mêmes données que le parent copiées dans son propre espace - puis les modifie - et les voit comme modifiées - tandis que le parent continue avec sa propre copie.
En réalité, les choses sont un peu plus complexes - car il essaie d'éviter une copie complète en faisant quelque chose de sale; en évitant de copier jusqu'à ce qu'il le doive.
Dw.