Forskellen mellem gaffel () og vfork ()

Forfatter: Laura McKinney
Oprettelsesdato: 2 April 2021
Opdateringsdato: 10 Kan 2024
Anonim
Forskellen mellem gaffel () og vfork () - Teknologi
Forskellen mellem gaffel () og vfork () - Teknologi

Indhold


Begge gaffel() og vfork () er systemopkald der skaber en ny proces, der er identisk med den proces, der påkaldte gaffel () eller vfork (). Ved brug af gaffel() muliggør udførelse af forældre- og barneproces samtidigt. Den anden måde, vfork () suspenderer udførelsen af ​​forældreprocessen, indtil børneprocessen afslutter sin udførelse. Den primære forskel mellem gaffel () og vfork () systemopkald er, at den underordnede proces, der oprettes ved hjælp af gaffel, har separat adresserum som den forældreproces. På den anden side skal børneprocessen, der er oprettet ved hjælp af vfork, dele adresselokalet for sin overordnede proces.

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

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. Konklusion

Sammenligningstabel

Grundlag for sammenligninggaffel()vfork ()
GrundlæggendeBørneproces og forældreproces har separate adresserum.Børneproces og forældreproces deler det samme adresserum.
UdførelseForældre- og børneprocessen udføres samtidig.Forældreprocessen forbliver indstillet, indtil børneprocessen er færdig med udførelsen.
ModifikationHvis barneprocessen ændrer en side i adresserummet, er det usynlig for overordnede processen, da adresserummet er adskilt.Hvis underordnet proces ændrer en side i adressepladsen, er den synlig for overordnede processer, da de deler det samme adresserum.
Kopier-on-writefork () bruger copy-on-write som et alternativ, hvor forælderen og barnet deler samme sider, indtil en af ​​dem ændrer den delte side.vfork () bruger ikke copy-on-write.


Definition af gaffel ()

Det gaffel() er et systemopkald til at oprette en ny proces. Den nye proces oprettet af gaffel () -opkaldet er underordnede processer, af den proces, der påkaldte gaffel () -systemopkaldet. Koden for underordnet proces er identisk med koden for dets overordnede proces. Efter oprettelsen af ​​en børneproces starter begge processer, dvs. forældre og børneprocessen deres eksekvering fra den næste erklæring efter gaffel (), og begge processer udføres samtidigt.

Forældreprocessen og børneprocessen har det separat adresserum. Når nogen af ​​processerne ændrer en sætning eller variabel i koden. Det vil ikke blive reflekteret i andre proceskoder. Lad os antage, at hvis børneprocessen ændrer koden, ville det ikke påvirke overordnede processen.

Nogle børn processer efter deres oprettelse straks ringer exec (). Exec () -systemopkaldet erstatter processen med det program, der er specificeret i dets parameter. Så er det separate adresserum til børneprocessen ikke nyttigt. Det ene alternativ her er kopi-til-skrivning.


Det kopi-on-write lad forælderen og barnet behandle for at dele det samme adresserum. Hvis nogen af ​​processerne skriver på siderne i adresserummet, oprettes en kopi af adresserummet for at lade begge processer arbejde uafhængigt.

Definition af vfork ()

Den ændrede version af gaffel () er vfork (). Det vfork () systemopkald bruges også til at oprette en ny proces. Ligesom gaffelen () er også den nye proces, der er oprettet, børneprocessen, af den proces, der påkaldte vfork (). Underproceskoden er også identisk med den overordnede proceskode. Her behandler barnet suspenderer henrettelsen af overordnet proces, indtil den afslutter udførelsen, da begge processer deler det samme adresserum, der skal bruges.

Idet børn og forældre processen deler samme adresserum. Hvis en af ​​processerne ændrer koden, er den synlig for den anden proces, der deler de samme sider. Lad os antage, at hvis overordnede processer ændrer koden; det vil afspejles i koden for børneprocessen.

Da vfork () ikke skaber separate adresserum til børn og forældre processer. Derfor skal det være implementeret hvor barneprocessen ringer exec () umiddelbart efter oprettelsen. Så der vil ikke være spild af adresserummet, og det er det effektiv måde at oprette en proces på. vfork bruger ikke kopi-on-write.

  1. Den primære forskel mellem gaffel og vfork er, at børneprocessen oprettet af gaffel har en separat hukommelsesplads fra forældreprocessen. Imidlertid er barneprocessen oprettet af vfork systemopkald deler samme adresserum af dets overordnede proces.
  2. Børneprocessen oprettet med gaffel udføres samtidigt med overordnet proces. På den anden side er børneprocessen oprettet ved hjælp af vfork suspendere udførelsen af ​​overordnet proces indtil dens udførelse er afsluttet.
  3. Da hukommelsesområdet for forældre- og barneprocessen er separat ændring udført af nogen af ​​processerne, påvirker det ikke andres sider. Da forældre- og barneprocessen imidlertid deler den samme hukommelsesadresseændring, der udføres af enhver proces, afspejles i adresseområdet.
  4. Systemopkaldsgafflen () bruger kopi-on-write som et alternativ, der lader børn og forældre behandle det samme adresserum, indtil en af ​​dem ændrer siderne. På den anden side bruger vfork ikke copy-on-write.

Konklusion:

Vfork () -systemopkaldet skal implementeres, når underordnet behandler eksekvering af opkald () umiddelbart efter oprettelsen ved hjælp af gaffel (). Da separat adresserum til børn og forældre ikke vil være til nytte her.