EMUFS
\layout Standard
-callbacks, etc
+
+\emph on
+EMUFS
+\emph default
+es la estuctura principal que encapsula todas las funciones para el manejo
+ de un archivo de datos.
+\layout Standard
+
+Esta estructura consta de:
+\layout Enumerate
+
+EMUFS_Tipo que es un tipo enumerado que indica cual es la organización.
+\layout Enumerate
+
+EMUFS_BLOCK_SIZE indica el tamaño del bloque para los tipos 1 y 3.
+\layout Enumerate
+
+EMUFS_REG_SIZE indica el tamaño del registro, para el tipo 3 que posee tamaño
+ constante.
+\layout Enumerate
+
+void *leer_bloque()
+\layout Comment
+
+no me convence esta descripcion.
+
\layout Subsection
EMUFS_Tipo
\layout Chapter
Archivos Auxiliares
-\layout Standard
+\layout Comment
Por que los 3 tipos usan los mismo.
Ventajas y desventajas.
Archivo de índice (.idx)
\layout Standard
-introduccion
+Con la ayuda de un archivo de bloques y registros (de extensión .idx), podremos
+ ubicar cualquier registro existente dentro del archivo.
+\layout Standard
+
+El archivo de índice contiene una estructura que contiene el id de un registro
+ y el número de bloque al que pertenece.
+ Este archivo esta ordenado por
+\emph on
+id
+\emph default
+, de modo que incrementa su tamaño cada vez que se grabe en el archivo de
+ datos un nuevo registro, excepto que un registro haya sido borrado con
+ anterioridad lo cual produce que al guardar un nuevo registro se actualice
+ y no crezca.
+\layout Standard
+
+Si un registro es borrado del archivo de datos, debe actualizarse el índice,
+ esto se logra colocando un flag que indique que el id no pertenece a ningún
+ bloque, hemos adoptado poner -1 en el campo location de la estructura
+\emph on
+EMUFS_IDX
+\emph default
+.
+\layout Standard
+
+Es necesario que este archivo esté ordenado por
+\emph on
+id
+\emph default
+ de registro, ya que esto permitirá el acceso directo para la búsqueda de
+ un registro en el archivo de datos.
\layout Subsection
Estructura física
+\layout Standard
+
+El tipo EMUFS_IDX define la estuctura de los registros de este archivo.
+\layout Standard
+
+Esta estructura está compuesta por don enteros (long).
+\layout Itemize
+
+EMUFS_REG_ID reg_id indica el
+\emph on
+id
+\emph default
+ del registro
+\layout Itemize
+
+EMUFS_BLOCK_ID location número de bloque donde se encuentra el registro.
+\layout Standard
+
+EMUFS_REG_ID y EMUFS_BLOCK_ID son
+\emph on
+unsigned long.
+\layout Comment
+
+ponerlo mas lindo...
\layout Subsection
Comportamiento (funciones generales)
\layout Section
Archivo de control de espacio libre (.fsc)
+\layout Subsection
+
+Estructura Física
\layout Standard
-idem anterior
+La estuctura que define este archivo es la siguiente:
+\layout Standard
+
+EMUFS_FSC que contiene
+\layout Itemize
+
+EMUFS_BLOCK_ID indica el número de bloque
+\layout Itemize
+
+EMUFS_FREE freespace indica la cantidad de espacio libre que queda en el
+ bloque.
\layout Section
Archivo de índices recuperables (.did)
del archivo.
\layout Subsection
-Archivos Auxiliares
+Comportamiento Particular de los Archivos Auxiliares
\layout Subsubsection
Archivo de Bloques y Registros (.idx)
-\layout Standard
-
-Con la ayuda de un archivo de bloques y registros (de extensión .idx), podremos
- ubicar cualquier registro existente dentro del archivo.
-
-\layout Standard
-
-El archivo de índice contiene una estructura que contiene el id de un registro
- y el número de bloque al que pertenece.
- Este archivo esta ordenado por id, de modo que incrementa su tamaño cada
- vez que se grabe en el archivo de datos un nuevo registro, excepto que
- un registro haya sido borrado con anterioridad lo cual produce que al guardar
- un nuevo registro se actualice y no crezca.
-\layout Standard
-
-Si un registro es borrado del archivo de datos, debe actualizarse el índice,
- esto se logra colocando un flag que indique que el id no pertenece a ningún
- bloque, hemos adoptado poner -1 en el campo location de la estructura EMUFS_IDX.
-\layout Standard
+\layout Comment
-Es necesario que este archivo esté ordenado por id de registro, ya que esto
- permitirá el acceso directo para la búsqueda de un registro en el archivo
- de datos.
+buscar algun caso extraordinario.
\layout Subsubsection
Archivo de Bloques y Espacio Libre (.fsc)
\layout Standard
De esta manera al querer guardar un registro este archivo informará donde
- cabe el mismo, previa invocación al la función EMUFS_BLOCK_ID emufs_fsc_buscar_
-lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE*) perteneciente a fsc.h, la cual devuelve
- el número de bloque donde entra el registro o -1 si no hay un bloque con
- lugar suficiente, y toma como parámetros una estructura EMUFS, y dos EMUFS_FREE
+ cabe el mismo, previa invocación al la función
+\emph on
+EMUFS_BLOCK_ID emufs_fsc_buscar_lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE*)
+\emph default
+ perteneciente a fsc.h, la cual devuelve el número de bloque donde entra
+ el registro o -1 si no hay un bloque con lugar suficiente, y toma como
+ parámetros una estructura
+\emph on
+EMUFS
+\emph default
+, y dos
+\emph on
+EMUFS_FREE
+\emph default
donde el segndo parámetro es el tamaño buscado, y el tercero devuelve el
tamaño disponible.
\layout Standard
respectivamente, las cuales dan funcionalidad a esta organización.
\layout Standard
-A continuación se comentará el funcionamiento algunas de las mas importantes.
+A continuación se comentará la descripción de algunas acciones importantes.
\layout Subsubsection
-void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE*
- reg_size, int* err)
+Leer Registro
\layout Standard
-Devuelve un puntero con la memoria reservada que contiene al registro solicitado
- por el segundo parámetro (
+La lectura de un registro se realiza con la ayuda del archivo .
\emph on
-ID
+idx
\emph default
- ), y almacena en
+ el cual contiene la información de la posición del registro dentro del
+ archivo de datos.
+ Una vez leida esta información, se recupera el bloque (en su totalidad)
+ del archivo y se busca secuencialmente el registro con el
\emph on
-reg_size
+ID
\emph default
-el tamaño del registro leido, que en este caso no es necesario pues es constante
- y es conocicdo de antemano.
+ especificado.
\layout Standard
-Para realizar esta acción, busca en el archivo
-\emph on
-.idx
-\emph default
-el bloque al cual pertenece el registro.
-\layout Subsubsection
-void* emufs_tipo3_leer_bloque(EMUFS *emu, EMUFS_BLOCK_ID num_bloque, int*
- err)
-\layout Standard
-
-Devuelve un puntero con la memoria reservada que contiene el bloque solicitado
- por el segundo parámetro (
\emph on
-num_bloque
-\emph default
-).
-
-\layout Standard
-
-Como la numeración de los bloques es
-\emph on
-virtual,
-\emph default
-el acceso al archivo para levantar un bloque es directo, es decir, se posiciona
- directamente en en número de bloque multiplicado por el tamaño del mismo,
- salteando antes el encabezado del archivo.
+ver: void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE
+* reg_size, int* err)
\layout Subsubsection
-EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
- tam, int* err)
+Grabar Registro
\layout Standard
Graba un registro en un bloque donde haya espacio suficiente, y si no crea
un nuevo bloque y lo agrega al final del archivo.
\layout Standard
-El registro a grabar es apuntado por el segundo parámetro (
-\emph on
-ptr
-\emph default
-) y el tamaño viene indicado en el tercero (
-\emph on
-tam
-\emph default
- ).
+Luego de grabar un registro, actualiza los archivos de índice .idx y .fsc
+ para mantener la coherencia.
\layout Standard
-Luego de realizar la grabación, actualiza los archivos índice con los valores
- correspondientes.
+
+\emph on
+ver: EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_S
+IZE tam, int* err)
\layout Subsubsection
-int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID)
+Borrar Registro
\layout Standard
-Borra el registro indicado por el segundo parámetro (
-\emph on
-ID
-\emph default
- ) del archivo de datos, y actualiza los archivos de índice para mantener
- la coherencia en las próximas modificaciones.
+Borra un registro del archivo de datos, para esto levanta el bloque al que
+ pertenece el archivo y ajusta los demás registros justificandolos hacia
+ la izquierda.
\layout Standard
-Al borrar un registro, justifica los demás registros del bloque hacia la
- izquierda.
+Cabe destacar que para dar de baja un registro no hace falta borrarlo del
+ archivo de datos, solo es necesario borrar las entradas en los archivos
+ de índice.
\layout Subsubsection
-EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
+Leer Estadísticas
+\layout Standard
+
+Se puede tener acceso a las estadísticas generales del archivo, por ejemplo,
+ cantidad de bloques, cantidad de registros, espacio libre total, espacio
+ libre promedio, espacio libre máximo y mínimo, etc.
+\layout Standard
+
+Esta información es el resultado de ciertos cálculos realizados tanto en
+ el archivo de datos como en los archivos índice.
\layout Standard
Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas
del archivo de datos, espacio libre total, cantidad de registros, cantidad
de bloques, tamaño del archivo en bytes, relaciones entre tamaños y espacios
libres, etc.
+\layout Standard
+
+
+\emph on
+ver: EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
\layout Subsubsection
-void emufs_tipo3_compactar(EMUFS *emu)
+Compactar el Archivo
\layout Standard
Esta función intenta reorganizar el archivo de manera que el espacio libre
fsc
\emph default
el cual disminuye su tamaño también.
+\layout Standard
+
+
+\emph on
+ver: void emufs_tipo3_compactar(EMUFS *emu)
\layout Section
Consideraciones y Políticas de Diseño