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$
75 Por que los 3 tipos usan los mismo.
76 Ventajas y desventajas.
79 Archivo de índice (.idx)
88 Comportamiento (funciones generales)
91 Archivo de control de espacio libre (.fsc)
97 Archivo de índices recuperables (.did)
103 Archivo con bloques parametrizados y registros de longitud variable
112 Comportamiento (funciones de la interfáz)
115 Detalles de implementación (funciones internas, ver si lo ponemos o no)
118 Archivo sin bloques y registros de longitud variable
127 Comportamiento (funciones de la interfáz)
130 Detalles de implementación (funciones internas, ver si lo ponemos o no)
133 Archivo con bloques parametrizados y registros de longitud constante
136 Las distintas organizaciones de archivos buscan aprovechar al máximo el
140 En este caso veremos que sucede luego de agregar y borrar una gran cantidad
141 de registros del archivo, lo que provoca como consecuencia directa la fragmenta
142 ción del archivo, es decir, quedan huecos entre un registro y otro, lo que
143 produce un desperdicio de espacio.
149 Esta organización guarda los registros pertenecientes al archivo en bloques
150 de tamaño parametrizado, de modo que intentará guardar la mayor cantidad
151 de registros que quepan en un bloque.
155 Así como los graba, también tendrá la posibilidad de leer registros y borrarlos
160 \layout Subsubsection
162 Archivo de Bloques y Registros (.idx)
165 Con la ayuda de un archivo de bloques y registros (de extensión .idx), podremos
166 ubicar cualquier registro existente dentro del archivo.
170 El archivo de índice contiene una estructura que contiene el id de un registro
171 y el número de bloque al que pertenece.
172 Este archivo esta ordenado por id, de modo que incrementa su tamaño cada
173 vez que se grabe en el archivo de datos un nuevo registro, excepto que
174 un registro haya sido borrado con anterioridad lo cual produce que al guardar
175 un nuevo registro se actualice y no crezca.
178 Si un registro es borrado del archivo de datos, debe actualizarse el índice,
179 esto se logra colocando un flag que indique que el id no pertenece a ningún
180 bloque, hemos adoptado poner -1 en el campo location de la estructura EMUFS_IDX.
183 Es necesario que este archivo esté ordenado por id de registro, ya que esto
184 permitirá el acceso directo para la búsqueda de un registro en el archivo
186 \layout Subsubsection
188 Archivo de Bloques y Espacio Libre (.fsc)
191 El archivo de de espacios libres permite decidir a la hora de guardar un
192 registro, donde será guardado.
196 La estructura de este archivo está formada por un número que indica el bloque
197 y otro que indica el espacio libre en él.
200 De esta manera al querer guardar un registro este archivo informará donde
201 cabe el mismo, previa invocación al la función EMUFS_BLOCK_ID emufs_fsc_buscar_
202 lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE*) perteneciente a fsc.h, la cual devuelve
203 el número de bloque donde entra el registro o -1 si no hay un bloque con
204 lugar suficiente, y toma como parámetros una estructura EMUFS, y dos EMUFS_FREE
205 donde el segndo parámetro es el tamaño buscado, y el tercero devuelve el
209 De la misma manera, al borrar un registro este archivo debe ser actualizado
210 colocando el nuevo espacio libre en el bloque.
211 \layout Subsubsection
213 Archivo de Id`s Borrados (.did)
216 Este archivo funciona como una pila de id`s borrados, es decir, cuando se
217 borra un registro el id se almacena en este archivo y será recuperado cuando
218 se desee grabar un registro nuevo, de esta manera se aprovechan todos los
219 id`s sin necesidad de crear uno nuevo cada vez que se borra y graba un
223 Funciones Principales
237 se encuentran las cabeceras y la implementación de las funciones principales
238 respectivamente, las cuales dan funcionalidad a esta organización.
241 A continuación se comentará el funcionamiento algunas de las mas importantes.
242 \layout Subsubsection
244 void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE*
248 Devuelve un puntero con la memoria reservada que contiene al registro solicitado
249 por el segundo parámetro (
257 el tamaño del registro leido, que en este caso no es necesario pues es constante
258 y es conocicdo de antemano.
261 Para realizar esta acción, busca en el archivo
265 el bloque al cual pertenece el registro.
266 \layout Subsubsection
268 void* emufs_tipo3_leer_bloque(EMUFS *emu, EMUFS_BLOCK_ID num_bloque, int*
272 Devuelve un puntero con la memoria reservada que contiene el bloque solicitado
273 por el segundo parámetro (
281 Como la numeración de los bloques es
285 el acceso al archivo para levantar un bloque es directo, es decir, se posiciona
286 directamente en en número de bloque multiplicado por el tamaño del mismo,
287 salteando antes el encabezado del archivo.
288 \layout Subsubsection
290 EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
294 Graba un registro en un bloque donde haya espacio suficiente, y si no crea
295 un nuevo bloque y lo agrega al final del archivo.
298 El registro a grabar es apuntado por el segundo parámetro (
302 ) y el tamaño viene indicado en el tercero (
309 Luego de realizar la grabación, actualiza los archivos índice con los valores
311 \layout Subsubsection
313 int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID)
316 Borra el registro indicado por el segundo parámetro (
320 ) del archivo de datos, y actualiza los archivos de índice para mantener
321 la coherencia en las próximas modificaciones.
324 Al borrar un registro, justifica los demás registros del bloque hacia la
326 \layout Subsubsection
328 EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
331 Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas
332 del archivo de datos, espacio libre total, cantidad de registros, cantidad
333 de bloques, tamaño del archivo en bytes, relaciones entre tamaños y espacios
335 \layout Subsubsection
337 void emufs_tipo3_compactar(EMUFS *emu)
340 Esta función intenta reorganizar el archivo de manera que el espacio libre
341 sea lo menor posible, recordando siempre que un registro no puede ser almacenad
342 o en mas de un bloque excepto que el tamaño del registro sea mayor que el
346 Para realizar esto, se aprovecha la funcionalidad de
348 emufs_tipo3_grabar_registro()
350 ya que esta tiene la capacidad de determinar una posición mas eficiente
351 en el archivo para un registro.
352 Por esto lo que se hace es levantar uno por uno los registros y volverlos
353 a grabar, de ese modo todos los
357 que pudieron haberse formado por la eliminación de registros serán cubiertos
361 Al finalizar este proceso se verifica si existen bloques vacios para truncar
363 Lo mismo se debe hacer con el archivo de espacios libres .
367 el cual disminuye su tamaño también.
370 Consideraciones y Políticas de Diseño
373 Esto para mi va en organización física.
376 Se han tomado ciertas consideraciones para algunos casos particulares que
377 se pueden presentar durante el uso/ejecución de la aplicación.
380 Cada registro tiene un encabezado que indica el
387 Si el tamaño del registro es mayor que el tamaño del bloque el registro
388 se particionará en la cantidad de bloques que sea necesario, pero siempre
389 se guardará desde el comienzo de un bloque, esto quiere decir que nunca
390 se podrá encontrar un comienzo de registro en algún lugar de un bloque
391 que no sea el comienzo del mismo.
394 Si el registro se divide en mas de un bloque, se le coloca el id como encabezado
395 igualmente, pero en el archivo .
399 solo se guarda el primer bloque.
404 se actualizan todos los bloques con el espacio libre que realmente tienen.
410 Las comparaciones, pruebas, etc...