Ajánlott, 2024

Szerkesztő Választása

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

Mind a villát (), mind a vfork () a rendszerhívásokat hozza létre, amely egy új folyamatot hoz létre, amely megegyezik a villát () vagy a vfork () futtató folyamatot. A villát () a szülő és a gyermek folyamatának egyidejű végrehajtása teszi lehetővé. Másfelől a vfork () felfüggeszti a szülő folyamat végrehajtását, amíg a gyermek folyamat befejezi a végrehajtást. Az elsődleges különbség a villás () és a vfork () rendszerhívás között az, hogy a villával létrehozott gyermekfolyamatnak külön címhelye van, mint a szülő folyamaté. Másrészt a vfork használatával létrehozott gyermekfolyamatnak meg kell osztania a szülő folyamat címterét.

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 alapjaVilla()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ásA 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ásHa 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-writeA 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Top