X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/09df7c33240167f462c5cbdf3ba569b03f8f7037..da69961f13b90ec03adc37376cfbdad42f23df0c:/doc/informe.lyx?ds=sidebyside diff --git a/doc/informe.lyx b/doc/informe.lyx index b7619bd..b568fdc 100644 --- a/doc/informe.lyx +++ b/doc/informe.lyx @@ -54,7 +54,32 @@ Tipos 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 @@ -70,7 +95,7 @@ etc \layout Chapter Archivos Auxiliares -\layout Standard +\layout Comment Por que los 3 tipos usan los mismo. Ventajas y desventajas. @@ -79,19 +104,86 @@ Por que los 3 tipos usan los mismo. 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) @@ -156,33 +248,13 @@ As 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) @@ -198,10 +270,20 @@ La estructura de este archivo est \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 @@ -238,103 +320,86 @@ tipo3.c 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 @@ -365,6 +430,11 @@ Al finalizar este proceso se verifica si existen bloques vacios para truncar 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