Recommandé, 2024

Choix De L'Éditeur

Différence entre fork () et vfork ()

Fork () et vfork () sont les appels système qui créent un nouveau processus identique au processus qui a appelé fork () ou vfork (). L'utilisation de fork () permet l'exécution simultanée des processus parent et enfant. Dans le cas contraire, vfork () suspend l'exécution du processus parent jusqu'à ce que le processus enfant termine son exécution. La différence principale entre l'appel système fork () et vfork () est que le processus enfant créé à l'aide de fork dispose d'un espace d'adressage distinct de celui du processus parent. D'autre part, le processus enfant créé à l'aide de vfork doit partager l'espace d'adressage de son processus parent.

Trouvons quelques différences entre fork () et vfork () à l'aide du tableau de comparaison présenté ci-dessous.

Tableau de comparaison

Base de comparaisonfourchette()vfork ()
De baseLe processus enfant et le processus parent ont des espaces d'adressage séparés.Le processus enfant et le processus parent partagent le même espace d'adressage.
ExécutionLes processus parent et enfant s'exécutent simultanément.Le processus parent reste suspendu jusqu'à ce que le processus enfant ait terminé son exécution.
ModificationSi le processus enfant modifie une page de l'espace adresse, il est invisible pour le processus parent car l'espace adresse est séparé.Si un processus enfant modifie une page de l'espace d'adressage, le processus parent le voit car il partage le même espace d'adressage.
Copie sur écriturefork () utilise la copie sur écriture comme alternative lorsque le parent et l'enfant partagent les mêmes pages jusqu'à ce que l'un d'eux modifie la page partagée.vfork () n'utilise pas de copie sur écriture.

Définition de fork ()

Fork () est un appel système utilisé pour créer un nouveau processus . Le nouveau processus créé par l'appel fork () est le processus enfant du processus qui a appelé l'appel système fork (). Le code du processus enfant est identique au code de son processus parent. Après la création du processus enfant, les processus, c.-à-d. Les processus parent et enfant, démarrent leur exécution à partir de l'instruction suivante après fork () et les deux processus sont exécutés simultanément .

Le processus parent et le processus enfant ont un espace d'adressage séparé . Par conséquent, lorsqu'un processus modifie une instruction ou une variable du code. Cela ne serait pas reflété dans d'autres codes de processus. Supposons que si un processus enfant modifie le code, cela n'affectera pas le processus parent.

Certains processus enfants après leur création appelle immédiatement exec () . L'appel système exec () remplace le processus par le programme spécifié dans son paramètre. Ensuite, l'espace d'adressage séparé du processus enfant est inutile. La seule alternative est la copie sur écriture.

La copie sur écriture permet au processus parent et enfant de partager le même espace d'adressage. Si l'un des processus écrit sur les pages de l'espace adresse, une copie de cet espace est créée pour permettre au processus de fonctionner indépendamment.

Définition de vfork ()

La version modifiée de fork () est vfork (). L'appel système vfork () est également utilisé pour créer un nouveau processus. Semblable à fork (), ici aussi le nouveau processus créé est le processus enfant du processus qui a appelé vfork (). Le code de processus enfant est également identique au code de processus parent. Ici, le processus enfant suspend l'exécution du processus parent jusqu'à la fin de son exécution car le processus partage le même espace d'adressage à utiliser.

En tant que processus enfant et parent partagent le même espace d'adressage . Si l'un des processus modifie le code, il est visible par l'autre processus partageant les mêmes pages. Supposons si le processus parent modifie le code; cela se reflétera dans le code du processus enfant.

L'utilisation de vfork () ne crée pas d'espaces d'adressage séparés pour les processus enfant et parent. Par conséquent, il doit être implémenté lorsque le processus enfant appelle exec () immédiatement après sa création. Ainsi, il n'y aura pas de gaspillage d'espace d'adressage, et c'est le moyen efficace de créer un processus. vfork n'utilise pas de copie sur écriture .

Principales différences entre fork () et vfork ()

  1. La principale différence entre fork et vfork est que le processus enfant créé par le fork dispose d'un espace mémoire séparé du processus parent. Cependant, le processus enfant créé par l' appel système vfork partage le même espace adresse que son processus parent.
  2. Le processus enfant créé à l'aide de fork s'exécute simultanément avec le processus parent. D'autre part, les processus enfants créés à l'aide de vfork suspendent l'exécution du processus parent jusqu'à ce que son exécution soit terminée.
  3. Comme l'espace mémoire des processus parent et enfant est une modification séparée effectuée par l'un des processus, cela n'affecte pas les pages des autres. Cependant, étant donné que les processus parent et enfant partagent la même adresse mémoire, la modification effectuée par n'importe quel processus est reflétée dans l'espace adresse.
  4. L'appel système fork () utilise la copie sur écriture comme alternative, ce qui permet aux processus enfant et parent de partager le même espace d'adressage jusqu'à ce que l'un d'eux modifie les pages. D'autre part, le vfork n'utilise pas de copie sur écriture.

Conclusion:

L'appel système vfork () doit être implémenté lorsque le processus enfant appelle exec () immédiatement après sa création à l'aide de fork (). En tant qu'espace adresse séparé pour les processus enfant et parent, il ne sera d'aucune utilité ici.

Top