]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - doc/informe.lyx
* Actualizo leer_registro_raw de tipo1
[z.facultad/75.06/emufs.git] / doc / informe.lyx
1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
2 \lyxformat 221
3 \textclass book
4 \language spanish
5 \inputencoding auto
6 \fontscheme palatino
7 \graphics default
8 \paperfontsize default
9 \spacing single 
10 \papersize a4paper
11 \paperpackage widemarginsa4
12 \use_geometry 0
13 \use_amsmath 0
14 \use_natbib 0
15 \use_numerical_citations 0
16 \paperorientation portrait
17 \secnumdepth 3
18 \tocdepth 3
19 \paragraph_separation indent
20 \defskip medskip
21 \quotes_language english
22 \quotes_times 2
23 \papercolumns 1
24 \papersides 1
25 \paperpagestyle default
26
27 \layout Title
28
29 E
30 \begin_inset Formula $\mu$
31 \end_inset 
32
33 FS
34 \layout Author
35
36 Nicolás Dimov
37 \newline 
38 Alan Kennedy
39 \newline 
40 Leandro Lucarella
41 \newline 
42 Ricardo Markiewicz
43 \layout Chapter
44
45 Introducción
46 \layout Chapter
47
48 Estructura común
49 \layout Section
50
51 Tipos
52 \layout Subsection
53
54 EMUFS
55 \layout Standard
56
57 callbacks, etc
58 \layout Subsection
59
60 EMUFS_Tipo
61 \layout Subsection
62
63 EMUFS_Estadisticas
64 \layout Subsection
65
66 EMUFS_BLOCK_ID
67 \layout Standard
68
69 etc
70 \layout Chapter
71
72 Archivos Auxiliares
73 \layout Standard
74
75 Por que los 3 tipos usan los mismo.
76  Ventajas y desventajas.
77 \layout Section
78
79 Archivo de índice (.idx)
80 \layout Standard
81
82 introduccion
83 \layout Subsection
84
85 Estructura física
86 \layout Subsection
87
88 Comportamiento (funciones generales)
89 \layout Section
90
91 Archivo de control de espacio libre (.fsc)
92 \layout Standard
93
94 idem anterior
95 \layout Section
96
97 Archivo de índices recuperables (.did)
98 \layout Standard
99
100 idem anterior
101 \layout Chapter
102
103 Archivo con bloques parametrizados y registros de longitud variable
104 \layout Standard
105
106 introduccion
107 \layout Section
108
109 Organización física
110 \layout Section
111
112 Comportamiento (funciones de la interfáz)
113 \layout Section
114
115 Detalles de implementación (funciones internas, ver si lo ponemos o no)
116 \layout Chapter
117
118 Archivo sin bloques y registros de longitud variable
119 \layout Standard
120
121 introduccion
122 \layout Section
123
124 Organización física
125 \layout Section
126
127 Comportamiento (funciones de la interfáz)
128 \layout Section
129
130 Detalles de implementación (funciones internas, ver si lo ponemos o no)
131 \layout Chapter
132
133 Archivo con bloques parametrizados y registros de longitud constante
134 \layout Standard
135
136 Las distintas organizaciones de archivos buscan aprovechar al máximo el
137  espacio del archivo.
138 \layout Standard
139
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.
144 \layout Section
145
146 Organización Física
147 \layout Standard
148
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.
152  
153 \layout Standard
154
155 Así como los graba, también tendrá la posibilidad de leer registros y borrarlos
156  del archivo.
157 \layout Subsection
158
159 Archivos Auxiliares
160 \layout Subsubsection
161
162 Archivo de Bloques y Registros (.idx)
163 \layout Standard
164
165 Con la ayuda de un archivo de bloques y registros (de extensión .idx), podremos
166  ubicar cualquier registro existente dentro del archivo.
167  
168 \layout Standard
169
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.
176 \layout Standard
177
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.
181 \layout Standard
182
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
185  de datos.
186 \layout Subsubsection
187
188 Archivo de Bloques y Espacio Libre (.fsc)
189 \layout Standard
190
191 El archivo de de espacios libres permite decidir a la hora de guardar un
192  registro, donde será guardado.
193  
194 \layout Standard
195
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.
198 \layout Standard
199
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
206  tamaño disponible.
207 \layout Standard
208
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
212
213 Archivo de Id`s Borrados (.did)
214 \layout Standard
215
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
220  registro.
221 \layout Section
222
223 Funciones Principales
224 \layout Subsection
225
226 EMUFS Tipo 3
227 \layout Standard
228
229 Dento de 
230 \emph on 
231 tipo3.h
232 \emph default 
233  y 
234 \emph on 
235 tipo3.c
236 \emph default 
237  se encuentran las cabeceras y la implementación de las funciones principales
238  respectivamente, las cuales dan funcionalidad a esta organización.
239 \layout Standard
240
241 A continuación se comentará el funcionamiento algunas de las mas importantes.
242 \layout Subsubsection
243
244 void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE*
245  reg_size, int* err)
246 \layout Standard
247
248 Devuelve un puntero con la memoria reservada que contiene al registro solicitado
249  por el segundo parámetro ( 
250 \emph on 
251 ID
252 \emph default 
253  ), y almacena en 
254 \emph on 
255 reg_size 
256 \emph default 
257 el tamaño del registro leido, que en este caso no es necesario pues es constante
258  y es conocicdo de antemano.
259 \layout Standard
260
261 Para realizar esta acción, busca en el archivo 
262 \emph on 
263 .idx 
264 \emph default 
265 el bloque al cual pertenece el registro.
266 \layout Subsubsection
267
268 void* emufs_tipo3_leer_bloque(EMUFS *emu, EMUFS_BLOCK_ID num_bloque, int*
269  err)
270 \layout Standard
271
272 Devuelve un puntero con la memoria reservada que contiene el bloque solicitado
273  por el segundo parámetro ( 
274 \emph on 
275 num_bloque 
276 \emph default 
277 ).
278  
279 \layout Standard
280
281 Como la numeración de los bloques es 
282 \emph on 
283 virtual, 
284 \emph default 
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
289
290 EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
291  tam, int* err)
292 \layout Standard
293
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.
296 \layout Standard
297
298 El registro a grabar es apuntado por el segundo parámetro ( 
299 \emph on 
300 ptr 
301 \emph default 
302 ) y el tamaño viene indicado en el tercero ( 
303 \emph on 
304 tam
305 \emph default 
306  ).
307 \layout Standard
308
309 Luego de realizar la grabación, actualiza los archivos índice con los valores
310  correspondientes.
311 \layout Subsubsection
312
313 int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID)
314 \layout Standard
315
316 Borra el registro indicado por el segundo parámetro ( 
317 \emph on 
318 ID
319 \emph default 
320  ) del archivo de datos, y actualiza los archivos de índice para mantener
321  la coherencia en las próximas modificaciones.
322 \layout Standard
323
324 Al borrar un registro, justifica los demás registros del bloque hacia la
325  izquierda.
326 \layout Subsubsection
327
328 EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
329 \layout Standard
330
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
334  libres, etc.
335 \layout Subsubsection
336
337 void emufs_tipo3_compactar(EMUFS *emu)
338 \layout Standard
339
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
343  del bloque.
344 \layout Standard
345
346 Para realizar esto, se aprovecha la funcionalidad de 
347 \emph on 
348 emufs_tipo3_grabar_registro() 
349 \emph default 
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 
354 \emph on 
355 gaps 
356 \emph default 
357 que pudieron haberse formado por la eliminación de registros serán cubiertos
358  por otros.
359 \layout Standard
360
361 Al finalizar este proceso se verifica si existen bloques vacios para truncar
362  el archivo.
363  Lo mismo se debe hacer con el archivo de espacios libres .
364 \emph on 
365 fsc 
366 \emph default 
367 el cual disminuye su tamaño también.
368 \layout Section
369
370 Consideraciones y Políticas de Diseño
371 \layout Comment
372
373 Esto para mi va en organización física.
374 \layout Standard
375
376 Se han tomado ciertas consideraciones para algunos casos particulares que
377  se pueden presentar durante el uso/ejecución de la aplicación.
378 \layout Enumerate
379
380 Cada registro tiene un encabezado que indica el 
381 \emph on 
382 id 
383 \emph default 
384 del mismo.
385 \layout Enumerate
386
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.
392 \layout Enumerate
393
394 Si el registro se divide en mas de un bloque, se le coloca el id como encabezado
395  igualmente, pero en el archivo .
396 \emph on 
397 idx
398 \emph default 
399  solo se guarda el primer bloque.
400  En el 
401 \emph on 
402 .fsc
403 \emph default 
404  se actualizan todos los bloques con el espacio libre que realmente tienen.
405 \layout Chapter
406
407 Conclusiones
408 \layout Standard
409
410 Las comparaciones, pruebas, etc...
411 \the_end