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:

Documentos relacionados