Utilización de Sistemas Operativos. Examen Final 11 Enero 2008 Notas: 22/01/08. Revisión: 24/01/08 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Preguntas de Laboratorio (2.5 puntos) Contesta justificadamente a las siguientes preguntas. Utiliza para ello el espacio proporcionado. -1- Escribe la línea de comandos que liste los ficheros del directorio prueba1 que contengan un número en la cuarta posición de su nombre -2- Explica si existe alguna diferencia en la salida que producen cada uno de estos dos comandos: comando1: grep error </usr/include/errno.h comando2: grep error /usr/include/errno.h -3- Supón que en tú directorio actual hay un fichero Makefile que contiene la regla correcta para obtener el objetivo denominado prog. En estas condiciones, explica a qué es debido y qué efecto tiene el mensaje ’prog’ is up to date que obtenemos tras ejecutar el comando make prog -4- Supón que en un entorno UNIX te encuentras en tú directorio de trabajo y que tras ejecutar el comando ls -l –i obtienes el siguiente resultado: 973 -rw-r--r-973 -rw-r--r-972 lrwxrwxrwx 2 marc alumne 2 marc alumne 1 marc alumne 44 2008-01-07 17:02 file 44 2008-01-07 17:02 hfile 4 2008-01-07 17:02 sfile -> file --4a- Supón que en ésta situación ejecutas el comando rm file. Escribe cuál será el resultado tras ejecutar de nuevo el comando ls -l –i Utilización de Sistemas Operativos. Examen Final 11 Enero 2008 Notas: 22/01/08. Revisión: 24/01/08 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Preguntas de Laboratorio (continuación) --4b- Estando en la nueva situación de 4a, indica cuál es el resultado que obtienes tras ejecutar cada uno de los siguientes comandos: comando1: cat hfile comando2: cat sfile -5- Sabiendo que la variable objFolder contiene el nombre de un directorio, explica cuál es la información que sobre sus ficheros está buscando la siguiente orden del shell en un entorno Windows-XP: For Each FileName in objFolder.Items if(objFolder.GetDetailsOf(FileName, 2) = “Acceso Directo”) then . . . End if Next -6- Dado el siguiente extracto de código de un proceso servidor que utiliza el mecanismo de comunicación de sockets, explica qué diferencia existe entre los descriptores sfd y afd devueltos por las llamadas socket y accept int sfd, afd; sfd = socket(AF_INET, SOCK_STREAM, 0); . . . afd = accept(sfd, NULL, NULL); Utilización de Sistemas Operativos. Examen Final 11 Enero 2008 Notas: 22/01/08. Revisión: 24/01/08 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Preguntas de Teoría (2.5 puntos) Contesta justificadamente a las siguientes preguntas. Utiliza para ello el espacio proporcionado. -1- En un entorno UNIX, explica qué es y qué significado tiene el número mágico ó magic number que aparece al comienzo de algunos ficheros -2- Sabiendo que la llamada al sistema exit en un entorno UNIX posee la siguiente sintaxis: void exit(int status), explica para qué sirve y qué efecto no deseable sobre un proceso tiene la ejecución de dicha llamada. Explica también cuándo desaparece dicho efecto no deseable -3- Supón que nos encontramos en un Sistema de Ficheros UNIX con tamaño de bloque de 512B y que hemos generado un fichero core. Tras preguntar a user1 y user2 sobre cuál es el comando que utilizarían para conocer el tamaño que ocupa el fichero core en este Sistema de Ficheros, obtenemos las siguientes respuestas: comando de user1: _$ wc –c core 8483328 core Respuesta de user1: “core ocupa 8483328 B” comando de user2: _$ du –s core 16592 core Respuesta de user2: “core ocupa 16592 x 512B = 8495104 B” Suponiendo que los dos resultados se consideran válidos, explica a qué es debida la diferencia de tamaño del fichero core en las respuestas de user1 y user2 Utilización de Sistemas Operativos. Examen Final 11 Enero 2008 Notas: 22/01/08. Revisión: 24/01/08 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Preguntas de Teoría (continuación) -4- En la siguiente invocación a la llamada lseek, explica cuál es el significado del segundo y último parámetros (-2L y SEEK_CUR) e indica también cual será el efecto de utilizar dicha llamada dentro del código de un programa lseek("file",-2L,SEEK_CUR); -5- Suponer la siguiente salida que en un entorno UNIX obtenemos al ejecutar el comando size sobre el fichero ejecutable a.out: _$ size a.out text data 79606 1536 bss 916 filename a.out Sabemos que ésta es una información incompleta sobre el tamaño en bytes que ocupará en memoria el proceso que ejecute a.out: segmento de Texto (text), Datos inicializados (data) y no inicializados (bss ó block started by symbol). Con estos datos, indica cual será la cantidad total de memoria en bytes que necesitará el proceso que ejecute a.out y explica por qué en la salida del comando size no obtenemos información de ésta cantidad total Nota: si necesitas algún dato numérico, puedes dejarlo indicado con un nombre que lo represente de forma clara -6- Escribe una ventaja por la que crees que sería útil disponer de una nueva función malloc que nos permitiese seleccionar si la reserva de memoria la queremos hacer de la zona de crecimiento dinámico de datos (Heap) ó del segmento de Pila Utilización de Sistemas Operativos. Examen Final 11 Enero 2008 Notas: 22/01/08. Revisión: 24/01/08 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Shell (2 puntos) -1- (1 punto) Dentro del conjunto de metacaracteres utilizados para la redirección de la entrada/salida de un proceso, el intérprete de comandos bash (bourne again shell) entiende la siguiente notación: digitoA>&digitoB. Utilizar ésta notación en una línea de comandos que ejecuta a.out, indica que se debe redireccionar el descriptor dado en el digitoA al mismo fichero al que está asociado el descriptor del digitoB Teniendo en cuenta lo anterior y sabiendo que bash procesa las líneas de comandos de izquierda a derecha, explica cuál es la diferencia entre ejecutar las siguientes 2 líneas de comandos: Línea de comandos1: a.out >file 2>&1 Línea de comandos2: a.out 2>&1 >file -2- (1 punto) Escribe un shellscript diseñado para ser lanzado en background y que como máximo permanecerá vivo T segundos. Durante su tiempo de vida, el shellscript comprobará cada S segundos qué procesos están ejecutando el programa COMM. Para todos los procesos encontrados imprimirá un mensaje por pantalla indicando el identificador del proceso (PID) y a continuación lo matará. Los valores de T, S y COMM serán parámetros del shellscript. T deberá ser un valor múltiplo de S, siendo ésta condición indispensable para que el shellscript comience la comprobación Utilización de Sistemas Operativos. Examen Final 11 Enero 2008 Notas: 22/01/08. Revisión: 24/01/08 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Analizar Código (1.5 puntos) Escribe cual es el resultado de ejecutar el siguiente programa en los 2 casos que se indican (a y b). Supón que el ejecutable del programa se llama analizar y que ninguna de las llamadas al sistema dará error main() { int id,estado,fd; printf("linea n1\n"); if((id = fork())==0) { close(1); fd=open("salida.dat",O_WRONLY|O_CREAT|O_TRUNC,0777); write(fd,"linea n2\n",9); exit(1); } else { while(wait(&estado)!=id); write(1,"linea n3\n",9); exit(0); } } a) analizar b) analizar >salida.dat Utilización de Sistemas Operativos. Examen Final 11 Enero 2008 Notas: 22/01/08. Revisión: 24/01/08 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Diseñar Código (1.5 puntos) Escribe un programa en lenguaje C para UNIX a cuyo ejecutable llamaremos greplc El programa greplc, tras recibir como parámetros un patrón y varios nombres de ficheros, muestra por pantalla el número de líneas y el nombre de cada fichero que contenga el patrón. A continuación tienes indicado cómo sería la sintaxis de greplc y un ejemplo de su funcionamiento: sintaxis: greplc patron file1 [file2. . .fileN] (1) ejemplo de uso : _$ greplc main file1 file2.c file3.c 35 file2.c 40 file3.c (1) Suponemos que el patrón main sólo aparece en file2.c y file3.c, que file2.c tiene 35 líneas y file3.c tiene 40 líneas En el diseño de greplc debes utilizar los ejecutables de los comandos grep y wc y tener en cuenta las siguientes consideraciones de funcionamiento: _$ grep patron file muestra por pantalla todas las líneas de file que contengan patron Considera que como resultado de su ejecución grep devuelve 0 si encuentra alguna aparición de patron, 1 si no encuentra ninguna y 2 si se produce algún error _$ wc -l file muestra por pantalla el número de líneas y el nombre de file