--- /dev/null
+#LyX 1.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 221
+\textclass book
+\language spanish
+\inputencoding auto
+\fontscheme palatino
+\graphics default
+\paperfontsize default
+\spacing single
+\papersize a4paper
+\paperpackage widemarginsa4
+\use_geometry 0
+\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+E
+\begin_inset Formula $\mu$
+\end_inset
+
+FS
+\layout Author
+
+Nicolás Dimov
+\newline
+Alan Kennedy
+\newline
+Leandro Lucarella
+\newline
+Ricardo Markiewicz
+\layout Chapter
+
+Introducción
+\layout Chapter
+
+Estructura común
+\layout Section
+
+Tipos
+\layout Subsection
+
+EMUFS
+\layout Standard
+
+callbacks, etc
+\layout Subsection
+
+EMUFS_Tipo
+\layout Subsection
+
+EMUFS_Estadisticas
+\layout Subsection
+
+EMUFS_BLOCK_ID
+\layout Standard
+
+etc
+\layout Chapter
+
+Archivos Auxiliares
+\layout Standard
+
+Por que los 3 tipos usan los mismo.
+ Ventajas y desventajas.
+\layout Section
+
+Archivo de índice (.idx)
+\layout Standard
+
+introduccion
+\layout Subsection
+
+Estructura física
+\layout Subsection
+
+Comportamiento (funciones generales)
+\layout Section
+
+Archivo de control de espacio libre (.fsc)
+\layout Standard
+
+idem anterior
+\layout Section
+
+Archivo de índices recuperables (.did)
+\layout Standard
+
+idem anterior
+\layout Chapter
+
+Archivo con bloques parametrizados y registros de longitud variable
+\layout Standard
+
+introduccion
+\layout Section
+
+Organización física
+\layout Section
+
+Comportamiento (funciones de la interfáz)
+\layout Section
+
+Detalles de implementación (funciones internas, ver si lo ponemos o no)
+\layout Chapter
+
+Archivo sin bloques y registros de longitud variable
+\layout Standard
+
+introduccion
+\layout Section
+
+Organización física
+\layout Section
+
+Comportamiento (funciones de la interfáz)
+\layout Section
+
+Detalles de implementación (funciones internas, ver si lo ponemos o no)
+\layout Chapter
+
+Archivo con bloques parametrizados y registros de longitud constante
+\layout Standard
+
+Las distintas organizaciones de archivos buscan aprovechar al máximo el
+ espacio del archivo.
+\layout Standard
+
+En este caso veremos que sucede luego de agregar y borrar una gran cantidad
+ de registros del archivo, lo que provoca como consecuencia directa la fragmenta
+ción del archivo, es decir, quedan huecos entre un registro y otro, lo que
+ produce un desperdicio de espacio.
+\layout Section
+
+Organización Física
+\layout Standard
+
+Esta organización guarda los registros pertenecientes al archivo en bloques
+ de tamaño parametrizado, de modo que intentará guardar la mayor cantidad
+ de registros que quepan en un bloque.
+
+\layout Standard
+
+Así como los graba, también tendrá la posibilidad de leer registros y borrarlos
+ del archivo.
+\layout Subsection
+
+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
+
+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.
+\layout Subsubsection
+
+Archivo de Bloques y Espacio Libre (.fsc)
+\layout Standard
+
+El archivo de de espacios libres permite decidir a la hora de guardar un
+ registro, donde será guardado.
+
+\layout Standard
+
+La estructura de este archivo está formada por un número que indica el bloque
+ y otro que indica el espacio libre en él.
+\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
+ donde el segndo parámetro es el tamaño buscado, y el tercero devuelve el
+ tamaño disponible.
+\layout Standard
+
+De la misma manera, al borrar un registro este archivo debe ser actualizado
+ colocando el nuevo espacio libre en el bloque.
+\layout Subsubsection
+
+Archivo de Id`s Borrados (.did)
+\layout Standard
+
+Este archivo funciona como una pila de id`s borrados, es decir, cuando se
+ borra un registro el id se almacena en este archivo y será recuperado cuando
+ se desee grabar un registro nuevo, de esta manera se aprovechan todos los
+ id`s sin necesidad de crear uno nuevo cada vez que se borra y graba un
+ registro.
+\layout Section
+
+Funciones Principales
+\layout Subsection
+
+EMUFS Tipo 3
+\layout Standard
+
+Dento de
+\emph on
+tipo3.h
+\emph default
+ y
+\emph on
+tipo3.c
+\emph 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á el funcionamiento algunas de las mas importantes.
+\layout Subsubsection
+
+void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE*
+ reg_size, int* err)
+\layout Standard
+
+Devuelve un puntero con la memoria reservada que contiene al registro solicitado
+ por el segundo parámetro (
+\emph on
+ID
+\emph default
+ ), y almacena en
+\emph on
+reg_size
+\emph default
+el tamaño del registro leido, que en este caso no es necesario pues es constante
+ y es conocicdo de antemano.
+\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.
+\layout Subsubsection
+
+EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
+ tam, int* err)
+\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
+ ).
+\layout Standard
+
+Luego de realizar la grabación, actualiza los archivos índice con los valores
+ correspondientes.
+\layout Subsubsection
+
+int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID)
+\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.
+\layout Standard
+
+Al borrar un registro, justifica los demás registros del bloque hacia la
+ izquierda.
+\layout Subsubsection
+
+EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
+\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 Subsubsection
+
+void emufs_tipo3_compactar(EMUFS *emu)
+\layout Standard
+
+Esta función intenta reorganizar el archivo de manera que el espacio libre
+ sea lo menor posible, recordando siempre que un registro no puede ser almacenad
+o en mas de un bloque excepto que el tamaño del registro sea mayor que el
+ del bloque.
+\layout Standard
+
+Para realizar esto, se aprovecha la funcionalidad de
+\emph on
+emufs_tipo3_grabar_registro()
+\emph default
+ya que esta tiene la capacidad de determinar una posición mas eficiente
+ en el archivo para un registro.
+ Por esto lo que se hace es levantar uno por uno los registros y volverlos
+ a grabar, de ese modo todos los
+\emph on
+gaps
+\emph default
+que pudieron haberse formado por la eliminación de registros serán cubiertos
+ por otros.
+\layout Standard
+
+Al finalizar este proceso se verifica si existen bloques vacios para truncar
+ el archivo.
+ Lo mismo se debe hacer con el archivo de espacios libres .
+\emph on
+fsc
+\emph default
+el cual disminuye su tamaño también.
+\layout Section
+
+Consideraciones y Políticas de Diseño
+\layout Comment
+
+Esto para mi va en organización física.
+\layout Standard
+
+Se han tomado ciertas consideraciones para algunos casos particulares que
+ se pueden presentar durante el uso/ejecución de la aplicación.
+\layout Enumerate
+
+Cada registro tiene un encabezado que indica el
+\emph on
+id
+\emph default
+del mismo.
+\layout Enumerate
+
+Si el tamaño del registro es mayor que el tamaño del bloque el registro
+ se particionará en la cantidad de bloques que sea necesario, pero siempre
+ se guardará desde el comienzo de un bloque, esto quiere decir que nunca
+ se podrá encontrar un comienzo de registro en algún lugar de un bloque
+ que no sea el comienzo del mismo.
+\layout Enumerate
+
+Si el registro se divide en mas de un bloque, se le coloca el id como encabezado
+ igualmente, pero en el archivo .
+\emph on
+idx
+\emph default
+ solo se guarda el primer bloque.
+ En el
+\emph on
+.fsc
+\emph default
+ se actualizan todos los bloques con el espacio libre que realmente tienen.
+\layout Chapter
+
+Conclusiones
+\layout Standard
+
+Las comparaciones, pruebas, etc...
+\the_end