Diferencia entre revisiones de «Final Agosto 2015 (Sistemas Operativos)»
De Cuba-Wiki
(Página creada con «Final escrito tomado por Sergio Yovine el 6/8/15. Eramos varios, por eso fue escrito, pero lo corrigió en el momento y nos hizo preguntas sobre la corrección. '''Ejerci...») |
(Corrijo error en ejercicio 4) |
||
(No se muestra una edición intermedia de otro usuario) | |||
Línea 1: | Línea 1: | ||
Final escrito tomado por Sergio Yovine el 6/8/15. | Final escrito tomado por Sergio Yovine el 6/8/15. | ||
'''Ejercicio 1 - Sobre Estados de Procesos''' | '''Ejercicio 1 - Sobre Estados de Procesos''' | ||
Línea 50: | Línea 48: | ||
| while(1) { | | while(1) { | ||
flag[0] = 1; | flag[0] = 1; | ||
waitfor(flag[1] == 0); | |||
/*Sección Crítica*/ | /*Sección Crítica*/ | ||
flag[0] = 0; | flag[0] = 0; | ||
Línea 59: | Línea 57: | ||
while(flag[0] == 1) { | while(flag[0] == 1) { | ||
flag[1] = 0; | flag[1] = 0; | ||
waitfor(flag[0] == 0); | |||
flag[1] = 1; | flag[1] = 1; | ||
} | } |
Revisión actual - 00:05 14 feb 2016
Final escrito tomado por Sergio Yovine el 6/8/15.
Ejercicio 1 - Sobre Estados de Procesos
- Dar dos ejemplos de transición de running a ready.
- ¿Se puede ir directo de waiting a running? Explicar las razones.
- Cuál es la diferencia entre mode switch y context switch?
Ejercicio 2 - Sobre Creación de Procesos
- Dibujar el mapa de memoria de un proceso.
- Qué pasa con la memoria cuando se crea un proceso hijo? Explicar los casos de fork() y vfork().
- Qué es Copy on Write? Cómo funciona en sistemas con Paginación?
- Cuántas veces imprime "Hello, world!" el siguiente programa? Explicar. ¿Qué pasa si se usa vfork() en lugar de fork()?
foo () {
int i; for(i = 0; i<3; i++) fork(); printf("Hello, world!\n"); } |
Ejercicio 3 - Sobre Entrada y Salida
- Explicar ventajas y desventajas de 3 estrategias de E/S a disco. (Se refiere a algoritmos de scheduling de disco)
- Dado un disco de 100 cilindros, numerados de 0 a 99. Determine el orden de visita de los cilindros para una de las estrategias anteriores. Considere que desplazar el cabezal de un cilindro a uno consecutivo toma una unidad de tiempo y que se empieza en el cilindro 0.
Tiempo | 0 | 10 | 20 | 80 | 90 | 100 |
Cilindro | 19 | 65 | 17 | 55 | 2 | 90 |
Ojo: Los valores no son los del examen porque no los recuerdo, pero el ejercicio era de este tipo.
Ejercicio 4 - Sobre algoritmos concurrentes
- Qué es la instrucción Test and Set? Para qué sirve? Justificar.
- Dar dos soluciones (al menos una correcta) para el problema de la cena de los filósofos. Compararlas.
- Dos procesos, P0 y P1, ejecutan los siguientes programas
P0 | P1 |
while(1) {
flag[0] = 1; waitfor(flag[1] == 0); /*Sección Crítica*/ flag[0] = 0; } |
while(1) { flag[1] = 1; while(flag[0] == 1) { flag[1] = 0; waitfor(flag[0] == 0); flag[1] = 1; } /*Sección Crítica*/ flag[1] = 0; } |
- Hay exclusión mutua? Justificar.
- Están libres de deadlock? Justificar.
- Hay inanición de algún proceso? Justificar.
- Si P1 empieza a ejecutar el código de P0, cambiando flag[0] por flag[1], qué ocurriría?
Ejercicio 5 - Sobre Seguridad y Protección
- Qué es el Hash de una vía? Dar 2 usos y justificar.
- Qué es la encriptación con clave asimétrica? Dar 2 usos y justificar.
- Qué es y para qué se usa el bit setuid? Dar un caso de uso y un peligro, justificar.