SISTEMAS OPERATIVOS II

Tercer curso Ingeniería Informática. Curso 2011-2012

Práctica 1: Procesos en Unix: Entorno

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 path 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/; ver ejemplos)

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). El comando jobs nos permite acceder o modificar dicha lista

Comandos a implementar en esta práctica

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

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.

pid
Muestra el pid del proceso que ejecuta el shell y del proceso padre del shell

pwd
Muestra el directorio actual del shell

cd dir
Cambia el directorio actual del shell a dir. Si no se especifica dir, muestra el directorio actual del shell (igual que pwd)

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

environ
[-mode|-sus|-putenv|-addr] [arg1...] Muestra o modifica el entorno del shell

fork
El shell crea un hijo y se queda en espera a que ese hijo termine. (El hijo continua ejecutando el código del shell)

execute
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 (path) del shell. Debe usarse la llamada execv

execute
prog arg1 ...** LISTAVARIABLES Análogo al comando execute anterior salvo que ahora la ejecución es mediante execve y el entorno se especifica en LISTAVARIABLES. LISTAVARIABLES es la lista de variables que conforman el nuevo entorno del proceso. Para ello la ejecución será memdiante execve. 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 es vacía (y se ha indicado el argumento **), la ejecución será mediante execve pero con un entorno vacío.

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 (path) del shell. Debe usarse la llamada execv

prog arg1
...** LISTAVARIABLES Análogo al comando anterior salvo que ahora la ejecución (creando proceso en primer plano) es mediante execve y el entorno se especifica en LISTAVARIABLES. LISTAVARIABLES es la lista de variables que conforman el nuevo entorno del proceso. Para ello la ejecución será memdiante execve. 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 es vacía (y se ha indicado el argumento **), la ejecución será mediante execve pero con un entorno vacío.

background
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 (path) del shell. Debe usarse la llamada execv. Además añadirá el proceso a la lista de procesos en segundo plano del shell

background
prog arg1...** LISTAVARIABLES Análogo al comando anterior salvo que ahora la ejecución (creando proceso en segundo plano) es mediante execve y el entorno se especifica en LISTAVARIABLES. LISTAVARIABLES es la lista de variables que conforman el nuevo entorno del proceso. Para ello la ejecución será memdiante execve. 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 es vacía (y se ha indicado el argumento **), la ejecución será mediante execve pero con un entorno vacío. Además añadirá el proceso a la lista de procesos en segundo plano del shell

ejemplos

-> path -add /usr/bin
-> path -add /bin
-> execute ./a.out
-> execute ./a.out ** TERM HOME DISPLAY NUEVA=nada USER
-> /usr/bin/xterm -e csh  
-> xterm -e csh ** TERM HOME DISPLAY USER NUEVAVAR=desconocida
-> ls -l /home
-> background  xterm -e csh ** TERM HOME DISPLAY USER NUEVAVAR=desconocida
-> background /usr/bin/xterm -e csh

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

Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (fork, execv, execve, waitpid, getenv, putenv ...)

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 23 MARZO DE 2010