]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Documentacion de tipo1 casi completa, falta algun detalle sobre archivos auxiliares...
authorLeandro Lucarella <llucax@gmail.com>
Mon, 19 Apr 2004 08:39:57 +0000 (08:39 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 19 Apr 2004 08:39:57 +0000 (08:39 +0000)
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
- 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
@@ -411,9 +411,9 @@ emufs.h
 :
 \layout Itemize
 
-typedef 
+
 \family typewriter 
-unsigned long EMUFS_REG_ID
+EMUFS_REG_ID
 \family default 
 : usado para representar un 
 \emph on 
@@ -422,39 +422,46 @@ Id
  de un registro.
 \layout Itemize
 
-typdef 
+
 \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
 
-typedef 
+
 \family typewriter 
-unsigned long EMUFS_BLOCK_ID
+EMUFS_BLOCK_ID
 \family default 
 : usado para representar un número de bloque.
 \layout Itemize
 
-typdef 
+
 \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
 
-typedef 
+
 \family typewriter 
-unsigned long EMUFS_FREE
+EMUFS_FREE
 \family default 
 : usado para representar espacio libre en bytes.
 \layout Itemize
 
-typedef 
+
 \family typewriter 
-unsigned long EMUFS_OFFSET
+EMUFS_OFFSET
 \family default 
 : usado para representar un offset.
+\layout Standard
+
+Todos son del tipo 
+\family typewriter 
+unsigned long
+\family default 
+.
 \layout Section
 
 
@@ -1911,6 +1918,36 @@ emufs_tipo1_agregar_registro()
 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()
@@ -1919,6 +1956,13 @@ emufs_tipo1_borrar_registro()
 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()
@@ -1927,14 +1971,121 @@ emufs_tipo1_modificar_registro()
 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
 
+
+\begin_inset LatexCommand \label{sub:tipo1_compact}
+
+\end_inset 
+
 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()