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.
Eramos varios, por eso fue escrito, pero lo corrigió en el momento y nos hizo preguntas sobre la corrección.


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

  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;
 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

  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.