Buenas, estamos resolviendo el punto
7.4 con otro compañero y queriamos compartir lo que pensamos a ver si está bien.
La primer pregunta que tenemos es si hay un 1 de más en el archivo " Rtas correctas - practica.txt" que esta adjunto en este thread, ya que nos dio que la cantidad de bloques a leer es 4113. Y no 41113.
Así lo pensamos:
1) Nos estan diciendo que el objetivo es escribir 1 pagina entera en memoria. Entonces la 1er pregunta es: Cuantos bloques van a entrar en esa pagina?
Cada pagina son 4MB. Esto lo sabemos porque existen en total 32 marcos y la memoria real es de 128MB. 128MB/32=4MB
Cada bloque 1KB.
Entonces: 4MB/1KB = 4096 bloques entran en cada pagina.
Conclusion: vamos a traer del disco desde el bloque 4000 (esto es segun el enunciado) al bloque 8096 (4000 + 4096).
2) Necesitamos saber cuantos punteros va a haber en cada bloque
Las direcciones nos dicen que son de 32 bits y cada bloque es de 1KB.
1KB = 1024 bytes
32 bits = 4bytes
Entonces: 1024 bytes / 4 bytes = 256 punteros entran en cada bloque.
3) Necesitamos saber en donde esta el bloque número 4000 dentro del esquema de inodos.
Necesitamos saber esto para poder entender cuantos bloques vamos a tener que leer para poder acceder a esos 4096 bloques que queremos llevar a memoria.
* Los primeros 10 bloques son punteros directos.
* Luego hay un bloque de punteros indirectos simples. Ahi se va a acceder a 256 bloques de datos. Del bloque 11 al bloque 267. Sabemos que son 256 porque entran solamente 256 ptrs en un bloque.
* Luego hay un bloque de punteros indirectos dobles. Si queremos saber a cuantos bloques accedemos por aca hay que hacer: 256^2=65536 bloques.
La conclusion es que el bloque 4000 se accede a traves del esquema de inodos indirectos dobles.
Para entender cuantos punteros se iban a leer hice estas cuentas:
4000/256 = 15,625. Entonces a traves del puntero 15 que está en el 1er bloque de punteros termino accediendo al bloque 4000 (el ptr 15 accede a otro bloque de punteros y uno de esos apunta al bloque 4000).
8096/256 = 31,6. Entonces a traves del puntero 31 (que esta en el 1er bloque de punteros) termino accediendo a otro bloque de punteros que tiene el puntero que apunta al bloque 8096.
Bueno, todos los punteros entre el 15 y el 31 (incluidos) estan en el mismo bloque. Asi que ahi tenemos 1 bloque a leer.
Luego tenemos cada bloque que esta siendo apuntado por los punteros que van del 15 al 31. Asi que ahi tenemos 16 bloques más a leer.
Finalmente tenemos leidos: 4096 (estos son los bloques de datos) + 1 bloque (el primer bloque de punteros del esquema de indirectos dobles. Ojo que este bloque no es el que vive en la tabla de inodos, sino que es el primero al que la tabla de inodos apunta) + 16 bloques = 4113.
Asi llegamos a que la rta es 4113. Pero no sabemos si no nos estamos comiendo algo más.
Perdon si no quedó muy claro, es dificil de explicar todo con palabras. Adjunto un dibujo.
Si alguien más lo hizo y quiere compartir su rtado se lo re agradezco!
Saludos
Otra vez yo. Me di cuenta de algunos errores en esta parte:
(01-03-2022 18:28)OrnellaSnm escribió: [ -> ]Para entender cuantos punteros se iban a leer hice estas cuentas:
4000/256 = 15,625. Entonces a traves del puntero 15 que está en el 1er bloque de punteros termino accediendo al bloque 4000 (el ptr 15 accede a otro bloque de punteros y uno de esos apunta al bloque 4000).
8096/256 = 31,6. Entonces a traves del puntero 31 (que esta en el 1er bloque de punteros) termino accediendo a otro bloque de punteros que tiene el puntero que apunta al bloque 8096.
Tendria que haberle restado al 4000 los bloques que ya existen en el esquema entero de inodos. Que son los 10 directos y los 256 del inodo indirecto simple. Y a eso dividirlo por 256.
Lo mismo para los 8095.
(4000 - 10 - 256) / 256 = 14,58
(8095 - 10 - 256) / 256 = 30,58
Y del 30 al 14 hay de hecho 17 bloques de punteros que se leen, no 16 como dije antes.
Asi que la rta final seria 4114