Contents
Was ist Gabel ( )?
Fork ist eine Funktion im UNIX-Betriebssystem, die verwendet wird, um ein Duplikat eines bestimmten Prozesses zu erzeugen, indem zwei gleichzeitig ausgeführte Prozesse eines Programms erstellt werden. Diese beiden Prozesse werden normalerweise als “Eltern-” und “Kind”-Prozesse bezeichnet. Sie verwenden Multitasking-Protokolle, um Systemressourcen gemeinsam zu nutzen.
Wenn fork einen neuen Prozess durch Kopieren des aktuellen Prozesses erstellt, führt es ein Copy-O-Write durch. Dies bedeutet, dass der Speicher des neuen Prozesses mit dem Elternprozess geteilt wird, bis er geändert wird. Wenn der Speicher geändert wird, wird der Speicher kopiert, um sicherzustellen, dass jeder Prozess seine eigene gültige Kopie des Speichers hat.
Was Sie über Gabel wissen müssen
- Fork ist eine Funktion im UNIX-Betriebssystem, die verwendet wird, um ein Duplikat eines bestimmten Prozesses zu erzeugen, indem zwei gleichzeitig ausgeführte Prozesse eines Programms erstellt werden.
- Der Fork-Systemaufruf erzeugt eine Duplikatkopie des aufrufenden Prozesses.
- Der durch einen Fork-Systemaufruf erzeugte neue Prozess ist in fast jeder Hinsicht mit dem Elternprozess identisch.
- Nach dem Fork-Systemaufruf werden sowohl der Kind- als auch der Elternprozess gleichzeitig ausgeführt.
- In fork befinden sich der übergeordnete und der untergeordnete Prozess in unterschiedlichen Adressräumen.
- Beispiel: int process_id=fork();
Was ist Exec ( )?
Exec ist eine Funktionalität eines Betriebssystems, die eine ausführbare Datei im Kontext eines bereits vorhandenen Prozesses ausführt und die vorherige ausführbare Datei ersetzt. Dieser Vorgang wird auch als Overlay bezeichnet. Es ist besonders wichtig in Unix-ähnlichen Systemen, obwohl es an anderer Stelle existiert. Da kein neuer Prozess erstellt wird, ändert sich die Prozesskennung nicht, aber Maschinencode, Datenhaufen und Stack des Prozesses werden durch die des neuen Programms ersetzt.
Der exec-Systemaufruf wird verwendet, um eine Datei auszuführen, die sich in einem aktiven Prozess befindet. Beim Aufruf von exec wird die vorherige ausführbare Datei ersetzt und die neue Datei ist ausführbar. Genauer gesagt können wir sagen, dass die Verwendung des exec-Systemaufrufs die alte Datei oder das Programm aus dem Prozess durch eine neue Datei oder ein neues Programm ersetzt.
Was Sie über Exec wissen müssen
- Exec ist eine Operation in einem UNIX-Betriebssystem, die einen Prozess erstellt, indem sie den vorherigen Prozess ersetzt.
- Der Systemaufruf exec dient dazu, die gesamten aktuellen aufrufenden Prozesse durch ein neues Programm insgesamt zu ersetzen.
- Das neue Programm, das den aktuellen Prozess ersetzt, wird geladen und vom Einstiegspunkt aus ausgeführt.
- Nach dem exec-Systemaufruf wird die Kontrolle nie an das ursprüngliche Programm übergeben, bis kein exec()-Fehler auftritt.
- In Exec ersetzt der untergeordnete Adressraum den übergeordneten Adressraum.
- Beispiel: int execvp (const char *file_name, char*const argv[])
Unterschied zwischen Fork und Exec in Tabellenform
VERGLEICHSGRUNDLAGE | GABEL | EXEC |
Beschreibung | Fork ist eine Funktion im UNIX-Betriebssystem, die verwendet wird, um ein Duplikat eines bestimmten Prozesses zu erzeugen, indem zwei gleichzeitig ausgeführte Prozesse eines Programms erstellt werden. | Exec ist eine Operation in einem UNIX-Betriebssystem, die einen Prozess erstellt, indem sie den vorherigen Prozess ersetzt. |
Systemaufruf | Der Fork-Systemaufruf erzeugt eine Duplikatkopie des aufrufenden Prozesses. | Der Systemaufruf exec dient dazu, die gesamten aktuellen aufrufenden Prozesse durch ein neues Programm insgesamt zu ersetzen. |
Neuer Prozess/Programm | Der durch einen Fork-Systemaufruf erzeugte neue Prozess ist in fast jeder Hinsicht mit dem Elternprozess identisch. | Das neue Programm, das den aktuellen Prozess ersetzt, wird geladen und vom Einstiegspunkt aus ausgeführt. |
Nach Systemaufruf | Nach dem Fork-Systemaufruf werden sowohl der Kind- als auch der Elternprozess gleichzeitig ausgeführt. | Nach dem exec-Systemaufruf wird die Kontrolle nie an das ursprüngliche Programm übergeben, bis kein exec()-Fehler auftritt. |
Eltern- und Kindprozesse | In fork befinden sich der übergeordnete und der untergeordnete Prozess in unterschiedlichen Adressräumen. | In Exec ersetzt der untergeordnete Adressraum den übergeordneten Adressraum. |
Beispiel | int execvp (const char *file_name, char*const argv[]) | int execvp (const char *file_name, char*const argv[]) |