Différence entre fork () et vfork ()

Auteur: Laura McKinney
Date De Création: 2 Avril 2021
Date De Mise À Jour: 9 Peut 2024
Anonim
Différence entre fork () et vfork () - La Technologie
Différence entre fork () et vfork () - La Technologie

Contenu


Tous les deux fourchette() et vfork () sont les appels système qui crée un nouveau processus identique au processus qui a appelé fork () ou vfork (). En utilisant fourchette() permet l'exécution simultanée des processus parent et enfant. L'autre côté, vfork () suspend l'exécution du processus parent jusqu'à ce que le processus enfant termine son exécution. La principale différence 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.


  1. Tableau de comparaison
  2. Définition
  3. Différences Clés
  4. Conclusion

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 adresse, le processus parent le voit car il partage le même espace adresse.
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 ()

le fourchette() 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 parent et enfant commencent 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 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, il 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 avec 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.

le copie sur écriture laisser les processus parent et enfant 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 (). le vfork () L'appel système 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 fils suspend l'exécution processus parent jusqu’à ce qu’il termine son exécution, car le processus partage le même espace adresse à utiliser.

En tant que processus enfant et parent, le processus 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 adresse séparés pour les processus enfant et parent. Par conséquent, il doit être mis en œuvre où le processus fils appelle exec () immédiatement après sa création. Donc, il n'y aura pas de gaspillage d'espace d'adressage, et c'est la efficace façon de créer un processus. vfork n'utilise pas copie sur écriture.

  1. La principale différence entre fork et vfork est que le processus enfant créé par le fourchette a un espace mémoire séparé du processus parent. Cependant, le processus enfant créé par le vfork appel système partage le même espace d'adressage de son processus parent.
  2. Le processus enfant créé à l'aide de fork exécuter simultanément avec le processus parent. D'autre part, le processus enfant créé à l'aide de vfork suspendre l'exécution du processus parent jusqu'à ce que son exécution soit terminée.
  3. Étant donné que l’espace mémoire des processus parent et enfant est une modification distincte effectuée par l’un des processus, elle 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 d'adressage.
  4. L'appel système fork () utilise copie sur écriture alternativement, les processus enfant et parent peuvent 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.