Skillnaden mellan gaffel () och vfork ()

Författare: Laura McKinney
Skapelsedatum: 2 April 2021
Uppdatera Datum: 10 Maj 2024
Anonim
Skillnaden mellan gaffel () och vfork () - Teknologi
Skillnaden mellan gaffel () och vfork () - Teknologi

Innehåll


Både gaffel() och vfork () är systemsamtal som skapar en ny process som är identisk med processen som åberopade gaffel () eller vfork (). Använder sig av gaffel() möjliggör genomförandet av förälder- och barnprocessen samtidigt. Den andra vägen, vfork () avbryter verkställandet av föräldraprocessen tills barnprocessen är klar. Den primära skillnaden mellan systemet för gaffel () och vfork () är att barnprocessen som skapas med gaffel har ett separat adressutrymme som för överordnadsprocessen. Å andra sidan måste barnprocessen som skapats med vfork dela adressutrymmet för sin överordnade process.

Låt oss hitta några skillnader mellan gaffel () och vfork () med hjälp av jämförelsediagram som visas nedan.

  1. Jämförelsediagram
  2. Definition
  3. Viktiga skillnader
  4. Slutsats

Jämförelsediagram

Grund för jämförelsegaffel()vfork ()
GrundläggandeBarnprocess och förälderprocess har separata adressutrymmen.Barnprocess och överordnad process delar samma adressutrymme.
AvrättningFörälder- och barnprocessen utförs samtidigt.Föräldraprocessen förblir avbruten tills barnprocessen har slutfört genomförandet.
ModifieringOm barnprocessen ändrar någon sida i adressutrymmet är det osynligt för överordnadsprocessen eftersom adressutrymmet är separat.Om barnprocessen ändrar någon sida i adressutrymmet är det synligt för överordnadsprocessen eftersom de delar samma adressutrymme.
Copy-on-writefork () använder copy-on-write som ett alternativ där föräldern och barnet delar samma sidor tills någon av dem ändrar den delade sidan.vfork () använder inte copy-on-write.


Definition av gaffel ()

De gaffel() är ett systemsamtal för att skapa en ny process. Den nya processen som skapas av gaffelsamtalet är barnprocessen, av processen som åberopade gaffel () -systemsamtalet. Koden för barnprocessen är identisk med koden för dess överordnade process. Efter skapandet av barnprocessen startar både processen, dvs förälder- och barnprocessen från deras nästa uttalande efter gaffel () och båda processerna körs samtidigt.

Förälderprocessen och barnprocessen har det separat adressutrymme. Därför när någon av processerna modifierar något påstående eller variabel i koden. Det skulle inte återspeglas i andra processkoder. Låt oss anta att om barnprocessen ändrar koden skulle det inte påverka överordnadsprocessen.

Vissa barn processar efter att de skapats omedelbart exec (). Exec () -systemet ersätter processen med det program som anges i dess parameter. Då är det separata adressutrymmet för barnprocessen ingen nytta. Det enda alternativet här är copy-on-write.


De copy-on-write låt föräldern och barnet bearbeta för att dela samma adressutrymme. Om någon av processerna skriver på sidorna i adressutrymmet skapas en kopia av adressutrymmet så att både processen fungerar oberoende.

Definition av vfork ()

Den modifierade versionen av gaffel () är vfork (). De vfork () systemsamtal används också för att skapa en ny process. I likhet med gaffeln () är också den nya processen som skapats barnprocessen, den process som åberopade vfork (). Barnprocesskoden är också identisk med den överordnade processkoden. Här processar barnet avbryter avrättningen av överordnad process tills den slutför sin körning eftersom båda processerna delar samma adressutrymme att använda.

När 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 återspeglas i koden för barnprocessen.

Eftersom användning av vfork () inte skapar separata adressutrymmen för processer för barn och föräldrar. Därför måste det vara det implementeras där barnprocessen ringer exec () omedelbart efter skapandet. Så det kommer inte att bli ett slöseri med adressutrymmet, och det är det effektiv sätt att skapa en process. vfork använder inte copy-on-write.

  1. Den primära skillnaden mellan gaffel och vfork är att barnprocessen skapas av gaffel har en separat minnesutrymme från föräldraprocessen. Men barnprocessen skapad av vfork systemsamtal delar samma adressutrymme av dess överordnade process.
  2. Barnprocessen skapad med gaffel köra samtidigt med överordnad process. Å andra sidan, barnprocess skapad med vfork suspendera utförandet av överordnad process tills dess körning är klar.
  3. Eftersom minnesutrymmet för förälder- och barnprocessen är en separat ändring som görs av någon av processerna påverkar inte andras sidor. Men eftersom förälder- och barnprocessen delar samma minnesadressändring som gjorts av alla processer återspeglar i adressutrymmet.
  4. Systemets samtalgaffel () använder copy-on-write som ett alternativ, som låter barn och förälder behandla samma adressutrymme tills någon av dem ändrar sidorna. Å andra sidan använder vfork inte copy-on-write.

Slutsats:

Systemsamtalet vfork () måste implementeras när barn behandlar samtal exec () omedelbart efter skapandet med gaffel (). Eftersom separat adressutrymme för barn- och förälderprocessen inte kommer att vara till nytta här.