
Találjunk néhány különbséget a villa () és a vfork () között az alábbi táblázat segítségével.
Összehasonlító táblázat
Az összehasonlítás alapja | Villa() | vfork () |
---|---|---|
Alapvető | A gyermekprocesszor és a szülő folyamat külön címsorokkal rendelkezik. | A gyermekfolyamat és a szülő folyamat ugyanazzal a címterülettel rendelkezik. |
Végrehajtás | A szülő és a gyermek folyamat egyidejűleg fut. | A szülői folyamat felfüggesztésre kerül, amíg a gyermek folyamat befejezi a végrehajtást. |
Módosítás | Ha a gyermek a címterület bármely oldalát megváltoztatja, a szülő folyamat számára láthatatlan, mivel a címterület különálló. | Ha a gyermekfolyamat megváltoztatja a címterület bármely oldalát, akkor ez a szülő folyamat számára látható, mivel ugyanazzal a címterülettel rendelkeznek. |
Copy-on-write | A villa () a copy-on-write lehetőséget használja alternatívaként, ha a szülő és a gyermek ugyanazokat az oldalakat osztja meg, amíg egyikük sem módosítja a megosztott oldalt. | A vfork () nem használ másolás-írást. |
A villa meghatározása ()
A villa () egy rendszerhívás új folyamat létrehozásához. A villás () hívás által létrehozott új folyamat az a folyamat, amely a villát () rendszerhívást kezdeményezte. A gyermekfolyamat kódja megegyezik a szülő folyamat kódjával. A gyermekfolyamat létrehozása után mind a folyamat, mind a szülő és a gyermek folyamat elkezdi a végrehajtást a következő kijelentésből a villát () után, és mindkét folyamat egyidejűleg végrehajtódik.
A szülő folyamat és a gyermek folyamat külön címtartóval rendelkezik . Ezért, ha a folyamatok bármelyike módosítja a kódban lévő bármely állítást vagy változót. Nem tükröződik más folyamatkódokban. Tegyük fel, hogy ha a gyermek folyamat módosítja a kódot, nem befolyásolja a szülő folyamatot.
Néhány gyermek létrehozása a létrehozás után azonnal felhívja a exec-t () . A exec () rendszerhívás helyettesíti a folyamatot a paraméterben megadott programmal. Ezután a gyermek folyamatának külön címterülete nem hasznos. Itt az egyik alternatíva a copy-on-write.
A copy-on-write lehetővé teszi, hogy a szülő és a gyermek egyaránt megosztja a címtartományt. Ha a folyamatok bármelyike a címterek oldalain íródik, akkor a címterület másolata jön létre, hogy mindkét folyamat függetlenül működjön.
A vfork meghatározása ()
A villa () módosított változata vfork (). A vfork () rendszerhívás új folyamat létrehozására is használható. A villához hasonlóan (), itt is az új folyamat jött létre, a gyermek folyamat, a vforkhoz (). A gyermek folyamatkódja megegyezik a szülő folyamatkóddal. Itt a gyermek folyamat felfüggeszti a szülő folyamat végrehajtását, amíg befejezi a végrehajtást, mivel mindkét folyamat ugyanazzal a címterülettel rendelkezik, mint a használat.
Mivel a gyermek és a szülő folyamat ugyanazzal a címterülettel rendelkezik . Ha a folyamatok bármelyike módosítja a kódot, a másik folyamat ugyanazokat az oldalakat jeleníti meg. Tegyük fel, ha a szülő folyamat megváltoztatja a kódot; ez tükröződik a gyermekfolyamat-kódexben.
Mivel a vfork () használata nem hoz létre külön címteret a gyermek és a szülő folyamatok számára. Ezért azt kell végrehajtani, ahol a gyermek a létrehozását követően azonnal végrehajtja a végrehajtást () . Szóval, nem lesz pazarlás a címtartományban, és ez egy hatékony módszer a folyamat létrehozására. A vfork nem használ másolás-írást .
A villák () és a vfork () közötti különbségek
- A villa és a vfork közötti elsődleges különbség az, hogy a villa által létrehozott gyermekfolyamatnak külön memóriája van a szülő folyamatától. A vfork rendszerhívás által létrehozott gyermekfolyamat ugyanakkor a szülő folyamat azonos címterét osztja meg.
- A villával végrehajtott gyermekprocesszor a szülő folyamatával egyidejűleg jön létre. Másrészt, a vfork használatával létrehozott gyermekfolyamat felfüggeszti a szülő folyamat végrehajtását, amíg a végrehajtás befejeződik.
- Mivel a szülő és a gyermek folyamatának memóriaterülete a folyamatok által végrehajtott külön módosítás, nem befolyásolja a többi oldalát. Mivel azonban a szülő és a gyermek folyamat ugyanazzal a memóriacímmel rendelkezik, bármelyik folyamat által végrehajtott módosítás módosul a címtérben.
- A rendszerhívó villa () alternatívaként másolás-írást használ, amely lehetővé teszi, hogy a gyermek és a szülő folyamat ugyanazzal a címterülettel rendelkezzen, amíg egyikük sem módosítja az oldalakat. Másrészről, a vfork nem használ másolás-írást.
Következtetés:
A vfork () rendszerhívást akkor kell végrehajtani, amikor a gyermek folyamatban hívja a (()) létrehozását követően () a létrehozását (). A gyermek és a szülő folyamat külön címtartománya itt nem lesz hasznos.