Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consulta Esquema de Archivos #4355

Open
1 task done
zBlooDy opened this issue Oct 20, 2024 · 1 comment
Open
1 task done

Consulta Esquema de Archivos #4355

zBlooDy opened this issue Oct 20, 2024 · 1 comment

Comments

@zBlooDy
Copy link

zBlooDy commented Oct 20, 2024

🛠️ Lenguaje

Go

🖋️ Descripción

Buenas, tenia algunas dudas respecto a la parte de esquema de archivos de FileSystem, estuve viendo los conceptos teoricos para poder encararlo en el TP y me surgieron las siguientes cuestiones:

  1. Por cada archivo voy a tener 32 bloques para guardar el contenido del mismo? Porque no termine de cerrar la idea del puntero de bloques que sea de 4 bytes
  2. En caso de que sean 32 bloques, a partir de los archivos de metadata voy a saber: Cual es el tamaño de cada bloque (haciendo size/32?) y donde esta su bloque de indice ?
  3. La estructura del contenido de bloques.dat seria el archivo, bloque de indice y los bloques de datos del propio archivo?

Capaz estoy medio mezclado con los conceptos, los estoy tratando de ir incorporando ya que en clases todavia no los vimos, muchas gracias por la comprension

📔 Citas del enunciado/videos

image

💭 Soluciones posibles

No response

📝 Normas del foro

  • Leí los lineamientos del foro
@RaniAgus
Copy link
Contributor

¡Buenas! Probablemente cuando lleguen a ver File System en la parte teórica de la materia se entienda un poco mejor, pero mientras voy adelantando un par de respuestas:

  1. El bloque de punteros es un bloque que, en lugar de contener datos, contiene varios enteros no signados de 4 bytes pegados uno al lado del otro indicando el número de bloque al cual ir a buscar el dato.

Por ejemplo, si el block_size vale 16, index_block vale 10 y los datos están en los bloques 4, 7 y 2, entonces el contenido del bloque 10 en hexadecimal se va a ver así:

image

El primer bloque del archivo se encuentra en la posición 4, el segundo es el 7 y así... Esto significa que cada archivo va a tener una cantidad máxima de block_size / sizeof(uint32_t) bloques para guardar el contenido del mismo, ya que cada archivo tiene un único bloque de punteros.

  1. El block_size es el mismo para todos y se encuentra en el archivo de configuración, y la forma de encontrar el bloque de punteros es utilizando el valor de index_block de cada archivo de metadata. Siguiendo con el ejemplo de antes, el puntero de bloques se encuentra en la posición 16 * 10 = 160 del archivo bloques.dat.

  2. El contenido de bloques.dat simplemente es un archivo con bytes. Completando con el ejemplo, si el size del archivo es de 46 bytes y contiene "This is what you asked for, heavy is the crown", entonces el bloques.dat se va a ver así (del bloque 0 al 10):

0x00000000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x00000010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x00000020: 79 20 69 73 20 74 68 65  20 63 72 6f 77 6e 00 00  |y is the crown..|
0x00000030: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x00000040: 54 68 69 73 20 69 73 20  77 68 61 74 20 79 6f 75  |This is what you|
0x00000050: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x00000060: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x00000070: 20 61 73 6b 65 64 20 66  6f 72 2c 20 68 65 61 76  | asked for, heav|
0x00000080: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x00000090: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x000000a0: 04 00 00 00 07 00 00 00  02 00 00 00 00 00 00 00  |................|

Esto es ejecutando desde la consola el comando hexdump -C bloques.dat, más info en la guía de Bash

Como verás tanto los enteros como los caracteres ASCII conviven perfectamente, y eso es porque por debajo todos son simplemente bytes.

Saludos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants