Låt oss hitta några skillnader mellan gaffel () och vfork () med hjälp av jämförelsetabellen som visas nedan.
Jämförelsediagram
Grunder för jämförelse | gaffel() | vfork () |
---|---|---|
Grundläggande | Barnprocessen och föräldraprocessen har separata adressutrymmen. | Barnprocess och förälderprocess har samma adressutrymme. |
Avrättning | Föräldra- och barnprocessen utförs samtidigt. | Föräldraprocessen förblir avstängd tills barnprocessen fullbordar dess genomförande. |
Modifiering | Om barnprocessen ändrar någon sida i adressutrymmet är den osynlig för moderprocessen eftersom adressutrymmet är separat. | Om barnprocessen ändrar någon sida i adressutrymmet, är den synlig för moderprocessen eftersom de delar samma adressutrymme. |
Copy-on-write | gaffel () använder kopia-på-skriv som ett alternativ där förälder och barn delar samma sidor tills någon av dem ändrar den delade sidan. | vfork () använder inte copy-on-write. |
Definition av gaffel ()
Gaffeln () är ett systemanrop för att skapa en ny process . Den nya processen som skapas av fork () -samtalet är barnprocessen, av processen som påkallade systemets samtal (gaffel). Koden för barnprocessen är identisk med koden för dess moderprocess. Efter skapandet av barnprocessen börjar båda processerna, dvs föräldra- och barnprocessen, deras körning från nästa uttalande efter gaffel () och båda processerna körs samtidigt .
Föräldraprocessen och barnprocessen har separat adressutrymme . Därför när någon av processerna ändrar något uttalande eller en variabel i koden. Det skulle inte återspeglas i andra processkoder. Låt oss anta om barnprocessen ändrar koden, det skulle inte påverka förälderprocessen.
Vissa barnprocesser efter att de skapats ringde genast exec () . Exec () systemsamtal ersätter processen med det program som anges i dess parameter. Då är det separata adressrummet för barnprocessen inte till nytta. Det här alternativet är kopia-på-skriv.
Kopia-på-skriv låter föräldra- och barnprocessen att dela samma adressutrymme. Om någon av processerna skriver på sidorna i adressutrymme skapas kopia av adressutrymme för att låta båda processerna arbeta självständigt.
Definition av vfork ()
Den modifierade versionen av gaffel () är vfork (). Systemet för vfork () kallas också för att skapa en ny process. Liksom gaffeln (), här är också den nya processen som skapats, barnprocessen, av processen som påkallade vfork (). Barnprocesskoden är också identisk med parent processkoden. Här avbryter barnprocessen genomförandet av moderprocessen tills det fullbordar dess genomförande, eftersom båda processerna delar samma adressutrymme som ska användas.
Eftersom barn- och förälderprocessen delar samma adressutrymme . Om någon av processerna ändrar koden är den synlig för den andra processen som delar samma sidor. Låt oss anta om föräldraprocessen ändrar koden; det kommer att reflektera i koden för barnprocessen.
Eftersom du använder vfork () skapas inte separata adressutrymmen för barn och förälderprocesser. Därför måste det genomföras där barnprocessen kallar exec () omedelbart efter skapandet. Så det kommer inte bli något slöseri med adressutrymme, och det är det effektiva sättet att skapa en process. vfork använder inte copy-on-write .
Viktiga skillnader mellan gaffel () och vfork ()
- Den primära skillnaden mellan gaffel och vfork är att barnprocessen skapad av gaffeln har ett separat minnesutrymme från moderprocessen. Barnprocessen som skapas av vfork- systemanropet delar dock samma adressutrymme för moderprocessen.
- Barnprocessen skapad med gaffel körs samtidigt med moderprocessen. Å andra sidan upphör barnprocessen som skapas med vfork att avbryta utförandet av föräldraprocessen tills dess genomförande är avslutat.
- Eftersom minnesutrymmet för föräldra- och barnprocessen är separat modifiering gjord av någon av processerna påverkar inte andras sidor. Men eftersom föräldra- och barnprocessandelar återspeglar samma minnesadressändring som gjorts av någon process i adressutrymmet.
- Systemkallgaffeln () använder kopia-på-skriv som ett alternativ, vilket låter barn- och föräldraprocessen dela samma adressutrymme tills någon av dem ändrar sidorna. Å andra sidan använder vfork inte kopia på skriv.
Slutsats:
Systemet för vfork () måste genomföras när barnprocesssamtal exec () direkt efter skapandet med gaffel (). Eftersom separat adressutrymme för barn och föräldraprocess inte kommer att användas här.