SISTEMAS OPERATIVOS II

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

Práctica 2: Procesos en Unix: Ejecución, entorno, credenciales y prioridad

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 debe llevar una lista de directorios (análoga al PATH del bash) donde busca los ejecutables, de manera que cuando se indica un orden que no es un comando interno del shell, el 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 ruta 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/)

En está práctica, además, el shell llevará una lista de todos los procesos en segundo plano que se lanzan desde él; el comando listarproc muestra dicha lista y el comando borrarproc la manipula. La implementación de dicha lista es libre

Comandos a implementar en esta práctica

fork
El shell crea un proceso hijo mediante la llamada al sistema fork y se queda en espera a que dicho proceso hijo termine

cambiarpri
[pid] [valor] Establece la prioridad del proceso pid a valor. Si no se especifica valor muestra la prioridad del proceso pid y si no se especifica pid muestra la prioridad del intérprete de comandos. Cuando muestre prioridades debe mostrar la prioridad obtenida getpriority y también la política de planificación a la que pertenece el proceso obtenida mediante sched_getscheduler
schedpri
pol pri [pid] Pone al proceso pid en la política de planificación pol (OTHER, BATCH, IDLE, RR o FIFO) con una prioridad pri. Si no se especifica pid lo hace para el intérprete de comandos

mostraruid
Muestra las credenciales de usuario del proceso. Para cada credencial muestra el número, el login asociado y en nombre real del usuario
cambiaruid [-l] [uid]
Cambia la credencial efectiva de usuario del proceso a uid. Si se especifica -l, uid representa un login, en caso contrario es el valor numérico de la credencial. Si no se especifica ni -l ni uid, cambiaruid es equivalente a mostraruid

entorno
[-set|-main] [arg1...] Muestra o modifica el entorno del shell

ruta
[arg] Accede a la lista de directorios de búsqueda del shell (equivalente al PATH del sistema)

ejecutar
[LISTAVARIABLES] prog arg1 ...@pri 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 debe especificarse una trayectoria completa hasta él (comenzando por "/", "./" o "../") o residir en uno de los directorios del ruta. Debe usarse la llamada execv. Si se especifica LISTAVARIABLES, la ejecución será mediante execve y el entorno se especifica 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 es "NULLENV" la ejecución será mediante execve y con un entorno vacío (ver ejemplos). Si se indica @pri, el programa se ejecutará con su prioridad establecida previamente a pri

segundoplano
[LISTAVARIABLES] prog arg1 ...@pri 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 debe especificarse una trayectoria completa hasta él (comenzando por "/", "./" o "../") o residir en uno de los directorios del ruta. Debe usarse la llamada execv. Si se especifica LISTAVARIABLES, la ejecución será mediante execve y el entorno se especifica 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 es "NULLENV" la ejecución será mediante execve y con un entorno vacío. Si se indica @pri, el programa se ejecutará con su prioridad establecida previamente a pri. El proceso se añadirá a la lista de procesos en segundo plano dl shell

[LISTAVARIABLES]
prog arg1 ...@pri 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 debe especificarse una trayectoria completa hasta él (comenzando por "/", "./" o "../") o residir en uno de los directorios del ruta. Debe usarse la llamada execv. Si se especifica LISTAVARIABLES, la ejecución será mediante execve y el entorno se especifica 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 es "NULLENV" la ejecución será mediante execve y con un entorno vacío. NO DEBE ESCRIBIRSE "prog" PARA EJECUTAR ALGO. "prog" REPRESENTA EL NOMBRE DEL EJECUTABLE. Si se indica @pri, el programa se ejecutará con su prioridad establecida previamente a pri

Ejemplos

*) ruta +/bin
*) ruta -/usr/bin
*) ruta  +.
*) segundoplano /usr/bin/xclock 
*) segundoplano TERM HOME DISPLAY USER xterm -e bash @15
*) xclock -digital 
*) ejecutar NULLENV ./a.out

listarproc
[all|term|sig|stop|act] Muestra la lista de procesos en segundo plano. Para cada proceso debe mostrar (en una sola línea) su pid, su prioridad, la linea de comando que ejecuta, el instante de inicio y su estado (activo, terminado normalmente, parado o terminado por señal) indicado, en su caso, el valor devuelto o la señal causante de su terminación o parada. Si no se indican argumentos suficientes (p.e. listarproc sin argumentos) se listarán todos.
borrarprocs
[all|term|sig|stop|act] Elimina de la lista de procesos en segundo plano los procesos que se le especifican. (Es un comando de manipulación de la lista de procesos en segundo plano, no tiene que terminar los procesos). Si no se indican argumentos suficientes (p.e. borrarproc sin argumentos) se listarán todos.

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

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 2 DICIEMBRE DE 2012