Final Agosto 2015 (Sistemas Operativos)

De Cuba-Wiki

Final escrito tomado por Sergio Yovine el 6/8/15.

Ejercicio 1 - Sobre Estados de Procesos

  1. Dar dos ejemplos de transición de running a ready.
  2. ¿Se puede ir directo de waiting a running? Explicar las razones.
  3. Cuál es la diferencia entre mode switch y context switch?

Ejercicio 2 - Sobre Creación de Procesos

  1. Dibujar el mapa de memoria de un proceso.
  2. Qué pasa con la memoria cuando se crea un proceso hijo? Explicar los casos de fork() y vfork().
  3. Qué es Copy on Write? Cómo funciona en sistemas con Paginación?
  4. 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

  1. Explicar ventajas y desventajas de 3 estrategias de E/S a disco. (Se refiere a algoritmos de scheduling de disco)
  2. 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

  1. Qué es la instrucción Test and Set? Para qué sirve? Justificar.
  2. Dar dos soluciones (al menos una correcta) para el problema de la cena de los filósofos. Compararlas.
  3. Dos procesos, P0 y P1, ejecutan los siguientes programas
P0 P1
while(1) {
 flag[0] = 1;
 while(flag[1] == 0) {};
 /*Sección Crítica*/
 flag[0] = 0;

}

while(1) {

 flag[1] = 1;
 while(flag[0] == 1) {
   flag[1] = 0;
   while(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

  1. Qué es el Hash de una vía? Dar 2 usos y justificar.
  2. Qué es la encriptación con clave asimétrica? Dar 2 usos y justificar.
  3. Qué es y para qué se usa el bit setuid? Dar un caso de uso y un peligro, justificar.