Különbség a villák () és a vfork () között
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.
- Összehasonlító táblázat
- Meghatározás
- Főbb különbségek
- Következtetés
Összehasonlító táblázat
Az összehasonlítás alapja | Villa() | 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ás | A 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ás | Ha 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-write | A 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.
- 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.
- 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.
- 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.
- 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.