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 La estuctura que define este archivo es la siguiente:
179 EMUFS_FSC que contiene
182 EMUFS_BLOCK_ID indica el número de bloque
185 EMUFS_FREE freespace indica la cantidad de espacio libre que queda en el
189 Archivo de índices recuperables (.did)
195 Archivo con bloques parametrizados y registros de longitud variable
204 Comportamiento (funciones de la interfáz)
207 Detalles de implementación (funciones internas, ver si lo ponemos o no)
210 Archivo sin bloques y registros de longitud variable
219 Comportamiento (funciones de la interfáz)
222 Detalles de implementación (funciones internas, ver si lo ponemos o no)
225 Archivo con bloques parametrizados y registros de longitud constante
228 Las distintas organizaciones de archivos buscan aprovechar al máximo el
232 En este caso veremos que sucede luego de agregar y borrar una gran cantidad
233 de registros del archivo, lo que provoca como consecuencia directa la fragmenta
234 ción del archivo, es decir, quedan huecos entre un registro y otro, lo que
235 produce un desperdicio de espacio.
241 Esta organización guarda los registros pertenecientes al archivo en bloques
242 de tamaño parametrizado, de modo que intentará guardar la mayor cantidad
243 de registros que quepan en un bloque.
247 Así como los graba, también tendrá la posibilidad de leer registros y borrarlos
251 Comportamiento Particular de los Archivos Auxiliares
252 \layout Subsubsection
254 Archivo de Bloques y Registros (.idx)
257 buscar algun caso extraordinario.
258 \layout Subsubsection
260 Archivo de Bloques y Espacio Libre (.fsc)
263 El archivo de de espacios libres permite decidir a la hora de guardar un
264 registro, donde será guardado.
268 La estructura de este archivo está formada por un número que indica el bloque
269 y otro que indica el espacio libre en él.
272 De esta manera al querer guardar un registro este archivo informará donde
273 cabe el mismo, previa invocación al la función
275 EMUFS_BLOCK_ID emufs_fsc_buscar_lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE*)
277 perteneciente a fsc.h, la cual devuelve el número de bloque donde entra
278 el registro o -1 si no hay un bloque con lugar suficiente, y toma como
279 parámetros una estructura
287 donde el segndo parámetro es el tamaño buscado, y el tercero devuelve el
291 De la misma manera, al borrar un registro este archivo debe ser actualizado
292 colocando el nuevo espacio libre en el bloque.
293 \layout Subsubsection
295 Archivo de Id`s Borrados (.did)
298 Este archivo funciona como una pila de id`s borrados, es decir, cuando se
299 borra un registro el id se almacena en este archivo y será recuperado cuando
300 se desee grabar un registro nuevo, de esta manera se aprovechan todos los
301 id`s sin necesidad de crear uno nuevo cada vez que se borra y graba un
305 Funciones Principales
319 se encuentran las cabeceras y la implementación de las funciones principales
320 respectivamente, las cuales dan funcionalidad a esta organización.
323 A continuación se comentará la descripción de algunas acciones importantes.
324 \layout Subsubsection
329 La lectura de un registro se realiza con la ayuda del archivo .
333 el cual contiene la información de la posición del registro dentro del
335 Una vez leida esta información, se recupera el bloque (en su totalidad)
336 del archivo y se busca secuencialmente el registro con el
345 ver: void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE
346 * reg_size, int* err)
347 \layout Subsubsection
352 Graba un registro en un bloque donde haya espacio suficiente, y si no crea
353 un nuevo bloque y lo agrega al final del archivo.
356 Luego de grabar un registro, actualiza los archivos de índice .idx y .fsc
357 para mantener la coherencia.
362 ver: EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_S
364 \layout Subsubsection
369 Borra un registro del archivo de datos, para esto levanta el bloque al que
370 pertenece el archivo y ajusta los demás registros justificandolos hacia
374 Cabe destacar que para dar de baja un registro no hace falta borrarlo del
375 archivo de datos, solo es necesario borrar las entradas en los archivos
377 \layout Subsubsection
382 Se puede tener acceso a las estadísticas generales del archivo, por ejemplo,
383 cantidad de bloques, cantidad de registros, espacio libre total, espacio
384 libre promedio, espacio libre máximo y mínimo, etc.
387 Esta información es el resultado de ciertos cálculos realizados tanto en
388 el archivo de datos como en los archivos índice.
391 Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas
392 del archivo de datos, espacio libre total, cantidad de registros, cantidad
393 de bloques, tamaño del archivo en bytes, relaciones entre tamaños y espacios
399 ver: EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
400 \layout Subsubsection
405 Esta función intenta reorganizar el archivo de manera que el espacio libre
406 sea lo menor posible, recordando siempre que un registro no puede ser almacenad
407 o en mas de un bloque excepto que el tamaño del registro sea mayor que el
411 Para realizar esto, se aprovecha la funcionalidad de
413 emufs_tipo3_grabar_registro()
415 ya que esta tiene la capacidad de determinar una posición mas eficiente
416 en el archivo para un registro.
417 Por esto lo que se hace es levantar uno por uno los registros y volverlos
418 a grabar, de ese modo todos los
422 que pudieron haberse formado por la eliminación de registros serán cubiertos
426 Al finalizar este proceso se verifica si existen bloques vacios para truncar
428 Lo mismo se debe hacer con el archivo de espacios libres .
432 el cual disminuye su tamaño también.
437 ver: void emufs_tipo3_compactar(EMUFS *emu)
440 Consideraciones y Políticas de Diseño
443 Esto para mi va en organización física.
446 Se han tomado ciertas consideraciones para algunos casos particulares que
447 se pueden presentar durante el uso/ejecución de la aplicación.
450 Cada registro tiene un encabezado que indica el
457 Si el tamaño del registro es mayor que el tamaño del bloque el registro
458 se particionará en la cantidad de bloques que sea necesario, pero siempre
459 se guardará desde el comienzo de un bloque, esto quiere decir que nunca
460 se podrá encontrar un comienzo de registro en algún lugar de un bloque
461 que no sea el comienzo del mismo.
464 Si el registro se divide en mas de un bloque, se le coloca el id como encabezado
465 igualmente, pero en el archivo .
469 solo se guarda el primer bloque.
474 se actualizan todos los bloques con el espacio libre que realmente tienen.
480 Las comparaciones, pruebas, etc...