]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - doc/informe.lyx
* Se agregan fclose faltantes .
[z.facultad/75.06/emufs.git] / doc / informe.lyx
index 5505ca77b3949ae00e4478c5359dce85376d424e..f25411c771e74b48d8f0eb94bbdff9f4322fd635 100644 (file)
@@ -49,6 +49,17 @@ Estructura com
 \layout Section
 
 Tipos
 \layout Section
 
 Tipos
+\layout Standard
+
+Se detallan a continuación los tipos de datos definidos y utilizados en
+ las distintas implementaciones que conforman nuestro sistema, siendo el
+ más importante de ellos, la estructura 
+\family typewriter 
+EMUFS
+\family default 
+ que actúa como interfaz común para el manejo de cualquier tipo de archivo
+ (no importa que tipo de organización física posea un archivo, esta estructura
+ prooverá una interfaz (funciones) para su manejo).
 \layout Subsection
 
 EMUFS
 \layout Subsection
 
 EMUFS
@@ -63,121 +74,116 @@ EMUFS
 \emph default 
 es la estuctura principal que encapsula todas las funciones para el manejo
  de un archivo de datos.
 \emph default 
 es la estuctura principal que encapsula todas las funciones para el manejo
  de un archivo de datos.
+ Posee punteros a funciones que dependiendo de la organización fisica por
+ la cual se opte dentro del sistema, serán asignados de acorde.
 \layout Standard
 
 \layout Standard
 
-Esta estructura consta de:
-\layout Enumerate
+Su declaración puede ser observada en el archivo 
+\series bold 
+emufs.h 
+\series default 
+y la misma cuenta con los siguiente campos:
+\layout Itemize
 
 
 \family typewriter 
 EMUFS_Tipo
 \family default 
  que es un tipo enumerado que indica cual es la organización.
 
 
 \family typewriter 
 EMUFS_Tipo
 \family default 
  que es un tipo enumerado que indica cual es la organización.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 EMUFS_BLOCK_SIZE
 \family default 
 
 
 \family typewriter 
 EMUFS_BLOCK_SIZE
 \family default 
- indica el tamaño del bloque para los tipos de archivo con bloques (ver
- capítulos 
-\begin_inset LatexCommand \ref{cha:tipo1}
-
-\end_inset 
-
- y 
-\begin_inset LatexCommand \ref{cha:tipo3}
-
-\end_inset 
-
-).
-\layout Enumerate
+ indica el tamaño del bloque para los tipos 1 y 3.
+\layout Itemize
 
 
 \family typewriter 
 EMUFS_REG_SIZE
 \family default 
 
 
 \family typewriter 
 EMUFS_REG_SIZE
 \family default 
- indica el tamaño del registro, para el tipo de archivo con tamaño de registro
- parametrizado (ver capítulo 
-\begin_inset LatexCommand \ref{cha:tipo3}
-
-\end_inset 
-
-).
-\layout Enumerate
+ indica el tamaño del registro, para el tipo 3 que posee tamaño constante.
+\layout Itemize
 
 
 \family typewriter 
 
 
 \family typewriter 
-void*leer_bloque() 
+void **leer_bloque() 
 \family default 
 puntero a la función para leer un bloque.
 \family default 
 puntero a la función para leer un bloque.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 void *leer_bloque_raw()
 \family default 
  puntero a la función para leer un bloque, el anterior y el siguiente.
 
 
 \family typewriter 
 void *leer_bloque_raw()
 \family default 
  puntero a la función para leer un bloque, el anterior y el siguiente.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 
 
 \family typewriter 
-void*leer_registro()
+void **leer_registro()
 \family default 
  puntero a la función para leer un registro.
 \family default 
  puntero a la función para leer un registro.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 
 
 \family typewriter 
-void*leer_registro_raw()
+void **leer_registro_raw()
 \family default 
  puntero a la función para leer un registro con su encabezado.
 \family default 
  puntero a la función para leer un registro con su encabezado.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 EMUFS_REG_ID *grabar_registro()
 \family default 
  puntero a la función para grabar un registro.
 
 
 \family typewriter 
 EMUFS_REG_ID *grabar_registro()
 \family default 
  puntero a la función para grabar un registro.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 EMUFS_REG_ID *modificar_registro() 
 \family default 
 puntero a la función para modificar un registro.
 
 
 \family typewriter 
 EMUFS_REG_ID *modificar_registro() 
 \family default 
 puntero a la función para modificar un registro.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 int *borrar_registro()
 \family default 
  puntero a la función para borrar un registro.
 
 
 \family typewriter 
 int *borrar_registro()
 \family default 
  puntero a la función para borrar un registro.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 EMUFS_Estadisticas *leer_estadisticas()
 \family default 
  puntero a la función para cargar una estructura con las estadísticas.
 
 
 \family typewriter 
 EMUFS_Estadisticas *leer_estadisticas()
 \family default 
  puntero a la función para cargar una estructura con las estadísticas.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 void *compactar()
 \family default 
  puntero a la función para compactar un archivo.
 
 
 \family typewriter 
 void *compactar()
 \family default 
  puntero a la función para compactar un archivo.
-\layout Enumerate
+\layout Itemize
 
 
 \family typewriter 
 
 
 \family typewriter 
-charnombre
+char *nombre
 \family default 
  almacena el nombre del archivo sin extensión.
 \layout Standard
 
 Esta estructura define los valores de sus punteros según el tipo de organización
 \family default 
  almacena el nombre del archivo sin extensión.
 \layout Standard
 
 Esta estructura define los valores de sus punteros según el tipo de organización
- que se desee manejar.
+ que se desee manejar y esto se realiza a través del API emufs, implementado
+ en 
+\series bold 
+emufs.c
+\series default 
+, que se describirá posteriormente.
 \layout Standard
 
 Por ejemplo si se desea crear un archivo de nombre 
 \layout Standard
 
 Por ejemplo si se desea crear un archivo de nombre 
@@ -231,15 +237,226 @@ emufs_tipo3_leer_bloque()
 \layout Subsection
 
 EMUFS_Tipo
 \layout Subsection
 
 EMUFS_Tipo
+\layout Standard
+
+
+\family typewriter 
+EMUFS_Tipo
+\family default 
+ es un tipo de dato enum, el cual será utilizado en la cabecera de todo
+ archivo de datos (
+\series bold 
+.dat
+\series default 
+), para indicar los distintos tipos de organización física.
+ Su declaración puede verse en el archivo 
+\series bold 
+emufs.h.
+\layout Standard
+
+A saberse los valores y significado correspondiente que puede tomar este
+ tipo de dato son:
+\layout Enumerate
+
+Archivos con registros de longitud variable y bloques parametrizables.
+\layout Enumerate
+
+Archivos con registros de longitud variable sin bloques.
+\layout Enumerate
+
+Archivos con registros de longitud fija y bloques parametrizables.
 \layout Subsection
 
 EMUFS_Estadisticas
 \layout Subsection
 
 EMUFS_Estadisticas
+\layout Standard
+
+
+\family typewriter 
+EMUFS_Estadisticas
+\family default 
+ es una estructura que almacenará los datos pertinentes a las estadísticas
+ de un archivo dado, y será utilizada para visualizar dichas observaciones
+ a través de la GUI.
+\layout Standard
+
+Su declaración puede ser observada en el archivo 
+\series bold 
+emufs.h 
+\series default 
+y la misma cuenta con los siguiente campos:
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ tam_archivo: indica el tamaño del archivo de datos (.dat) en bytes.
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ tam_archivos_aux: indica el tamaño de los archivos auxiliares sumados en
+ bytes.
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ tam_info_control_dat: indica la cantidad de bytes en información de control
+ utilizados para el archivo.
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ media_fs: promedio de espacio libre en el archivo de datos (por bloque
+ o gap promedio segun la org)
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ total_fs: total de espacio libre en el archivo de datos.
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ max_fs: máximo espacio libre en el archivo de datos (en un bloque o máximo
+ gap segun la org).
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ min_fs: idem pero mínimo.
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ cant_bloques: cantidad de bloques en el archivo de datos (.
+\series bold 
+dat
+\series default 
+)
+\layout Itemize
+
+
+\family typewriter 
+unsigned long
+\family default 
+ cant_registros: cantidad de registros en el archivo de datos (
+\series bold 
+.dat
+\series default 
+)
+\layout Standard
+
+En base a la estructura descripta anteriormente y mediante la utilización
+ de la función 
+\family typewriter 
+emufs_leer_estadisticas()
+\family default 
+ disponible en la estructura común 
+\family typewriter 
+EMUFS
+\family default 
+ handler de cualquier tipo de archivo, podremos obtener una serie de estadística
+s que pasamos a detallar (más alla de los datos básicos como cant registros,
+ cant bloques, tam archivo, etc):
+\layout Itemize
+
+
+\emph on 
+Relación entre espacio libre y el tamaño del archivo de datos (
+\series bold 
+.dat
+\series default 
+)
+\layout Itemize
+
+Relación entre el espacio ocupado por información de control y el tamaño
+ del archivo de datos (
+\series bold 
+.dat
+\series default 
+)
+\layout Itemize
+
+Cantidad promedio de espacio libre (en bloque o gap promedio)
+\layout Itemize
+
+Desviaciones extremas de espacio libre (máximo/mínimo espacio libre en bloque
+ o mayor/menor gap)
 \layout Subsection
 
 \layout Subsection
 
-EMUFS_BLOCK_ID
+Tipos Comunes
 \layout Standard
 
 \layout Standard
 
-etc
+En la implementación de cada tipo de organización física, así como tambien
+ en las API de los archivos auxiliares comunes a ellas, se da la utilización
+ de tipo definidos para una clara interfaz entre las mismas, los cuales
+ son brevemente descriptos a continuación y pueden ser hayados en el archivo
+\series bold 
+emufs.h
+\series default 
+:
+\layout Itemize
+
+typedef 
+\family typewriter 
+unsigned long EMUFS_REG_ID
+\family default 
+: usado para representar un 
+\emph on 
+Id
+\emph default 
+ de un registro.
+\layout Itemize
+
+typdef 
+\family typewriter 
+unsigned long EMUFS_REG_SIZE
+\family default 
+: usado para representar el tamaño en bytes de un registro.
+\layout Itemize
+
+typedef 
+\family typewriter 
+unsigned long EMUFS_BLOCK_ID
+\family default 
+: usado para representar un número de bloque.
+\layout Itemize
+
+typdef 
+\family typewriter 
+unsigned long EMUFS_BLOCK_SIZE
+\family default 
+: usado para representar el tamaño en bytes de un bloque.
+\layout Itemize
+
+typedef 
+\family typewriter 
+unsigned long EMUFS_FREE
+\family default 
+: usado para representar espacio libre en bytes.
+\layout Itemize
+
+typedef 
+\family typewriter 
+unsigned long EMUFS_OFFSET
+\family default 
+: usado para representar un offset.
 \layout Section
 
 
 \layout Section
 
 
@@ -1562,6 +1779,163 @@ A continuaci
 \layout Section
 
 Funciones principales
 \layout Section
 
 Funciones principales
+\layout Standard
+
+Las funciones principales son las necesarias para completar la estructura
+ EMUFS (ver página 
+\begin_inset LatexCommand \pageref{sub:EMUFS}
+
+\end_inset 
+
+).
+\layout Subsection
+
+Lectura de registros
+\layout Standard
+
+Para leer un registro se hace uso del archivo de índice (ver página 
+\begin_inset LatexCommand \pageref{sec:idx}
+
+\end_inset 
+
+), obteniéndose el número de bloque en donde está almacenado el registro
+ a buscar.
+ Una vez obtenido, se carga en memoria el bloque entero y se busca secuencialmen
+te en él (leyendo la cabecera de cada registro y salteando los datos) hasta
+ encontrar el registro pedido.
+ Una vez encontrado se lo copia y devuelve.
+\layout Standard
+
+Si se tratara de un registro 
+\emph on 
+multibloque
+\emph default 
+ (ver sección 
+\begin_inset LatexCommand \ref{sub:tipo1_reg_multi}
+
+\end_inset 
+
+), se procede forma similar, sólo que se cargan en memoria uno a uno los
+ bloques que componen el registro y se van copiando (y uniendo) los 
+\emph on 
+fragmentos
+\emph default 
+ hasta completarlo.
+\layout Standard
+
+Ver: 
+\family typewriter 
+emufs_tipo1_leer_registro()
+\layout Subsection
+
+Altas de registros
+\layout Standard
+
+Para realizar el alta de un registro, lo primero que se obtiene es un identifica
+dor, buscando primero en el archivo de identificadores recuperables (pág.
+\begin_inset LatexCommand \ref{sec:did}
+
+\end_inset 
+
+) y de no haber ninguno, buscando el mayor identificador presente en el
+ archivo de índice (pág.
+\begin_inset LatexCommand \ref{sec:idx}
+
+\end_inset 
+
+) y sumándole uno.
+ El paso siguiente es buscar un bloque con espacio libre suficiente como
+ para almacenar el registro (y su cabecera) en el archivo de control de
+ espacio libre (pág.
+\begin_inset LatexCommand \ref{sec:fsc}
+
+\end_inset 
+
+) y cargarlo completo en memoria.
+ De no encontrarse, se crea un bloque nuevo al final de archivo.
+ En el bloque cargado en memoria, se agrega el registro nuevo (con su cabecera)
+ al comienzo del espacio libre (calculado a partir del tamaño del bloque
+ y el espacio libre en bloque) y se lo graba en disco.
+ Finalmente se agrega (o actualiza) el identificador al archivo índice y
+ el espacio libre en el bloque.
+\layout Standard
+
+Si el registro ocupara más de un bloque (ver sección 
+\begin_inset LatexCommand \ref{sub:tipo1_reg_multi}
+
+\end_inset 
+
+), se buscan N bloques consecutivos (todos los que necesite el registro)
+ absolutamente libres
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+Incluso el último bloque debe estar absolutamente libre para cumplir con
+ las condiciones presentadas en la sección 
+\begin_inset LatexCommand \ref{sub:tipo1_reg_multi}
+
+\end_inset 
+
+.
+\end_inset 
+
+ y graba bloque a bloque cada 
+\emph on 
+fragmento
+\emph default 
+ del registro (con sus cabeceras intermedias), al último 
+\emph on 
+fragmento
+\emph default 
+ se lo trata de forma análoga a un registro 
+\emph on 
+simple
+\emph default 
+.
+ Por cada bloque utilizado se actualiza el archivo de control de espacio
+ libre.
+\layout Standard
+
+Ver: 
+\family typewriter 
+emufs_tipo1_agregar_registro()
+\layout Subsection
+
+Bajas de registros
+\layout Standard
+
+Ver: 
+\family typewriter 
+emufs_tipo1_borrar_registro()
+\layout Subsection
+
+Modificación de registros
+\layout Standard
+
+Ver: 
+\family typewriter 
+emufs_tipo1_modificar_registro()
+\layout Subsection
+
+Obtención de estadísticas
+\layout Standard
+
+Ver: 
+\family typewriter 
+emufs_tipo1_leer_estadisticas()
+\layout Subsection
+
+Compactación del archivo de datos
+\layout Standard
+
+Ver:
+\family typewriter 
+ emufs_tipo1_compactar()
 \layout Section
 
 Detalles de implementación (funciones internas, ver si lo ponemos o no)
 \layout Section
 
 Detalles de implementación (funciones internas, ver si lo ponemos o no)
@@ -2504,9 +2878,9 @@ Damos por terminada as
  para el caso del tipo 2, es realmente bastante sencillo.
 \layout Standard
 
  para el caso del tipo 2, es realmente bastante sencillo.
 \layout Standard
 
-Ver: 
+Ver:
 \family typewriter 
 \family typewriter 
-void emufs_tipo2_compactar()
+ emufs_tipo2_compactar()
 \layout Section
 
 Consideraciones y Políticas de Diseño
 \layout Section
 
 Consideraciones y Políticas de Diseño