Różnica między fork () i vfork ()

Autor: Laura McKinney
Data Utworzenia: 2 Kwiecień 2021
Data Aktualizacji: 10 Móc 2024
Anonim
Różnica między fork () i vfork () - Technologia
Różnica między fork () i vfork () - Technologia

Zawartość


Obie widelec() i vfork ()wywołania systemowe , który tworzy nowy proces, który jest identyczny z procesem, który wywołał fork () lub vfork (). Za pomocą widelec() umożliwia jednoczesne wykonywanie procesu nadrzędnego i podrzędnego. Inna droga, vfork () zawiesza wykonywanie procesu nadrzędnego, dopóki proces potomny nie zakończy jego wykonywania. Podstawowa różnica między wywołaniem systemowym fork () i vfork () polega na tym, że proces potomny utworzony za pomocą fork ma oddzielną przestrzeń adresową jak proces nadrzędny. Z drugiej strony proces potomny utworzony za pomocą vfork musi współdzielić przestrzeń adresową procesu macierzystego.

Znajdźmy różnice między fork () i vfork () za pomocą tabeli porównawczej pokazanej poniżej.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

Podstawa do porównaniawidelec()vfork ()
PodstawowyProces potomny i proces macierzysty mają osobne przestrzenie adresowe.Proces potomny i proces macierzysty współużytkują tę samą przestrzeń adresową.
WykonanieProces nadrzędny i podrzędny są wykonywane jednocześnie.Proces nadrzędny pozostaje zawieszony do czasu zakończenia procesu potomnego.
ModyfikacjaJeśli proces potomny zmienia dowolną stronę w przestrzeni adresowej, proces nadrzędny jest niewidoczny, ponieważ przestrzeń adresowa jest osobna.Jeśli proces potomny zmienia dowolną stronę w przestrzeni adresowej, jest widoczny dla procesu nadrzędnego, ponieważ współużytkują tę samą przestrzeń adresową.
Kopiuj przy zapisiefork () wykorzystuje opcję kopiowania przy zapisie jako alternatywę, w której rodzic i dziecko współużytkują te same strony, dopóki dowolna z nich nie zmodyfikuje udostępnionej strony.Funkcja vfork () nie używa funkcji kopiowania przy zapisie.


Definicja fork ()

The widelec() to wywołanie systemowe używane do utworzenia pliku nowy proces. Nowy proces utworzony przez wywołanie fork () jest procesem potomnym procesu, który wywołał wywołanie systemowe fork (). Kod procesu potomnego jest identyczny z kodem procesu macierzystego. Po utworzeniu procesu potomnego oba procesy, tj. Proces macierzysty i potomny, rozpoczynają wykonywanie od następnej instrukcji po fork () i oba procesy zostają wykonane równocześnie.

Proces nadrzędny i proces podrzędny mają oddzielna przestrzeń adresowa. Dlatego gdy dowolny z procesów modyfikuje dowolną instrukcję lub zmienną w kodzie. Nie znalazłoby to odzwierciedlenia w innych kodach procesów. Załóżmy, że jeśli proces potomny zmodyfikuje kod, nie wpłynie to na proces macierzysty.

Niektóre procesy potomne po ich utworzeniu natychmiast wywołują exec (). Wywołanie systemowe exec () zastępuje proces z programem określonym w jego parametrze. Wówczas oddzielna przestrzeń adresowa procesu potomnego nie ma sensu. Jedyną alternatywą jest tutaj kopiowanie przy zapisie.


The kopiowanie przy zapisie pozwól procesowi nadrzędnemu i potomnemu współdzielić tę samą przestrzeń adresową. Jeśli którykolwiek z procesów zapisuje na stronach w przestrzeni adresowej, tworzona jest kopia przestrzeni adresowej, aby oba procesy działały niezależnie.

Definicja vfork ()

Zmodyfikowana wersja fork () to vfork (). The vfork () wywołanie systemowe służy również do utworzenia nowego procesu. Podobnie jak w przypadku fork (), tutaj również utworzony nowy proces jest procesem potomnym procesu, który wywołał vfork (). Podrzędny kod procesu jest również identyczny z nadrzędnym kodem procesu. Tutaj proces potomny zawiesza wykonanie procesu nadrzędnego, aż zakończy wykonywanie, ponieważ oba procesy współużytkują tę samą przestrzeń adresową.

Ponieważ proces potomny i nadrzędny współużytkują ta sama przestrzeń adresowa. Jeśli którykolwiek z procesów modyfikuje kod, jest widoczny dla drugiego procesu dzielącego te same strony. Załóżmy, że proces nadrzędny zmienia kod; znajdzie odzwierciedlenie w kodzie procesu potomnego.

Ponieważ użycie vfork () nie tworzy oddzielnych przestrzeni adresowych dla procesów potomnych i nadrzędnych. Dlatego musi być zaimplementowano gdzie wywołuje proces potomny exec () natychmiast po jego utworzeniu. Tak więc nie będzie marnotrawstwa przestrzeni adresowej, i to jest wydajny, skuteczny, efektywny sposób na stworzenie procesu. vfork nie używa kopiowanie przy zapisie.

  1. Podstawowa różnica między rozwidleniem a vfork polega na tym, że proces potomny utworzony przez widelec ma oddzielna przestrzeń pamięci z procesu nadrzędnego. Jednak proces potomny utworzony przez vfork wywołanie systemowe udostępnia ta sama przestrzeń adresowa procesu macierzystego.
  2. Proces potomny utworzony za pomocą rozwidlenia wykonać jednocześnie z procesem nadrzędnym. Z drugiej strony proces potomny utworzony przy użyciu vfork wstrzymać, zawieszać wykonanie procesu macierzystego do momentu jego zakończenia.
  3. Ponieważ przestrzeń pamięci procesu nadrzędnego i podrzędnego jest osobną modyfikacją wykonywaną przez jeden z procesów, nie wpływa na strony innych. Jednak ponieważ proces nadrzędny i podrzędny współużytkują tę samą modyfikację adresu pamięci wykonaną przez dowolny proces, odzwierciedla się w przestrzeni adresowej.
  4. Używa wywołania systemowego fork () kopiowanie przy zapisie jako alternatywa, która pozwala procesowi potomnemu i nadrzędnemu współdzielić tę samą przestrzeń adresową, dopóki dowolna z nich nie zmodyfikuje stron. Z drugiej strony vfork nie używa kopiowania przy zapisie.

Wniosek:

Wywołanie systemowe vfork () musi zostać zaimplementowane, gdy potomne wywołanie procesu exec () natychmiast po jego utworzeniu za pomocą fork (). Jako osobna przestrzeń adresowa dla procesu potomnego i nadrzędnego nie będzie tu przydatna.