]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - doc/informe.lyx
Documentacion de tipo1 casi completa, falta algun detalle sobre archivos auxiliares...
[z.facultad/75.06/emufs.git] / doc / informe.lyx
index 81edbd28369c317d7040e7f863a588bcc3bb86b6..1084ef8357f3a9353f67bebcf67aff972ee24de0 100644 (file)
@@ -403,7 +403,7 @@ Tipos Comunes
 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
 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
+ son brevemente descriptos a continuación y pueden ser hallados en el archivo
  
 \series bold 
 emufs.h
  
 \series bold 
 emufs.h
@@ -411,9 +411,9 @@ emufs.h
 :
 \layout Itemize
 
 :
 \layout Itemize
 
-typedef 
+
 \family typewriter 
 \family typewriter 
-unsigned long EMUFS_REG_ID
+EMUFS_REG_ID
 \family default 
 : usado para representar un 
 \emph on 
 \family default 
 : usado para representar un 
 \emph on 
@@ -422,39 +422,46 @@ Id
  de un registro.
 \layout Itemize
 
  de un registro.
 \layout Itemize
 
-typdef 
+
 \family typewriter 
 \family typewriter 
-unsigned long EMUFS_REG_SIZE
+EMUFS_REG_SIZE
 \family default 
 : usado para representar el tamaño en bytes de un registro.
 \layout Itemize
 
 \family default 
 : usado para representar el tamaño en bytes de un registro.
 \layout Itemize
 
-typedef 
+
 \family typewriter 
 \family typewriter 
-unsigned long EMUFS_BLOCK_ID
+EMUFS_BLOCK_ID
 \family default 
 : usado para representar un número de bloque.
 \layout Itemize
 
 \family default 
 : usado para representar un número de bloque.
 \layout Itemize
 
-typdef 
+
 \family typewriter 
 \family typewriter 
-unsigned long EMUFS_BLOCK_SIZE
+EMUFS_BLOCK_SIZE
 \family default 
 : usado para representar el tamaño en bytes de un bloque.
 \layout Itemize
 
 \family default 
 : usado para representar el tamaño en bytes de un bloque.
 \layout Itemize
 
-typedef 
+
 \family typewriter 
 \family typewriter 
-unsigned long EMUFS_FREE
+EMUFS_FREE
 \family default 
 : usado para representar espacio libre en bytes.
 \layout Itemize
 
 \family default 
 : usado para representar espacio libre en bytes.
 \layout Itemize
 
-typedef 
+
 \family typewriter 
 \family typewriter 
-unsigned long EMUFS_OFFSET
+EMUFS_OFFSET
 \family default 
 : usado para representar un offset.
 \family default 
 : usado para representar un offset.
+\layout Standard
+
+Todos son del tipo 
+\family typewriter 
+unsigned long
+\family default 
+.
 \layout Section
 
 
 \layout Section
 
 
@@ -1911,6 +1918,36 @@ emufs_tipo1_agregar_registro()
 Bajas de registros
 \layout Standard
 
 Bajas de registros
 \layout Standard
 
+Al eliminar un registro lo primero que se hace es actualizar los archivos
+ de índice y de indentificadores recuperables, poniendo como número de bloque
+ el valor especial 
+\family typewriter 
+EMUFS_NOT_FOUND
+\family default 
+ y agregando el identificador del registro a borrar respectivamente.
+ También se actualiza el archivo de control de espacio libre por cada bloque
+ (en caso de ser más de uno, en registros 
+\emph on 
+multibloque
+\emph default 
+, se actualizan todos los bloques) y se carga el bloque en memoria para
+\emph on 
+alinear los datos a izquierda
+\emph default 
+ (en caso de ser un registro 
+\emph on 
+multibloque
+\emph default 
+, esto se realiza sólo para el último bloque).
+ Para alinear los datos, se recorre secuencialmente en bloque (leyendo la
+ cabecera de cada registro y salteando los datos) hasta encontrar el registro
+ a borrar.
+ Encontrado el registro, se copian todos los bytes que se encuentran entre
+ el fin del registro a borrar y el fin del bloque, en el comienzo del bloque
+ borrado.
+\layout Standard
+
 Ver: 
 \family typewriter 
 emufs_tipo1_borrar_registro()
 Ver: 
 \family typewriter 
 emufs_tipo1_borrar_registro()
@@ -1919,6 +1956,13 @@ emufs_tipo1_borrar_registro()
 Modificación de registros
 \layout Standard
 
 Modificación de registros
 \layout Standard
 
+Se optó por un algoritmo simple y general, que usa las funciones de alto
+ nivel mencionadas hasta ahora.
+ Simplemento borra el registro y vuelve a crearlo.
+ Al recuperar el último identificador de registro borrado, nos aseguramos
+ de que se mantenga el identificador del registro.
+\layout Standard
+
 Ver: 
 \family typewriter 
 emufs_tipo1_modificar_registro()
 Ver: 
 \family typewriter 
 emufs_tipo1_modificar_registro()
@@ -1927,14 +1971,121 @@ emufs_tipo1_modificar_registro()
 Obtención de estadísticas
 \layout Standard
 
 Obtención de estadísticas
 \layout Standard
 
+Es una función bastante simple, con una única complicación que mencionaremos
+ más adelante.
+\layout Standard
+
+Para obtener las máximas desviaciones, cantidad total de espacio libre,
+ cantidad de registros y tamaño de los archivos auxiliares se utilizan las
+ funciones apropiadas de los archivos auxiliares (ver secciones 
+\begin_inset LatexCommand \ref{sec:idx}
+
+\end_inset 
+
+, 
+\begin_inset LatexCommand \ref{sec:fsc}
+
+\end_inset 
+
+ y 
+\begin_inset LatexCommand \ref{sec:did}
+
+\end_inset 
+
+).
+\layout Standard
+
+Para obtener la cantidad de bloques se hace el siguiente calculo:
+\layout LyX-Code
+
+cant_bloques = (tamaño_archivo_datos - tamaño_cabecera_archivo_datos)
+\layout LyX-Code
+
+               / tamaño_bloque;
+\layout Standard
+
+Hasta aquí no hay mayores inconvenientes.
+ El problema se presenta para calcular el tamaño de la información de control
+ utilizada por el archivo de datos; se utiliza el siguiente cálculo:
+\layout LyX-Code
+
+tam_info_control_datos = tamaño_cabecera_archivo_datos
+\layout LyX-Code
+
+                         + cant_registros * tamaño_cabecera_registro;
+\layout Standard
+
+Aunque a simple vista esto parece acertado, no contempla el caso de los
+ registros 
+\emph on 
+multibloque
+\emph default 
+ (pág 
+\begin_inset LatexCommand \pageref{sub:tipo1_reg_multi}
+
+\end_inset 
+
+), estos registros almacenan 
+\family typewriter 
+tamaño_cabecera_registro * N
+\family default 
+, donde 
+\family typewriter 
+N
+\family default 
+ es la cantidad de bloques que ocupan.
+ Salvar este caso sería muy costoso, porque habría que recorrer el archivo
+ registro a registro, 
+\emph on 
+fragmento
+\emph default 
+ a 
+\emph on 
+fragmento
+\emph default 
+ e ir contando todas las cabeceras de registro que aparecen (similar a lo
+ que se hace en la compactación, ver sección 
+\begin_inset LatexCommand \ref{sub:tipo1_compact}
+
+\end_inset 
+
+).
+ Al tratarse este de un caso excepcional, se optó por mantener la función
+ simple ya que funciona bien en la mayoría de los casos.
+\layout Standard
+
 Ver: 
 \family typewriter 
 emufs_tipo1_leer_estadisticas()
 \layout Subsection
 
 Ver: 
 \family typewriter 
 emufs_tipo1_leer_estadisticas()
 \layout Subsection
 
+
+\begin_inset LatexCommand \label{sub:tipo1_compact}
+
+\end_inset 
+
 Compactación del archivo de datos
 \layout Standard
 
 Compactación del archivo de datos
 \layout Standard
 
+Esta función es una de las más simples, porque se limita a un algoritmo
+ muy simple que utiliza las funciones de 
+\emph on 
+alto nivel
+\emph default 
+ antes nombradas para realizar su tarea.
+ Básicamente recorre el archivo de índices de registros, de comienzo a fin,
+ leyendo el registro, borrándolo y volviéndolo a insertar.
+ Si había espacio libre en un bloque anterior al que estaba, será insertado
+ en él, si no volverá a grabarse en el lugar en que estaba.
+ De esta forma se aprovechan todos los espacios libres intermedios, concluyendo
+ con un archivo igual o más pequeño que el original.
+\layout Standard
+
+Esta implementación no es la más eficiente, pero siendo que esta es una
+ operación costosa y excepcional por naturaleza, se optó por mantener el
+ algoritmo simple a costo de un poco de eficiencia.
+\layout Standard
+
 Ver:
 \family typewriter 
  emufs_tipo1_compactar()
 Ver:
 \family typewriter 
  emufs_tipo1_compactar()