SISTEMAS OPERATIVOS II

Tercer curso Ingeniería Ténica Informática Sistemas. Curso 2010-2011

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

El shell ahora permitirá instalar manejadores para señales, así como enmascararlas o ignorarlas. El shell ha de llevar un contador para cada señal en el que cuenta las veces que se ha ejecutado el manejador para dicha señal. El manejador cuando se ejecute simplememte incrementará en valor de dicho contador. Opcionalmente imprimirá el valor de dicho contador, la señal que maneja y la dirección del parámetro que recibe. Todo el manejo de señales se hará con las llamadas de System V R4: sigaction y sigprocmask

IMPORTANTE, si la función de lectura de teclado por parte del shell devuelve un error, el shell NO DEBE TERMINAR. es decir, no debe haber un código como este (sobra la llamada exit()):

if (gets(entrada,MAXENTRADA,stdin)==NULL){
  perror ("imposible leer entrada");
  exit(0);
}

Comandos a implementar en esta práctica

senal
|-mask|-unmask|-ign|-dfl|-install|-info|-cont|-clear|-stack

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 (sigaction, sigprocmask, sigaltstack ...). Para convertir de nombre de señal a número y viceversa puede utilizarse el código disponible en

 http://www.dc.fi.udc.es/~afyanez/Practicas/sources/senales.c

FORMA DE ENTREGA Como en prácticas anteriores.

FECHA DE ENTREGA VIERNES 10 DICIEMBRE DE 2010