Actividad X02. Pero, ¿realmente escribe en el disco?

Quizás te hayas planteado alguna vez por qué pierden información las aplicaciones cuando falla el sistema o se apaga súbitamente la máquina, aún después de haber escrito sobre un fichero. El caso es que, cuando un programa ejecuta una operación de escritura sobre un fichero, las cosas no son tan sencillas como parecen.

En esta actividad vamos a explorar la estrategia que siguen las funciones de biblioteca y el propio sistema operativo para hacer más eficiente la escritura sobre un dispositivo tan lento como el disco.

Qué hay que hacer:

  1. Probad en vuestra cuenta de la sisd00 el programa genera_datos que te proporcionamos (no termina nunca) y seguid la evolución del tamaño del fichero al que redireccionéis la salida. Se sugiere abajo la forma de hacerlo, aunque también podéis ejecutar el programa sin “&” en una ventana del terminal y seguir su evolución en otra ventana.
./genera_datos > fichero &
ls -l fichero
ls -l fichero
...
  1. ¿Qué observáis de particular en cómo crece el fichero creado? ¿Es coherente con el código de genera_datos.c (en el mismo directorio)? Discutid esto en el grupo y tratar de formular una hipótesis de lo que sucede.

  2. Utilizad ahora una nueva versión del programa genera_datos_sys que te proporcionamos. Esta versión prescinde de la biblioteca de C. ¿Qué ocurre? Revisad la hipótesis del punto anterior.

  3. En clase se recogerán las hipótesis y se discutirán. El profesor propondrá pruebas adicionales. Recoge en tu cuaderno las conclusiones.

  4. Lee ahora el siguiente texto extraído del libro de Rockhind sobre lo que hace la llamada al sistema write() contado desde el punto de vista del sistema operativo:

    (…) He tomado nota de tu petición (…). He copiado tus datos satisfactoriamente y comprobado que hay espacio suficiente en el disco. Más tarde, cuando pueda y si sigo vivo, intentaré poner tus datos en su lugar correspondiente del disco. Si entonces descubro un error, intentaré escribir algo en la consola, pero no te lo comunicaré directamente (igual entonces ya has acabado). Si tú, u otro proceso, intentáis leer los datos antes de que los escriba, te los proporcionaré directamente desde el buffer-cache en memoria, de forma que, si todo va bien, no podrás saber si he completado la escritura ni cuándo lo he hecho. No preguntes nada. Confía en mí y agradéceme mi rápida respuesta, que me imagino es lo que realmente te importa.

  5. El profesor proporcionará una descripción sobre los diferentes niveles de buffering en el sistema. Toma notas, que podrás usar para preparar un cuestionario de evaluación posterior.

Dedicación

En clase dedicaremos hora y cuarto a esta actividad.

Tiempo estimado a dedicar fuera de clase: 20 minutos.

Entregables

No hay que entregar ningún documento, pero las notas que tomes podrás usarlas para preparar una actividad de evaluación posterior.

Evaluación

La actividad se evalúa en una actividad de evaluación posterior.