Examen USO 2009-2010-Q1
Transcripción
Examen USO 2009-2010-Q1
Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 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 una línea de comandos que imprima por pantalla la línea número 8 de un fichero file. Debes suponer que file contiene más de 8 líneas -2- Escribe y razona cuáles son los pasos y comandos necesarios para crear una librería estática (con extensión .a) que contenga el fichero correspondiente al programa fuente escrito en lenguaje C con nombre util_math.c -3- Suponiendo que te encuentras en un entorno Windows-XP, escribe el código que añadirías tras la siguiente llamada a WaitForMultipleObjects para que, una vez detectada la finalización de todos los procesos hijos, se muestren los códigos de finalización de cada uno de ellos: WaitForMultipleObjects(N, handles, TRUE, INFINITE); Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Preguntas de Laboratorio (continuación) -4- Sea el programa ejecutable prueba que proviene del siguiente código al que llamamos prueba.c Suponiendo que te encuentras en un entorno UNIX, escribe cuál será el resultado de ejecutar el comando: _$ prueba prueba.c Debes suponer que ninguna llamada al sistema dará error prueba.c main(int argc,char *argv[]) { int i; char *c="fu"; i=open(argv[1],O_RDWR); fork(); write(i,c,2); } -5- Supón que en un entorno UNIX y como respuesta a la ejecución del programa ejecutable programa, el Intérprete de Comandos (shell) muestra el siguiente mensaje de error: _$ programa Segmentation fault (core dumped) Explica de qué está informando el shell con el anterior mensaje y dí cómo crees que ha conseguido dicha información Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 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 dispones del programa fuente escrito en C prog.c y generas los ejecutables prog y prog.pg con los siguientes comandos: _$ cc prog.c –o prog _$ cc –pg prog.c –o prog.pg Supón ahora que existe la herramienta time para ejecutar un programa y a la vez, conocer con precisión el tiempo total de uso de CPU que dicho programa ha necesitado durante su ejecución. Al utilizar time con los ejecutables prog y prog.pg se obtiene: _$ time prog ...ejecución de prog... total CPU time = A _$ time prog.pg ...ejecución de prog.pg... total CPU time = B Indica si el valor A crees que será mayor, menor ó igual que el valor B y porqué -2- Un sistema de ficheros formateado para UNIX utiliza bloques de 4Kbytes y direcciones de disco de 4 bytes. Los i-nodos contienen 8 direcciones de disco para bloques de datos, una dirección de bloque índice indirecto simple y una dirección de bloque índice indirecto doble. Escribe cuál es el tamaño máximo de fichero que es capaz de direccionar este sistema de ficheros Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Preguntas de Teoría (continuación) -3- Sea el programa ejecutable prueba que proviene del siguiente código al que llamamos prueba.c Suponiendo que te encuentras en un entorno UNIX, y que en el directorio donde ejecutas el programa prueba no existe ningún fichero llamado fich, escribe cuál será el resultado de ejecutar _$ prueba y porqué prueba.c main() { int fd[2]; close(0); close(2); pipe(fd); if(!fork()) execlp("ls","ls","fich",NULL); else execlp("sort","sort",NULL); } -4- Dado un proceso P que posee una umask de 123 dí con qué permisos se crea el fichero foo.txt utilizado en la siguiente llamada a open: open(“foo.txt”, O_WRONLY|O_CREAT|O_TRUNC, 0765); Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Shell (1 punto) Escribe un shellscript para UNIX que cada N segundos compruebe cuántos de los dispositivos de almacenamiento definidos en el sistema cumplen la condición cond: el dispositivo posee un porcentaje de ocupación superior al M%. Los valores de N y M son los dos únicos parámetros que recibirá el shellscript, ambos deben ser valores positivos y todas éstas condiciones serán indispensables para que el shellscript comience la búsqueda. Como resultado de cada búsqueda, el shellscript imprimirá por pantalla un mensaje que contendrá 2 valores: el número de dispositivos que cumplen cond y el número de dispositivos que no cumplen cond NOTA: utiliza en tú diseño la información que te ofrece el comando df respecto de cada dispositivo de almacenamiento del sistema (nombre, espacio total, espacio ocupado, porcentaje de ocupación y punto de montaje): _$ df Filesystem /dev/sda1 /dev/sda3 blocks 16758192 16758192 Used 8566144 9974040 Use% 52% 60% Mounted on / /users3 Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Analizar Código (2 puntos) Escribe cual es el resultado de ejecutar el programa analizar en el caso indicado en (a) y contesta a la pregunta de (b). Supón que analizar proviene del siguiente código escrito en C, analizar.c, donde ninguna de las llamadas al sistema da error: analizar.c void func(); int fd1=1, fd3=3; main(int argc, char *argv[]) { int fd0, fd2, fd4; printf("Primera\n"); fd0=open(argv[1],O_RDWR|O_CREAT|O_TRUNC,0766); func(); if(!fork()) { close(fd1); dup(fd0); func(); printf("Cuarta\n"); } else { wait(NULL); fd4=open(argv[1],O_WRONLY); lseek(fd4,8,1); write(fd4,"PonemosUna Mas\n",15); } } void func() { write(fd1,"Segunda",7); write(fd3,"Tercera\n",8); } (a) _$ analizar fichero (b) Explica para qué sirve el flag O_TRUNC que aparece en la primera llamada a open del código de analizar.c Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: Diseñar Código (2 puntos) Escribe un programa en lenguaje C para UNIX a cuyo ejecutable llamaremos whonew El programa whonew funciona exactamente igual que el comando who pero posee una funcionalidad añadida: la ejecución “rápida” del comando who. El programa whonew sólo podrá ser invocado sin parámetros ó con un único parámetro igual a –r. Cuando whonew se invoca sin parámetros funciona exactamente igual que el comando who (ver (1) de Ejemplos de Uso). Cuando whonew se invoca con el parámetro –r el programa sólo mostrará por pantalla un mensaje con el número total de usuarios que actualmente se encuentran en sesión (ver (2) de Ejemplos de Uso). Cuando whonew se invoca con más de un parámetro o con un parámetro distinto de –r, el programa mostrará un mensaje en pantalla sobre su uso y luego finalizará (ver un ejemplo en (3) de Ejemplos de Uso). En el diseño de whonew sólo puedes utilizar el ejecutable del comando who Ejemplos de Uso: supondremos una sesión de trabajo en la que hay 3 usuarios que iniciaron su sesión durante la mañana del 7 de Enero: (1) ejemplo de invocación de whonew sin parámetros (= who): _$ whonew NAME user1 user2 user3 TERM pts/1 pts/3 pts/2 TIME Jan 7 8:28 Jan 7 10:42 Jan 7 11:29 COMMENTS (maqusr1.ac.upc.es) (maqusr2.ac.upc.es) (maqusr3.ac.upc.es) (2) ejemplo de invocación de whonew con el parámetro -r: _$ whonew -r #users = 3 (3) ejemplo de invocación incorrecta de whonew: _$ whonew –q Uso: whonew [-r] _$ NOTA: para escribir el código de whonew.c puedes utilizar la página en blanco que tienes a continuación: Utilización de Sistemas Operativos. Examen Final 14 Enero 2010 Notas: 22/01/10. Revisión: 26/01/10 de 10.30-13.30 y de 15.00-17.00. D6-213 NOMBRE y APELLIDOS: