Forskjellen mellom gaffel () og vfork ()

Forfatter: Laura McKinney
Opprettelsesdato: 2 April 2021
Oppdater Dato: 6 Kan 2024
Anonim
Forskjellen mellom gaffel () og vfork () - Teknologi
Forskjellen mellom gaffel () og vfork () - Teknologi

Innhold


Både gaffel() og vfork () er systemanrop som oppretter en ny prosess som er identisk med prosessen som påkaller gaffel () eller vfork (). Ved hjelp av gaffel() tillater utførelse av foreldre- og barneprosess samtidig. Den andre veien, vfork () suspenderer utførelsen av foreldreprosessen til barneprosessen fullfører utførelsen. Den primære forskjellen mellom anropet for gaffel () og vfork () er at underordnet prosess opprettet ved hjelp av gaffel har eget adresserom som for foreldreprosessen. På den annen side må barneprosess opprettet ved hjelp av vfork dele adresserommet til foreldreprosessen.

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

  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. Konklusjon

Sammenligningstabell

Grunnlag for sammenligninggaffel()vfork ()
grunn~~POS=TRUNCBarneprosess og foreldreprosess har separate adresserom.Barneprosess og foreldreprosess har samme adresserom.
HenrettelseForeldre- og barneprosess kjøres samtidig.Foreldreprosessen forblir avbrutt til barneprosessen fullfører utførelsen.
modifiseringHvis barneprosessen endrer noen side i adressefeltet, er det usynlig for foreldreprosessen da adresseområdet er atskilt.Hvis barneprosess endrer noen side i adressefeltet, er den synlig for foreldreprosessen da de har samme adresseområde.
Kopier-on-writefork () bruker copy-on-write som et alternativ der foreldre og barn deler de samme sidene til noen av dem endrer den delte siden.vfork () bruker ikke copy-on-write.


Definisjon av gaffel ()

De gaffel() er et systemanropsbruk for å lage en ny prosess. Den nye prosessen som er opprettet av gaffelanropet, er barneprosessen, av prosessen som påkalte gaffel () -systemanropet. Koden for barneprosessen er identisk med koden for den overordnede prosessen. Etter opprettelse av barneprosess, starter begge prosessene, dvs. foreldre- og barneprosessen, utførelsen fra neste setning etter gaffel (), og begge prosessene blir utført samtidig.

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

Noen barn prosesser etter opprettelsen av dem umiddelbart exec (). Exec () -systemanropet erstatter prosessen med programmet spesifisert i parameteren. Da nytter ikke det separate adresserommet til barneprosess. Det ene alternativet her er copy-on-write.


De kopiere-on-write la foreldre og barn behandle for å dele samme adresseområde. Hvis noen av prosessene skriver på sidene i adresseplass, blir kopien av adresseområdet opprettet for å la begge prosessene fungere uavhengig.

Definisjon av vfork ()

Den endrede versjonen av gaffel () er vfork (). De vfork () systemanrop brukes også til å lage en ny prosess. I likhet med gaffelen () er også den nye prosessen som er opprettet barneprosessen, prosessen som påkalte vfork (). Prosesskoden for barn er også identisk med den overordnede prosesskoden. Her prosesserer barnet suspenderer henrettelsen av overordnede prosesser til den fullfører utførelsen da begge prosesser har samme adresserom å bruke.

Når barnet og forelderen prosessen deler samme adresseområde. Hvis noen av prosessene endrer koden, er den synlig for den andre prosessen som deler de samme sidene. La oss anta at hvis overordnede prosesser endrer koden; det vil gjenspeile seg i koden for barneprosessen.

Ettersom bruk av vfork () ikke oppretter separate adresserom for barn og foreldre prosesser. Derfor må det være det implementert der barneprosessen ringer exec () umiddelbart etter opprettelsen. Så det vil ikke være bortkastet adresseplass, og det er det effektiv måte å lage en prosess på. vfork bruker ikke kopiere-on-write.

  1. Den viktigste forskjellen mellom gaffel og vfork er at barneprosessen opprettet av gaffel har en separat minneplass fra foreldreprosessen. Imidlertid er barneprosessen opprettet av vfork system samtale deler samme adresseområde av foreldrenes prosess.
  2. Barneprosessen opprettet med gaffel kjøres samtidig med foreldreprosessen. På den annen side, barneprosess opprettet ved hjelp av vfork henge utførelsen av overordnede prosesser til utførelsen er fullført.
  3. Ettersom minneplassen til foreldre- og barneprosessen er separat modifisering utført av noen av prosessene, påvirker det ikke andres sider. Imidlertid, mens foreldre- og barneprosessen deler den samme minneadresseendringen som er utført av en hvilken som helst prosess gjenspeiler i adressefeltet.
  4. Systemets samtalegaffel () bruker kopiere-on-write som et alternativ, som lar barn og foreldre prosess dele det samme adressefeltet til noen av dem endrer sidene. På den annen side bruker vfork ikke copy-on-write.

Konklusjon:

Vfork () -systemanropet må implementeres når barnet behandler samtale exec () umiddelbart etter opprettelsen ved å bruke gaffel (). Som eget adresserom for barn og foreldre vil ikke være til nytte her.