Closed matiasfdevecchi closed 3 years ago
¡Buenas!
msync()
sirve para forzar la sincronización entre el archivo real y la memoria mapeada (pueden chequear el manpage para más info). Digo "forzar" porque el SO bajo ciertos criterios actualiza la memoria mapeada con mmap()
sin necesidad de hacer msync()
, es por eso que hacemos una copia (memcpy()
) y trabajamos sobre ella en vez de trabajar directamente con la memoria mapeada.También, es por eso que cuando se cumpla el tiempo de sincronización la idea es actualizar el contenido de la memoria mapeada con el de la copia (otro memcpy()
pero en sentido opuesto) e inmediatamente forzar esa sincronización con msync()
.
Exactamente, con chequear la existencia de ambos archivos (SuperBloque.ims y Bloque.ims) se puede asumir que el FS ya fue creado.
Sí, de hecho para las pruebas siempre les vamos a dar valores iguales a 2^n
(tanto para blocks como para block_size), así que no se preocupen porque el bitmap nunca tendrá bits "innecesarios".
Saludos
Ok, entonces el objetivo del blocks copiado es para que solamente se sincronice cuando lo hacemos nosotros y no porque al SO "le pintó" y de esa manera comprobar que hagamos bien la sincro, no?
Exactamente
Buenas, tengo una duda sobre esta parte del enunciado. Dice de hacer mmap() para tener el archivo en memoria, y también msync() para sincronizarlo con el archivo en el File System, hasta ahi todo perfecto. No me queda en claro el rol de lo que hay que hacer con memcpy(). Tenemos que hacer una copia de lo mapeado? Cual sería el objetivo?
Por lo que entiendo, no modificamos el archivo mapeado, sino la copia de este. Y msync lo usamos para qué entonces? Para sincronizar el copiado con el mapeado o para sincronizar el mapeado con el archivo real? (No recuerdo bien, pero segun entendí msync es para sincronizar con el archivo real)
Edit: aprovecho para dejar una duda más. En el enunciado dice que no se proveeran archivos inconsistentes. Entonces, para chequear si ya hay un FS existente, podemos chequear si existe SuperBloque.ims y listo? O a lo sumo SuperBloque.ims y Bloque.ims?
Edit2: La cantidad de blocks será siempre múltiplo de 8? Para saber si el bitarray tendrá bits innecesarios o no