Examen USO 2010-2011-Q2

Anuncio
Utilización de Sistemas Operativos (USO). Examen Final. 14 Junio 2011
Notas: 15/06/11. Revisión: 17/06/11 de 12.00-13.00. D6-213
NOMBRE y APELLIDOS:
Preguntas de Laboratorio (2 puntos)
-1- Supón que desde tu cuenta habitual del laboratorio ejecutas el comando ls –l y
obtienes lo siguiente:
drwxr-xr-x
3 xavier alumne 4096 2011-06-14 11:26 prova
Sabiendo que xavier no ha creado con ln ningún enlace (link) sobre el directorio y
que el número 3 de la segunda columna indica el número de nombres distintos (enlaces
ó links) que tiene prova, escribe la ruta completa (path name) de esos 3 nombres:
path name1:
path name2:
path name3:
-2- Supón el siguiente código para el programa ejecuta.c y completa la tabla con los
posibles valores de A, B, C y D obtenidos como resultado de la ejecución de su
correspondiente ejecutable al que llamaremos ejecuta:
_$ ./ejecuta
pid= A ppid= B
Acabo: pid=7511
pid= C ppid= D
/* ejecuta.c */
main()
{
if (fork())
printf("Acabo: pid=%d\n", getpid());
else {
printf("pid=%d ppid=%d\n", getpid(),getppid());
sleep(4);
printf("pid=%d ppid=%d\n", getpid(),getppid());
}
}
A =
B =
C =
D =
Utilización de Sistemas Operativos (USO). Examen Final. 14 Junio 2011
Notas: 15/06/11. Revisión: 17/06/11 de 12.00-13.00. D6-213
NOMBRE y APELLIDOS:
Preguntas de Teoría (2 puntos)
-1- Supón un Sistema de Ficheros formateado para UNIX donde se utilizan 4B para
codificar el número de i-nodo de todo fichero. Explica qué tipo de Sistema de Ficheros
formateado para FAT cumple que el número máximo de ficheros que es capaz de
direccionar coincide exactamente con el número máximo de ficheros que puede tener el
Sistema de Ficheros formateado para UNIX anterior.
Responde indicando el valor de # en la siguiente expresión:
FAT-#
valor de #:
-2- Completa el siguiente listado de llamadas al sistema que sirven para iniciar la
comunicación entre 2 procesos Cliente y Servidor mediante sockets orientados a la
conexión (TCP). Debes colocar un único valor (nombre de una llamada al sistema,
variable...) en todas las partes que encuentres “punteadas”:
Proceso Servidor
Proceso Cliente
fd = socket
.. = ......
bind(..
......(fd
.. = accept(..
.......(cfd
Utilización de Sistemas Operativos (USO). Examen Final. 14 Junio 2011
Notas: 15/06/11. Revisión: 17/06/11 de 12.00-13.00. D6-213
NOMBRE y APELLIDOS:
Shellscript (1.5 puntos)
-1a- Indica justificadamente cual es la función del siguiente shellscript al que
llamaremos valor.sh
m=`expr $1 - 1`
a=1
na=1
for i in `seq $m`
do
aux=`expr $a + $na`
a=$na
na=$aux
done
echo valor'('$1')='$a
Responde a la pregunta indicando el resultado que se obtiene al ejecutar:
_$ valor.sh 2:
_$ valor.sh 3:
_$ valor.sh 4:
_$ valor.sh 5:
_$ valor.sh 6:
-1b- Generaliza la respuesta anterior y dí cuál será el resultado de ejecutar valor.sh
pasándole como argumento un valor n cualquiera ( n > 1 ):
_$ valor.sh n:
Utilización de Sistemas Operativos (USO). Examen Final. 14 Junio 2011
Notas: 15/06/11. Revisión: 17/06/11 de 12.00-13.00. D6-213
NOMBRE y APELLIDOS:
Analizar Código (2 puntos)
Explica cuál es el comportamiento del programa alea.c. Hazlo respondiendo a la
pregunta del final.
/* alea.c */
#define TO1 1
#define TO2 2
char *mto1="Hola\n";
char *mto2="Adios\n";
int main()
{
int num1, num2, i;
num1=genera_aleatorio();
num2=genera_aleatorio();
for(i=0;i<num1;i++)
if(write(TO1,mto1,strlen(mto1))<0) ERROR("write");
for(i=0;i<num2;i++)
if(write(TO2,mto2,strlen(mto2))<0) ERROR("write");
return(0);
}
Supón que la función genera_aleatorio()existe y devuelve un número aleatorio
entre 0 y un valor máximo MAX conocido. La macro ERROR también existe y hace
finalizar el programa tras mostrar por pantalla el correspondiente mensaje de error. En
todo lo que sigue debes suponer que en alea ningún write da error.
Pregunta: indica cuál es el resultado de la ejecución de las siguientes líneas de
comandos:
_$ ./alea >Fsal1
_$ ./alea 2>Fsal2
_$ ./alea >Fsal1 2>Fsal2
Utilización de Sistemas Operativos (USO). Examen Final. 14 Junio 2011
Notas: 15/06/11. Revisión: 17/06/11 de 12.00-13.00. D6-213
NOMBRE y APELLIDOS:
Diseñar Código (2.5 puntos)
Escribe el código de un programa m_count.c que tras ejecutar el programa ejecutable
alea (fuente: alea.c del ejercicio anterior), cuenta todos los mensajes "Hola\n" y
"Adios\n" que alea genera durante su ejecución. El programa m_count finaliza tras
mostrar por pantalla cuántos mensajes de cada tipo ha contabilizado.
A continuación tienes un par de ejemplos de la ejecución de m_count:
_$ ./ m_count
alea genera 5 mensajes Hola y 12 mensajes Adios
_$ ./ m_count
alea genera 6 mensajes Hola y 0 mensajes Adios
Descargar