SISTEMAS OPERATIVOS II

Tercer curso Ingeniería Técnica Informática Sistemas. Curso 2011-2012

Práctica 3: Procesos en Unix: Señales

Continuar la codificación de un intérprete de comandos (shell) en UNIX. Nótese que los comandos aquí descritos deben interpretarse de la siguiente manera

Además deben tenerse en cuenta las siguientes indicaciones

A efectos de programación de está práctica podemos suponer que hay 32 señales en el sistema. Las funciones disponibles en

http://www.dc.fi.udc.es/~afyanez/Practicas/sources/senales.c
permiten convertir de nombre de señal a númeor de señal y viceversa

Comandos a implementar en esta práctica

senal
[-dfl|-ign|man] [-l] [-r] [-resethand] [-onstack] [-nodefer] [-restart] [-sNN] [-mSEN1] [-mSEN2] ...S1 S2...

maxreenvios
[N] Establece el valor de maxReenvios (definido en el apartado anterior): el número máximo de veces que un manejador que se ha instalado con la opción -r reenvía una señal. Si no se especifica N nos informa de cuál es su valor
seninfo
[-cont] [-cero] [S1] [S2] ...

senpila
[tam] [dir] Establece una pila alternativa de tamaño tam para la ejecución de las señales en la dirección de memoria dir. Si no se especifica dirección, se obtendrá una asignando mediante malloc del tamaño que se le indica. (/***/ es posible que, especificando alguna dirección de memoria concreta como pila alternativa, se pueda producir un fallo de segmentación al recibir una señal cuyo manejador se ejecuta en dicha pila). Si no se especifica tam nos muestra la dirección y el tamaño de la pila alternativa

senmasc
[-n|-d] S1 S2 ... Enmascara o desenmascara (mediante sigprocmask) las señales S1, S2 .... Si no se especifican señales nos informa de las que están enmascaradas.

bucle
Hace que el shell entre en un bucle infinito. Instala un manejador para SIGINT que permite salir del bucle pulsando control-c para seguir ejecutando el shell.

segmentation
produce un fallo de segmentación en el shell. (No vale enviar SIGSEGV, tiene que ser un fallo de segmentación de verdad). (/***/ evidentemente produce un error en tiempo de ejecución)

Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (sigprocmask, sigaction, sigaltstack, ...)

Para comprobar el funcionamiento de flag SA_RESTART en sigaction es conveniente que contemplemos el caso de que la función que lee de la entrada puede devolver un error (NO DEBE TERMINAR EL PROCESO EN CASO DE QUE ESO OCURRA). Por ejemplo

if (fgets(linea, stdin, MAXLINEA)==NULL)
   perror ("Error al leer de teclado");

FORMA DE ENTREGA Como en prácticas anteriores

FECHA DE ENTREGA VIERNES 23 DICIEMBRE DE 2012