Solucion segundo parcial 2016 problema 2.3 posible error

Solucion segundo parcial 2016 problema 2.3 posible error

de Federico Ciuffardi Alves -
Número de respuestas: 6

En la solucion se hace lo siguiente para checkear que no se comparten bloques:

// Chequeo que no se compartan bloques
for ( i=1; i < MAX_SECTORS_ON_DISK; i++ ) {
  if ( F[i] > 0 ) {
    if ( ind_usados[F[i]] ) {
    return False;
  } else {
    ind_usados[F[i]] = True;
  }
}

Segun entiendo esto chequea que no existan dos entradas que "apunten" a lo mismo en la FAT pero creo que estaria faltando considerar la existencia de dos entries (o mas) que apunten a lo mismo en su comienzo.

En respuesta a Federico Ciuffardi Alves

Re: Solucion segundo parcial 2016 problema 2.3 posible error

de Santiago Iturriaga -

Hola:

Es correcto lo que decís. En la solución falta chequear que el comienzo de cada archivo/directorio sea único.

Saludos,

Santiago.

En respuesta a Santiago Iturriaga

Re: Solucion segundo parcial 2016 problema 2.3 posible error

de Gaston Daniel Barreto Sugliani -
Hola,


Pero si se verifica que no hallan dos dir_entries con el mismo valor, entonces no se permitirían hard links. La existencia de hard links no implica dos archivos distintos que compartan bloques, es un archivo solo, con dos referencias.

En respuesta a Gaston Daniel Barreto Sugliani

Re: Solucion segundo parcial 2016 problema 2.3 posible error

de Santiago Iturriaga -

Si, es verdad lo que decís pero en este caso la letra no menciona que el sistema de archivos soporte hard links. Lo correcto entonces es considerarlo como un error como decía el compañero antes.

Subí una nueva versión de la solución que incluye el chequeo del comienzo en la FAT del que hablamos.

Saludos,

Santiago.

En respuesta a Santiago Iturriaga

Re: Solucion segundo parcial 2016 problema 2.3 posible error

de Hugo Sebastian Rodriguez Reyes -
En esta solución no podría pasar que indUsados sea true pero en realidad no hayan bloques en la FAT “apuntados” por dos archivos distintos?

Porque la primera vez, para un archivo, indUsados queda en true por ejemplo y luego ningún otro archivo comparte sus bloques.

Entonces estaría devolviendo false, cuando en realidad esta mal, no?

En respuesta a Hugo Sebastian Rodriguez Reyes

Re: Solucion segundo parcial 2016 problema 2.3 posible error

de Santiago Iturriaga -

Hola:

No termino de entender el caso que estas describiendo. Podrías dar un ejemplo en el que sucede?

Si noté que aún falta un chequeo con el indice comienzo que veníamos hablando con el compañero anterior. Donde dice:

ind_usados[actual.comienzo] = True;

Debría decir:

if (actual.tamaño>0) ind_usados[actual.comienzo] = True;

Esto es porque si el archivo tiene tamaño 0 entonces no tiene ningún bloque asignado. En este caso el campo comienzo no apunta a ningún bloque.

Saludos,

Santiago.