1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
11 \paperpackage widemarginsa4
15 \use_numerical_citations 0
16 \paperorientation portrait
19 \paragraph_separation indent
21 \quotes_language english
25 \paperpagestyle default
30 \begin_inset Formula $\mu$
61 es la estuctura principal que encapsula todas las funciones para el manejo
62 de un archivo de datos.
65 Esta estructura consta de:
68 EMUFS_Tipo que es un tipo enumerado que indica cual es la organización.
71 EMUFS_BLOCK_SIZE indica el tamaño del bloque para los tipos 1 y 3.
74 EMUFS_REG_SIZE indica el tamaño del registro, para el tipo 3 que posee tamaño
81 no me convence esta descripcion.
100 Por que los 3 tipos usan los mismo.
101 Ventajas y desventajas.
104 Archivo de índice (.idx)
107 Con la ayuda de un archivo de bloques y registros (de extensión .idx), podremos
108 ubicar cualquier registro existente dentro del archivo.
111 El archivo de índice contiene una estructura que contiene el id de un registro
112 y el número de bloque al que pertenece.
113 Este archivo esta ordenado por
117 , de modo que incrementa su tamaño cada vez que se grabe en el archivo de
118 datos un nuevo registro, excepto que un registro haya sido borrado con
119 anterioridad lo cual produce que al guardar un nuevo registro se actualice
123 Si un registro es borrado del archivo de datos, debe actualizarse el índice,
124 esto se logra colocando un flag que indique que el id no pertenece a ningún
125 bloque, hemos adoptado poner -1 en el campo location de la estructura
132 Es necesario que este archivo esté ordenado por
136 de registro, ya que esto permitirá el acceso directo para la búsqueda de
137 un registro en el archivo de datos.
143 El tipo EMUFS_IDX define la estuctura de los registros de este archivo.
146 Esta estructura está compuesta por don enteros (long).
149 EMUFS_REG_ID reg_id indica el
156 EMUFS_BLOCK_ID location número de bloque donde se encuentra el registro.
159 EMUFS_REG_ID y EMUFS_BLOCK_ID son
167 Comportamiento (funciones generales)
170 Archivo de control de espacio libre (.fsc)
176 Archivo de índices recuperables (.did)
182 Archivo con bloques parametrizados y registros de longitud variable
191 Comportamiento (funciones de la interfáz)
194 Detalles de implementación (funciones internas, ver si lo ponemos o no)
197 Archivo sin bloques y registros de longitud variable
206 Comportamiento (funciones de la interfáz)
209 Detalles de implementación (funciones internas, ver si lo ponemos o no)
212 Archivo con bloques parametrizados y registros de longitud constante
215 Las distintas organizaciones de archivos buscan aprovechar al máximo el
219 En este caso veremos que sucede luego de agregar y borrar una gran cantidad
220 de registros del archivo, lo que provoca como consecuencia directa la fragmenta
221 ción del archivo, es decir, quedan huecos entre un registro y otro, lo que
222 produce un desperdicio de espacio.
228 Esta organización guarda los registros pertenecientes al archivo en bloques
229 de tamaño parametrizado, de modo que intentará guardar la mayor cantidad
230 de registros que quepan en un bloque.
234 Así como los graba, también tendrá la posibilidad de leer registros y borrarlos
238 Comportamiento Particular de los Archivos Auxiliares
239 \layout Subsubsection
241 Archivo de Bloques y Registros (.idx)
244 buscar algun caso extraordinario.
245 \layout Subsubsection
247 Archivo de Bloques y Espacio Libre (.fsc)
250 El archivo de de espacios libres permite decidir a la hora de guardar un
251 registro, donde será guardado.
255 La estructura de este archivo está formada por un número que indica el bloque
256 y otro que indica el espacio libre en él.
259 De esta manera al querer guardar un registro este archivo informará donde
260 cabe el mismo, previa invocación al la función
262 EMUFS_BLOCK_ID emufs_fsc_buscar_lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE*)
264 perteneciente a fsc.h, la cual devuelve el número de bloque donde entra
265 el registro o -1 si no hay un bloque con lugar suficiente, y toma como
266 parámetros una estructura
274 donde el segndo parámetro es el tamaño buscado, y el tercero devuelve el
278 De la misma manera, al borrar un registro este archivo debe ser actualizado
279 colocando el nuevo espacio libre en el bloque.
280 \layout Subsubsection
282 Archivo de Id`s Borrados (.did)
285 Este archivo funciona como una pila de id`s borrados, es decir, cuando se
286 borra un registro el id se almacena en este archivo y será recuperado cuando
287 se desee grabar un registro nuevo, de esta manera se aprovechan todos los
288 id`s sin necesidad de crear uno nuevo cada vez que se borra y graba un
292 Funciones Principales
306 se encuentran las cabeceras y la implementación de las funciones principales
307 respectivamente, las cuales dan funcionalidad a esta organización.
310 A continuación se comentará la descripción de algunas acciones importantes.
311 \layout Subsubsection
316 La lectura de un registro se realiza con la ayuda del archivo .
320 el cual contiene la información de la posición del registro dentro del
322 Una vez leida esta información, se recupera el bloque (en su totalidad)
323 del archivo y se busca secuencialmente el registro con el
332 ver: void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE
333 * reg_size, int* err)
334 \layout Subsubsection
339 Graba un registro en un bloque donde haya espacio suficiente, y si no crea
340 un nuevo bloque y lo agrega al final del archivo.
343 Luego de grabar un registro, actualiza los archivos de índice .idx y .fsc
344 para mantener la coherencia.
349 ver: EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_S
351 \layout Subsubsection
356 Borra un registro del archivo de datos, para esto levanta el bloque al que
357 pertenece el archivo y ajusta los demás registros justificandolos hacia
361 Cabe destacar que para dar de baja un registro no hace falta borrarlo del
362 archivo de datos, solo es necesario borrar las entradas en los archivos
364 \layout Subsubsection
369 Se puede tener acceso a las estadísticas generales del archivo, por ejemplo,
370 cantidad de bloques, cantidad de registros, espacio libre total, espacio
371 libre promedio, espacio libre máximo y mínimo, etc.
374 Esta información es el resultado de ciertos cálculos realizados tanto en
375 el archivo de datos como en los archivos índice.
378 Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas
379 del archivo de datos, espacio libre total, cantidad de registros, cantidad
380 de bloques, tamaño del archivo en bytes, relaciones entre tamaños y espacios
386 ver: EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
387 \layout Subsubsection
392 Esta función intenta reorganizar el archivo de manera que el espacio libre
393 sea lo menor posible, recordando siempre que un registro no puede ser almacenad
394 o en mas de un bloque excepto que el tamaño del registro sea mayor que el
398 Para realizar esto, se aprovecha la funcionalidad de
400 emufs_tipo3_grabar_registro()
402 ya que esta tiene la capacidad de determinar una posición mas eficiente
403 en el archivo para un registro.
404 Por esto lo que se hace es levantar uno por uno los registros y volverlos
405 a grabar, de ese modo todos los
409 que pudieron haberse formado por la eliminación de registros serán cubiertos
413 Al finalizar este proceso se verifica si existen bloques vacios para truncar
415 Lo mismo se debe hacer con el archivo de espacios libres .
419 el cual disminuye su tamaño también.
424 ver: void emufs_tipo3_compactar(EMUFS *emu)
427 Consideraciones y Políticas de Diseño
430 Esto para mi va en organización física.
433 Se han tomado ciertas consideraciones para algunos casos particulares que
434 se pueden presentar durante el uso/ejecución de la aplicación.
437 Cada registro tiene un encabezado que indica el
444 Si el tamaño del registro es mayor que el tamaño del bloque el registro
445 se particionará en la cantidad de bloques que sea necesario, pero siempre
446 se guardará desde el comienzo de un bloque, esto quiere decir que nunca
447 se podrá encontrar un comienzo de registro en algún lugar de un bloque
448 que no sea el comienzo del mismo.
451 Si el registro se divide en mas de un bloque, se le coloca el id como encabezado
452 igualmente, pero en el archivo .
456 solo se guarda el primer bloque.
461 se actualizan todos los bloques con el espacio libre que realmente tienen.
467 Las comparaciones, pruebas, etc...