SISTEMAS OPERATIVOS II

Tercer curso Ingeniería Técnica Informática Sistemas . Curso 2009-2010

Práctica 3: Procesos en UNIX: Credenciales, Prioridad, Señales

Continuar la codificación de un intérprete de comandos (shell) en UNIX, que se irá completando en suscesivas prácticas. El shell debe reconocer los comandos que se datallan a continuación, teniendo en cuanta que en dicha descripción:

En esta prática se va a proceder a instalar manejadores de señales así como a ignorar y enmascarar señales. El comando sigaction permite instalar distintos tipos de manejadores, así como ver como está cada señal. Puede considerarse que el número de señales es 32. El shell llevará unos contadores vara saber el número de veces que se ha ejecutado el manejador de cada señal, de manera que cada vez que se ejecute una de las funciones que es manejador debido a la llegada de una señal, incrementará el contador asociado a dicha señal. Dado que en las máquinas asignadas para prácticas no existen str2sig y sig2tsr pueden usarse las funciones Senal y NombreSenal disponibles en

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

Téngase en cuenta que las opciones -p, -t, -f afectan al campo sa_flags de la estructura sigaction al instalar el manejador y las opciones -v, -r, -sN afectan a como se comporta el manejador instalado. Distintas señales han de poder tener instalado un manejador que se comporta de manera distinta (tal vez en este momento estemos pensando en una función para el manejador sin opciones, otra para el de -v, otra para el de -r, otra para el de -s1, otra para el de -s2,..., otra para el de -s99, otra para el de -v -r, otra para el de -v -s1 .., otra para el de -r -s1, ..; total con 400 funciones para manejadores podría llegar, y como hay que considerar 32 señales entonces con $32x400=12800$ funciones llegaría..., aunque parece ser que hay quien piensa que puede hacerse con solo una función que no contiene más de 10 líneas...).

Además el shell llevará control (mediante una lista) de los procesos que se lanzan desde él en segundo plano. Para cada proceso ha de poder informarnos de su pid, instante de creación, línea de comando que está ejecutando, y estado (activo, parado, terminado normalmente o terminado por señal, y en el caso de los terminados, del valor devuelto, o la señal que lo ha terminado).

sigaction
-install|-show|-showncont|-clearcont|-setstack|-showstack

sigadm
[-block|-unblock|-ign|-dfl]

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).

fpe
produce una excepción de la unidad en punto flotante en el shell. (No vale enviar SIGFPE, tiene que ser un fallo de segmentación de verdad).

getpri
[pid] Mustra la prioridad del proceso pid. Si no se suministra pid muestra la del shell

setpri
valor [pid] Cambia la prioridad del proceso pid a valor. Si no se suministra pid cambia la del shell

pri valor
arg1 arg2 ...[** LISTAVARIABLES] Crea un proceso que ejeuta en primer plano el prorama prog con sus argumentos. Para poder ser encontrado prog debe comanzar por "/", "./" o "../" o residir en uno de los directorios del PATH. Si se especifica **LISTADEVARIABLES, la ejecución es mediante execve y el entorno se indica en LISTAVARIABLES. LISTAVARIABLES puede contener nombres de variables de entorno (el valor se obtiene de environ) o cadenas de la forma NOMBRE=VALOR (se suministra ya la variable con su valor, y la variable no tiene que existir previamente). Si LISTAVARIABLES está vacia, se entiende que la ejecución es con un entorno vacio. EL proceso se ejecuta con su prioridad cambiada (mediante setpriority) a valor
background-pri
valor arg1 arg2 ...[** LISTAVARIABLES Exactamente igual al caso anterior, pero el proceso es ahora en segundo plano.

exec-pri
valor arg1 arg2 ...[** LISTAVARIABLES Análogo a los anteriores, pero sin crear proceso (el shell reemplaza su código)

infoproc
[-a|-s|-t|-p pid1 pid2 ...] Mustra información de los procesos que se han lanzado desde el shell en segundo plano. Para cada proceso muestra EN UNA SOLA LINEA: pid, prioridad, estado, linea de comando que ejecuta e instante de comienzo. Ejemplo
->infoproc
   997        ACTIVO      Mon Dec 21 13:01:08 2009 0 xterm
  1004   TERM NORMAL (0)  Mon Dec 21 13:01:44 2009 0 xclock -digital -update 1
  1005 T. SENAL: SIGSEGV  Mon Dec 21 13:01:57 2009 0 xclock -digital -update 1
->

clearproc
[-a|-s|-t|-p pid1 pid2 ...] Elimina procesos de la lista de procesos en segundo plano (no termina los procesos, simplemente los elimina de la lista del shell)

usercred
[-u uid|-l login] Establece o muestra la credencial de usuario del proceso

NOTAS

Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man, sección 2 para las llamadas al sistema y sección 3 para las funciones de libreria (sigaction, sigprocmask, sigaltstack, stat, setpriority, getpwent ...). Todo el manejo de señales debe realizarse con las llamadas al sistema de System V R4 (sigaction, sigprocmask, ...)

Salvo que se diga explicitamente (p.e., comandos segmentation y fpe, en ningún caso la práctica puede producir error en tiempo de ejecución.

FORMA DE ENTREGA Va a ser utilizado el servicio de recogida de prácticas suministrado por el Centro de Cálculo de esta Facultad y parte del proceso de corrección de las prácticas va a ser automtico (compilación, listado de practicas entregadas etc) por lo cual deben entregarse exactamente como se indica a continuación:

FECHA DE ENTREGA VIERNES 22 ENERO 2010