Anbefalet, 2024

Redaktørens Valg

Forskel mellem gaffel () og vfork ()

Både gaffel () og vfork () er systemopkaldene, der skaber en ny proces, der er identisk med processen, der påkaldte gaffel () eller vfork (). Brug af gaffel () tillader fuldbyrdelse af forældre og børneproces samtidig. På den anden side suspenderer vfork () udførelsen af ​​forældreprocessen, indtil børneprocessen fuldender dens udførelse. Den primære forskel mellem systemforespørgslen for gaffel () og vfork () er, at barneprocessen, der er oprettet ved hjælp af gaffel, har separat adresserum som forælderprocessen. På den anden side skal børneprocessen, der er oprettet ved hjælp af vfork, dele adresserummet i sin overordnede proces.

Lad os finde nogle forskelle mellem gaffel () og vfork () ved hjælp af sammenligningstabellen vist nedenfor.

Sammenligningstabel

Grundlag for sammenligninggaffel()vfork ()
GrundlæggendeBørneproces og forældreproces har separate adresselokaler.Børneproces og forældreproces deler samme adresserum.
UdførelseForældre og børneproces udføres samtidigt.Forældreprocessen forbliver suspenderet, indtil børneprocessen fuldender dens gennemførelse.
ModifikationHvis børneprocessen ændrer enhver side i adressepladsen, er den usynlig for overordnet proces, da adressepladsen er adskilt.Hvis børneprocessen ændrer enhver side i adressepladsen, er den synlig for overordnet proces, da de deler det samme adresserum.
Copy-on-writegaffel () bruger kopi-på-skriv som et alternativ, hvor forælder og barn deler samme sider, indtil en af ​​dem ændrer den delte side.vfork () bruger ikke copy-on-write.

Definition af gaffel ()

Gaffeln () er et systemanrop til at oprette en ny proces . Den nye proces, der oprettes af gaffel () -opkaldet, er børneprocessen, af processen, der påkalder systemets fork () systemopkald. Kode for børneproces er identisk med koden for dens overordnede proces. Efter oprettelsen af ​​børneprocessen starter begge processer, dvs. forældre- og børneprocessen, deres udførelse fra den næste sætning efter gaffel (), og begge processer udføres samtidigt .

Forældreprocessen og børneprocessen har separat adresserum . Derfor, når en af ​​processerne ændrer en erklæring eller variabel i koden. Det ville ikke blive afspejlet i andre proceskoder. Lad os antage, at hvis børneprocessen ændrer koden, ville det ikke påvirke overordnet proces.

Nogle børneprocesser efter deres oprettelse kalder straks exec () . Exec () systemopkald erstatter processen med det program, der er angivet i dets parameter. Derefter er det separate adresselokal for børneprocessen ikke til nytte. Det ene alternativ her er copy-on-write.

Kopi-på-skriv giver forældre- og børneprocessen mulighed for at dele samme adresserum. Hvis nogen af ​​processerne skriver på siderne i adresserummet, oprettes kopien af ​​adresserummet for at lade begge processerne arbejde uafhængigt.

Definition af vfork ()

Den modificerede version af gaffel () er vfork (). Systemforespørgslen vfork () bruges også til at oprette en ny proces. På samme måde som fork (), her er også den nye proces, der er oprettet, barnprocessen, af processen, der påberåber vfork (). Børneproceskoden er også identisk med den overordnede proceskode. Her suspenderer barneprocessen udførelsen af forældreprocessen, indtil den fuldfører dens udførelse, da begge processerne deler det samme adresserum, der skal bruges.

Da barnet og forældreprocessen deler det samme adresserum . Hvis nogen af ​​processerne ændrer koden, er den synlig for den anden proces, der deler de samme sider. Lad os antage, om forældelsesprocessen ændrer koden; det vil afspejle i kodeksen for børneprocessen.

Når du bruger vfork (), oprettes der ikke separate adresselokaler til børn og forældreprocesser. Derfor skal det implementeres, hvor barnet processen kalder exec () umiddelbart efter oprettelsen. Så der bliver ikke spild af adresserummet, og det er den effektive måde at skabe en proces på. vfork bruger ikke copy-on-write .

Nøgleforskelle mellem fork () og vfork ()

  1. Den primære forskel mellem gaffel og vfork er, at barneprocessen skabt af gaffelen har et separat hukommelsesrum fra overordnet proces. Barneprocessen, der er oprettet af vfork- systemopkaldet, deler dog det samme adresseområde i sin overordnede proces.
  2. Barneprocessen, der er oprettet ved hjælp af gaffel, udføres samtidig med forældelsesprocessen. På den anden side suspenderer børneprocessen, der er oprettet ved hjælp af vfork, udførelsen af ​​overordnet proces, indtil udførelsen er fuldført.
  3. Da hukommelsesrummet for forældre- og børneprocessen er adskilt modifikation udført af en af ​​processerne, påvirker ikke andres sider. Men som forældrenes og børneprocessens andel afspejler den samme hukommelsesadressemodifikation, som er udført af en hvilken som helst proces, i adresselokalet.
  4. Systemkallegafflen () bruger et alternativ som kopi-på-skriv, hvilket gør det muligt for børn og forældreprocesser at dele det samme adresserum, indtil en af ​​dem ændrer siderne. På den anden side bruger vfork ikke kopi-på-skriv.

Konklusion:

Systemopkaldet vfork () skal implementeres, når børneprocesopkald exec () umiddelbart efter oprettelsen ved brug af gaffel (). Da separat adresserum til børn og forældreprocesser ikke er til nytte her.

Top