Laten we wat verschillen tussen fork () en vfork () vinden met behulp van de onderstaande vergelijkingsgrafiek.
Vergelijkingstabel
Basis voor vergelijking | vork() | vfork () |
---|---|---|
basis- | Het proces Kindproces en bovenliggend proces heeft afzonderlijke adresruimten. | Het proces Kind en het hoofdproces delen dezelfde adresruimte. |
Uitvoering | Ouder- en kindproces worden tegelijkertijd uitgevoerd. | Het ouderproces blijft bestaan totdat het onderliggende proces de uitvoering voltooit. |
Wijziging | Als het onderliggende proces elke pagina in de adresruimte wijzigt, is het onzichtbaar voor het bovenliggende proces omdat de adresruimte gescheiden is. | Als het onderliggende proces elke pagina in de adresruimte wijzigt, is deze zichtbaar voor het bovenliggende proces omdat ze dezelfde adresruimte delen. |
Copy-on-write | fork () 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 fork ()
De fork () is een systeembezoek om een nieuw proces te maken . Het nieuwe proces gemaakt door de fork () -aanroep is het onderliggende proces van het proces dat de systeemaanroep fork () opriep. De code van het kinderproces is identiek aan de code van het bovenliggende proces. Na het maken van een kinderproces starten beide processen, dwz het ouder- en kindproces, hun uitvoering vanaf de volgende instructie na fork () en worden beide processen tegelijkertijd uitgevoerd.
Het bovenliggende proces en het onderliggende proces hebben een afzonderlijke adresruimte . Daarom wijzigt een van de processen elke instructie of variabele in de code. Het zou niet worden weerspiegeld in andere procescodes. Laten we aannemen dat als het onderliggende proces de code wijzigt, dit het ouderproces niet zou beïnvloeden.
Sommige onderliggende processen roepen na hun creatie exec () aan . De exec () systeemaanroep vervangt het proces door het programma dat is opgegeven in de bijbehorende parameter. Dan heeft de aparte adresruimte van het kinderproces geen zin. Het enige alternatief hier is copy-on-write.
Met de copy-on-write kunnen de ouder en het kind dezelfde adresruimte delen. Als een van de processen op de pagina's in de adresruimte schrijft, wordt de kopie van de adresruimte gemaakt om het proces onafhankelijk te laten werken.
Definitie van vfork ()
De gewijzigde versie van fork () is vfork (). De systeemaanroep vfork () wordt ook gebruikt om een nieuw proces te maken. Vergelijkbaar met de fork (), hier is ook het nieuwe proces gecreëerd, het onderliggende proces, van het proces dat vfork () aanroept. De onderliggende procescode is ook identiek aan de bovenliggende procescode. Hier onderbreekt het onderliggende proces de uitvoering van het bovenliggende proces totdat het de uitvoering voltooit, omdat beide processen dezelfde adresruimte delen om te gebruiken.
Omdat het onderliggende proces en het hoofdproces dezelfde adresruimte delen . Als een van de processen de code wijzigt, is deze zichtbaar voor het andere proces dat dezelfde pagina's deelt. Laten we aannemen dat als het bovenliggende proces de code verandert; het zal reflecteren in de code van het kinderproces.
Omdat het gebruik van vfork () geen aparte adresruimten creëert voor onderliggende en onderliggende processen. Daarom moet het worden geïmplementeerd wanneer het onderliggende proces exec () onmiddellijk na het maken ervan aanroept. Er zal dus geen verspilling van adresruimte zijn en het is de efficiënte manier om een proces te creëren. vfork gebruikt geen copy-on-write .
Belangrijkste verschillen tussen fork () en vfork ()
- Het belangrijkste verschil tussen fork en vork is dat het door de vork gecreëerde kindproces een aparte geheugenruimte heeft van het bovenliggende proces. Het onderliggende proces dat door de aanroep van het systeem is gemaakt, deelt echter dezelfde adresruimte van het bovenliggende proces.
- Het onderliggende proces dat is gemaakt met behulp van fork, wordt tegelijk met het bovenliggende proces uitgevoerd. Anderzijds wordt het proces van het kind dat is gemaakt met behulp van VFork de uitvoering van het bovenliggende proces opgeschort totdat de uitvoering is voltooid.
- Aangezien de geheugenruimte van bovenliggend en onderliggend proces een afzonderlijke wijziging is die wordt uitgevoerd door een van de processen, heeft dit geen invloed op de pagina's van anderen. Aangezien het bovenliggende en onderliggende proces dezelfde geheugenadresaanpassing delen die door elk proces wordt uitgevoerd, wordt dit weerspiegeld in de adresruimte.
- De systeemaanroepingsvork () gebruikt copy-on-write als alternatief, waardoor het onderliggende proces en het bovenliggende proces dezelfde adresruimte delen totdat een van deze de pagina's wijzigt. Aan de andere kant gebruikt de vfork geen copy-on-write.
Conclusie:
De systeemaanroep vfork () moet worden geïmplementeerd wanneer child process call exec () direct na het maken ervan gebruikt met fork (). Als aparte adresruimte voor het onderliggende en het ouderproces zal het hier geen zin hebben.