Anbefalt, 2024

Redaksjonens

Forskjellen mellom fork () og vfork ()

Både gaffel () og vfork () er systemanropene som lager en ny prosess som er identisk med prosessen som påkrevde gaffel () eller vfork (). Ved bruk av gaffel () kan utførelsen av foreldre og barn prosess samtidig. På den annen side, suspenderer vfork () utførelsen av foreldreprosessen til barneprosessen fullfører utførelsen. Den primære forskjellen mellom systemkoblingen for gaffel () og vfork () er at barneprosessen opprettet ved bruk av gaffel har separat adresserom som for foreldreprosessen. På den annen side må barnprosessen opprettet ved hjelp av vfork, dele adresseplassen til sin overordnede prosess.

La oss finne noen forskjeller mellom gaffel () og vfork () ved hjelp av sammenligningsdiagrammet vist nedenfor.

Sammenligningstabel

Grunnlag for sammenligninggaffel()vfork ()
grunn~~POS=TRUNCBarnprosessen og foreldreprosessen har separate adresseplasser.Barnprosess og foreldreprosess deler samme adresserom.
HenrettelseForeldre- og barnprosessen utføres samtidig.Foreldreprosessen forblir suspendert til barneprosessen fullfører utførelsen.
modifiseringHvis barnprosessen endrer en hvilken som helst side i adresseplassen, er den usynlig for foreldreprosessen, da adresseplassen er separat.Hvis barnprosessen endrer en hvilken som helst side i adresseplassen, er den synlig for foreldreprosessen, da de deler samme adresseplass.
Kopi-on-writegaffel () bruker kopi-på-skriv som et alternativ der foreldre og barn deler samme sider til noen av dem endrer den delte siden.vfork () bruker ikke copy-on-write.

Definisjon av gaffel ()

Gaffelen () er en systemanrops bruk for å opprette en ny prosess . Den nye prosessen som er opprettet av fork () -samtalen, er barneprosessen, av prosessen som påkrevde systemkoblingen for gaffel (). Kode for barnprosessen er identisk med koden for sin overordnede prosess. Etter opprettelsen av barneprosessen starter begge prosessene, dvs. foreldre- og barnprosessen, utførelsen fra neste setning etter gaffel () og begge prosessene blir utført samtidig .

Foreldreprosessen og barnprosessen har separat adresseplass . Derfor, når noen av prosessene endrer noen setning eller variabel i koden. Det ville ikke gjenspeiles i andre prosesskoder. La oss anta at barnprosessen endrer koden det ikke vil påvirke foreldreprosessen.

Noen barneprosesser etter opprettelsen kalles umiddelbart exec () . Exec () systemanrop erstatter prosessen med programmet spesifisert i parameteren. Deretter er den separate adresseplassen til barneprosessen ubrukelig. Det ene alternativet her er kopi-på-skriv.

Kopi-på-skriveren lar foreldre- og barnprosessen dele samme adresserom. Hvis noen av prosessene skriver på sidene i adresserommet, blir kopien av adresserommet opprettet for å la begge prosessene fungere uavhengig.

Definisjon av vfork ()

Den modifiserte versjonen av gaffel () er vfork (). Systemet for vfork () er også brukt til å opprette en ny prosess. I likhet med gaffelen (), her er også den nye prosessen opprettet, barnprosessen, av prosessen som påkalte vfork (). Barnprosesskoden er også identisk med foreldreprosesskoden. Her suspenderer barneprosessen kjøringen av foreldreprosessen til den fullfører utførelsen, da begge prosessene deler samme adresserom som skal brukes.

Som barn og foreldreprosessen deler samme adresserom . Hvis noen av prosessene endrer koden, er den synlig for den andre prosessen som deler de samme sidene. La oss anta at foreldreprosessen endrer koden; det vil reflektere i koden for barneprosessen.

Når du bruker vfork (), opprettes ikke separate adresserom for barn og foreldre prosesser. Derfor må det implementeres der barnet prosessen ringer exec () umiddelbart etter opprettelsen. Så det vil ikke være noe sløsing med adresserom, og det er den effektive måten å skape en prosess på. vfork bruker ikke copy-on-write .

Nøkkelforskjeller mellom fork () og vfork ()

  1. Den primære forskjellen mellom gaffel og vfork er at barnprosessen opprettet av gaffelen har et separat minne mellom foreldreprosessen. Barneprosessen opprettet av vfork- systemanropet deler imidlertid samme adresseplass i sin overordnede prosess.
  2. Barnprosessen som er opprettet ved hjelp av gaffel, utføres samtidig med foreldreprosessen. På den annen side, barn prosess opprettet ved hjelp av vfork suspendere utførelsen av foreldre prosessen til utførelsen er fullført.
  3. Ettersom minneplassen for foreldre- og barnprosessen er separat modifisering gjort av noen av prosessene, påvirker ikke andres sider. Imidlertid, som foreldre- og barnprosessandelene, gjenspeiler den samme minnesadressemodifikasjonen som er gjort av en hvilken som helst prosess i adresseplassen.
  4. Systemkallgaffelen () bruker kopi-på-skriv som et alternativ, som lar barn og foreldreprosessen dele samme adresserom til noen av dem endrer sidene. På den annen side bruker vfork ikke kopi-på-skriv.

Konklusjon:

Systemkallet vfork () må implementeres når barneprosessanrop exec () umiddelbart etter opprettelsen ved bruk av gaffel (). Som separat adresserom for barn og foreldreprosessen vil ikke være til nytte her.

Top