Bifurcación (sistema operativo)

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Este artículo se refiere a la bifurcación de procesos en sistemas operativos, consulta Bifurcación (informática) para otros usos.

Una bifurcación o fork, cuando se aplica en el contexto de un lenguaje de programación o un sistema operativo, hace referencia a la creación de una copia de sí mismo por parte de un programa, que entonces actúa como un "proceso hijo" del proceso originario, ahora llamado "padre". Los procesos resultantes son idénticos, salvo que tienen distinto número de proceso (PID).

Más generalmente, una bifurcación en un entorno multihilo significa que un hilo de ejecución se bifurca.

UNIX[editar]

En el caso concreto del sistema operativo UNIX, la llamada al sistema fork permite realizar una bifurcación de este tipo. Esta llamada devuelve el PID del proceso hijo al padre y un 0 al hijo.

Aquí hay un ejemplo escrito en lenguaje de programación C que muestra el uso de esta llamada. El código en las secciones proceso hijo y proceso padre se ejecuta simultáneamente.

   pid_t pid = fork(); //la función fork(); retorna un 0 a los procesos hijos
   int i;
 
   if(pid == 0)
   {
      /* Proceso hijo: 
       * Aquí contamos hasta diez, uno cada segundo.
       */
      for(i=0; i < 10; i++)
      {
         printf("hijo: %d\n", i);
         sleep(1);
      }
      _exit(0); /* nota: exit en lugar de _exit */
   }
   else if(pid > 0)
   { 
      /* Proceso padre:
       * Si no estamos en el proceso padre.
       * De nuevo contamos hasta diez.
       */
      for(i=0; i < 10; i++)
      {
         printf("padre: %d\n", i);
         sleep(1);
      }
   }
   else
   {   
      /* ha ocurrido un error. */
      fprintf(stderr, "no se ha podido bifurcar");
      exit(1);
   }

Este código imprimirá:

 padre: 0
 hijo: 0
 hijo: 1
 padre: 1
 padre: 2
 hijo: 2
 hijo: 3
 padre: 3
 padre: 4
 hijo: 4
 hijo: 5
 padre: 5
 padre: 6
 hijo: 6
 hijo: 7
 padre: 7
 padre: 8
 hijo: 8
 hijo: 9
 padre: 9

El orden de la salida será determinada por diversos parámetros del núcleo del sistema operativo. La variable i no se comparte, ya que cada proceso cuenta, luego de llamar a fork, con su propia versión de la variable.

Véase también[editar]