Doporučená, 2025

Redakce Choice

Rozdíl mezi vidličkou () a vfork ()

Vidlice () i vfork () jsou systémová volání, která vytvoří nový proces, který je totožný s procesem vyvolávajícím vidlice () nebo vfork (). Použití vidlice () umožňuje provádění rodičovského a podřízeného procesu současně. Jinak vfork () pozastaví provádění rodičovského procesu, dokud jeho proces dokončí podřízený proces. Primární rozdíl mezi systémovým voláním fork () a vfork () je, že podřízený proces vytvořený pomocí vidlice má oddělený adresní prostor jako rodičovský proces. Na druhou stranu, podřízený proces vytvořený pomocí vfork musí sdílet adresní prostor svého rodičovského procesu.

Pojďme najít nějaké rozdíly mezi vidličkou () a vfork () pomocí srovnávací tabulky uvedené níže.

Srovnávací graf

Základ pro porovnáníVidlička()vfork ()
ZákladníPodřízený proces a rodičovský proces má oddělené adresní prostory.Podřízený proces a rodičovský proces sdílí stejný adresní prostor.
ProvedeníRodičovský a podřízený proces probíhají současně.Proces rodičů zůstává pozastaven, dokud proces dítěte nedokončí jeho provedení.
ModifikacePokud podřízený proces změní libovolnou stránku v adresním prostoru, je pro nadřazený proces neviditelný, protože adresní prostor je samostatný.Pokud podřízený proces změní libovolnou stránku v adresním prostoru, je pro nadřazený proces viditelný, protože sdílí stejný adresní prostor.
Kopírování na zápisvidlice () používá jako alternativu kopii na zápis, kde rodič a dítě sdílí stejné stránky, dokud žádná z nich nezmění sdílenou stránku.vfork () nepoužívá kopírování na zápis.

Definice vidlice ()

Vidlice () je systémové volání použít k vytvoření nového procesu . Nový proces vytvořený voláním fork () je podřízený proces procesu vyvolávající systémové volání vidlice (). Proces podřízeného kódu je totožný s kódem nadřazeného procesu. Po vytvoření podřízeného procesu oba procesy, tj. Rodičovský a podřízený proces, zahájí jejich provádění z následujícího příkazu po vidlici () a oba procesy se provedou současně .

Nadřazený proces a podřízený proces mají samostatný adresní prostor . Když tedy kterýkoli z procesů modifikuje jakýkoliv příkaz nebo proměnnou v kódu. To by se neprojevilo v jiných procesních kódech. Předpokládejme, že pokud podřízený proces změní kód, neovlivní to rodičovský proces.

Některý podřízený proces po jeho vytvoření okamžitě volá exec () . Systémové volání exec () nahradí proces programem určeným v jeho parametru. Samostatný adresní prostor podřízeného procesu pak není použitelný. Jedinou alternativou je kopírování na zápis.

Copy-on-write umožní rodičovskému a podřízenému procesu sdílet stejný adresní prostor. Pokud některý z procesů zapíše na stránky do adresního prostoru, vytvoří se kopie adresního prostoru, aby oba procesy fungovaly nezávisle.

Definice vfork ()

Upravená verze vidlice () je vfork (). Systémové volání vfork () se také používá k vytvoření nového procesu. Podobně jako vidlice () je zde i nový proces vytvořený podřízeným procesem procesu vyvolávajícího vfork (). Kód podřízeného procesu je také totožný s rodičovským kódem procesu. Zde podřízený proces pozastaví provádění rodičovského procesu, dokud nedokončí jeho provádění, protože oba procesy sdílí stejný adresový prostor, který se má použít.

Jako podřízený a nadřazený proces sdílí stejný adresní prostor . Pokud některý z procesů změní kód, je viditelný pro druhý proces, který sdílí stejné stránky. Předpokládejme, zda rodičovský proces změní kód; to bude odrážet v procesu dětského procesu.

Jak pomocí vfork () nevytváří samostatné adresní prostory pro podřízené a nadřazené procesy. Proto musí být implementován tam, kde podřízený proces volá exec () ihned po jeho vytvoření. Takže nedojde k plýtvání adresním prostorem a je to efektivní způsob, jak vytvořit proces. vfork nepoužívá kopírování na zápis .

Klíčové rozdíly mezi vidličkou () a vfork ()

  1. Primární rozdíl mezi vidličkou a vfork je, že podřízený proces vytvořený vidličkouoddělený paměťový prostor od nadřazeného procesu. Podřízený proces vytvořený systémovým voláním vfork však sdílí stejný adresní prostor svého rodičovského procesu.
  2. Podřízený proces vytvořený pomocí vidlice se spustí současně s nadřazeným procesem. Na druhou stranu, podřízený proces vytvořený pomocí vfork pozastaví provádění rodičovského procesu až do jeho dokončení.
  3. Vzhledem k tomu, že paměťový prostor rodičovského a podřízeného procesu je samostatná modifikace provedená některým z procesů, nemá vliv na stránky ostatních. Však jako nadřazený a podřízený proces sdílí stejnou modifikaci adresy paměti provedené jakýmkoli procesem odráží v adresním prostoru.
  4. Systémové volání vidlice () používá jako alternativu kopii na zápis, což umožňuje dětskému a rodičovskému procesu sdílet stejný adresní prostor, dokud žádný z nich neupraví stránky. Na druhou stranu vfork nepoužívá kopírování na zápis.

Závěr:

Systémové volání vfork () musí být implementováno, když podřízený proces zavolá exec () ihned po jeho vytvoření pomocí vidlice (). Samostatný adresní prostor pro podřízený a rodičovský proces zde nebude použitelný.

Top