From: Leandro Lucarella Date: Sun, 18 Apr 2004 22:08:14 +0000 (+0000) Subject: Esqueleto del informe. X-Git-Tag: svn_import_r684~345 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/09df7c33240167f462c5cbdf3ba569b03f8f7037?ds=sidebyside Esqueleto del informe. --- diff --git a/doc/informe.lyx b/doc/informe.lyx new file mode 100644 index 0000000..b7619bd --- /dev/null +++ b/doc/informe.lyx @@ -0,0 +1,411 @@ +#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