Recomendado, 2024

La Elección Del Editor

Diferencia entre fork () y vfork ()

Tanto fork () como vfork () son las llamadas del sistema que crean un nuevo proceso que es idéntico al proceso que invocó fork () o vfork (). El uso de fork () permite la ejecución de procesos padre e hijo simultáneamente. De otra manera, vfork () suspende la ejecución del proceso principal hasta que el proceso secundario complete su ejecución. La diferencia principal 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.

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

Gráfica comparativa

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ónEl proceso padre e hijo se ejecutan simultáneamente.El proceso padre permanece suspendido hasta que el proceso hijo complete su ejecución.
ModificaciónSi el proceso secundario altera cualquier página en el espacio de direcciones, es invisible para el proceso principal, ya que el espacio de direcciones está separado.Si el proceso secundario altera cualquier página en el espacio de direcciones, el proceso principal lo puede ver cuando comparten el mismo espacio de direcciones.
Copiar en escritofork () utiliza la copia en escritura como una alternativa en la que el padre y el hijo comparten las mismas páginas hasta que cualquiera de ellos modifique la página compartida.vfork () no utiliza copiar en escritura.

Definición de tenedor ()

El fork () 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 primario inician su ejecución desde la siguiente declaración después de fork () y ambos procesos se ejecutan simultáneamente .

El proceso padre y el proceso hijo tienen un espacio de direcciones separado . Por lo tanto, cuando alguno de los procesos modifica cualquier declaració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á el proceso padre.

Algunos procesos secundarios después de su creación llaman inmediatamente a exec () . La llamada al sistema exec () reemplaza el proceso con el programa especificado en su parámetro. Entonces, el espacio de direcciones por separado del proceso hijo no sirve para nada. La única alternativa aquí es la copia en escritura.

La copia en escritura permite que los procesos padre e hijo compartan el mismo espacio de direcciones. Si cualquiera de los procesos escribe en las páginas en el espacio de direcciones, la copia del espacio de direcciones se crea para que ambos procesos funcionen de forma independiente.

Definición de vfork ()

La versión modificada de fork () es vfork (). La llamada al sistema vfork () también se usa para crear un nuevo proceso. Similar al fork (), aquí también el nuevo proceso creado es el proceso hijo, del proceso que invocó vfork (). El código de proceso hijo también es idéntico al código de proceso padre. 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 que 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 si 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 primarios y secundarios. Por lo tanto, debe implementarse donde el proceso hijo llama a exec () inmediatamente después de su creación. Por lo tanto, no habrá desperdicio de espacio de direcciones, y es la forma eficiente de crear un proceso. vfork no utiliza copiar en escritura .

Diferencias clave entre fork () y vfork ()

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

Conclusión:

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

Top