Diferența dintre furculiță () și vfork ()

Autor: Laura McKinney
Data Creației: 2 Aprilie 2021
Data Actualizării: 9 Mai 2024
Anonim
Diferența dintre furculiță () și vfork () - Tehnologie
Diferența dintre furculiță () și vfork () - Tehnologie

Conţinut


Ambii furculiţă() și vfork () sunt apeluri de sistem care creează un proces nou care este identic cu procesul care a invocat fork () sau vfork (). Utilizarea furculiţă() permite executarea procesului părintelui și al copilului simultan. Cealalta cale, vfork () suspendă executarea procesului părinte până când procesul copilului își termină execuția. Diferența principală între apelul de sistem fork () și vfork () este că procesul copil creat cu furculița are spațiu de adrese separat ca cel al procesului părinte. Pe de altă parte, procesul copil creat cu vfork trebuie să partajeze spațiul de adrese al procesului părinte.

Să găsim unele diferențe între fork () și vfork () cu ajutorul graficului de comparație prezentat mai jos.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațiefurculiţă()vfork ()
De bazăProcesul copilului și procesul părinților au spații de adrese separate.Procesul copilului și procesul părintelui partajează același spațiu de adrese.
ExecuţieProcesul părinților și al copilului se execută simultan.Procesul părinte rămâne suspendat până când procesul copilului își încheie execuția.
ModificareDacă procesul copilului modifică orice pagină din spațiul de adrese, acesta este invizibil pentru procesul părinte, deoarece spațiile de adrese sunt separate.Dacă procesul copilului modifică orice pagină din spațiul de adrese, acesta este vizibil pentru procesul părinte, deoarece acestea au același spațiu de adrese.
Copie pe scrierefork () folosește copy-on-write ca o alternativă în care părintele și copilul împărtășesc aceleași pagini până când oricare dintre ei modifică pagina partajată.vfork () nu utilizează copy-on-write.


Definiția fork ()

furculiţă() este un apel de sistem folosit pentru a crea un proces nou. Noul proces creat de apelul fork () este procesul copil, al procesului care a invocat apelul de sistem fork (). Codul procesului copilului este identic cu codul procesului său părinte. După crearea procesului copil, atât procesul, adică procesul părintelui, cât și al copilului încep executarea lor din următoarea declarație după furculiță () și ambele procese se execută. simultan.

Procesul părintească și procesul copilului au spațiu de adrese separat. Prin urmare, atunci când oricare dintre procesele modifică orice declarație sau variabilă din cod. Nu ar fi reflectat în alte coduri de proces. Să presupunem că dacă procesul copilului modifică codul, acesta nu ar afecta procesul părinte.

Unii copii procesează după crearea lor apelează imediat exec (). Apelul de sistem exec () înlocuiește procesul cu programul specificat în parametrul său. Apoi, spațiul de adrese separat al procesului copilului nu are niciun folos. O alternativă aici este copy-on-write.


Copie pe scriere permiteți părintelui și copilului să procedeze pentru a împărtăși același spațiu de adrese. Dacă oricare dintre procesele scrie pe paginile din spațiul de adrese, copia spațiului de adrese este creată pentru a permite procesului să funcționeze independent.

Definiția vfork ()

Versiunea modificată a furchetului () este vfork (). vfork () apelul sistem este de asemenea utilizat pentru a crea un proces nou. Similar cu furculita (), aici, de asemenea, noul proces creat este procesul copil, al procesului care a invocat vfork (). Codul procesului copil este, de asemenea, identic cu codul procesului părinte. Aici, procesul copilului suspendă execuția a procesului părinte până când își finalizează execuția, deoarece ambele proces împărtășesc același spațiu de adrese pe care să îl folosească.

Pe măsură ce procesul copilului și al părintelui partajează același spațiu de adrese. Dacă oricare dintre procesele modifică codul, acesta este vizibil pentru celălalt proces care împarte aceleași pagini. Să presupunem că procesul părinte modifică codul; se va reflecta în codul procesului copilului.

Deoarece folosirea vfork () nu creează spații de adrese separate pentru procesele copilului și ale părinților. Prin urmare, trebuie să fie puse în aplicare unde procesul copilului apelează exec () imediat după crearea sa. Deci, nu va exista risipa de spațiu de adrese și este eficient mod de a crea un proces. vfork nu folosește Copie pe scriere.

  1. Diferența principală între furculiță și vfork este că procesul copil creat de furculiţă are o spațiu de memorie separat din procesul părintelui. Cu toate acestea, procesul copilului creat de vfork apelul de sistem partajează același spațiu de adrese a procesului său părinte.
  2. Procesul copil creat cu furculița executa simultan cu procesul părinte. Pe de altă parte, procesul copilului creat cu vfork suspenda executarea procesului părinte până la finalizarea executării acestuia.
  3. Deoarece spațiul de memorie al procesului părintelui și al copilului este o modificare separată efectuată de oricare dintre procesele nu afectează paginile altor persoane. Cu toate acestea, întrucât procesul părintei și al copilului partajează aceeași modificare a adresei de memorie efectuată de orice proces se reflectă în spațiul de adrese.
  4. Sistemul de apelare furcă () folosește Copie pe scriere ca o alternativă, care permite procesului copilului și părintelui să împartă același spațiu de adresă până când oricare dintre ei modifică paginile. Pe de altă parte, vfork nu folosește copy-on-write.

Concluzie:

Apelul de sistem vfork () trebuie să fie implementat atunci când procesul de executare a apelului copilului () imediat după crearea sa cu ajutorul furcii (). Ca spațiu de adrese separat pentru procesul copilului și al părinților nu va fi de folos aici.