Különbség a villák () és a vfork () között

Szerző: Laura McKinney
A Teremtés Dátuma: 2 Április 2021
Frissítés Dátuma: 10 Lehet 2024
Anonim
Különbség a villák () és a vfork () között - Technológia
Különbség a villák () és a vfork () között - Technológia

Tartalom


Mindkét Villa() és vfork () a rendszerhívások új folyamatot hoz létre, amely megegyezik a fork () vagy a vfork () hívására hivatkozott folyamattal. használata Villa() lehetővé teszi a szülő és a gyermek folyamatát egyidejűleg. A másik út, vfork () felfüggeszti a szülő folyamat végrehajtását, amíg a gyermek folyamat befejezi annak végrehajtását. A fork () és a vfork () rendszerhívás közötti elsődleges különbség az, hogy a villával létrehozott gyermekfolyamatnak külön címterülete van, mint a szülő folyamatának. Másrészt a vfork használatával létrehozott gyermekfolyamatnak meg kell osztania a szülő folyamat címterét.

Nézzünk különbségeket a fork () és a vfork () között az alább bemutatott összehasonlító táblázat segítségével.


  1. Összehasonlító táblázat
  2. Meghatározás
  3. Főbb különbségek
  4. Következtetés

Összehasonlító táblázat

Az összehasonlítás alapjaVilla()vfork ()
AlapvetőA gyermek- és a szülői folyamat külön címterekkel rendelkezik.A gyermek- és a szülőfolyamat ugyanazzal a címtérrel rendelkezik.
VégrehajtásA szülő és a gyermek folyamat egyidejűleg hajtódik végre.A szülői folyamat felfüggesztésre kerül, amíg a gyermekfolyamat befejezi a végrehajtást.
MódosításHa a gyermekfolyamat bármelyik oldalt megváltoztatja a címtérben, akkor az a szülő folyamat számára láthatatlan, mivel a címtér külön van.Ha a gyermekfolyamat bármelyik oldalt megváltoztatja a címtérben, akkor az látható lesz a szülői folyamatban, mivel ugyanaz a címtér oszlik meg.
Copy-on-writeA fork () a copy-on-copy alternatívát használja, amikor a szülő és a gyermek ugyanazokat az oldalakat osztja meg mindaddig, amíg egyikük sem módosítja a megosztott oldalt.A vfork () nem használja a copy-on-írást.


A villa meghatározása ()

A Villa() egy rendszerhívás használata a új folyamat. A fork () hívás által létrehozott új folyamat a gyermek folyamat, amely a fork () rendszerhívást idézi elő. A gyermekfolyamat kódja megegyezik a szülőfolyamat kódjával. A gyermekfolyamat létrehozása után mind a folyamat, azaz a szülõi és a gyermekfolyamat a villát követõ következõ utasításból indítja végrehajtását, és mindkét folyamat végrehajtásra kerül egyidejűleg.

A szülő és a gyermek folyamatnak megvan külön címtér. Ezért, ha a folyamatok bármelyike ​​módosítja a kód bármelyik állítását vagy változóját. Ez nem tükröződik más folyamatkódokban. Tegyük fel, hogy ha a gyermekfolyamat módosítja a kódot, akkor ez nem befolyásolja a szülői folyamatot.

Néhány gyermekfolyamat létrehozása után azonnal felhívja exec (). Az exec () rendszerhívás helyettesíti a folyamatot a paraméterében megadott programmal. Akkor a gyermekfolyamat külön címtere nem hasznos. Az egyetlen alternatíva itt a copy-on-write.

A copy-on-write hagyja, hogy a szülő és a gyermek feldolgozza ugyanazt a címtartományt. Ha valamelyik folyamat az oldalakon címsorban íródik, akkor a címtér másolatát úgy hozzák létre, hogy mind a folyamat függetlenül működjön.

A vfork () meghatározása

A fork () módosított verziója a vfork (). A vfork () A rendszerhívást új folyamat létrehozására is használják. Hasonlóan a fork () -hoz, itt is létrejön az új folyamat a vfork () -ot meghívó folyamat gyermekfolyamata. Az utódfolyamat-kód szintén megegyezik a szülőfolyamat-kóddal. Itt a gyermekfolyamat felfüggeszti a végrehajtást szülő folyamatot, amíg a végrehajtás be nem fejeződik, mivel mindkét folyamat ugyanazt a címtartományt használja.

Ahogy a gyermek és a szülő folyamata megosztja a ugyanaz a címtér. Ha valamelyik folyamat módosítja a kódot, akkor látható lesz az ugyanazokat az oldalakat megosztó másik folyamat. Tegyük fel, ha a szülő folyamat megváltoztatja a kódot; ez tükröződik a gyermekfolyamat kódexében.

Mivel a vfork () használata nem hoz létre külön címteret a gyermek- és a szülői folyamatokhoz. Ezért kell lennie végrehajtott ahol a gyermekfolyamat hívja exec () közvetlenül a létrehozása után. Tehát nem lesz pazarlás a címtérre, és ez az hatékony a folyamat létrehozásának módja. A vfork nem használja copy-on-write.

  1. A fork és a vfork közötti elsődleges különbség az, hogy a Villa van egy külön memóriahely a szülő folyamatból. Ugyanakkor a vfork rendszerhívás megosztja a ugyanaz a címtér a szülő folyamatának.
  2. A villával létrehozott gyermekfolyamat egyidejűleg végrehajtani a szülő folyamattal. Másrészt a vfork segítségével létrehozott gyermekfolyamat felfüggesztésére a szülő folyamat végrehajtása a végrehajtás befejezéséig.
  3. Mivel a szülő és a gyermek memóriaterülete önálló módosítás, amelyet bármelyik folyamat elvégzi, nem érinti a többi oldalot. Mivel azonban a szülő és a gyermek folyamat ugyanazt a memóriacímet módosítja, amelyet bármelyik folyamat végrehajt, a címtérben tükröződik.
  4. A rendszerhívó villát () használja copy-on-write alternatívaként, amely lehetővé teszi a gyermek és a szülő folyamatának ugyanazon címtér megosztását, amíg egyikük sem módosítja az oldalakat. Másrészről, a vfork nem használja a copy-on-write műveletet.

Következtetés:

A vfork () rendszerhívást végre kell hajtani, amikor a végrehajtási () gyermekhívás azonnal létrejön a fork () segítségével való létrehozása után. Mivel a gyermek- és a szülői folyamatok különálló címtere nem lesz itt hasznos.