Sistemas operativos modernos

pid = fork 0 : /'s i fork se logra, pid >0 en el padre */ if (pid < 0) { handle_ error( ); /* fork falló (por ejemplo, memoria o tabla llena V } else if (pid > 0) { } else { /* el código del padre va aquí. /*/ r el código del hijo va aquí. /*/ } Figura 10-4. Creación de procesos en UNIX. ber sincronización porque cuando un proceso trata de leer de una canalización vacía se bloquea hasta que haya datos. Las canalizaciones del shell se implementan así. Cuando el shell ve una línea como sort <f I head crea dos procesos, sort y head, y establece una canalización entre ellos de forma que la salida estándar de sort se conecte con la entrada estándar de head. Así, todos los datos que sort escri­ ba se envían de manera directa a head, en vez de enviarse a un archivo. Si la canalización se llena, el sistema dejará de ejecutar sort hasta que head haya retirado datos de ella. Los procesos también pueden comunicarse de otra manera: con interrupciones de software. Un proceso puede enviar una señal a otro proceso. Los procesos pueden indicarle al sistema qué quieren que suceda cuando llegue una señal. Las opciones son ignorarla, atraparla o dejar que la señal elimine al proceso (lo cual es la acción predeterminada de casi todas las señales). Si un pro­ ceso opta por atrapar las señales que le envíen, debe especificar un procedimiento de manejo de señales. Cuando llegue la señal, el control pasará de inmediato al manejador. Al terminar y regre­ sar el manejador, el control vuelve al punto donde estaba antes de la señal, como sucede con las interrupciones de E/S por hardware. Un proceso sólo puede enviar señales a miembros de su gru­ po de procesos, que consta de su padre (y demás antepasados), hermanos e hijos (y demás des­ cendientes). Un proceso también puede enviar una señal a todos los miembros de su grupo de procesos con una sola llamada al sistema. Las señales también se usan con otros fines. Por ejemplo, si un proceso está efectuando operaciones aritméticas de punto flotante, y sin querer divide entre cero, obtiene una señal SIGPFE (excepción de punto flotante). Las señales que exige POSIX se enumeran en la figu­ ra 10-5. Muchos sistemas UNIX tienen además otras señales, pero los programas que las usan podrían no ser trasladables a otras versiones de UNIX. 10.3.2 Llamadas al sistema para administración de procesos en UNIX Veamos ahora las llamadas al sistema UNIX que se ocupan de la administración de procesos. Las principales aparecen en la figura 10-6. Un buen lugar para iniciar la explicación es fork.

RkJQdWJsaXNoZXIy MjI4NDcx