sisoputnfrba / so-commons-library

TADs de uso comun en aplicaciones desarrolladas en C
http://sisoputnfrba.github.io/so-commons-library/
GNU General Public License v3.0
106 stars 174 forks source link

verificación de creación del bitmap - filesystem #143

Closed lautaropetronacci closed 3 years ago

lautaropetronacci commented 3 years ago

Hola, como están? Estabamos terminando de codear la creación del bitmap del superbloque y nos entro una duda sobre si estabamos pensandolo bien.

Esta es la estructura del superbloque que contiene el bitmap:

typedef struct {
    uint32_t Block_size;
    uint32_t Blocks;
    char* Bitmap;
}superBloque;

Y esto es lo que codeamos hasta ahora:

void generarSuperBloque(){ // crea el archivo solicitado
    char * path = string_new();
    string_append(&path, PUNTO_MONTAJE);
    string_append(&path, "/SuperBloque.ims");

    int cantidadDeBloques = (CANTIDAD_BLOQUES/8)+1;
    superBloque* supBloq;

    int fd;
    fd = shm_open(path, O_CREAT | O_RDWR, 00600);
    if (fd == -1){
        printf("error con shared memory");
        exit(1);
    }
    supBloq = mmap(NULL, sizeof(superBloque), PROT_WRITE, MAP_SHARED, fd, 0);
    t_bitarray* bitmap = bitarray_create_with_mode(supBloq->Bitmap, cantidadDeBloques, LSB_FIRST);

    msync(supBloq->Bitmap , cantidadDeBloques,MS_SYNC);

    munmap(supBloq,cantidadDeBloques);
    close(fd);} 

Nosotros tenemos pensado mapear todo el superbloque y luego extraer o sacar la variable bitmap y crearlo con el bitarray_create_with_mode. La duda que tenemos es como sincronizar la creacion del bitmap con lo que esta escrito en el archivo superbloque. Nosotros deberiamos inicializarlo luego de hacer el mmap y el bitarray_create_with_mode, y luego hacer un msync en el archivo superBloque?

Lo pensamos asi pero sinceramente estamos un poco bloqueados con este tema, no terminamos de entender las funciones mmap/memcpy/msync.