Verschil tussen fork () en vfork ()

Schrijver: Laura McKinney
Datum Van Creatie: 2 April 2021
Updatedatum: 10 Kunnen 2024
Anonim
Verschil tussen fork () en vfork () - Technologie
Verschil tussen fork () en vfork () - Technologie

Inhoud


Beide vork() en vfork () zijn de systeemoproepen waarmee een nieuw proces wordt gemaakt dat identiek is aan het proces dat vork () of vfork () heeft aangeroepen. Gebruik makend van vork() maakt de uitvoering van ouder- en kindproces tegelijkertijd mogelijk. De andere weg, vfork () schort de uitvoering van het bovenliggende proces op totdat het onderliggende proces de uitvoering ervan heeft voltooid. Het primaire verschil tussen de systeemaanroep fork () en vfork () is dat het onderliggende proces dat is gemaakt met behulp van vork, aparte adresruimte heeft als die van het bovenliggende proces. Aan de andere kant moet het onderliggende proces dat met vfork is gemaakt, de adresruimte van het bovenliggende proces delen.

Laten we enkele verschillen vinden tussen fork () en vfork () met behulp van de onderstaande vergelijkingstabel.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingvork()vfork ()
basis-Onderliggend proces en bovenliggend proces heeft afzonderlijke adresruimten.Onderliggend proces en bovenliggend proces delen dezelfde adresruimte.
UitvoeringOuder- en kindproces worden gelijktijdig uitgevoerd.Ouderproces blijft opgeschort totdat het onderliggende proces de uitvoering ervan heeft voltooid.
WijzigingAls het onderliggende proces een pagina in de adresruimte wijzigt, is deze onzichtbaar voor het bovenliggende proces omdat de adresruimte gescheiden is.Als het onderliggende proces een pagina in de adresruimte wijzigt, is deze zichtbaar voor het bovenliggende proces omdat deze dezelfde adresruimte delen.
Copy-on-writefork () gebruikt copy-on-write als een alternatief waarbij de ouder en het kind dezelfde pagina's delen totdat een van hen de gedeelde pagina wijzigt.vfork () gebruikt geen copy-on-write.


Definitie van vork ()

De vork() is een systeemoproep die wordt gebruikt om een nieuw proces. Het nieuwe proces dat is gemaakt door de aanroep fork () is het onderliggende proces van het proces dat de systeemaanroep fork () heeft aangeroepen. De code van het onderliggende proces is identiek aan de code van het bovenliggende proces. Na het maken van het onderliggende proces, starten beide processen, d.w.z. bovenliggend en onderliggend proces, vanaf de volgende instructie na fork () en worden beide processen uitgevoerd gelijktijdig.

Het ouderproces en het onderliggende proces hebben dat wel aparte adresruimte. Vandaar dat wanneer een van de processen een instructie of variabele in de code wijzigt. Het zou niet worden weerspiegeld in andere procescodes. Stel dat als het onderliggende proces de code wijzigt, dit geen invloed heeft op het bovenliggende proces.

Sommige onderliggende proces na hun creatie roept onmiddellijk exec (). De exec () systeemaanroep vervangt het proces met het programma gespecificeerd in zijn parameter. Dan heeft de afzonderlijke adresruimte van het onderliggende proces geen zin. Het enige alternatief hier is copy-on-write.


De copy-on-write laat de ouder en het kind verwerken om dezelfde adresruimte te delen. Als een van de processen op de pagina's in de adresruimte schrijft, wordt de kopie van de adresruimte gemaakt om beide processen onafhankelijk te laten werken.

Definitie van vfork ()

De gewijzigde versie van fork () is vfork (). De vfork () systeemoproep wordt ook gebruikt om een ​​nieuw proces te maken. Net als bij de fork (), is ook hier het nieuwe proces het onderliggende proces, van het proces dat vfork () heeft aangeroepen. De onderliggende procescode is ook identiek aan de bovenliggende procescode. Hier, het onderliggende proces schort de uitvoering op van het bovenliggende proces totdat het zijn uitvoering heeft voltooid, aangezien beide processen dezelfde adresruimte delen om te gebruiken.

Naarmate het kind- en ouderproces het dezelfde adresruimte. Als een van de processen de code wijzigt, is deze zichtbaar voor het andere proces dat dezelfde pagina's deelt. Laten we veronderstellen dat het ouderproces de code verandert; het zal weerspiegeld worden in de code van het kindproces.

Omdat het gebruik van vfork () geen afzonderlijke adresruimten creëert voor onderliggende en bovenliggende processen. Daarom moet het zijn geïmplementeerd waar het onderliggende proces roept exec () onmiddellijk na zijn oprichting. Er is dus geen verspilling van adresruimte en dat is het doeltreffend manier om een ​​proces te creëren. vfork maakt geen gebruik van copy-on-write.

  1. Het primaire verschil tussen vork en vfork is dat het onderliggende proces is gemaakt door de vork heeft een aparte geheugenruimte van het ouderproces. Het onderliggende proces is echter gemaakt door de vfork systeemoproep deelt de dezelfde adresruimte van het bovenliggende proces.
  2. Het onderliggende proces gemaakt met behulp van vork gelijktijdig uitvoeren met het ouderproces. Aan de andere kant, kind proces gemaakt met behulp van vfork opschorten de uitvoering van het bovenliggende proces totdat de uitvoering is voltooid.
  3. Aangezien de geheugenruimte van het bovenliggende en onderliggende proces een afzonderlijke aanpassing is die door een van de processen wordt uitgevoerd, heeft dit geen invloed op de pagina's van andere. Omdat het ouder- en kindproces dezelfde geheugenadresmodificatie deelt die door een willekeurig proces wordt doorgevoerd, wordt dit in de adresruimte weerspiegeld.
  4. Het systeem roept vork () aan copy-on-write als alternatief, waardoor het onderliggende en bovenliggende proces dezelfde adresruimte kunnen delen totdat een van hen de pagina's wijzigt. Aan de andere kant gebruikt de vfork geen copy-on-write.

Gevolgtrekking:

De systeemaanroep vfork () moet worden geïmplementeerd wanneer child de opdracht exec () onmiddellijk verwerkt nadat deze is gemaakt met behulp van fork (). Als afzonderlijke adresruimte voor kind- en ouderproces zal hier geen zin hebben.