Diferencia entre fork () y vfork ()

Autor: Laura McKinney
Fecha De Creación: 2 Abril 2021
Fecha De Actualización: 10 Mayo 2024
Anonim
fork() and exec() System Calls
Video: fork() and exec() System Calls

Contenido


Ambos tenedor() y vfork () son los llamadas al sistema eso crea un nuevo proceso que es idéntico al proceso que invoca fork () o vfork (). Utilizando tenedor() permite la ejecución del proceso padre e hijo simultáneamente. La otra manera, vfork () suspende la ejecución del proceso padre hasta que el proceso hijo complete su ejecución. La principal diferencia entre la llamada al sistema fork () y vfork () es que el proceso hijo creado con fork tiene un espacio de direcciones separado como el del proceso padre. Por otro lado, el proceso hijo creado con vfork tiene que compartir el espacio de direcciones de su proceso padre.

Busquemos algunas diferencias entre fork () y vfork () con la ayuda del cuadro comparativo que se muestra a continuación.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparacióntenedor()vfork ()
BASICEl proceso hijo y el proceso padre tienen espacios de direcciones separados.El proceso hijo y el proceso padre comparten el mismo espacio de direcciones.
EjecuciónLos procesos padre e hijo se ejecutan simultáneamente.El proceso padre permanece suspendido hasta que el proceso hijo completa su ejecución.
ModificaciónSi el proceso secundario altera cualquier página en el espacio de direcciones, es invisible para el proceso primario ya que el espacio de direcciones está separado.Si el proceso secundario altera cualquier página en el espacio de direcciones, es visible para el proceso primario ya que comparten el mismo espacio de direcciones.
Copiar en escritofork () usa copy-on-write como una alternativa donde el padre y el niño comparten las mismas páginas hasta que cualquiera de ellos modifique la página compartida.vfork () no utiliza copia en escritura.


Definición de fork ()

los tenedor() es un uso de llamada del sistema para crear un nuevo proceso. El nuevo proceso creado por la llamada fork () es el proceso hijo, del proceso que invocó la llamada al sistema fork (). El código del proceso hijo es idéntico al código de su proceso padre. Después de la creación del proceso secundario, tanto el proceso primario como el secundario comienzan su ejecución desde la siguiente instrucción después de fork () y ambos procesos se ejecutan simultaneamente.

El proceso padre y el proceso hijo tienen espacio de direcciones separado. Por lo tanto, cuando cualquiera de los procesos modifica cualquier instrucción o variable en el código. No se reflejaría en otros códigos de proceso. Supongamos que si el proceso hijo modifica el código, no afectaría el proceso padre.


Algún proceso secundario después de su creación llama inmediatamente exec (). La llamada al sistema exec () reemplaza el proceso con el programa especificado en su parámetro. Entonces el espacio de direcciones separado del proceso hijo no sirve de nada. La única alternativa aquí es copiar y escribir.

los Copiar en escrito deje que el proceso primario y secundario compartan el mismo espacio de direcciones. Si alguno de los procesos escribe en las páginas en el espacio de direcciones, se crea una copia del espacio de direcciones para permitir que ambos procesos funcionen independientemente.

Definición de vfork ()

La versión modificada de fork () es vfork (). los vfork () La llamada al sistema también se utiliza para crear un nuevo proceso. Similar al fork (), aquí también el nuevo proceso creado es el proceso hijo, del proceso que invoca vfork (). El código de proceso secundario también es idéntico al código de proceso primario. Aquí, el proceso hijo suspende la ejecución del proceso padre hasta que complete su ejecución ya que ambos procesos comparten el mismo espacio de direcciones para usar.

A medida que el proceso hijo y padre comparte el mismo espacio de direcciones. Si alguno de los procesos modifica el código, es visible para el otro proceso que comparte las mismas páginas. Supongamos que el proceso padre altera el código; se reflejará en el código del proceso hijo.

Como usar vfork () no crea espacios de direcciones separados para procesos secundarios y primarios. Por lo tanto, debe ser implementado donde el proceso hijo llama exec () inmediatamente después de su creación. Por lo tanto, no habrá desperdicio de espacio de direcciones, y es el eficiente forma de crear un proceso. vfork no usa Copiar en escrito.

  1. La principal diferencia entre fork y vfork es que el proceso hijo creado por el tenedor tiene un espacio de memoria separado del proceso padre. Sin embargo, el proceso hijo creado por el vfork llamada al sistema comparte el mismo espacio de direcciones de su proceso padre.
  2. El proceso hijo creado usando fork ejecutar simultáneamente con el proceso padre Por otro lado, el proceso hijo creado usando vfork suspender la ejecución del proceso padre hasta que se complete su ejecución.
  3. Como el espacio de memoria del proceso primario y secundario es una modificación separada realizada por cualquiera de los procesos, no afecta las páginas de otros. Sin embargo, como el proceso primario y secundario comparte la misma modificación de dirección de memoria realizada por cualquier proceso, se refleja en el espacio de direcciones.
  4. La llamada al sistema fork () usa Copiar en escrito como alternativa, que permite que el proceso secundario y principal compartan el mismo espacio de direcciones hasta que cualquiera de ellos modifique las páginas. Por otro lado, vfork no usa copia en escritura.

Conclusión:

La llamada al sistema vfork () debe implementarse cuando el proceso secundario llama a exec () inmediatamente después de su creación utilizando fork (). Como espacio de direcciones separado para el proceso hijo y padre no será de utilidad aquí.