Empfohlen, 2019

Tipp Der Redaktion

Unterschied zwischen Gabel () und Vfork ()

Sowohl Fork () als auch vfork () sind die Systemaufrufe, die einen neuen Prozess erstellen, der mit dem Prozess identisch ist, der Fork () oder vfork () aufgerufen hat. Die Verwendung von fork () ermöglicht die gleichzeitige Ausführung von Parent- und Child-Prozess. Auf die andere Weise setzt vfork () die Ausführung des übergeordneten Prozesses aus, bis der untergeordnete Prozess seine Ausführung abschließt. Der Hauptunterschied zwischen dem Systemaufruf Fork () und Vfork () besteht darin, dass der mit Fork erstellte untergeordnete Prozess einen separaten Adressraum als der übergeordnete Prozess hat. Andererseits muss der mit vfork erstellte untergeordnete Prozess den Adressraum seines übergeordneten Prozesses gemeinsam nutzen.

Lassen Sie uns anhand der unten gezeigten Vergleichstabelle einige Unterschiede zwischen fork () und vfork () feststellen.

Vergleichstabelle

VergleichsgrundlageGabel()vfork ()
BasicDer untergeordnete Prozess und der übergeordnete Prozess verfügen über separate Adressräume.Child-Prozess und Parent-Prozess teilen sich den gleichen Adressraum.
AusführungParent- und Child-Prozess werden gleichzeitig ausgeführt.Der übergeordnete Prozess bleibt ausgesetzt, bis der untergeordnete Prozess seine Ausführung abschließt.
ÄnderungWenn der untergeordnete Prozess eine Seite im Adressraum ändert, ist sie für den übergeordneten Prozess nicht sichtbar, da der Adressraum separat ist.Wenn der untergeordnete Prozess eine Seite im Adressraum ändert, ist sie für den übergeordneten Prozess sichtbar, da sie denselben Adressraum verwenden.
Copy-on-WriteFork () verwendet Copy-on-Write als Alternative, wenn das übergeordnete und das untergeordnete Element dieselben Seiten verwenden, bis eine von ihnen die freigegebene Seite ändert.vfork () verwendet keine Kopie beim Schreiben.

Definition von fork ()

Die Fork () ist ein Systemaufruf, mit dem ein neuer Prozess erstellt wird . Der durch den fork () - Aufruf erstellte neue Prozess ist der untergeordnete Prozess des Prozesses, der den Systemaufruf von fork () aufgerufen hat. Der Code des untergeordneten Prozesses ist identisch mit dem Code des übergeordneten Prozesses. Nach der Erstellung des untergeordneten Prozesses beginnen sowohl der übergeordnete als auch der untergeordnete Prozess ihre Ausführung ab der nächsten Anweisung nach fork (), und beide Prozesse werden gleichzeitig ausgeführt.

Der übergeordnete Prozess und der untergeordnete Prozess haben einen separaten Adressraum . Wenn also einer der Prozesse Anweisungen oder Variablen im Code ändert. Dies würde sich nicht in anderen Prozesscodes niederschlagen. Nehmen wir an, wenn ein untergeordneter Prozess den Code ändert, hat dies keinen Einfluss auf den übergeordneten Prozess.

Einige untergeordnete Prozesse rufen nach ihrer Erstellung sofort exec () auf . Der Systemaufruf exec () ersetzt den Prozess durch das in seinem Parameter angegebene Programm. Dann ist der separate Adressraum des untergeordneten Prozesses nicht von Nutzen. Die eine Alternative hier ist das Kopieren beim Schreiben.

Beim Kopieren beim Schreiben können sich der übergeordnete und der untergeordnete Prozess denselben Adressraum teilen. Wenn einer der Prozesse im Adressraum auf die Seiten schreibt, wird die Kopie des Adressraums erstellt, damit beide Prozesse unabhängig voneinander arbeiten können.

Definition von vfork ()

Die geänderte Version von fork () ist vfork (). Mit dem Systemaufruf vfork () wird auch ein neuer Prozess erstellt. Ähnlich wie die Fork () ist auch der neu erstellte Prozess der untergeordnete Prozess des Prozesses, der vfork () aufgerufen hat. Der untergeordnete Prozesscode ist auch identisch mit dem übergeordneten Prozesscode. Hier unterbricht der untergeordnete Prozess die Ausführung des übergeordneten Prozesses, bis er seine Ausführung abgeschlossen hat, da beide Prozesse den gleichen Adressraum gemeinsam nutzen.

Da der untergeordnete und der übergeordnete Prozess denselben Adressraum verwenden . Wenn einer der Prozesse den Code ändert, ist er für den anderen Prozess sichtbar, der dieselben Seiten verwendet. Nehmen wir an, wenn der übergeordnete Prozess den Code ändert; es wird im Code des untergeordneten Prozesses angezeigt.

Bei Verwendung von vfork () werden keine separaten Adressräume für untergeordnete und übergeordnete Prozesse erstellt. Daher muss es implementiert werden, wenn der untergeordnete Prozess unmittelbar nach seiner Erstellung exec () aufruft. Es wird also kein Adressraum verschwendet, und es ist der effiziente Weg, einen Prozess zu erstellen. vfork verwendet copy-on-write nicht .

Hauptunterschiede zwischen fork () und vfork ()

  1. Der Hauptunterschied zwischen Fork und Vfork besteht darin, dass der von der Fork erstellte untergeordnete Prozess über einen separaten Speicherplatz verfügt . Der durch den vfork- Systemaufruf erstellte untergeordnete Prozess hat jedoch denselben Adressraum wie sein übergeordneter Prozess.
  2. Der mit Fork erstellte untergeordnete Prozess wird gleichzeitig mit dem übergeordneten Prozess ausgeführt. Auf der anderen Seite setzt der mit vfork erstellte untergeordnete Prozess die Ausführung des übergeordneten Prozesses aus, bis seine Ausführung abgeschlossen ist.
  3. Da der Speicherplatz des übergeordneten und untergeordneten Prozesses eine separate Modifikation ist, wirkt sich dies nicht auf die Seiten anderer aus. Da der übergeordnete und der untergeordnete Prozess jedoch dieselbe Speicheradressenänderung aufweisen, die von einem beliebigen Prozess ausgeführt wird, spiegelt sich dies im Adressraum wider.
  4. Der Systemaufruf fork () verwendet als Alternative Copy-on-Write, wodurch untergeordneter und übergeordneter Prozess denselben Adressraum gemeinsam nutzen können, bis einer von ihnen die Seiten ändert. Auf der anderen Seite verwendet vfork keine Kopie beim Schreiben.

Fazit:

Der vfork () - Systemaufruf muss implementiert werden, wenn der untergeordnete Prozessaufruf exec () unmittelbar nach seiner Erstellung mithilfe von fork () aufgerufen wird. Als separater Adressraum für untergeordnete und übergeordnete Prozesse ist hier keine Verwendung.

Top