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