SISTEMAS OPERATIVOS II

Tercer curso Ingeniería Informática. Curso 2009-2010

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

Comenzar 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 debe llevar una lista de directorios (análoga al PATH del bash) donde busca los ejecutables, de manera que cuando se indica un orden al shell la ejecutará si

La implementación de dicha lista es libre pero NO DEBE implementarse como una variable de entorno. El comando del shell searchlist muestra y/o manipula dicha lista. Los directorios, salvo el raiz ("/") se especificarán sin la barra al final (/usr/bin y no /usr/bin/)

El shell llevará además otra lista (de implementación libre) de procesos en segundo plano lanzados desde él. EL comando procs muestra y/o manipula dicha lista

Comandos a implementar en esta práctica

exit
Termina la ejecución del intérprete de comandos.

quit
Termina la ejecución del intérprete de comandos.

autores
Indica los nombres y los logins de los autores de la práctica.

getpid
Muestra el pid del proceso

getppid
Muestra el pid del proceso padre del shell

chdir dir
Cambia el directorio actual del shell a dir.

getcwd
Muestra el directorio actual del shell

fork
El shell crea un hijo y se queda en espera a que ese hijo termine.

searchlist
[-add|-del|-find|-list|-clear|-path] [arg]

exec
prog arg1 ... Ejecuta, sin crear proceso (es decir REEMPLAZANDO el código del shell) el programa prog con sus argumentos. prog representa un ejecutable externo y para poder ser encontrado puede especificarse una trayectoria completa hasta él (comenzando por "/", "./" o "../") o residir en uno de los directorios del la lista (searchlist) del shell. Debe usarse la llamada execv

prog
arg1 ... El shell crea un proceso que ejecuta en primer plano el programa prog con sus argumentos. prog representa un ejecutable externo y para poder ser encontrado puede especificarse una trayectoria completa hasta él (comenzando por "/", "./" o "../") o residir en uno de los directorios de la lista (searchlist) del shell. Debe usarse la llamada execv
prog
arg1 ...& El shell crea un proceso que ejecuta en segundo plano el programa prog con sus argumentos. prog representa un ejecutable externo y para poder ser encontrado puede especificarse una trayectoria completa hasta él (comenzando por "/", "./" o "../") o residir en uno de los directorios de la lista (searchlist) del shell. Debe usarse la llamada execv

procs
[-show|-del] [all|term|sig|stop|act] Muestra (o manipula) la lista de procesos en segundo plano del shell.

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). (/***/ 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, fork, execv, waitpid, stat, ...)

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 9 ABRIL DE 2010