Procesos e Hilos En Unix

Páginas: 10 (2464 palabras) Publicado: 18 de octubre de 2011
Concurrencia en UNIX / LINUX Introducción:
Procesos e Hilos POSIX

El estándar POSIX
• POSIX: Interfaz de sistemas operativos portables. • Basado en UNIX
– A pesar de que UNIX es ya de por sí estándar, había muchos “sabores” que impositiblitaban la transportabilidad de los programas (código fuente) – Disponible en • UNIX / LINUX • En forma de subsistema en Windows NT / XP – El estándardefine: • Tipos de datos • Nombres de funciones • Valores devueltos por las funciones • Es habitual que los recursos se referencien mediante un número entero >= 0 que recibe el nombre de descriptor.

Creación de Procesos Concurrentes
• Llamada al sistema fork().
– A partir de la devolución del control por parte del sistema, existen en ejecución dos imágenes de memoriabásicamente iguales: el padrey el hijo. – Las diferencias entre ambos procesos son: • PID’s de los procesos – El PID del hijo es distinto al del padre. • En la llamada a fork() el sistema devuelve un 0 al proceso hijo y un valor positivo distinto de 0 (pid del hijo) al padre.

• Recursos compartidos entre el proceso Padre e Hijo
– la imagen en memoria del proceso hijo es una copia igual a la del proceso padre, pero endistinta zonas de memoria. • No se comparten las variables de memoria. – Los recursos que sí comparten son los dispositivos y ficheros que tuviera abiertos el proceso padre. • el stdin, stdout y stderr.
– Esto quiere decir que la salida estándar y salida de error estándar de padre e hijo aparecerán mezcladas.

Fork () - 1
# include main() { int pid;/************************************************ creación de un proceso concurrente con el creador *************************************************/ pid=forck (); if ((pid == -1) { printf ("error en creacion de proceso hijo\n"); exit(1); } else if ( pid == 0) /* proceso hijo */ { printf ("Proceso hijo 1\n"); fflush(stdout); exit (0); /* terminacion con codigo 0 */ } else /* proceso padre */ { printf ("Proceso padre\n"); fflush(stdout);wait (0); } }

Padre

Fork () - 2
Proceso Padre Proceso Hijo

# include main() { int pid; /************************************************ creación de un proceso concurrente con el creador *************************************************/ pid=forck (); if ((pid == -1) { printf ("error en creacion de proceso hijo\n"); exit(1); } else if ( pid == 0) /* proceso hijo */ { printf ("Proceso hijo1\n"); fflush(stdout); exit (0); /* terminacion con codigo 0 */ } else /* proceso padre */ { printf ("Proceso padre\n"); fflush(stdout); wait (0); } }

# include main() { int pid; /************************************************ creación de un proceso concurrente con el creador *************************************************/ pid=forck (); if ((pid == -1) { printf ("error en creacion deproceso hijo\n"); exit(1); } else if ( pid == 0) /* proceso hijo */ { printf ("Proceso hijo 1\n"); fflush(stdout); exit (0); /* terminacion con codigo 0 */ } else /* proceso padre */ { printf ("Proceso padre\n"); fflush(stdout); wait (0); } }

Padre

Hijo

Suponemos que se pudo crear el proceso hijo (fork devuelve números no negativos) Ambos procesos continúan ejecutando la siguiente sentenciaal fork().

Fork () - 3
Proceso Padre Proceso Hijo

# include main() { int pid; /************************************************ creación de un proceso concurrente con el creador *************************************************/ pid=forck (); if ((pid == -1) { printf ("error en creacion de proceso hijo\n"); exit(1); } else if ( pid == 0) /* proceso hijo */ { printf ("Proceso hijo 1\n");fflush(stdout); exit (0); /* terminacion con codigo 0 */ } else /* proceso padre */ { printf ("Proceso padre\n"); fflush(stdout); wait (0); } }

# include main() { int pid; /************************************************ creación de un proceso concurrente con el creador *************************************************/ pid=forck (); if ((pid == -1) { printf ("error en creacion de proceso...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Procesos unix
  • Procesos e hilos
  • Proceso de hilado
  • Procesos e hilos
  • PROCESOS E HILOS
  • Procesos e hilos
  • HILOS VS PROCESOS
  • Hilo Procesado En Fibra De Alpaca

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS