\layout Chapter
Introducción
+\layout Standard
+
+Esta es la documentación correspondiente a las API`s para el manejo de tres
+ organizaciones de archivo diferentes.
+ A continuación se describe cada una de ellas y su modo de funcionamiento
+ y sus características principales.
+ De la correcta elección de la organización, dependerá la eficiencia de
+ la aplicación que la utilice.
+
+\layout Standard
+
+EMUFS se presenta como un
+\emph on
+emulador
+\emph default
+ de un
+\emph on
+filesystem
+\emph default
+, capaz de administrar datos almacenados en cualquiera de las tres organizacione
+s de archivo previamente mencionadas, las cuales a saberse son:
+\layout Enumerate
+
+Registros de Longitud Variable, Bloques de tamaño parametrizable
+\layout Enumerate
+
+Registros de Longitud Variable, Sin Bloques
+\layout Enumerate
+
+Registros de Longitud Fija, Bloques de tamaño parametrizables
+\layout Standard
+
+A través de este trabajo, se podrán observar las diferencias entre distintos
+ tipos de organización de archivos, ventajas y desventajas de cada una de
+ ellas, y las situaciones particulares que deberá sortear un filesystem,
+ como la partición de registros en distintos bloques, manejo de espacio
+ libre, compactación de un archivo, etc.
+\layout Standard
+
+A continuación, veremos que el manejo de los archivos en EMUFS se realiza
+ a través de una estructura de control comun para cualquier tipo de archivo,
+ dandole flexibilidad y escalabilidad a nuestro sistema.
+\layout Standard
+
+Hacia el final de esta presentación, se observaran las pruebas realizadas
+ con las distintas organizaciones de archivos, y las conclusiones obtenidos
+ al respecto.
\layout Chapter
Estructura común
\begin_inset Graphics
filename graphics/Emufsinit.png
- scale 80
+ scale 75
+ keepAspectRatio
\end_inset
.dat
\series default
).
-\newline
-
\series bold
+
+\newline
NOTA:
\series default
Cabe aclarar que por si bien el indice se encuentra ordenado por
\family typewriter
id_reg
\family default
-, los registros en el archivo de datos, por lo general no lo estarán.
- (ordenados por id).
+, los registros en el archivo de datos, por lo general no lo estarán (ordenados
+ por id).
\newline
Ver:
\family typewriter
-emufs_idx_buscar_registro()
+emufs_idx_buscar_registro(), emufs_idx_get()
\layout List
\labelwidthstring 00.00.0000
\family typewriter
nro_bloque
\family default
- se posee espacio suficiente para albergar el nuevo registro.
+ se posee espacio suficiente para albergar el nuevo registro (o a partir
+ de qué
+\family typewriter
+nro_bloque
+\family default
+ se encuentran
+\family typewriter
+N
+\family default
+ bloques consecutivos libres).
En el caso de organizacion sin bloque, se buscará un gap o espacio libre
en el archivo, obteniéndose en consecuencia, el
\family typewriter
offset
\family default
hasta el mismo.
+
\newline
Ver:
\family typewriter
-emufs_fsc_buscar_lugar()
+emufs_fsc_buscar_lugar(), emufs_fsc_buscar_n_lugares()
\layout List
\labelwidthstring 00.00.0000
+-----------+-----------+------------------------//-+
\layout LyX-Code
-| tipo | tam bloque| Cero o más bloques ...
+| tipo | tam_bloque| Cero o más bloques ...
\backslash
Podemos ver gráficamente como se se compone un registro:
\layout LyX-Code
-registro id
+registro [id]
\layout LyX-Code
+-----------+-----------+------------------+
\begin_inset Quotes erd
\end_inset
-) almacenado en un archivo con bloques de 4 bytes:
+) almacenado en un archivo con bloques de 12 bytes (4 para datos):
\layout LyX-Code
| bloque 0 | bloque 1 | bloque 2
\backslash
-+
+\layout LyX-Code
+
+ ^^
+\layout LyX-Code
+
+ 2 bytes libres al final del bloque 2
+\layout Standard
+
+Este es un ejemplo figurativo, ya que se puso como límite mínimo de tamaño
+ de bloque 16 bytes (para que haya al menos la misma cantidad de espacio
+ para datos que para información de control).
+ Este límite mínimo ya roza lo absurdo (es muy ineficiente por la gran cantidad
+ de accesos a disco que necesita).
+ El límite físico es de 9 bytes (8 para información de control, 1 para datos).
\layout Section
Funciones principales
\layout Standard
El archivo estara compuesto por una cabecera que da información sobre el
- tipo de organización, el tamaño de los bloques y el tamaño de los registros.
+ tipo (2, o el valor T3 del tipo
+\family typewriter
+EMUFS_Tipo
+\family default
+ en este caso) de organización, el tamaño de los bloques y el tamaño de
+ los registros.
+\layout LyX-Code
+
+archivo
+\layout LyX-Code
+
++-----------+-----------+-----------+------------------------//-+
+\layout LyX-Code
+
+| tipo | tam_bloque| tam_reg | Cero o más bloques ...
+
+\backslash
+
+\backslash
+ |
+\layout LyX-Code
+
++-----------+-----------+-----------+------------------------//-+
+\layout LyX-Code
+
+/- 4 bytes -/- 4 bytes -/- 4 bytes -/
\layout Subsection
Organización Física de un Bloque
\begin_inset Quotes erd
\end_inset
- zonas en el archivo.
+ zonas en el archivo y obtener de esta manera acceso semi-aleatoreo a los
+ registros.
+\layout LyX-Code
+
+bloque N-1 | bloque N | bloque N+1
+\layout LyX-Code
+
+/----------+------------+------------+---------------+-----------/
+\layout LyX-Code
+
+
+\backslash
+ | registro 1 | registro 2 | espacio libre |
+\backslash
+
+\layout LyX-Code
+
+/----------+------------+------------+---------------+-----------/
+\layout LyX-Code
+
+ /------------- tamaño del bloque ---------/
\layout Subsection
Organizacion Física de Registros
preguntando por el tamaño del registro más
\family typewriter
sizeof(EMUFS_REG_ID).
-
+\layout LyX-Code
+
+registro [id]
+\layout LyX-Code
+
++-----------+-------------------+
+\layout LyX-Code
+
+| id | datos ...
+ |
+\layout LyX-Code
+
++-----------+-------------------+
+\layout LyX-Code
+
+/- 4 bytes -/- [tam_reg] bytes -/
\layout Subsection
-Organización Física de Registros Multibloque
+Organización Física de Registros
+\emph on
+Multibloque
\layout Standard
Al ser los registros de longitud constante, se ha adoptado que un registro
- multibloque nunca podra estar almacenado en algún lugar que no sea el comienzo
- de un bloque.
+
+\emph on
+multibloque
+\emph default
+ nunca podrá estar almacenado en algún lugar que no sea el comienzo de un
+ bloque.
De esta manera se puede calcular cuantos bloques ocupará un registro y
se podrá solicitar lugar para almacenarlo con la ayuda de la función
\family typewriter
que es muy importante para evitar el solapamiento de registros.
Esta consideración acarrea como consecuencia directa un alto costo en términos
del espacio desperdiciado.
+\layout Standard
+
+A continuación se presenta un ejemplo gráfico de un registro multibloque
+ de 26 bytes (de contenido
+\begin_inset Quotes eld
+\end_inset
+
+12345678901234567890123456
+\begin_inset Quotes erd
+\end_inset
+
+) almacenado en un archivo con bloques de bytes 14 bytes (10 para datos)
+ y registros de 38 bytes:
+\layout LyX-Code
+
+| bloque 0 | bloque 1 | bloque 2
+\layout LyX-Code
+
++-------------------+-------------------+-------------------+-//-+
+\layout LyX-Code
+
+| registro 0 - 1/3 | registro 0 - 2/3 | registro 0 - 3/3..|
+\backslash
+
+\backslash
+ |
+\layout LyX-Code
+
+|+----+------------+|+----+------------+|+----+--------+....| // |
+\layout LyX-Code
+
+|| id | datos ||| id | datos ||| id | datos |....|
+\backslash
+
+\backslash
+ |
+\layout LyX-Code
+
+||----+------------+||----+------------+||----+--------+....| // |
+\layout LyX-Code
+
+|| 0 | 1234567890 ||| 0 | 1234567890 ||| 0 | 123456 |....|
+\backslash
+
+\backslash
+ |
+\layout LyX-Code
+
+|+----+------------+|+----+------------+|+----+--------+....| // |
+\layout LyX-Code
+
++-------------------+-------------------+-------------------+-
+\backslash
+
+\backslash
+-+
+\layout LyX-Code
+
+ ^^^^
+\layout LyX-Code
+
+ 4 bytes libres (e inutilizables) al final del bloque 2
\layout Section
Funciones Principales
\layout Standard
Dento de
-\emph on
+\family typewriter
tipo3.h
-\emph default
+\family default
y
-\emph on
+\family typewriter
tipo3.c
-\emph default
+\family default
se encuentran las cabeceras y la implementación de las funciones principales
respectivamente, las cuales dan funcionalidad a esta organización.
\layout Standard
A continuación se comentará la descripción de algunas acciones importantes.
\layout Subsection
-Leer Registro
+Lectura de registros
\layout Standard
La lectura de un registro se realiza con la ayuda del archivo .
emufs_tipo3_leer_registro()
\layout Subsection
-Grabar Registro
+Alta de registros
\layout Standard
Graba un registro en un bloque donde haya espacio suficiente, y si no crea
para mantener la coherencia.
\layout Standard
+Cuando nos encontramos con registros multibloque, se calcula cuantos bloques
+ ocupará el registro de la siguiente manera:
+\family typewriter
+Cantidad de Bloques = 1 + Tamaño del Registro/(Tamaño del Bloque-Sizeof(EMUFS_RE
+G_ID)
+\layout Standard
+
+Esta ecuación solo falla en el caso que el tamaño del registro y el tamaño
+ del bloque sean iguales, en tal caso, se coloca el valor 1 en
+\family typewriter
+Cantidad de Bloques
+\family default
+ post verificación.
+\layout Standard
+
+Y con esta información se realiza un ciclo
+\family typewriter
+for
+\family default
+ que grabará tantas veces como sea necesario levantando y grabando los bloques
+ que correspondan.
+\layout Standard
+
Ver:
\family typewriter
emufs_tipo3_grabar_registro()
\layout Subsection
-Borrar Registro
+Baja de registros
\layout Standard
Borra un registro del archivo de datos, para esto levanta el bloque al que
ser así, si no se realizara el mismo.
\layout Standard
+En el caso de los registros multibloque, se eliminará la porción del registro
+ contenida en el primer bloque y se actualizarán de manera conveniente los
+ archivos índice, para restaurarlos a un valor verdadero.
+\layout Standard
+
Ver:
\family typewriter
emufs_tipo3_borrar_registro()
\layout Subsection
-Leer Estadísticas
+Obtención de estadísticas
\layout Standard
Se puede tener acceso a las estadísticas generales del archivo, por ejemplo,
emufs_tipo3_leer_estadisticas()
\layout Subsection
-Compactar el Archivo
+Compactación del archivo de datos
\layout Standard
Esta función intenta reorganizar el archivo de manera que el espacio libre