]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - doc/informe.lyx
Se documenta con doxygen lo que faltaba.
[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 Organización de Datos (75.06)
30 \newline 
31 Trabajo Práctico
32 \newline 
33 E
34 \begin_inset Formula $\mu$
35 \end_inset 
36
37 FS
38 \layout Author
39
40
41 \series bold 
42 Grupo 11
43 \series default 
44
45 \newline 
46 Nicolás Dimov (77624)
47 \newline 
48 Alan Kennedy (78907)
49 \newline 
50 Leandro Lucarella (77891)
51 \newline 
52 Ricardo Markiewicz (78226)
53 \layout Date
54
55 Primera Entrega, 19 de Abril de 2004
56 \layout Standard
57
58
59 \begin_inset LatexCommand \tableofcontents{}
60
61 \end_inset 
62
63
64 \layout Chapter
65
66 Introducción
67 \layout Standard
68
69 Esta es la documentación correspondiente a las API`s para el manejo de tres
70  organizaciones de archivo diferentes.
71  A continuación se describe cada una de ellas y su modo de funcionamiento
72  y sus características principales.
73  De la correcta elección de la organización, dependerá la eficiencia de
74  la aplicación que la utilice.
75  
76 \layout Standard
77
78 EMUFS se presenta como un 
79 \emph on 
80 emulador
81 \emph default 
82  de un 
83 \emph on 
84 filesystem
85 \emph default 
86 , capaz de administrar datos almacenados en cualquiera de las tres organizacione
87 s de archivo previamente mencionadas, las cuales a saberse son:
88 \layout Enumerate
89
90 Registros de Longitud Variable, Bloques de tamaño parametrizable
91 \layout Enumerate
92
93 Registros de Longitud Variable, Sin Bloques
94 \layout Enumerate
95
96 Registros de Longitud Fija, Bloques de tamaño parametrizables
97 \layout Standard
98
99 A través de este trabajo, se podrán observar las diferencias entre distintos
100  tipos de organización de archivos, ventajas y desventajas de cada una de
101  ellas, y las situaciones particulares que deberá sortear un filesystem,
102  como la partición de registros en distintos bloques, manejo de espacio
103  libre, compactación de un archivo, etc.
104 \layout Standard
105
106 A continuación, veremos que el manejo de los archivos en EMUFS se realiza
107  a través de una estructura de control común para cualquier tipo de archivo,
108  dándole flexibilidad y escalabilidad a nuestro sistema.
109 \layout Standard
110
111 Hacia el final de esta presentación, se observaran las pruebas realizadas
112  con las distintas organizaciones de archivos, y las conclusiones obtenidos
113  al respecto.
114 \layout Section
115
116 Documentación de la API
117 \layout Standard
118
119 Para obtener una documentación de la API más completa, se incluye en formato
120  HTML en el CD-ROM la documentación generado con Doxygen.
121  Esta documentación se encuentra en el directorio 
122 \family typewriter 
123 doc/api/html
124 \family default 
125 .
126 \layout Chapter
127
128 Estructura común
129 \layout Section
130
131 Tipos
132 \layout Standard
133
134 Se detallan a continuación los tipos de datos definidos y utilizados en
135  las distintas implementaciones que conforman nuestro sistema, siendo el
136  más importante de ellos, la estructura 
137 \family typewriter 
138 EMUFS
139 \family default 
140  que actúa como interfaz común para el manejo de cualquier tipo de archivo
141  (no importa que tipo de organización física posea un archivo, esta estructura
142  proveerá una interfaz (funciones) para su manejo).
143 \layout Subsection
144
145 Tipos Comunes
146 \layout Standard
147
148 En la implementación de cada tipo de organización física, así como también
149  en las API de los archivos auxiliares comunes a ellas, se da la utilización
150  de tipo definidos para una clara interfaz entre las mismas, los cuales
151  son brevemente descriptos a continuación y pueden ser hallados en el archivo
152  
153 \series bold 
154 emufs.h
155 \series default 
156 :
157 \layout Itemize
158
159
160 \family typewriter 
161 EMUFS_REG_ID
162 \family default 
163 : usado para representar un 
164 \emph on 
165 Id
166 \emph default 
167  de un registro.
168 \layout Itemize
169
170
171 \family typewriter 
172 EMUFS_REG_SIZE
173 \family default 
174 : usado para representar el tamaño en bytes de un registro.
175 \layout Itemize
176
177
178 \family typewriter 
179 EMUFS_BLOCK_ID
180 \family default 
181 : usado para representar un número de bloque.
182 \layout Itemize
183
184
185 \family typewriter 
186 EMUFS_BLOCK_SIZE
187 \family default 
188 : usado para representar el tamaño en bytes de un bloque.
189 \layout Itemize
190
191
192 \family typewriter 
193 EMUFS_FREE
194 \family default 
195 : usado para representar espacio libre en bytes.
196 \layout Itemize
197
198
199 \family typewriter 
200 EMUFS_OFFSET
201 \family default 
202 : usado para representar un offset.
203 \layout Standard
204
205 Todos son del tipo 
206 \family typewriter 
207 unsigned long
208 \family default 
209 .
210 \layout Subsection
211
212 EMUFS
213 \layout Standard
214
215
216 \family typewriter 
217 EMUFS
218 \family default 
219 \emph on 
220  
221 \emph default 
222 es la estructura principal que encapsula todas las funciones para el manejo
223  de un archivo de datos.
224  Posee punteros a funciones que dependiendo de la organización física por
225  la cual se opte dentro del sistema, serán asignados de acorde.
226  
227 \layout Standard
228
229 Su declaración puede ser observada en el archivo 
230 \series bold 
231 emufs.h 
232 \series default 
233 y la misma cuenta con los siguiente campos:
234 \layout Itemize
235
236
237 \family typewriter 
238 EMUFS_Tipo
239 \family default 
240  que es un tipo enumerado que indica cual es la organización.
241 \layout Itemize
242
243
244 \family typewriter 
245 EMUFS_BLOCK_SIZE
246 \family default 
247  indica el tamaño del bloque para los tipos 1 y 3.
248 \layout Itemize
249
250
251 \family typewriter 
252 EMUFS_REG_SIZE
253 \family default 
254  indica el tamaño del registro, para el tipo 3 que posee tamaño constante.
255 \layout Itemize
256
257
258 \family typewriter 
259 void **leer_bloque() 
260 \family default 
261 puntero a la función para leer un bloque.
262 \layout Itemize
263
264
265 \family typewriter 
266 void *leer_bloque_raw()
267 \family default 
268  puntero a la función para leer un bloque, el anterior y el siguiente.
269 \layout Itemize
270
271
272 \family typewriter 
273 void **leer_registro()
274 \family default 
275  puntero a la función para leer un registro.
276 \layout Itemize
277
278
279 \family typewriter 
280 void **leer_registro_raw()
281 \family default 
282  puntero a la función para leer un registro con su encabezado.
283 \layout Itemize
284
285
286 \family typewriter 
287 EMUFS_REG_ID *grabar_registro()
288 \family default 
289  puntero a la función para grabar un registro.
290 \layout Itemize
291
292
293 \family typewriter 
294 EMUFS_REG_ID *modificar_registro() 
295 \family default 
296 puntero a la función para modificar un registro.
297 \layout Itemize
298
299
300 \family typewriter 
301 int *borrar_registro()
302 \family default 
303  puntero a la función para borrar un registro.
304 \layout Itemize
305
306
307 \family typewriter 
308 EMUFS_Estadisticas *leer_estadisticas()
309 \family default 
310  puntero a la función para cargar una estructura con las estadísticas.
311 \layout Itemize
312
313
314 \family typewriter 
315 void *compactar()
316 \family default 
317  puntero a la función para compactar un archivo.
318 \layout Itemize
319
320
321 \family typewriter 
322 char *nombre
323 \family default 
324  almacena el nombre del archivo sin extensión.
325 \layout Standard
326
327 Esta estructura define los valores de sus punteros según el tipo de organización
328  que se desee manejar y esto se realiza a través del API emufs, implementado
329  en 
330 \series bold 
331 emufs.c
332 \series default 
333 , que se describirá posteriormente.
334 \layout Standard
335
336 Por ejemplo si se desea crear un archivo de nombre 
337 \begin_inset Quotes eld
338 \end_inset 
339
340 facturas
341 \begin_inset Quotes erd
342 \end_inset 
343
344  organizado de la forma 3, se invoca a la función:
345 \layout Standard
346
347
348 \family typewriter 
349 emufs_crear(filename,tipo,tam_bloque,tam_reg), 
350 \family default 
351 donde
352 \family typewriter 
353  filename 
354 \family default 
355 es el nombre que tendrán los archivos de datos e índice, 
356 \family typewriter 
357 tipo
358 \family default 
359  es el tipo de organización - bloques parametrizados y registros constantes
360  en este caso-, 
361 \family typewriter 
362 tam_bloque
363 \family default 
364  es el tamaño del bloque, y 
365 \family typewriter 
366 tam_reg
367 \family default 
368  es el tamaño del registro.
369 \layout Standard
370
371 Para las diferentes organizaciones puede ser que alguno de estos 2 últimos
372  valores no tengan sentido almacenarlas y tomaran un valor por defecto igual
373  a cero.
374 \layout Standard
375
376 Según el tipo de organización, se inicializan los punteros a las funciones.
377  Para el ejemplo 
378 \family typewriter 
379 leer_bloque
380 \family default 
381  se igualará a 
382 \family typewriter 
383 emufs_tipo3_leer_bloque()
384 \family default 
385 , y lo mismo sucede con los demás.
386 \layout Subsection
387
388 EMUFS_Tipo
389 \layout Standard
390
391
392 \family typewriter 
393 EMUFS_Tipo
394 \family default 
395  es un tipo de dato enum, el cual será utilizado en la cabecera de todo
396  archivo de datos (
397 \series bold 
398 .dat
399 \series default 
400 ), para indicar los distintos tipos de organización física.
401  Su declaración puede verse en el archivo 
402 \series bold 
403 emufs.h.
404 \layout Standard
405
406 A saberse los valores y significado correspondiente que puede tomar este
407  tipo de dato son:
408 \layout Itemize
409
410
411 \series bold 
412 T1
413 \series default 
414  : Archivos con registros de longitud variable y bloques parametrizables.
415 \layout Itemize
416
417
418 \series bold 
419 T2
420 \series default 
421  : Archivos con registros de longitud variable sin bloques.
422 \layout Itemize
423
424
425 \series bold 
426 T3
427 \series default 
428  : Archivos con registros de longitud fija y bloques parametrizables.
429 \layout Subsection
430
431 EMUFS_Estadisticas
432 \layout Standard
433
434
435 \family typewriter 
436 EMUFS_Estadisticas
437 \family default 
438  es una estructura que almacenará los datos pertinentes a las estadísticas
439  de un archivo dado, y será utilizada para visualizar dichas observaciones
440  a través de la GUI.
441 \layout Standard
442
443 Su declaración puede ser observada en el archivo 
444 \series bold 
445 emufs.h 
446 \series default 
447 y la misma cuenta con los siguiente campos:
448 \layout Itemize
449
450
451 \family typewriter 
452 unsigned long
453 \family default 
454  
455 \family typewriter 
456 tam_archivo
457 \family default 
458 : indica el tamaño del archivo de datos (.dat) en bytes.
459 \layout Itemize
460
461
462 \family typewriter 
463 unsigned long
464 \family default 
465  
466 \family typewriter 
467 tam_archivos_aux
468 \family default 
469 : indica el tamaño de los archivos auxiliares sumados en bytes.
470 \layout Itemize
471
472
473 \family typewriter 
474 unsigned long
475 \family default 
476  
477 \family typewriter 
478 tam_info_control_dat
479 \family default 
480 : indica la cantidad de bytes en información de control utilizados para
481  el archivo.
482 \layout Itemize
483
484
485 \family typewriter 
486 unsigned long
487 \family default 
488  
489 \family typewriter 
490 media_fs
491 \family default 
492 : promedio de espacio libre en el archivo de datos (por bloque o gap promedio
493  según la org)
494 \layout Itemize
495
496
497 \family typewriter 
498 unsigned long
499 \family default 
500  
501 \family typewriter 
502 total_fs
503 \family default 
504 : total de espacio libre en el archivo de datos.
505 \layout Itemize
506
507
508 \family typewriter 
509 unsigned long
510 \family default 
511  
512 \family typewriter 
513 max_fs
514 \family default 
515 : máximo espacio libre en el archivo de datos (en un bloque o máximo gap
516  segun la org).
517 \layout Itemize
518
519
520 \family typewriter 
521 unsigned long
522 \family default 
523  
524 \family typewriter 
525 min_fs
526 \family default 
527 : ídem pero mínimo.
528 \layout Itemize
529
530
531 \family typewriter 
532 unsigned long
533 \family default 
534  
535 \family typewriter 
536 cant_bloques
537 \family default 
538 : cantidad de bloques en el archivo de datos (.
539 \series bold 
540 dat
541 \series default 
542 )
543 \layout Itemize
544
545
546 \family typewriter 
547 unsigned long
548 \family default 
549  
550 \family typewriter 
551 cant_registros
552 \family default 
553 : cantidad de registros en el archivo de datos (
554 \series bold 
555 .dat
556 \series default 
557 )
558 \layout Standard
559
560 En base a la estructura descripta anteriormente y mediante la utilización
561  de la función de lectura de estadísticas 
562 \family typewriter 
563 emufs_leer_estadisticas()
564 \family default 
565  disponible en la estructura común 
566 \family typewriter 
567 EMUFS
568 \family default 
569  handler de cualquier tipo de archivo, podremos obtener una serie de estadística
570 s que pasamos a detallar (más allá de los datos básicos como cant registros,
571  cant bloques, tam archivo, etc):
572 \layout Itemize
573
574 Relación entre espacio libre y el tamaño del archivo de datos (
575 \series bold 
576 .dat
577 \series default 
578 )
579 \layout Itemize
580
581 Relación entre el espacio ocupado por información de control y el tamaño
582  del archivo de datos (
583 \series bold 
584 .dat
585 \series default 
586 )
587 \layout Itemize
588
589 Cantidad promedio de espacio libre (en bloque o gap promedio)
590 \layout Itemize
591
592 Desviaciones extremas de espacio libre (máximo/mínimo espacio libre en bloque
593  o mayor/menor gap)
594 \layout Section
595
596
597 \begin_inset LatexCommand \label{sec:cabecera_gral}
598
599 \end_inset 
600
601 Organización física general de un archivo E
602 \begin_inset Formula $\mu$
603 \end_inset 
604
605 FS
606 \layout Standard
607
608 Todo archivo E
609 \begin_inset Formula $\mu$
610 \end_inset 
611
612 FS está compuesto por 4 archivos a nivel de sistema operativo: archivo de
613  datos (con 3 formatos posibles, ver páginas 
614 \begin_inset LatexCommand \pageref{cha:tipo1}
615
616 \end_inset 
617
618
619 \begin_inset LatexCommand \pageref{cha:tipo2}
620
621 \end_inset 
622
623  y 
624 \begin_inset LatexCommand \pageref{cha:tipo3}
625
626 \end_inset 
627
628 ), archivo de índice (ver página 
629 \begin_inset LatexCommand \pageref{sec:idx}
630
631 \end_inset 
632
633 ), archivo de control de espacio libre (ver página 
634 \begin_inset LatexCommand \pageref{sec:fsc}
635
636 \end_inset 
637
638 ) y archivo de índices recuperables (ver página 
639 \begin_inset LatexCommand \pageref{sec:did}
640
641 \end_inset 
642
643 ).
644 \layout Standard
645
646 El archivo de datos está compuesto por:
647 \layout Itemize
648
649 Una 
650 \emph on 
651 cabecera general
652 \emph default 
653  compuesta por un 
654 \family typewriter 
655 int
656 \family default 
657  (4 bytes en plataformas Linux de 32 bits) que representa el tipo de archivo.
658 \layout Itemize
659
660 Datos dependientes del tipo de archivo.
661 \layout Standard
662
663 La 
664 \emph on 
665 cabecera general
666 \emph default 
667  es utilizada para poder detectar el formato de un archivo al abrirlo.
668  Los datos dependientes del tipo de archivo serán explicados en sus secciones
669  correspondientes.
670 \layout LyX-Code
671
672 archivo
673 \layout LyX-Code
674
675 +-----------+--------------------------------------------//-+
676 \layout LyX-Code
677
678 |    tipo   | Datos dependientes del tipo de archivo ...
679  
680 \backslash 
681
682 \backslash 
683  |
684 \layout LyX-Code
685
686 +-----------+--------------------------------------------//-+
687 \layout LyX-Code
688
689 /- 4 bytes -/
690 \layout Section
691
692 Uso de la estructura EMUFS
693 \layout Standard
694
695 Como fue mencionado anteriormente en la descripción de la estructura EMUFS,
696  la misma proporciona al usuario una interfaz a través de la cual puede
697  realizar el manejo de archivos en forma genérica, abstrayéndose del tipo
698  de organización física en particular que dicho archivo posea.
699  Se la declara en 
700 \series bold 
701 emufs.h
702 \series default 
703  y las funciones que inicializan la estructura se encuentran en 
704 \series bold 
705 emufs.c
706 \layout Standard
707
708 Es decir que a través de esta estructura, podemos manejar cualquier tipo
709  de archivo, mediante una misma interfaz en común.
710  La estructura 
711 \family typewriter 
712 EMUFS 
713 \family default 
714 posee además de ciertos datos que describen la organización física de un
715  archivo dado como por ejemplo 
716 \series bold 
717 \emph on 
718 tamaño de registro
719 \series default 
720 \emph default 
721
722 \series bold 
723 \emph on 
724 tamaño de bloque
725 \series default 
726 \emph default 
727  y 
728 \series bold 
729 \emph on 
730 nombre del archivo
731 \series default 
732 \emph default 
733 , una serie de punteros a funciones para el manejo del archivo del cual
734  es handler:
735 \layout Standard
736
737 Entre dichos funciones se encuentran: 
738 \family typewriter 
739 leer_registro()
740 \family default 
741
742 \family typewriter 
743 leer_bloque(), borrar_registro()
744 \family default 
745
746 \family typewriter 
747 agregar_registro()
748 \family default 
749
750 \family typewriter 
751 modificar_registro, leer_estadisticas()
752 \family default 
753
754 \family typewriter 
755 compactar().
756 \layout Standard
757
758 Para entender mejor el uso de esta estructura para el manejo de los archivos,
759  mostraremos un ejemplo concreto.
760  Supongamos que tenemos el siguiente código:
761 \layout LyX-Code
762
763 EMUFS *efs = emufs_crear(¨articulos.dat¨,T3,200,50);
764 \layout Standard
765
766 Esto hará que se cree el archivo de datos 
767 \series bold 
768 articulos.dat
769 \series default 
770 , con la organización física tipo 3 con registros de longitud fija de 50
771  bytes y bloques de 200 bytes.
772  Al mismo tiempo, los se asignaran valores a los punteros a funciones que
773  posee dicha estructura, la cual de ahora en más estará en condiciones de
774  manejar un archivo del tipo 3.
775  Gráficamente lo que sucede es:
776 \layout Standard
777
778
779 \begin_inset Float figure
780 placement H
781 wide false
782 collapsed false
783
784 \layout Caption
785
786 Inicialización de estructura EMUFS para un caso Archivo Tipo 3
787 \layout Standard
788 \align center 
789
790 \begin_inset Graphics
791         filename graphics/Emufsinit.png
792         scale 75
793         keepAspectRatio
794
795 \end_inset 
796
797
798 \end_inset 
799
800
801 \layout Standard
802
803 Así pues, cuando se utilice la estructura para por ejemplo leer un registro,
804  sucederá lo siguiente:
805 \layout LyX-Code
806
807 efs->leer_registro(params) -- calls -->  emufs_tipo3_leer_registro(params)
808 \layout Standard
809
810 Como se puede observar, la estructura 
811 \family typewriter 
812 EMUFS
813 \family default 
814  permitirá el manejo de cualquier tipo de archivo, a través del mismo código,
815  dándole gran flexibilidad a nuestro sistema, que podrá expandirse a más
816  tipos de archivos de ser necesario.
817 \layout Chapter
818
819 Archivos Auxiliares
820 \layout Standard
821
822 Acompañando al archivo de datos (
823 \series bold 
824 .dat
825 \series default 
826 ) el cual es responsable de la contención de los registros, tendremos tres
827  archivos auxiliares (
828 \series bold 
829 .idx
830 \series default 
831
832 \series bold 
833 .fsc
834 \series default 
835  y 
836 \series bold 
837 .did
838 \series default 
839 ) cuya funcionalidad y propósito pasamos a describir a continuación, sin
840  antes remarcar que los tres archivos poseen una sola implementación para
841  las distintas formas de organización física que hemos implementado (tres
842  para ser mas exactos).
843 \layout Standard
844
845 Entre las ventajas de poseer la misma implementación se encuentra el tener
846  un API común entre los tres tipos para el manejo de la localización de
847  sus registros, administración de espacio libre e Id's liberados, sin necesidad
848  de realizar n-implementaciones para un mismo objetivo final.
849 \layout Standard
850
851 Además, la obtención de ciertos datos estadísticos como espacio libre, o
852  cantidad de registros, se realiza a través de la misma interfaz, y también
853  se ha facilitado en cierto grado la re-organización física de un archivo
854  (pasar de un tipo a otro), dado el uso de estos tres archivos auxiliares
855  en común para funciones tan predominantes como índexación, administración
856  de espacio libre y recuperación de Id's.
857 \layout Section
858
859
860 \begin_inset LatexCommand \label{sec:idx}
861
862 \end_inset 
863
864 Archivo índice
865 \layout Standard
866
867 El archivo índice (.idx), permite la localización de los registros en el
868  .DAT de forma directa, mediante la obtención de su offset respecto del inicio
869  del .dat, o nro bloque (segun el tipo de organización física) en donde se
870  encuentra un registro dado, indicado por su 
871 \emph on 
872 id_reg.
873 \layout Standard
874
875 Los registros de este archivo se encuentran representados una estructura
876  que indica un número de registro y el bloque u offset en donde se encuentra
877  el mismo.
878 \layout Standard
879
880 Es necesario que este archivo esté ordenado por 
881 \emph on 
882 id_reg
883 \emph default 
884 , ya que esto permitirá el acceso directo al mismo, para la rápida obtención
885  del nro de bloque u offset y posterior búsqueda de un registro en el archivo
886  de datos.
887 \layout Subsection
888
889 Organización física
890 \layout Standard
891
892 Los registros de este archivo se encuentran representados a nivel código
893  por el siguiente tipo de dato interno (
894 \family typewriter 
895 EMUFS_IDX
896 \family default 
897 ):
898 \layout LyX-Code
899
900 typedef struct emufs_idx_t { 
901 \layout LyX-Code
902
903   EMUFS_REG_ID id_reg;
904 \layout LyX-Code
905
906   EMUFS_OFFSET location;
907 \layout LyX-Code
908
909 } EMUFS_IDX;
910 \layout Standard
911
912
913 \begin_inset Float table
914 placement H
915 wide false
916 collapsed false
917
918 \layout Caption
919
920 Ejemplo de registro en archivo índice (.idx), para un archivo de organización
921  Tipo 1 y 3
922 \layout Standard
923
924
925 \begin_inset  Tabular
926 <lyxtabular version="3" rows="2" columns="3">
927 <features>
928 <column alignment="center" valignment="top" leftline="true" width="0">
929 <column alignment="center" valignment="top" leftline="true" width="0">
930 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
931 <row topline="true" bottomline="true">
932 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
933 \begin_inset Text
934
935 \layout Standard
936
937 id_reg
938 \end_inset 
939 </cell>
940 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
941 \begin_inset Text
942
943 \layout Standard
944
945 nro_bloque
946 \end_inset 
947 </cell>
948 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
949 \begin_inset Text
950
951 \layout Standard
952
953 \end_inset 
954 </cell>
955 </row>
956 <row topline="true" bottomline="true">
957 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
958 \begin_inset Text
959
960 \layout Standard
961
962 5
963 \end_inset 
964 </cell>
965 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
966 \begin_inset Text
967
968 \layout Standard
969
970 54
971 \end_inset 
972 </cell>
973 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
974 \begin_inset Text
975
976 \layout Standard
977
978 Indica que el registro de id_reg = 5, se encuentra en el bloque 54
979 \end_inset 
980 </cell>
981 </row>
982 </lyxtabular>
983
984 \end_inset 
985
986
987 \end_inset 
988
989  
990 \begin_inset Float table
991 placement H
992 wide false
993 collapsed false
994
995 \layout Caption
996
997 Ejemplo de registro en archivo índice (.idx), para un archivo de organización
998  Tipo 2
999 \layout Standard
1000
1001
1002 \begin_inset  Tabular
1003 <lyxtabular version="3" rows="2" columns="3">
1004 <features>
1005 <column alignment="center" valignment="top" leftline="true" width="0">
1006 <column alignment="center" valignment="top" leftline="true" width="0">
1007 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
1008 <row topline="true" bottomline="true">
1009 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1010 \begin_inset Text
1011
1012 \layout Standard
1013
1014 id_reg
1015 \end_inset 
1016 </cell>
1017 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1018 \begin_inset Text
1019
1020 \layout Standard
1021
1022 nro_bloque
1023 \end_inset 
1024 </cell>
1025 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1026 \begin_inset Text
1027
1028 \layout Standard
1029
1030 \end_inset 
1031 </cell>
1032 </row>
1033 <row topline="true" bottomline="true">
1034 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1035 \begin_inset Text
1036
1037 \layout Standard
1038
1039 5
1040 \end_inset 
1041 </cell>
1042 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1043 \begin_inset Text
1044
1045 \layout Standard
1046
1047 54
1048 \end_inset 
1049 </cell>
1050 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1051 \begin_inset Text
1052
1053 \layout Standard
1054
1055 Indica que el registro de id_reg = 5, se encuentra en el bloque 54
1056 \end_inset 
1057 </cell>
1058 </row>
1059 </lyxtabular>
1060
1061 \end_inset 
1062
1063
1064 \end_inset 
1065
1066
1067 \layout Standard
1068
1069
1070 \series bold 
1071 \emph on 
1072 Nota: 
1073 \series default 
1074 \emph default 
1075 Como se puede observar, para distintas organizaciones el significado de
1076  los registros en este archivo es diferente y se utilizará de distinta manera
1077  en consecuencia.
1078 \layout Subsection
1079
1080 Comportamiento
1081 \layout Standard
1082
1083 Las declaraciones e implementación se pueden encontrar en 
1084 \series bold 
1085 \emph on 
1086 idx.h
1087 \series default 
1088 \emph default 
1089  y 
1090 \series bold 
1091 \emph on 
1092 idx.c
1093 \series default 
1094 \emph default 
1095  respectivamente:
1096 \layout List
1097 \labelwidthstring 00.00.0000
1098
1099
1100 \series bold 
1101 \emph on 
1102 Búsqueda:
1103 \series default 
1104 \emph default 
1105  Los registros del archivo índice (
1106 \series bold 
1107 .idx
1108 \series default 
1109 ), poseen una correspondencia 1 a 1, con los Id's de los registros en el
1110  archivo de datos (
1111 \series bold 
1112 .dat
1113 \series default 
1114 ).
1115  Con esto, queremos decir que el N-ésimo registro del archivo índice, será
1116  aquél que posea la información para localizar al registro cuyo 
1117 \family typewriter 
1118 id_reg
1119 \family default 
1120  es N, dentro del archivo de datos (
1121 \series bold 
1122 .dat
1123 \series default 
1124 ).
1125 \series bold 
1126
1127 \newline 
1128 NOTA:
1129 \series default 
1130  Cabe aclarar que por si bien el índice se encuentra ordenado por 
1131 \family typewriter 
1132 id_reg
1133 \family default 
1134 , los registros en el archivo de datos, por lo general no lo estarán (ordenados
1135  por id).
1136  
1137 \newline 
1138 Ver: 
1139 \family typewriter 
1140 emufs_idx_buscar_registro(), emufs_idx_get()
1141 \layout List
1142 \labelwidthstring 00.00.0000
1143
1144
1145 \series bold 
1146 Alta:
1147 \series default 
1148  Ante la alta de un registro en el archivo de datos, se insetará un nuevo
1149  registro en el archivo índice, con el id_reg del registro en cuestión,
1150  y el offset u bloque donde se lo haya grabado en disco.
1151 \newline 
1152 Ver: 
1153 \family typewriter 
1154 emufs_idx_agregar()
1155 \layout List
1156 \labelwidthstring 00.00.0000
1157
1158
1159 \series bold 
1160 Baja:
1161 \series default 
1162  Ante el borrado de un registro del archivo de datos, se accederá el registro
1163  correspondiente en el índice, y se actualizara su LOCATION, estableciéndolo
1164  en el valor especial 
1165 \family typewriter 
1166 EMUFS_NOT_FOUND
1167 \family default 
1168 , el cual indica que ese registro ha sido eliminado y por ende no se lo
1169  podrá localizar en el futuro.
1170  Como se verá mas adelante, según el tipo de organización física, el registro
1171  puede ser borrado concretamente del .
1172 \series bold 
1173 dat
1174 \series default 
1175  o no.
1176  
1177 \newline 
1178 Ver: 
1179 \family typewriter 
1180 emufs_idx_borrar()
1181 \layout List
1182 \labelwidthstring 00.00.0000
1183
1184
1185 \series bold 
1186 Modificación:
1187 \series default 
1188  Ante la modificación en la posición física de un registro dentro del archivo
1189  de datos (por ejemplo luego del proceso de re-compactación, se realizará
1190  la modificación respectiva del campo 
1191 \family typewriter 
1192 location
1193 \family default 
1194 .
1195 \newline 
1196 Ver: 
1197 \family typewriter 
1198 emufs_idx_actualizar()
1199 \layout Section
1200
1201
1202 \begin_inset LatexCommand \label{sec:fsc}
1203
1204 \end_inset 
1205
1206 Archivo de control de espacio libre
1207 \layout Standard
1208
1209 El archivo de espacio libre (
1210 \series bold 
1211 .fsc
1212 \series default 
1213 ) (espacio por bloque o gaps en archivo, según el tipo de organización física),
1214  tiene como función la administración del espacio libre, generado por previas
1215  eliminaciones de registros en el archivo de datos.
1216  El mismo, nos indicará donde hay lugar para insertar un nuevo registro.
1217 \layout Standard
1218
1219 Para el caso de una organización por bloque, nos dirá en que bloque o si
1220  se debe generar un nuevo bloque.
1221  En el caso de la organización sin bloques, nos indicará en que gap o si
1222  al final del archivo.
1223 \layout Standard
1224
1225 Los registros de este archivo se encuentran representados una estructura
1226  que indica un número de bloque u offset y el espacio libre disponible en
1227  el mismo (o a partir del mismo en el caso del offset).
1228 \layout Standard
1229
1230
1231 \series bold 
1232 Nota
1233 \series default 
1234 : Por requerimiento del algoritmo de compactación el tipo de organización
1235  física con reg long var, sin bloques, los gaps se graban en forma ordenada
1236  en el (.fsc).
1237  (El orden se corresponde con lo que hay en el .dat).
1238 \layout Subsection
1239
1240 Organización Física
1241 \layout Standard
1242
1243 Los registros de este archivo se encuentran representados a nivel código
1244  por el siguiente tipo de dato interno (
1245 \family typewriter 
1246 EMUFS_FSC
1247 \family default 
1248 ):
1249 \layout LyX-Code
1250
1251 typedef struct emufs_fsc_t { 
1252 \layout LyX-Code
1253
1254   EMUFS_BLOCK_ID marker;
1255 \layout LyX-Code
1256
1257   EMUFS_FREE freespace;
1258 \layout LyX-Code
1259
1260 } EMUFS_FSC;
1261 \layout Standard
1262
1263
1264 \series bold 
1265 \emph on 
1266
1267 \begin_inset Float table
1268 placement H
1269 wide false
1270 collapsed false
1271
1272 \layout Caption
1273
1274 Ejemplo de registro en archivo de control de espacio libre para un archivo
1275  con bloques
1276 \layout Standard
1277
1278
1279 \begin_inset  Tabular
1280 <lyxtabular version="3" rows="2" columns="3">
1281 <features>
1282 <column alignment="center" valignment="top" leftline="true" width="0">
1283 <column alignment="center" valignment="top" leftline="true" width="0">
1284 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
1285 <row topline="true" bottomline="true">
1286 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1287 \begin_inset Text
1288
1289 \layout Standard
1290
1291 nro_bloque
1292 \end_inset 
1293 </cell>
1294 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1295 \begin_inset Text
1296
1297 \layout Standard
1298
1299 freespace
1300 \end_inset 
1301 </cell>
1302 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1303 \begin_inset Text
1304
1305 \layout Standard
1306
1307 \end_inset 
1308 </cell>
1309 </row>
1310 <row topline="true" bottomline="true">
1311 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1312 \begin_inset Text
1313
1314 \layout Standard
1315
1316 12
1317 \end_inset 
1318 </cell>
1319 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1320 \begin_inset Text
1321
1322 \layout Standard
1323
1324 120
1325 \end_inset 
1326 </cell>
1327 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1328 \begin_inset Text
1329
1330 \layout Standard
1331
1332 Indica que en el bloque 12, hay 120 bytes libres al final del mismo.
1333 \end_inset 
1334 </cell>
1335 </row>
1336 </lyxtabular>
1337
1338 \end_inset 
1339
1340
1341 \end_inset 
1342
1343  
1344 \begin_inset Float table
1345 placement H
1346 wide false
1347 collapsed false
1348
1349 \layout Caption
1350
1351 Ejemplo de registro en archivo de 
1352 \emph on 
1353 gaps
1354 \emph default 
1355  para un archivo sin bloques
1356 \layout Standard
1357
1358
1359 \begin_inset  Tabular
1360 <lyxtabular version="3" rows="2" columns="3">
1361 <features>
1362 <column alignment="center" valignment="top" leftline="true" width="0">
1363 <column alignment="center" valignment="top" leftline="true" width="0">
1364 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
1365 <row topline="true" bottomline="true">
1366 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1367 \begin_inset Text
1368
1369 \layout Standard
1370
1371 offset
1372 \end_inset 
1373 </cell>
1374 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1375 \begin_inset Text
1376
1377 \layout Standard
1378
1379 freespace
1380 \end_inset 
1381 </cell>
1382 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1383 \begin_inset Text
1384
1385 \layout Standard
1386
1387 \end_inset 
1388 </cell>
1389 </row>
1390 <row topline="true" bottomline="true">
1391 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1392 \begin_inset Text
1393
1394 \layout Standard
1395
1396 12
1397 \end_inset 
1398 </cell>
1399 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1400 \begin_inset Text
1401
1402 \layout Standard
1403
1404 120
1405 \end_inset 
1406 </cell>
1407 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1408 \begin_inset Text
1409
1410 \layout Standard
1411
1412 Indica que a partir del byte 12 del archivo de datos, hay 120 bytes libres.
1413 \end_inset 
1414 </cell>
1415 </row>
1416 </lyxtabular>
1417
1418 \end_inset 
1419
1420
1421 \end_inset 
1422
1423
1424 \layout Standard
1425
1426
1427 \series bold 
1428 \emph on 
1429 Nota: 
1430 \series default 
1431 \emph default 
1432 Como se puede observar, para distintas organizaciones el significado de
1433  los registros en este archivo es diferente y se utilizará de distinta manera
1434  en consecuencia.
1435 \layout Subsection
1436
1437 Funciones principales
1438 \layout Standard
1439
1440 Las declaraciones e implementación se pueden encontrar en 
1441 \series bold 
1442 \emph on 
1443 fsc.h
1444 \series default 
1445 \emph default 
1446  y 
1447 \series bold 
1448 \emph on 
1449 fsc.c
1450 \series default 
1451 \emph default 
1452  respectivamente:
1453 \layout List
1454 \labelwidthstring 00.00.0000
1455
1456
1457 \series bold 
1458 Búsqueda:
1459 \series default 
1460  Ante la operación de alta de un registro en el archivo de datos, se realizará
1461  la búsqueda de espacio libre donde este podrá ser insertado.
1462  En el caso de organizaciones con bloques, se buscará en que 
1463 \family typewriter 
1464 nro_bloque
1465 \family default 
1466  se posee espacio suficiente para albergar el nuevo registro (o a partir
1467  de qué 
1468 \family typewriter 
1469 nro_bloque
1470 \family default 
1471  se encuentran 
1472 \family typewriter 
1473 N
1474 \family default 
1475  bloques consecutivos libres).
1476  En el caso de organización sin bloque, se buscará un gap o espacio libre
1477  en el archivo, obteniéndose en consecuencia, el 
1478 \family typewriter 
1479 offset
1480 \family default 
1481  hasta el mismo.
1482  
1483 \newline 
1484 Ver: 
1485 \family typewriter 
1486 emufs_fsc_buscar_lugar(), emufs_fsc_buscar_n_lugares()
1487 \layout List
1488 \labelwidthstring 00.00.0000
1489
1490
1491 \series bold 
1492 Alta/Mod:
1493 \series default 
1494  Luego de una operación de baja o alta de un registro en el archivo de datos
1495  (
1496 \series bold 
1497 .dat
1498 \series default 
1499 ), incrementará o decrementará respectivamente el espacio libre en el archivo
1500  de datos, y esto deberá ser registrado, agregando un nuevo registro en
1501  el archivo de espacios libres (
1502 \series bold 
1503 .fsc
1504 \series default 
1505 ) o bien modificándolo.
1506 \newline 
1507
1508 \newline 
1509 En el caso de organizaciones con bloques, se actualizará el valor del espacio
1510  libre 
1511 \family typewriter 
1512 freespace
1513 \family default 
1514  en el bloque (ya sea incrementándolo o decrementándolo) o bien se insertará
1515  un nuevo registro en caso de que se esté creando un nuevo bloque en el
1516  archivo de datos (en este caso no será debido a un alta o baja de registro
1517  como se mencionó al principio).
1518 \newline 
1519
1520 \newline 
1521 Para el caso de organización sin bloques, en el caso de baja de un registro
1522  de datos (
1523 \series bold 
1524 .dat
1525 \series default 
1526 ) se insertará un nuevo registro en el 
1527 \series bold 
1528 .fsc
1529 \series default 
1530  dando cuenta de la aparición de un nuevo gap en el archivo de datos (
1531 \series bold 
1532 .dat
1533 \series default 
1534 ), y en caso de estar este lindante con otro gap, se realizará el merge
1535  pertinente.
1536  (esto esta explicado más en profundidad en los casos particulares de organizaci
1537 ón física, registros variables sin bloques).
1538  Para el caso de una alta en el archivo de datos (
1539 \series bold 
1540 .dat
1541 \series default 
1542 ), el valor del gap donde se haya insertado se actualizará.
1543  
1544 \newline 
1545 Ver: 
1546 \family typewriter 
1547 emufs_fsc_agregar(), emufs_fsc_agregar_gap(), emufs_fsc_actualizar(), emufs_fsc_
1548 actualizar_gap().
1549 \layout List
1550 \labelwidthstring 00.00.0000
1551
1552
1553 \series bold 
1554 Baja
1555 \series default 
1556 : Únicamente para el caso de una organización que presente gaps en el archivo,
1557  se podrá dar a lugar la eliminación de un registro del archivo de espacios
1558  libres (
1559 \series bold 
1560 .fsc)
1561 \series default 
1562 .
1563  Esta situación tendrá efecto cuando se inserte un registro que entre perfecto
1564  en un gap disponible, y por ende el gap desaparecerá.
1565 \newline 
1566 Ver: 
1567 \family typewriter 
1568 emufs_fsc_borrar_gap()
1569 \layout Section
1570
1571
1572 \begin_inset LatexCommand \label{sec:did}
1573
1574 \end_inset 
1575
1576 Archivo de id's recuperables
1577 \layout Standard
1578
1579 El archivo de Id's liberado (
1580 \series bold 
1581 .did
1582 \series default 
1583 ) llevará cuenta de aquellos Id's de registros (
1584 \family typewriter 
1585 id_reg
1586 \family default 
1587 ) que ya no se encuentran siendo utilizados y fueron liberados por registros
1588  eliminados previamente.
1589  A través del mismo, se podrá realizar la reutilización de Id's ante la
1590  alta de nuevos registros.
1591 \layout Standard
1592
1593 A nivel físico, este archivo poseerá una secuencia de datos del tipo EMUFS_REG_I
1594 D, y el comportamiento del sistema de recuperación de Id's será el de una
1595  pila.
1596  Es decir, ante el requerimiento de un 
1597 \family typewriter 
1598 reg_id
1599 \family default 
1600  libre por una función del sistema como por ejemplo la alta de un nuevo
1601  registro, el API del archivo (
1602 \series bold 
1603 .did
1604 \series default 
1605 ), obtendrá el último dato del mismo (el 
1606 \emph on 
1607 Id
1608 \emph default 
1609  que fue liberado mas recientemente), y truncará el archivo eliminando el
1610  
1611 \emph on 
1612 Id
1613 \emph default 
1614  recuperado de la tabla.
1615  (LIFO, Last in First Out).
1616 \layout Subsection
1617
1618 Organización Física
1619 \layout Standard
1620
1621 Este archivo tiene registros de un solo campo, 
1622 \family typewriter 
1623 EMUFS_REG_ID
1624 \family default 
1625  el cual simboliza al id que fue liberado en un proceso de baja de registros.
1626 \layout Subsection
1627
1628 Funciones principales
1629 \layout Standard
1630
1631 Las declaraciones e implementación se pueden encontrar en 
1632 \series bold 
1633 \emph on 
1634 did.h
1635 \series default 
1636 \emph default 
1637  y 
1638 \series bold 
1639 \emph on 
1640 did.c
1641 \series default 
1642 \emph default 
1643  respectivamente
1644 \layout List
1645 \labelwidthstring 00.00.0000
1646
1647
1648 \series bold 
1649 Alta: 
1650 \series default 
1651 Ante la eliminación de un registro del archivo de datos (
1652 \series bold 
1653 .dat
1654 \series default 
1655 ) se procederá al agregado del correspondiente 
1656 \family typewriter 
1657 id_reg
1658 \family default 
1659  que fue liberado por dicha operación, al archivo 
1660 \series bold 
1661 .did
1662 \series default 
1663 .
1664 \family typewriter 
1665
1666 \newline 
1667
1668 \family default 
1669 Ver: 
1670 \family typewriter 
1671 emufs_did_agregar()
1672 \layout List
1673 \labelwidthstring 00.00.0000
1674
1675
1676 \series bold 
1677 Baja
1678 \series default 
1679  Cuando el sistema desee grabar un nuevo registro en el archivo de datos,
1680  este pedirá un 
1681 \family typewriter 
1682 id_reg
1683 \family default 
1684  disponible para el mismo.
1685  El sistema de administración de Id's libres, obtendrá el último 
1686 \emph on 
1687 id
1688 \emph default 
1689  que se guardó en el archivo (o se eliminó del archivo de datos), y truncará
1690  el archivo eliminándolo.
1691 \family typewriter 
1692
1693 \newline 
1694
1695 \family default 
1696 Ver: 
1697 \family typewriter 
1698 emufs_did_get_last()
1699 \layout Chapter
1700
1701
1702 \begin_inset LatexCommand \label{cha:tipo1}
1703
1704 \end_inset 
1705
1706 Archivo con bloques parametrizados y registros de longitud variable
1707 \layout Standard
1708
1709 Este tipo de archivo tiene varias complicaciones, al tratarse de un punto
1710  intermedio entre el 
1711 \begin_inset LatexCommand \ref{cha:tipo2}
1712
1713 \end_inset 
1714
1715  y el 
1716 \begin_inset LatexCommand \ref{cha:tipo3}
1717
1718 \end_inset 
1719
1720  (cuenta tanto con bloques como con registros variables), hereda los inconvenien
1721 tes (y ventajas) de ambos, más los propios.
1722  Al implementar este tipo de archivo se puso énfasis en la eficiencia mientras
1723  esta no comprometa la mantenibilidad del código, es por esto que en algunas
1724  circunstancias no se hace un uso óptimo del espacio.
1725 \layout Standard
1726
1727 La implementación de este tipo de archivo puede ser encontrada en 
1728 \family typewriter 
1729 emufs/tipo1.c
1730 \family default 
1731  mientras que su interfaz pública está disponible en 
1732 \family typewriter 
1733 emufs/tipo1.h
1734 \family default 
1735 .
1736 \layout Section
1737
1738 Organización física
1739 \layout Standard
1740
1741 El archivo está compuesto por la 
1742 \emph on 
1743 cabecera general
1744 \emph default 
1745  (ver página 
1746 \begin_inset LatexCommand \pageref{sec:cabecera_gral}
1747
1748 \end_inset 
1749
1750 ).
1751  El valor que toma en este tipo de archivo es 0 (o el valor simbólico 
1752 \family typewriter 
1753 T1
1754 \family default 
1755  del tipo 
1756 \family typewriter 
1757 EMUFS_Tipo
1758 \family default 
1759 ).
1760  Luego le sigue una cabecera propia del archivo (un 
1761 \family typewriter 
1762 EMUFS_BLOCK_SIZE
1763 \family default 
1764 , 4 bytes) que almacena el tamaño del bloque que usa el archivo.
1765  De esta manera, al abrir un archivo de este tipo no se necesita tener ninguna
1766  información sobre él.
1767  A esta cabecera le siguen cero o más bloques del tamaño fijo especificado
1768  en la cabecera antes mencionada.
1769 \layout LyX-Code
1770
1771 archivo
1772 \layout LyX-Code
1773
1774 +-----------+-----------+------------------------//-+
1775 \layout LyX-Code
1776
1777 |    tipo   | tam_bloque| Cero o más bloques ...
1778  
1779 \backslash 
1780
1781 \backslash 
1782  |
1783 \layout LyX-Code
1784
1785 +-----------+-----------+------------------------//-+
1786 \layout LyX-Code
1787
1788 /- 4 bytes -/- 4 bytes -/
1789 \layout Subsection
1790
1791 Organización física de un bloque
1792 \layout Standard
1793
1794 Cada bloque no guarda información en sí, sólo se comporta como un contenedor
1795  de registros.
1796  Esto no significa que un bloque no tenga utilidad, el bloque es utilizado
1797  para proveer un acceso semi-aleatorio a los registros.
1798  Para esto se utiliza el archivo de índice (ver página 
1799 \begin_inset LatexCommand \ref{sec:idx}
1800
1801 \end_inset 
1802
1803 ), que almacena pares [identificador de registro, número de bloque].
1804  Para que sea suficiente este único índice para hallar un registro (siendo
1805  que puede haber más de un registro por bloque), es necesario 
1806 \emph on 
1807 alinear los registros a izquierda
1808 \emph default 
1809 .
1810  Esto significa que hay que asegurar que siempre los registros en un bloque
1811  se presenten de forma consecutiva, jamás permitiendo que haya un espacio
1812  libre entre registros (en un mismo bloque).
1813 \layout Standard
1814
1815 Podemos ver un ejemplo de esto en forma gráfica:
1816 \layout LyX-Code
1817
1818 bloque N-1 | bloque N                                | bloque N+1
1819 \layout LyX-Code
1820
1821 /----------+------------+------------+---------------+-----------/
1822 \layout LyX-Code
1823
1824
1825 \backslash 
1826           | registro 1 | registro 2 | espacio libre |           
1827 \backslash 
1828
1829 \layout LyX-Code
1830
1831 /----------+------------+------------+---------------+-----------/
1832 \layout LyX-Code
1833
1834            /------------- tamaño del bloque ---------/
1835 \layout Standard
1836
1837 De esta forma, una vez obtenido el número de bloque, se pueda recorrer secuencia
1838 lmente hasta encontrar el registro deseado.
1839  A fin de llevar el conteo de espacio libre se utiliza el archivo de control
1840  de espacio libre (ver página 
1841 \begin_inset LatexCommand \ref{sec:fsc}
1842
1843 \end_inset 
1844
1845 ), de forma tal que no sea necesario recorrer secuencialmente en busca de
1846  espacio libre al hacer una inserción.
1847 \layout Standard
1848
1849 Puede darse un caso excepcional en el que un registro sea más grande que
1850  un bloque, en este caso el registro se almacenará en N bloques consecutivos
1851  (siendo N la cantidad de bloques que necesita el registro), ocupando completos
1852  los todos los bloques a excepción del último, en el que posteriormente
1853  se pueden agregar más registros.
1854 \layout Subsubsection
1855
1856
1857 \begin_inset LatexCommand \label{sub:tipo1_reg}
1858
1859 \end_inset 
1860
1861 Organización física de un registro.
1862 \layout Standard
1863
1864 El registro es el que representa al dato realmente que se quiere almacenar.
1865  Para representar ese dato se necesita una determinada información de control,
1866  tanto para poder identificar el registro en un bloque (en búsquedas secuenciale
1867 s dentro del bloque) como para saber su longitud (dado que este tipo de
1868  archivo utiliza registros de tamaño variable).
1869 \layout Standard
1870
1871 Siguiendo la metodología general de E
1872 \begin_inset Formula $\mu$
1873 \end_inset 
1874
1875 FS, se optó por incluir esta información de control como una cabecera al
1876  comienzo del registro, siguiendo a esta los datos en sí.
1877  La cabecera está compuesta por un identificador (
1878 \family typewriter 
1879 id
1880 \family default 
1881 ) de registro (EMUFS_REG_ID, 4 bytes) seguido por el tamaño (
1882 \family typewriter 
1883 tamaño
1884 \family default 
1885 ) del registros (EMUFS_REG_SIZE, 4 bytes).
1886  Podemos ver gráficamente como se se compone un registro:
1887 \layout LyX-Code
1888
1889 registro [id]
1890 \layout LyX-Code
1891
1892 +-----------+-----------+------------------+
1893 \layout LyX-Code
1894
1895 |     id    |   tamaño  |   datos ...
1896       |
1897 \layout LyX-Code
1898
1899 +-----------+-----------+------------------+
1900 \layout LyX-Code
1901
1902 /- 4 bytes -/- 4 bytes -/- [tamaño] bytes -/
1903 \layout Subsubsection
1904
1905
1906 \begin_inset LatexCommand \label{sub:tipo1_reg_multi}
1907
1908 \end_inset 
1909
1910 Organización física de un registro más grande que un bloque (registro 
1911 \emph on 
1912 multibloque
1913 \emph default 
1914 ).
1915 \layout Standard
1916
1917 Puede darse el caso excepcional en que un registro sea de mayor longitud
1918  que un bloque.
1919  Al ser una situación excepcional, no siempre se resuelve de la forma más
1920  eficiente ni se minimiza el espacio ocupado por datos de control (como
1921  se dijo anteriormente, se prefirió conservar la simpleza del código, adoptando
1922  algoritmos generales aunque no sea de la forma más eficiente o maximizando
1923  el uso del espacio para no perjudicar la mantenibilidad).
1924 \layout Standard
1925
1926 Para manejar un registro 
1927 \emph on 
1928 multibloque 
1929 \emph default 
1930 se optó por limitarlo a la siguiente estructura (suponiendo que el registro
1931  ocupa N bloques, con N > 1 y que un 
1932 \emph on 
1933 fragmento
1934 \emph default 
1935  es una porción del registro que entra en un bloque):
1936 \layout Itemize
1937
1938 Los primeros N-1 
1939 \emph on 
1940 fragmentos
1941 \emph default 
1942  se almacenan en bloques completos consecutivos.
1943 \layout Itemize
1944
1945 El último fragmento se almacena al comienzo del bloque inmediatamente posterior
1946  al penúltimo.
1947 \layout Itemize
1948
1949 Cada fragmento posee las cabeceras mencionadas en la sección 
1950 \begin_inset LatexCommand \ref{sub:tipo1_reg}
1951
1952 \end_inset 
1953
1954 , cuyo contenido es el siguiente:
1955 \begin_deeper 
1956 \layout Itemize
1957
1958 En 
1959 \family typewriter 
1960 id
1961 \family default 
1962  se almacena el identificador único obtenido al hacer el alta.
1963 \layout Itemize
1964
1965 En 
1966 \family typewriter 
1967 tamaño
1968 \family default 
1969  se almacena el tamaño del 
1970 \emph on 
1971 fragmento
1972 \emph default 
1973  actual más los tamaños de los 
1974 \emph on 
1975 fragmentos
1976 \emph default 
1977  posteriores, quedando en el primer 
1978 \emph on 
1979 fragmento
1980 \emph default 
1981  el tamaño completo del registro y en el último sólo el tamaño del 
1982 \emph on 
1983 fragmento
1984 \emph default 
1985  final.
1986 \end_deeper 
1987 \layout Standard
1988
1989 Como puede observarse, la información de control en los 
1990 \emph on 
1991 fragmentos
1992 \emph default 
1993  intermedios puede ser redundante, pero se conserva para poder realizar
1994  algoritmos genéricos (que se basan en que al principio de un bloque, si
1995  no está vacío, hay una cabecera de un registro) y para facilitar chequeos
1996  de integridad del archivo.
1997 \layout Standard
1998
1999 A continuación se presenta un ejemplo gráfico de un registro multibloque
2000  de 10 bytes (de contenido 
2001 \begin_inset Quotes eld
2002 \end_inset 
2003
2004 1234567890
2005 \begin_inset Quotes erd
2006 \end_inset 
2007
2008 ) almacenado en un archivo con bloques de 12 bytes (4 para datos):
2009 \layout LyX-Code
2010
2011 | bloque 0          | bloque 1          | bloque 2
2012 \layout LyX-Code
2013
2014 +-------------------+-------------------+-------------------+-//-+
2015 \layout LyX-Code
2016
2017 | registro 0 - 1/3  | registro 0 - 2/3  | registro 0 - 3/3..| 
2018 \backslash 
2019
2020 \backslash 
2021  |
2022 \layout LyX-Code
2023
2024 |+----+-----+------+|+----+-----+------+|+----+-----+----+..| // |
2025 \layout LyX-Code
2026
2027 || id | tam | datos||| id | tam | datos||| id | tam |dato|..| 
2028 \backslash 
2029
2030 \backslash 
2031  |
2032 \layout LyX-Code
2033
2034 ||----+-----+------+||----+-----+------+||----+-----+----+..| // |
2035 \layout LyX-Code
2036
2037 ||  0 |  10 | 1234 |||  0 |  6  | 5678 |||  0 |  2  | 90 |..| 
2038 \backslash 
2039
2040 \backslash 
2041  |
2042 \layout LyX-Code
2043
2044 |+----+-----+------+|+----+-----+------+|+----+-----+----+..| // |
2045 \layout LyX-Code
2046
2047 +-------------------+-------------------+-------------------+-
2048 \backslash 
2049
2050 \backslash 
2051 -+
2052 \layout LyX-Code
2053
2054                                                           ^^
2055 \layout LyX-Code
2056
2057                               2 bytes libres al final del bloque 2
2058 \layout Standard
2059
2060 Este es un ejemplo figurativo, ya que se puso como límite mínimo de tamaño
2061  de bloque 16 bytes (para que haya al menos la misma cantidad de espacio
2062  para datos que para información de control).
2063  Este límite mínimo ya roza lo absurdo (es muy ineficiente por la gran cantidad
2064  de accesos a disco que necesita).
2065  El límite físico es de 9 bytes (8 para información de control, 1 para datos).
2066 \layout Section
2067
2068 Funciones principales
2069 \layout Standard
2070
2071 Las funciones principales son las necesarias para completar la estructura
2072  EMUFS (ver página 
2073 \begin_inset LatexCommand \pageref{sub:EMUFS}
2074
2075 \end_inset 
2076
2077 ).
2078 \layout Subsection
2079
2080 Lectura de registros
2081 \layout Standard
2082
2083 Para leer un registro se hace uso del archivo de índice (ver página 
2084 \begin_inset LatexCommand \pageref{sec:idx}
2085
2086 \end_inset 
2087
2088 ), obteniéndose el número de bloque en donde está almacenado el registro
2089  a buscar.
2090  Una vez obtenido, se carga en memoria el bloque entero y se busca secuencialmen
2091 te en él (leyendo la cabecera de cada registro y salteando los datos) hasta
2092  encontrar el registro pedido.
2093  Una vez encontrado se lo copia y devuelve.
2094 \layout Standard
2095
2096 Si se tratara de un registro 
2097 \emph on 
2098 multibloque
2099 \emph default 
2100  (ver sección 
2101 \begin_inset LatexCommand \ref{sub:tipo1_reg_multi}
2102
2103 \end_inset 
2104
2105 ), se procede forma similar, sólo que se cargan en memoria uno a uno los
2106  bloques que componen el registro y se van copiando (y uniendo) los 
2107 \emph on 
2108 fragmentos
2109 \emph default 
2110  hasta completarlo.
2111 \layout Standard
2112
2113 Ver: 
2114 \family typewriter 
2115 emufs_tipo1_leer_registro()
2116 \layout Subsection
2117
2118 Altas de registros
2119 \layout Standard
2120
2121 Para realizar el alta de un registro, lo primero que se obtiene es un identifica
2122 dor, buscando primero en el archivo de identificadores recuperables (pág.
2123  
2124 \begin_inset LatexCommand \ref{sec:did}
2125
2126 \end_inset 
2127
2128 ) y de no haber ninguno, buscando el mayor identificador presente en el
2129  archivo de índice (pág.
2130  
2131 \begin_inset LatexCommand \ref{sec:idx}
2132
2133 \end_inset 
2134
2135 ) y sumándole uno.
2136  El paso siguiente es buscar un bloque con espacio libre suficiente como
2137  para almacenar el registro (y su cabecera) en el archivo de control de
2138  espacio libre (pág.
2139  
2140 \begin_inset LatexCommand \ref{sec:fsc}
2141
2142 \end_inset 
2143
2144 ) y cargarlo completo en memoria.
2145  De no encontrarse, se crea un bloque nuevo al final de archivo.
2146  En el bloque cargado en memoria, se agrega el registro nuevo (con su cabecera)
2147  al comienzo del espacio libre (calculado a partir del tamaño del bloque
2148  y el espacio libre en bloque) y se lo graba en disco.
2149  Finalmente se agrega (o actualiza) el identificador al archivo índice y
2150  el espacio libre en el bloque.
2151 \layout Standard
2152
2153 Si el registro ocupara más de un bloque (ver sección 
2154 \begin_inset LatexCommand \ref{sub:tipo1_reg_multi}
2155
2156 \end_inset 
2157
2158 ), se buscan N bloques consecutivos (todos los que necesite el registro)
2159  absolutamente libres
2160 \begin_inset Foot
2161 collapsed false
2162
2163 \layout Standard
2164
2165 Incluso el último bloque debe estar absolutamente libre para cumplir con
2166  las condiciones presentadas en la sección 
2167 \begin_inset LatexCommand \ref{sub:tipo1_reg_multi}
2168
2169 \end_inset 
2170
2171 .
2172 \end_inset 
2173
2174  y graba bloque a bloque cada 
2175 \emph on 
2176 fragmento
2177 \emph default 
2178  del registro (con sus cabeceras intermedias), al último 
2179 \emph on 
2180 fragmento
2181 \emph default 
2182  se lo trata de forma análoga a un registro 
2183 \emph on 
2184 simple
2185 \emph default 
2186 .
2187  Por cada bloque utilizado se actualiza el archivo de control de espacio
2188  libre.
2189 \layout Standard
2190
2191 Ver: 
2192 \family typewriter 
2193 emufs_tipo1_agregar_registro()
2194 \layout Subsection
2195
2196 Bajas de registros
2197 \layout Standard
2198
2199 Al eliminar un registro lo primero que se hace es actualizar los archivos
2200  de índice y de identificadores recuperables, poniendo como número de bloque
2201  el valor especial 
2202 \family typewriter 
2203 EMUFS_NOT_FOUND
2204 \family default 
2205  y agregando el identificador del registro a borrar respectivamente.
2206  También se actualiza el archivo de control de espacio libre por cada bloque
2207  (en caso de ser más de uno, en registros 
2208 \emph on 
2209 multibloque
2210 \emph default 
2211 , se actualizan todos los bloques) y se carga el bloque en memoria para
2212  
2213 \emph on 
2214 alinear los datos a izquierda
2215 \emph default 
2216  (en caso de ser un registro 
2217 \emph on 
2218 multibloque
2219 \emph default 
2220 , esto se realiza sólo para el último bloque).
2221  Para alinear los datos, se recorre secuencialmente en bloque (leyendo la
2222  cabecera de cada registro y salteando los datos) hasta encontrar el registro
2223  a borrar.
2224  Encontrado el registro, se copian todos los bytes que se encuentran entre
2225  el fin del registro a borrar y el fin del bloque, en el comienzo del bloque
2226  borrado.
2227 \layout Standard
2228
2229 Ver: 
2230 \family typewriter 
2231 emufs_tipo1_borrar_registro()
2232 \layout Subsection
2233
2234 Modificación de registros
2235 \layout Standard
2236
2237 Se optó por un algoritmo simple y general, que usa las funciones de alto
2238  nivel mencionadas hasta ahora.
2239  Simplemente borra el registro y vuelve a crearlo.
2240  Al recuperar el último identificador de registro borrado, nos aseguramos
2241  de que se mantenga el identificador del registro.
2242 \layout Standard
2243
2244 Ver: 
2245 \family typewriter 
2246 emufs_tipo1_modificar_registro()
2247 \layout Subsection
2248
2249 Obtención de estadísticas
2250 \layout Standard
2251
2252 Es una función bastante simple, con una única complicación que mencionaremos
2253  más adelante.
2254 \layout Standard
2255
2256 Para obtener las máximas desviaciones, cantidad total de espacio libre,
2257  cantidad de registros y tamaño de los archivos auxiliares se utilizan las
2258  funciones apropiadas de los archivos auxiliares (ver secciones 
2259 \begin_inset LatexCommand \ref{sec:idx}
2260
2261 \end_inset 
2262
2263
2264 \begin_inset LatexCommand \ref{sec:fsc}
2265
2266 \end_inset 
2267
2268  y 
2269 \begin_inset LatexCommand \ref{sec:did}
2270
2271 \end_inset 
2272
2273 ).
2274 \layout Standard
2275
2276 Para obtener la cantidad de bloques se hace el siguiente calculo:
2277 \layout LyX-Code
2278
2279 cant_bloques = (tamaño_archivo_datos - tamaño_cabecera_archivo_datos)
2280 \layout LyX-Code
2281
2282                / tamaño_bloque;
2283 \layout Standard
2284
2285 Hasta aquí no hay mayores inconvenientes.
2286  El problema se presenta para calcular el tamaño de la información de control
2287  utilizada por el archivo de datos; se utiliza el siguiente cálculo:
2288 \layout LyX-Code
2289
2290 tam_info_control_datos = tamaño_cabecera_archivo_datos
2291 \layout LyX-Code
2292
2293                          + cant_registros * tamaño_cabecera_registro;
2294 \layout Standard
2295
2296 Aunque a simple vista esto parece acertado, no contempla el caso de los
2297  registros 
2298 \emph on 
2299 multibloque
2300 \emph default 
2301  (pág 
2302 \begin_inset LatexCommand \pageref{sub:tipo1_reg_multi}
2303
2304 \end_inset 
2305
2306 ), estos registros almacenan 
2307 \family typewriter 
2308 tamaño_cabecera_registro * N
2309 \family default 
2310 , donde 
2311 \family typewriter 
2312 N
2313 \family default 
2314  es la cantidad de bloques que ocupan.
2315  Salvar este caso sería muy costoso, porque habría que recorrer el archivo
2316  registro a registro, 
2317 \emph on 
2318 fragmento
2319 \emph default 
2320  a 
2321 \emph on 
2322 fragmento
2323 \emph default 
2324  e ir contando todas las cabeceras de registro que aparecen (similar a lo
2325  que se hace en la compactación, ver sección 
2326 \begin_inset LatexCommand \ref{sub:tipo1_compact}
2327
2328 \end_inset 
2329
2330 ).
2331  Al tratarse este de un caso excepcional, se optó por mantener la función
2332  simple ya que funciona bien en la mayoría de los casos.
2333 \layout Standard
2334
2335 Ver: 
2336 \family typewriter 
2337 emufs_tipo1_leer_estadisticas()
2338 \layout Subsection
2339
2340
2341 \begin_inset LatexCommand \label{sub:tipo1_compact}
2342
2343 \end_inset 
2344
2345 Compactación del archivo de datos
2346 \layout Standard
2347
2348 Esta función es una de las más simples, porque se limita a un algoritmo
2349  muy simple que utiliza las funciones de 
2350 \emph on 
2351 alto nivel
2352 \emph default 
2353  antes nombradas para realizar su tarea.
2354  Básicamente recorre el archivo de índices de registros, de comienzo a fin,
2355  leyendo el registro, borrándolo y volviéndolo a insertar.
2356  Si había espacio libre en un bloque anterior al que estaba, será insertado
2357  en él, si no volverá a grabarse en el lugar en que estaba.
2358  De esta forma se aprovechan todos los espacios libres intermedios, concluyendo
2359  con un archivo igual o más pequeño que el original.
2360 \layout Standard
2361
2362 Esta implementación no es la más eficiente, pero siendo que esta es una
2363  operación costosa y excepcional por naturaleza, se optó por mantener el
2364  algoritmo simple a costo de un poco de eficiencia.
2365 \layout Standard
2366
2367 Ver:
2368 \family typewriter 
2369  emufs_tipo1_compactar()
2370 \layout Chapter
2371
2372
2373 \begin_inset LatexCommand \label{cha:tipo2}
2374
2375 \end_inset 
2376
2377 Archivo sin bloques y registros de longitud variable
2378 \layout Standard
2379
2380 Este tipo de archivo nos traerá a la mesa la particularidad de grabar registros
2381  de longitud variable sin realizar su agrupación en bloques, y como veremos
2382  en la siguiente sección, también permitirá la administración de gaps que
2383  queden en el archivo luego de operaciones de baja de registros.
2384 \layout Section
2385
2386 Organización física
2387 \layout Standard
2388
2389 Este tipo de archivo realizará el almacenamiento de registros de longitud
2390  variable en disco, su borrado y modificación sin la utilización de bloques
2391  de ningún tipo.
2392  Su implementación se encuentra en los archivos fuente (
2393 \series bold 
2394 tipo2.c
2395 \series default 
2396  y 
2397 \series bold 
2398 tipo2.h
2399 \series default 
2400 ).
2401 \layout Standard
2402
2403 Los archivos del tipo 2, presentarán al comienzo del mismo un header compuesto
2404  simplemente por un dato del tipo EMUFS_Tipo (int) el cual indicará el tipo
2405  de archivo en cuestión.
2406 \layout Standard
2407
2408 Para poder entender mejor la organización física de este tipo de archivo,
2409  tomemos el caso hipotético en el que se encuentran grabados 
2410 \series bold 
2411 dos registros
2412 \series default 
2413  (comenzando desde registro 0) de 
2414 \series bold 
2415 30 bytes
2416 \series default 
2417 , y 
2418 \series bold 
2419 25 bytes
2420 \series default 
2421 , respectivamente.
2422  Supongamos también que entre el registro 0 y 1 se encontraba un 
2423 \series bold 
2424 registro de 10 bytes
2425 \series default 
2426  que fue 
2427 \series bold 
2428 borrado
2429 \series default 
2430 , generando un 
2431 \series bold 
2432 gap
2433 \series default 
2434  
2435 \series bold 
2436 o freespace
2437 \series default 
2438 .
2439  Si miramos al archivo de datos (.dat) en el disco nos encontraremos con
2440  lo siguiente: 
2441 \begin_inset Float figure
2442 placement H
2443 wide false
2444 collapsed false
2445
2446 \layout Caption
2447
2448 Organización física de los registros en disco
2449 \layout Standard
2450
2451
2452 \begin_inset Graphics
2453         filename graphics/Example1.png
2454         width 100text%
2455
2456 \end_inset 
2457
2458
2459 \end_inset 
2460
2461
2462 \layout Standard
2463
2464 Como se puede observar, a nivel físico cada registro grabado esta compuesto
2465  por un Header cuyo tamaño total es de 8 bytes (
2466 \series bold 
2467 EMUFS_REG_ID
2468 \series default 
2469  + 
2470 \series bold 
2471 EMUFS_REG_SIZE
2472 \series default 
2473 ), y posteriormente el registro (bloque de datos) en sí.
2474  Luego se encuentra el espacio libre de 18 bytes dejado por el registro
2475  de 10 bytes eliminado (10 bytes de datos + header de 8 bytes) y finalmente
2476  el segundo registro mencionado.
2477 \layout Subsection
2478
2479 Comportamiento Particular de los Archivos Auxiliares
2480 \layout Standard
2481
2482 Como fue explicado al inicio de la documentación, la implementación de cualquier
2483 a de las tres organizaciones físicas de archivos presenta la necesidad de
2484  poseer tres archivos auxiliares que actuarán como índice de direcciones
2485  de registro (.
2486 \series bold 
2487 idx
2488 \series default 
2489 ), administrador de espacio libre (
2490 \series bold 
2491 .fsc
2492 \series default 
2493 ) y administrador de Id's liberados (
2494 \series bold 
2495 .did
2496 \series default 
2497 ) respectivamente.
2498 \layout Standard
2499
2500 No obstante, cada tipo de organización presentara sus particularidades respecto
2501  de estos tres archivos, las cuales describiremos a continuación en caso
2502  de haberla.
2503 \layout Subsubsection
2504
2505 Archivo índice o de posiciones relativas (.idx)
2506 \layout Standard
2507
2508 El archivo índice (
2509 \series bold 
2510 .idx
2511 \series default 
2512 ), permite la localización de los registros en el .DAT de forma directa,
2513  mediante la obtención de su offset o posición relativa respecto del inicio
2514  del 
2515 \series bold 
2516 .dat
2517 \series default 
2518  en donde se encuentra un registro dado, indicado por su ID.
2519 \layout Standard
2520
2521 Así pues, si tomamos el ejemplo descripto al inicio de este capítulo, tendremos
2522  las siguientes entradas en el archivo índice 
2523 \series bold 
2524 .idx
2525 \series default 
2526
2527 \begin_inset Float table
2528 placement H
2529 wide false
2530 collapsed false
2531
2532 \layout Caption
2533
2534 Organización física del archivo de índice o posiciones relativas.
2535 \layout Standard
2536
2537
2538 \begin_inset  Tabular
2539 <lyxtabular version="3" rows="3" columns="3">
2540 <features>
2541 <column alignment="center" valignment="top" leftline="true" width="0">
2542 <column alignment="center" valignment="top" leftline="true" width="0">
2543 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
2544 <row topline="true" bottomline="true">
2545 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2546 \begin_inset Text
2547
2548 \layout Standard
2549
2550
2551 \emph on 
2552 ID_REGISTRO
2553 \end_inset 
2554 </cell>
2555 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2556 \begin_inset Text
2557
2558 \layout Standard
2559
2560
2561 \emph on 
2562 OFFSET
2563 \end_inset 
2564 </cell>
2565 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2566 \begin_inset Text
2567
2568 \layout Standard
2569
2570 \end_inset 
2571 </cell>
2572 </row>
2573 <row topline="true">
2574 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2575 \begin_inset Text
2576
2577 \layout Standard
2578
2579
2580 \series bold 
2581 0
2582 \end_inset 
2583 </cell>
2584 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2585 \begin_inset Text
2586
2587 \layout Standard
2588
2589
2590 \series bold 
2591 4
2592 \end_inset 
2593 </cell>
2594 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2595 \begin_inset Text
2596
2597 \layout Standard
2598
2599 El primer registro (reg0) comienza en el byte 4
2600 \end_inset 
2601 </cell>
2602 </row>
2603 <row topline="true" bottomline="true">
2604 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2605 \begin_inset Text
2606
2607 \layout Standard
2608
2609 1
2610 \end_inset 
2611 </cell>
2612 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2613 \begin_inset Text
2614
2615 \layout Standard
2616
2617
2618 \series bold 
2619 60
2620 \end_inset 
2621 </cell>
2622 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2623 \begin_inset Text
2624
2625 \layout Standard
2626
2627 El segundo registro (reg1) comienza en el byte 60
2628 \end_inset 
2629 </cell>
2630 </row>
2631 </lyxtabular>
2632
2633 \end_inset 
2634
2635
2636 \end_inset 
2637
2638
2639 \layout Standard
2640
2641
2642 \series bold 
2643 \emph on 
2644 Observación:
2645 \series default 
2646 \emph default 
2647  LOCATION indica donde comienza el header del registro buscado, y por consiguien
2648 te luego del header tendremos el registro en sí (los datos).
2649 \layout Subsubsection
2650
2651 Archivo de Gaps / Espacios Libres (.fsc)
2652 \layout Standard
2653
2654 El archivo de espacios libres o gaps (.fsc), tiene como función la administración
2655  del espacio libre o gaps (agujeros), generados por previas eliminaciones
2656  de registros en el archivo de datos.
2657  El mismo, nos indicará donde hay lugar para insertar un nuevo registro
2658  (se podrán insertar en algún gap acorde, o bien al final del archivo).
2659  Este archivo será utilizado también para el proceso de compactación de
2660  un archivo, explicado luego.
2661 \layout Standard
2662
2663 Así pues, si tomamos el ejemplo descripto al inicio del documento, tendremos
2664  las siguientes entradas en el archivo índice 
2665 \series bold 
2666 .fsc
2667 \series default 
2668
2669 \begin_inset Float table
2670 placement H
2671 wide false
2672 collapsed false
2673
2674 \layout Caption
2675
2676 Organización física del archivo de 
2677 \emph on 
2678 gaps 
2679 \emph default 
2680 o control de espacio libre.
2681 \layout Standard
2682
2683
2684 \begin_inset  Tabular
2685 <lyxtabular version="3" rows="2" columns="3">
2686 <features>
2687 <column alignment="center" valignment="top" leftline="true" width="0">
2688 <column alignment="center" valignment="top" leftline="true" width="0">
2689 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
2690 <row topline="true" bottomline="true">
2691 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2692 \begin_inset Text
2693
2694 \layout Standard
2695
2696
2697 \emph on 
2698 OFFSET
2699 \end_inset 
2700 </cell>
2701 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2702 \begin_inset Text
2703
2704 \layout Standard
2705
2706
2707 \emph on 
2708 FREESPACE
2709 \end_inset 
2710 </cell>
2711 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2712 \begin_inset Text
2713
2714 \layout Standard
2715
2716 \end_inset 
2717 </cell>
2718 </row>
2719 <row topline="true" bottomline="true">
2720 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2721 \begin_inset Text
2722
2723 \layout Standard
2724
2725
2726 \series bold 
2727 42
2728 \end_inset 
2729 </cell>
2730 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2731 \begin_inset Text
2732
2733 \layout Standard
2734
2735
2736 \series bold 
2737 18
2738 \end_inset 
2739 </cell>
2740 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2741 \begin_inset Text
2742
2743 \layout Standard
2744
2745 18 bytes libres a partir del byte 42 del .dat
2746 \end_inset 
2747 </cell>
2748 </row>
2749 </lyxtabular>
2750
2751 \end_inset 
2752
2753
2754 \end_inset 
2755
2756
2757 \layout Standard
2758
2759
2760 \series bold 
2761 \emph on 
2762 Nota:
2763 \series default 
2764 \emph default 
2765  Por requerimiento del algoritmo de compactación, los gaps se graban en
2766  forma ordenada en el (.fsc).
2767  (El orden se corresponde con lo que hay en el 
2768 \series bold 
2769 .dat
2770 \series default 
2771 .
2772 \layout Subsubsection*
2773
2774 GAP Merging
2775 \layout Standard
2776
2777 Si bien la utilización concreta de los GAPS será explicada posteriormente
2778  en la ALTA y BAJA de registros, debemos remarcar la funcionalidad de MERGING
2779  que posee nuestro sistema FSC.
2780 \layout Standard
2781
2782 Ante la eliminación de un registro del archivo de datos, se generara por
2783  consiguiente un gap o espacio libre en alguna posición del archivo.
2784  Ese gap deberá ser registrado en el archivo de gaps (.fsc).
2785  Ahora bien, nuestro sistema de gaps, contemplará como es debido, la posibilidad
2786  de que se haya eliminado un registro que posee un GAP por delante, un GAP
2787  por detrás, o bien un GAP por delante y por detrás del mismo.
2788 \layout Standard
2789
2790 Nuestro sistema actuará en consecuencia, realizando un merge de los espacios
2791  libres, y unificándolos en una ÚNICA entrada en el archivo .fsc, que contendrá
2792  como dato de freespace, la suma correspondiente de los espacios libres
2793  antes mencionados.
2794 \layout Subsubsection
2795
2796 Archivo de ID's liberados (.did)
2797 \layout Standard
2798
2799 El archivo de ID's liberados no presenta ningún aspecto particular en este
2800  tipo de organización.
2801  Remitirse al capítulo correspondiente a los archivos auxiliares para consultar
2802  su estructura y funcionamiento.
2803 \layout Section
2804
2805 Funciones Principales
2806 \layout Standard
2807
2808 Dentro de 
2809 \series bold 
2810 \emph on 
2811 tipo2.h
2812 \series default 
2813 \emph default 
2814  y 
2815 \series bold 
2816 \emph on 
2817 tipo2.c
2818 \series default 
2819 \emph default 
2820  se encuentran las cabeceras y la implementación de las funciones principales
2821  respectivamente, las cuales dan funcionalidad a esta organización.
2822  
2823 \layout Standard
2824
2825 A continuación se comentará el funcionamiento algunas de las mas importantes.
2826 \layout Subsection
2827
2828 Lectura de registros
2829 \layout Standard
2830
2831 Como se vio al comienzo, los registros en este tipo de archivo no se encuentran
2832  agrupados en bloques de ninguna índole y están dispersos a lo largo del
2833  archivo, con la particularidad de que pueden existir gaps o espacio libre,
2834  entre dos registros dados.
2835 \layout Standard
2836
2837 Por ende la lectura de registros en este tipo de organización es muy simple
2838  y dada la inexistencia de bloques, el procedimiento será el siguiente:
2839 \layout Enumerate
2840
2841 Se determina el offset en bytes, donde comienza el registro deseado, a través
2842  de su ID, buscando la misma en el archivo índice (
2843 \series bold 
2844 .idx
2845 \series default 
2846 )
2847 \layout Enumerate
2848
2849 Ya determinada la posición física del registro dentro del archivo de datos
2850  (
2851 \series bold 
2852 .dat
2853 \series default 
2854 ), nos posicionamos en la misma, y leemos el header del registro (
2855 \series bold 
2856 IDReg
2857 \series default 
2858  + 
2859 \series bold 
2860 RegSize
2861 \series default 
2862 ).
2863  Contando así con el tamaño del registro, procedemos a leer el mismo (los
2864  datos), dando por finalizada la lectura.
2865 \layout Standard
2866
2867 Ver: 
2868 \family typewriter 
2869 emufs_tipo2_leer_registro()
2870 \layout Subsection
2871
2872 Altas de registros
2873 \layout Standard
2874
2875 En el proceso de alta de registros entrarán en juego dos archivos descriptos
2876  en la 
2877 \emph on 
2878 sección de archivos auxiliares
2879 \emph default 
2880 , siendo estos el archivo índice (
2881 \series bold 
2882 .idx
2883 \series default 
2884 ), y el archivo de gaps / espacios libres (
2885 \series bold 
2886 .fsc
2887 \series default 
2888 ).
2889 \layout Standard
2890
2891 Así pues, a la hora de realizar una inserción de un registro en el archivo
2892  de datos, el procedimiento será el siguiente:
2893 \layout Enumerate
2894
2895 Calculamos el espacio que necesitaremos para el registro: sizeof(
2896 \series bold 
2897 EMUFS_REG_ID
2898 \series default 
2899 ) + sizeof(
2900 \series bold 
2901 EMUFS_REG_SIZE
2902 \series default 
2903 ) + sizeof(registro).
2904 \layout Enumerate
2905
2906 Determinamos donde debemos insertar el registro, ya sea un gap donde entre,
2907  o bien al final del archivo.
2908 \layout Enumerate
2909
2910 Insertamos el registro e información de control (
2911 \series bold 
2912 header
2913 \series default 
2914 +
2915 \series bold 
2916 data
2917 \series default 
2918 ), en la posición indicada en el paso 2.
2919 \layout Enumerate
2920
2921 En caso de haber utilizado un GAP, actualizamos el espacio libre restante
2922  en el mismo y en caso de que se haya utilizado al totalidad del GAP, se
2923  lo elimina del archivo (
2924 \series bold 
2925 .fsc
2926 \series default 
2927 ).
2928 \layout Enumerate
2929
2930 Actualizamos la entrada correspondiente al registro ingresado (determinada
2931  por su RegID), en el archivo índice (
2932 \series bold 
2933 .idx
2934 \series default 
2935 ), indicando su offset donde podrá ser accedido luego.
2936 \layout Standard
2937
2938 Ver: 
2939 \family typewriter 
2940 emufs_tipo2_agregar_registro()
2941 \layout Subsection
2942
2943 Bajas de registros
2944 \layout Standard
2945
2946 En el proceso de baja de registros entrarán en juego los tres archivos descripto
2947 s en la 
2948 \emph on 
2949 sección de archivos auxiliares
2950 \emph default 
2951 , siendo estos el archivo índice (
2952 \series bold 
2953 .idx
2954 \series default 
2955 ), el archivo de gaps / espacios libres (
2956 \series bold 
2957 .fsc
2958 \series default 
2959 ) y el archivo de ID's liberados (
2960 \series bold 
2961 .did
2962 \series default 
2963 ).
2964 \layout Standard
2965
2966 Dado que en la implementación de este tipo de organización física contamos
2967  con los gaps o espacios libres entre registros, no se eliminará físicamente
2968  el registro del archivo de datos (
2969 \series bold 
2970 .dat
2971 \series default 
2972 ), pues entonces carecería de sentido el archivo anteriormente mencionado
2973  (
2974 \series bold 
2975 .fsc
2976 \series default 
2977 ).
2978  En cambio, se agrega el gap dejado por la eliminación a dicho archivo,
2979  y se marca físicamente en el archivo de datos la eliminación mediante un
2980  fill de los bytes correspondientes con un caracter nulo.
2981  (hexa 00 y con el propósito de probar fehacientemente que el sistema funciona).
2982 \layout Standard
2983
2984 El proceso de baja o eliminación de un registro constará luego de los siguientes
2985  pasos:
2986 \layout Enumerate
2987
2988 Se obtiene el offset o posición relativa en donde se encuentra grabado el
2989  registro dentro del archivo de datos.
2990 \layout Enumerate
2991
2992 Se obtiene el tamaño del registro y se realiza un dummyfill del sector del
2993  archivo correspondiente al registro que se está dando de baja.
2994  (Se rellena la zona correspondiente a su header+data).
2995 \layout Enumerate
2996
2997 Se agrega el GAP generado al archivo de gaps o espacios libres, y en caso
2998  de haberse generado un GAP lindante con otro GAP, se realizará un merge
2999  de los mismos y se los registrará bajo una única entrada en el archivo
3000  de espacios libres (.fsc).
3001 \layout Enumerate
3002
3003 Se agrega el ID que fue liberado, al archivo de ID's liberados (
3004 \series bold 
3005 .did
3006 \series default 
3007 ), al final del mismo (
3008 \emph on 
3009 pila
3010 \emph default 
3011 ).
3012 \layout Enumerate
3013
3014 Se marca en el archivo índice (
3015 \series bold 
3016 .idx
3017 \series default 
3018 ) la eliminación, mediante el valor ¨-1¨ en el registro correspondiente
3019  al registro recién eliminado (se le cambia el valor al n-esimo registro,
3020  donde N = IDReg del reg eliminado).
3021 \layout Standard
3022
3023 Ver: 
3024 \family typewriter 
3025 emufs_tipo2_borrar_registro()
3026 \layout Subsection
3027
3028 Modificación de registros
3029 \layout Standard
3030
3031 Dada la naturaleza del archivo de ID's liberados, y el manejo de espacio
3032  libre del que consta esta organización de archivo, el proceso de modificación
3033  de un registro se limita a los siguientes pasos:
3034 \layout Enumerate
3035
3036 Se realiza la lectura del registro, mediante el respectivo procedimiento
3037  ya desarrollado anteriormente.
3038 \layout Enumerate
3039
3040 Una vez que se cuenta con los nuevos datos modificados, se procede a dar
3041  de baja el registro que ha sido modificado, e inmediatamente después se
3042  realiza una inserción con los nuevos datos.
3043 \layout Standard
3044
3045
3046 \series bold 
3047 \emph on 
3048 NOTA:
3049 \series default 
3050 \emph default 
3051  Como fue indicado, dada la naturaleza de PILA del subsistema de administración
3052  de ID liberados, es asegurado que la nueva inserción del registro modificado
3053  se realizará con el mismo RegID.
3054 \layout Standard
3055
3056 Ver: 
3057 \family typewriter 
3058 emufs_tipo2_modificar_registro()
3059 \layout Subsection
3060
3061 Obtención de estadísticas
3062 \layout Standard
3063
3064 Se puede tener acceso a las estadísticas generales del archivo, por ejemplo,
3065  cantidad de bloques, cantidad de registros, espacio libre total, espacio
3066  libre promedio, espacio libre máximo y mínimo, etc.
3067 \layout Standard
3068
3069 Esta información es el resultado de ciertos cálculos realizados tanto en
3070  el archivo de datos como en los archivos índice.
3071 \layout Standard
3072
3073 Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas
3074  del archivo de datos, espacio libre total, cantidad de registros, cantidad
3075  de bloques, tamaño del archivo en bytes, relaciones entre tamaños y espacios
3076  libres, etc.
3077 \layout Standard
3078
3079 Ver: 
3080 \family typewriter 
3081 emufs_tipo2_leer_estadisticas()
3082 \layout Subsection
3083
3084 Compactación del archivo de datos
3085 \layout Standard
3086
3087 Así como los otros dos tipos de datos, el que nos compete también cuenta
3088  con la posibilidad de realizar la compactación de datos cuando el usuario
3089  lo desee, justificando todos los registros a izquierda, eliminando así
3090  los gaps existentes y decrementando el tamaño del archivo en disco (truncándolo
3091 ).
3092 \layout Standard
3093
3094 Para poder comprender como hemos implementado el proceso de re-compactación
3095  en nuestro tipo de archivo 2, nos ayudaremos de esquemas a través de los
3096  cuales iremos describiendo el proceso.
3097  Notemos antes, que el proceso de compactación esta directamente ligado
3098  con el archivo de gaps o espacios libres (
3099 \series bold 
3100 .fsc
3101 \series default 
3102 ).
3103 \layout Standard
3104
3105 Comencemos con el siguiente cuadro situacional: 
3106 \begin_inset Float figure
3107 placement H
3108 wide false
3109 collapsed false
3110
3111 \layout Caption
3112
3113 Archivo con gaps entre registros previo a compactación
3114 \layout Standard
3115
3116
3117 \begin_inset Graphics
3118         filename graphics/Compact1.png
3119         width 100text%
3120         keepAspectRatio
3121
3122 \end_inset 
3123
3124
3125 \end_inset 
3126
3127
3128 \layout Standard
3129
3130 Partiendo de esta base, el algoritmo de compactación tomará en su inicio
3131  al primer gap existente dentro del archivo de datos, en este caso llamado
3132  
3133 \series bold 
3134 Gap0
3135 \series default 
3136 .
3137  Luego, establecerá que el 
3138 \series bold 
3139 Source
3140 \series default 
3141  a partir de donde se quieren mover datos, sera:
3142 \layout LyX-Code
3143
3144 StartGap0 + SizeGap0 = EndGap0 = Source
3145 \layout Standard
3146
3147 Lo cual no es nada más y nada menos que lo obvio, la fuente a partir de
3148  donde se mueven los datos, sera el fin del primer gap, donde comienzan
3149  datos.
3150  Como destino (
3151 \series bold 
3152 Destination
3153 \series default 
3154 ) del movimiento, se establece inicialmente, el inicio del gap, o sea 
3155 \series bold 
3156 StartGap0 = Destination
3157 \series default 
3158 .
3159 \layout Standard
3160
3161 Luego, el algoritmo entrara en un bucle while (mientras haya bucles por
3162  levantar), el cual trabajara hasta el final de la compactación de la siguiente
3163  manera:
3164 \layout Standard
3165
3166
3167 \series bold 
3168 Mientras haya Gaps
3169 \series default 
3170  {
3171 \layout Enumerate
3172
3173 Se levanta el próximo gap al levantado en una instancia previa.
3174  En este ejemplo, durante el primer loop del while, se levantará 
3175 \series bold 
3176 Gap1
3177 \layout Enumerate
3178
3179 Luego, se calcula cuantos bytes hay que mover hacia el Destination de la
3180  siguiente manera:
3181 \layout Enumerate
3182
3183
3184 \series bold 
3185 Mustmove_bytes
3186 \series default 
3187  = 
3188 \series bold 
3189 StartGap1
3190 \series default 
3191  - 
3192 \series bold 
3193 Source
3194 \series default 
3195  = 
3196 \series bold 
3197 StartGap1
3198 \series default 
3199  - 
3200 \series bold 
3201 EndGap0 (
3202 \series default 
3203 Lo cual nuevamente es lógico pues querremos mover lo que se encuentra entre
3204  el final del primer gap levantado y el inicio del siguiente).
3205 \layout Enumerate
3206
3207 Se realiza el movimiento de los datos, utilizando las direcciones 
3208 \series bold 
3209 Source
3210 \series default 
3211  y 
3212 \series bold 
3213 Destination
3214 \series default 
3215 , así como la variable 
3216 \series bold 
3217 Mustmove_bytes
3218 \series default 
3219  que nos indica cuantos bytes transferir.
3220 \series bold 
3221
3222 \newline 
3223 IMPORTANTE: 
3224 \emph on 
3225 La transferencia se hace de a chunks de 25 bytes + un resto segun el valor
3226  de Mustmove_bytes.
3227 \layout Enumerate
3228
3229 Se establece como gap de referencia, al ultimo gap leído (En este caso se
3230  realiza: 
3231 \series bold 
3232 StartGap0
3233 \series default 
3234  = 
3235 \series bold 
3236 StartGap1
3237 \series default 
3238
3239 \series bold 
3240 Gap0Size = Gap1Size
3241 \series default 
3242 ) y termina el código de repetición del bucle, dando lugar a la carga del
3243  siguiente gap en el inicio del mismo.
3244 \layout Standard
3245
3246
3247 \series bold 
3248 }
3249 \layout Standard
3250
3251 Luego del primer bucle, el archivo se vera de la siguiente forma: 
3252 \begin_inset Float figure
3253 placement H
3254 wide false
3255 collapsed false
3256
3257 \layout Caption
3258
3259 Archivo con gaps en disco luego del primer bucle de compactación
3260 \layout Standard
3261
3262
3263 \begin_inset Graphics
3264         filename graphics/Compact2.png
3265         width 100text%
3266
3267 \end_inset 
3268
3269
3270 \end_inset 
3271
3272
3273 \layout Standard
3274
3275 Notemos que al final de la porción de datos de los bytes movidos (donde
3276  quedo apuntando 
3277 \series bold 
3278 Destination
3279 \series default 
3280 ), hay basura que será pisada por el próximo movimiento.
3281 \layout Standard
3282
3283 En el próximo loop, el bucle levantará un nuevo gap, y utilizando el gap
3284  anterior (En esta caso el Gap anterior será 
3285 \series bold 
3286 Gap1
3287 \series default 
3288 ) como referencia, realizará los mismos cálculos, desde donde transferir
3289  y cuantos bytes mover.
3290  (El destino es solo establecido inicialmente por código, y para el resto
3291  del algoritmo es el lugar donde quedo el puntero destination luego de la
3292  última escritura).
3293 \layout Standard
3294
3295 Una vez que se salga del bucle while, se realizará un último movimiento
3296  preprogramado, donde la fuente (
3297 \series bold 
3298 Source
3299 \series default 
3300 ) será el final del ultimo gap, y la cantidad de bytes a mover será lo que
3301  se encuentre luego del mismo hasta el fin de archivo.
3302 \layout LyX-Code
3303
3304 Source = StartLastGap + SizeLastGap = EndLastGap
3305 \layout LyX-Code
3306
3307 Mustmove_bytes = Datsize - Source
3308 \layout Standard
3309
3310 Damos por terminada así, la explicación del algoritmo de compresión el cual
3311  para el caso del tipo 2, es realmente bastante sencillo.
3312 \layout Standard
3313
3314 Ver:
3315 \family typewriter 
3316  emufs_tipo2_compactar()
3317 \layout Section
3318
3319 Consideraciones y Políticas de Diseño
3320 \layout Standard
3321
3322 Se han tomado ciertas consideraciones para algunos casos particulares que
3323  se pueden presentar durante el uso/ejecución de la aplicación, así como
3324  también políticas respecto del diseño e implementación del sistema:
3325 \layout Itemize
3326
3327 En la organización física tipo 2 para los registros que se graban en disco
3328  hemos decidido utilizar como encabezado de cada uno de ellos, los datos
3329  [ID_REG][REG_SIZE], los cuales fueron detallados previamente.
3330  Si bien se podría haber descartado el grabado del ID del registro en el
3331  archivo de datos y puede parecer redundante, dado que poseemos el archivo
3332  índice con el offset directo, el mismo se lo graba por distintos motivos:
3333 \newline 
3334
3335 \newline 
3336 A) En caso de la corrupción del archivo índice (.idx), podremos gracias a
3337  que poseemos en el archivo de datos, el ID de cada registro, recrear dicho
3338  índice, ayudándonos del archivo de espacios libres (
3339 \series bold 
3340 .fsc
3341 \series default 
3342 ), para poder saltear los espacios libres y e ir recorriendo secuencialmente
3343  los registros, reconstruyendo así el índice en cuestión.
3344  (esta función de reconstrucción no pudo ser implementada para esta entrega,
3345  pero es una posibilidad real).
3346 \newline 
3347
3348 \newline 
3349 B) Luego de un proceso de re-compactación, los espacios libres que pudieron
3350  haber existido en el archivo de datos (
3351 \series bold 
3352 .dat
3353 \series default 
3354 ), son eliminados y los registros han cambiado de posición.
3355  Por ello, recorriendo secuencialmente por única vez el archivo de datos,
3356  se procede a la actualización / reconstrucción del índice de direcciones
3357  u offsets (.
3358 \series bold 
3359 idx
3360 \series default 
3361 )
3362 \layout Itemize
3363
3364 Si se desea insertar un registro y no se puede hallar un gap o espacio libre
3365  donde quepa, se los inserta al final del archivo.
3366 \layout Itemize
3367
3368 Ante una operación de baja de un registro, el mismo no es físicamente borrado
3369  del archivo de datos (
3370 \series bold 
3371 .dat
3372 \series default 
3373 ), simplemente los bytes que ocupa son llenados con hexa (00).
3374  Paralelamente, se procede a actualiza el archivo índice, insertando como
3375  valor de OFFSET para el registro eliminado, el valor ¨-1¨, indicando así
3376  la inexistencia del registro para el futuro, y por otro lado se genera
3377  la entrada de espacio libre en el archivo de gaps (
3378 \series bold 
3379 .fsc
3380 \series default 
3381 ).
3382 \layout Itemize
3383
3384 La reutilización de ID's liberados por previas operaciones de baja de registros,
3385  se ve implementada por el archivo de ID liberados (.did), y su comportamiento
3386  es el de una pila por lo que el último ID liberado, sera el próximo a ser
3387  reutilizado (LIFO).
3388 \layout Itemize
3389
3390 Como fue explicado en la implementación del archivo índice, existe una correspon
3391 dencia 1 a 1 entre los registros allí presentes (en el .idx) y los ID's de
3392  los registros, por lo cual el registro N-ésimo del archivo índice, será
3393  el correspondiente al registro de datos cuyo ID es igual a N.
3394 \layout Itemize
3395
3396 El proceso de compactación de archivos, realiza los movimientos de información
3397  requeridos para dicho propósito de a chunks de 25 bytes por vez.
3398  Este valor es fijo, pero se lo podría hacer parametrizable mediante la
3399  GUI en próximas entregas.
3400 \layout Chapter
3401
3402
3403 \begin_inset LatexCommand \label{cha:tipo3}
3404
3405 \end_inset 
3406
3407 Archivo con bloques parametrizados y registros de longitud constante
3408 \layout Standard
3409
3410 Las distintas organizaciones de archivos buscan aprovechar al máximo el
3411  espacio del archivo.
3412 \layout Standard
3413
3414 En este caso veremos que sucede luego de agregar y borrar una gran cantidad
3415  de registros del archivo, lo que provoca como consecuencia directa la fragmenta
3416 ción del archivo, es decir, quedan huecos entre un registro y otro, lo que
3417  produce un desperdicio de espacio.
3418 \layout Standard
3419
3420 La implementación de este tipo de archivo puede ser encontrada en 
3421 \family typewriter 
3422 emufs/tipo3.c
3423 \family default 
3424  mientras que su interfaz pública está disponible en 
3425 \family typewriter 
3426 emufs/tipo3.h
3427 \family default 
3428 .
3429 \layout Section
3430
3431 Organización Física
3432 \layout Standard
3433
3434 Esta organización guarda los registros pertenecientes al archivo en bloques
3435  de tamaño parametrizado, de modo que intentará guardar la mayor cantidad
3436  de registros que quepan en un bloque.
3437  
3438 \layout Standard
3439
3440 Así como los graba, también tendrá la posibilidad de leer registros y borrarlos
3441  del archivo.
3442 \layout Standard
3443
3444 El archivo estará compuesto por una cabecera que da información sobre el
3445  tipo (2, o el valor T3 del tipo 
3446 \family typewriter 
3447 EMUFS_Tipo
3448 \family default 
3449  en este caso) de organización, el tamaño de los bloques y el tamaño de
3450  los registros.
3451 \layout LyX-Code
3452
3453 archivo
3454 \layout LyX-Code
3455
3456 +-----------+-----------+-----------+------------------------//-+
3457 \layout LyX-Code
3458
3459 |    tipo   | tam_bloque|  tam_reg  | Cero o más bloques ...
3460  
3461 \backslash 
3462
3463 \backslash 
3464  |
3465 \layout LyX-Code
3466
3467 +-----------+-----------+-----------+------------------------//-+
3468 \layout LyX-Code
3469
3470 /- 4 bytes -/- 4 bytes -/- 4 bytes -/
3471 \layout Subsection
3472
3473 Organización Física de un Bloque
3474 \layout Standard
3475
3476 Cada bloque será capaz de contener la cantidad de registros enteros que
3477  quepan en él.
3478  De esta manera un registro que no entre completamente en el bloque deberá
3479  almacenarse en un bloque diferente.
3480 \layout Standard
3481
3482 Los bloques no contienen ninguna información adicional, solo se conoce su
3483  tamaño y se usa para delimitar 
3484 \begin_inset Quotes eld
3485 \end_inset 
3486
3487 virtualmente
3488 \begin_inset Quotes erd
3489 \end_inset 
3490
3491  zonas en el archivo y obtener de esta manera acceso semi-aleatorio a los
3492  registros.
3493 \layout LyX-Code
3494
3495 bloque N-1 | bloque N                                | bloque N+1
3496 \layout LyX-Code
3497
3498 /----------+------------+------------+---------------+-----------/
3499 \layout LyX-Code
3500
3501
3502 \backslash 
3503           | registro 1 | registro 2 | espacio libre |           
3504 \backslash 
3505
3506 \layout LyX-Code
3507
3508 /----------+------------+------------+---------------+-----------/
3509 \layout LyX-Code
3510
3511            /------------- tamaño del bloque ---------/
3512 \layout Subsection
3513
3514 Organización Física de Registros
3515 \layout Standard
3516
3517 Cada registro se almacena en un bloque, y contiene una cabecera que indica
3518  su 
3519 \emph on 
3520 ID, 
3521 \emph default 
3522 por este motivo al realizar la búsqueda de espacio en un bloque se lo hará
3523  preguntando por el tamaño del registro más 
3524 \family typewriter 
3525 sizeof(EMUFS_REG_ID).
3526 \layout LyX-Code
3527
3528 registro [id]
3529 \layout LyX-Code
3530
3531 +-----------+-------------------+
3532 \layout LyX-Code
3533
3534 |     id    |     datos ...
3535      |
3536 \layout LyX-Code
3537
3538 +-----------+-------------------+
3539 \layout LyX-Code
3540
3541 /- 4 bytes -/- [tam_reg] bytes -/
3542 \layout Subsection
3543
3544 Organización Física de Registros 
3545 \emph on 
3546 Multibloque
3547 \layout Standard
3548
3549 Al ser los registros de longitud constante, se ha adoptado que un registro
3550  
3551 \emph on 
3552 multibloque
3553 \emph default 
3554  nunca podrá estar almacenado en algún lugar que no sea el comienzo de un
3555  bloque.
3556  De esta manera se puede calcular cuantos bloques ocupará un registro y
3557  se podrá solicitar lugar para almacenarlo con la ayuda de la función 
3558 \family typewriter 
3559 emufs_fsc_buscar_n_lugares(), 
3560 \family default 
3561 que es muy importante para evitar el solapamiento de registros.
3562  Esta consideración acarrea como consecuencia directa un alto costo en términos
3563  del espacio desperdiciado.
3564 \layout Standard
3565
3566 A continuación se presenta un ejemplo gráfico de un registro multibloque
3567  de 26 bytes (de contenido 
3568 \begin_inset Quotes eld
3569 \end_inset 
3570
3571 12345678901234567890123456
3572 \begin_inset Quotes erd
3573 \end_inset 
3574
3575 ) almacenado en un archivo con bloques de bytes 14 bytes (10 para datos)
3576  y registros de 38 bytes:
3577 \layout LyX-Code
3578
3579 | bloque 0          | bloque 1          | bloque 2
3580 \layout LyX-Code
3581
3582 +-------------------+-------------------+-------------------+-//-+
3583 \layout LyX-Code
3584
3585 | registro 0 - 1/3  | registro 0 - 2/3  | registro 0 - 3/3..| 
3586 \backslash 
3587
3588 \backslash 
3589  |
3590 \layout LyX-Code
3591
3592 |+----+------------+|+----+------------+|+----+--------+....| // |
3593 \layout LyX-Code
3594
3595 || id |    datos   ||| id |    datos   ||| id |  datos |....| 
3596 \backslash 
3597
3598 \backslash 
3599  |
3600 \layout LyX-Code
3601
3602 ||----+------------+||----+------------+||----+--------+....| // |
3603 \layout LyX-Code
3604
3605 ||  0 | 1234567890 |||  0 | 1234567890 |||  0 | 123456 |....| 
3606 \backslash 
3607
3608 \backslash 
3609  |
3610 \layout LyX-Code
3611
3612 |+----+------------+|+----+------------+|+----+--------+....| // |
3613 \layout LyX-Code
3614
3615 +-------------------+-------------------+-------------------+-
3616 \backslash 
3617
3618 \backslash 
3619 -+
3620 \layout LyX-Code
3621
3622                                                         ^^^^
3623 \layout LyX-Code
3624
3625             4 bytes libres (e inutilizables) al final del bloque 2
3626 \layout Section
3627
3628 Funciones Principales
3629 \layout Standard
3630
3631 Dento de 
3632 \family typewriter 
3633 tipo3.h
3634 \family default 
3635  y 
3636 \family typewriter 
3637 tipo3.c
3638 \family default 
3639  se encuentran las cabeceras y la implementación de las funciones principales
3640  respectivamente, las cuales dan funcionalidad a esta organización.
3641 \layout Standard
3642
3643 A continuación se comentará la descripción de algunas acciones importantes.
3644 \layout Subsection
3645
3646 Lectura de registros
3647 \layout Standard
3648
3649 La lectura de un registro se realiza con la ayuda del archivo .
3650 \emph on 
3651 idx
3652 \emph default 
3653  el cual contiene la información de la posición del registro dentro del
3654  archivo de datos.
3655  Una vez leída esta información, se recupera el bloque (en su totalidad)
3656  del archivo y se busca secuencialmente el registro con el 
3657 \emph on 
3658 ID
3659 \emph default 
3660  especificado.
3661 \layout Standard
3662
3663 Ver: 
3664 \family typewriter 
3665 emufs_tipo3_leer_registro()
3666 \layout Subsection
3667
3668 Alta de registros
3669 \layout Standard
3670
3671 Graba un registro en un bloque donde haya espacio suficiente, y si no crea
3672  un nuevo bloque y lo agrega al final del archivo.
3673 \layout Standard
3674
3675 Luego de grabar un registro, actualiza los archivos de índice .idx y .fsc
3676  para mantener la coherencia.
3677 \layout Standard
3678
3679 Cuando nos encontramos con registros multibloque, se calcula cuantos bloques
3680  ocupará el registro de la siguiente manera: 
3681 \family typewriter 
3682 Cantidad de Bloques = 1 + Tamaño del Registro/(Tamaño del Bloque-Sizeof(EMUFS_RE
3683 G_ID)
3684 \layout Standard
3685
3686 Esta ecuación solo falla en el caso que el tamaño del registro y el tamaño
3687  del bloque sean iguales, en tal caso, se coloca el valor 1 en 
3688 \family typewriter 
3689 Cantidad de Bloques
3690 \family default 
3691  post verificación.
3692 \layout Standard
3693
3694 Y con esta información se realiza un ciclo 
3695 \family typewriter 
3696 for
3697 \family default 
3698  que grabará tantas veces como sea necesario levantando y grabando los bloques
3699  que correspondan.
3700 \layout Standard
3701
3702 Ver: 
3703 \family typewriter 
3704 emufs_tipo3_grabar_registro()
3705 \layout Subsection
3706
3707 Baja de registros
3708 \layout Standard
3709
3710 Borra un registro del archivo de datos, para esto levanta el bloque al que
3711  pertenece el archivo y ajusta los demás registros justificándolos hacia
3712  la izquierda.
3713 \layout Standard
3714
3715 Cabe destacar que para dar de baja un registro no hace falta borrarlo del
3716  archivo de datos, solo es necesario borrar las entradas en los archivos
3717  de índice, pero cuando se realiza el ajuste el algoritmo toma porciones
3718  del bloque del tamaño de un registro mas su encabezado - comenzando desde
3719  el siguiente al que fue borrado - y copia (sobreescribe) sobre el anterior.
3720  De esta manera, la información correspondiente al registro borrado no estará
3721  presente en el archivo de datos.
3722  Esto es una consecuencia del ajuste al borrar un registro, pudiendo no
3723  ser así, si no se realizara el mismo.
3724 \layout Standard
3725
3726 En el caso de los registros multibloque, se eliminará la porción del registro
3727  contenida en el primer bloque y se actualizarán de manera conveniente los
3728  archivos índice, para restaurarlos a un valor verdadero.
3729 \layout Standard
3730
3731 Ver: 
3732 \family typewriter 
3733 emufs_tipo3_borrar_registro()
3734 \layout Subsection
3735
3736 Obtención de estadísticas
3737 \layout Standard
3738
3739 Se puede tener acceso a las estadísticas generales del archivo, por ejemplo,
3740  cantidad de bloques, cantidad de registros, espacio libre total, espacio
3741  libre promedio, espacio libre máximo y mínimo, etc.
3742 \layout Standard
3743
3744 Esta información es el resultado de ciertos cálculos realizados tanto en
3745  el archivo de datos como en los archivos índice.
3746 \layout Standard
3747
3748 Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas
3749  del archivo de datos, espacio libre total, cantidad de registros, cantidad
3750  de bloques, tamaño del archivo en bytes, relaciones entre tamaños y espacios
3751  libres, etc.
3752 \layout Standard
3753
3754 Ver: 
3755 \family typewriter 
3756 emufs_tipo3_leer_estadisticas()
3757 \layout Subsection
3758
3759 Compactación del archivo de datos
3760 \layout Standard
3761
3762 Esta función intenta reorganizar el archivo de manera que el espacio libre
3763  sea lo menor posible, recordando siempre que un registro no puede ser almacenad
3764 o en mas de un bloque excepto que el tamaño del registro sea mayor que el
3765  del bloque.
3766 \layout Standard
3767
3768 Para realizar esto, se aprovecha la funcionalidad de 
3769 \emph on 
3770 emufs_tipo3_grabar_registro() 
3771 \emph default 
3772 ya que esta tiene la capacidad de determinar una posición mas eficiente
3773  en el archivo para un registro.
3774  Por esto lo que se hace es levantar uno por uno los registros y volverlos
3775  a grabar, de ese modo todos los 
3776 \emph on 
3777 gaps 
3778 \emph default 
3779 que pudieron haberse formado por la eliminación de registros serán cubiertos
3780  por otros.
3781 \layout Standard
3782
3783 Al estar utilizando recuperación de 
3784 \emph on 
3785 id`s
3786 \emph default 
3787  borrados, esto me asegura que el registro borrado-guardado conservará el
3788  id al grabarse.
3789 \layout Standard
3790
3791 Al finalizar este proceso se verifica si existen bloques vacíos para truncar
3792  el archivo.
3793  Lo mismo se debe hacer con el archivo de espacios libres .
3794 \emph on 
3795 fsc 
3796 \emph default 
3797 el cual disminuye su tamaño también.
3798 \layout Standard
3799
3800 Ver: 
3801 \family typewriter 
3802 void emufs_tipo3_compactar()
3803 \layout Section
3804
3805 Consideraciones y Políticas de Diseño
3806 \layout Standard
3807
3808 Se han tomado ciertas consideraciones para algunos casos particulares que
3809  se pueden presentar durante el uso/ejecución de la aplicación.
3810 \layout Enumerate
3811
3812 Cada registro tiene un encabezado que indica el 
3813 \emph on 
3814 id 
3815 \emph default 
3816 del mismo.
3817 \layout Enumerate
3818
3819 Si el tamaño del registro es mayor que el tamaño del bloque el registro
3820  se particionará en la cantidad de bloques que sea necesario, pero siempre
3821  se guardará desde el comienzo de un bloque, esto quiere decir que nunca
3822  se podrá encontrar un comienzo de registro en algún lugar de un bloque
3823  que no sea el comienzo del mismo.
3824 \layout Enumerate
3825
3826 Si el registro se divide en mas de un bloque, se le coloca el id como encabezado
3827  igualmente, pero en el archivo .
3828 \emph on 
3829 idx
3830 \emph default 
3831  solo se guarda el primer bloque.
3832  En el 
3833 \emph on 
3834 .fsc
3835 \emph default 
3836  se actualizan todos los bloques con el espacio libre que realmente tienen.
3837 \layout Chapter
3838
3839 EMUFS View (interfaz gráfica)
3840 \layout Section
3841
3842 Introducción
3843 \layout Standard
3844
3845 La interfaz de visualización de EMUFS permite interactuar con los distintos
3846  tipos de archivos para cada conjunto de datos almacenado (ya sean facturas,
3847  articulos, o notas de facturas).
3848 \layout Section
3849
3850 Instalación
3851 \layout Standard
3852
3853 Para poder correr la interfaz gráfica necesitará previamente compilarla
3854  (así como compilar los programas auxiliares), para ello necesitará cumplir
3855  con los siguiente requisitos:
3856 \layout Enumerate
3857
3858 Compilador gcc versión 3.3.x preferentemente.
3859  No podemos garantizar la compatibilidad con otras versiones debido a cambios
3860  drásticos que sufrieron las versiones anteriores.
3861 \layout Enumerate
3862
3863 Parser XML libxml2 versión 2.6.x .
3864  Versiones 2.5 y anteriores son incompatibles en la API y no funcionarán.
3865 \layout Enumerate
3866
3867 libncurses version 5 o superior (probado con 5.4).
3868 \layout Enumerate
3869
3870 GNU Make.
3871 \layout Subsection
3872
3873 Compilar GUI
3874 \layout Standard
3875
3876 Para compilar la GUI solo debe ejecutar el comando make dentro del directorio
3877  raíz del proyecto.
3878  Esto compilará primero una biblioteca estática con los manejadores de los
3879  3 tipos de archivo y luego compilará la GUI.
3880 \layout LyX-Code
3881
3882 #~/emufs/> make
3883 \layout Subsection
3884
3885 Preparar el banco de pruebas
3886 \layout Standard
3887
3888 Antes de comenzar a utilizar la GUI deberá generar los archivo XML desde
3889  donde serán leídos los datos para generar los archivos que luego se utilizará.
3890  Para ello el proceso de compilación creará 2 ejecutable : generar_fact
3891  y generar_art, que se ubicarán en la carpeta generar dentro de emufs_gui.
3892 \layout Standard
3893
3894 Estos programas generan facturas y artículos respectivamente en forma aleatorio,
3895  utilizando diccionarios de datos para llenar los campos.
3896  Primero deberá ejecutar generar_art, ya que éste último crea un diccionario
3897  de artículos que luego utilizará generar_fact para los items de las facturas.
3898 \layout Standard
3899
3900 Ambos programas reciben 2 parámetros : el nombre de archivo de salida y
3901  la cantidad de entradas a generar.
3902 \layout Standard
3903
3904 El generador de facturas fue diseñado para cumplir con los porcentajes pedidos
3905  por el enunciado en algunos aspectos.
3906  La cantidad de facturas por dia del mes es aleatoria.
3907 \layout Section
3908
3909 Línea de comandos
3910 \layout Standard
3911
3912 El programa acepta varios parámetros, algunos de ellos opcionales, otros
3913  obligatorios dependiendo de las elecciones realizadas.
3914 \layout Standard
3915
3916 Para obtener una completa descripción de los parámetros el programa acepta
3917  
3918 \begin_inset Quotes eld
3919 \end_inset 
3920
3921 -h
3922 \begin_inset Quotes erd
3923 \end_inset 
3924
3925  o 
3926 \begin_inset Quotes eld
3927 \end_inset 
3928
3929 --help
3930 \begin_inset Quotes erd
3931 \end_inset 
3932
3933  para mostrar una ayuda en línea.
3934 \layout Standard
3935
3936 Si el programa es ejecutado sin parámetros tratará de recuperar los artículos
3937  y las facturas desde archivo previamente creados.
3938 \layout Standard
3939
3940 Para crear un archivo de artículos a partir de un archivo XML bien formado,
3941  se debe ejecutar el programa con la opción 
3942 \begin_inset Quotes eld
3943 \end_inset 
3944
3945 -a
3946 \begin_inset Quotes erd
3947 \end_inset 
3948
3949 .
3950  Dicha opción espera que el siguiente parámetro sea el nombre del archivo
3951  a leer, y que éste útimo tenga extensión xml (notar que es solo minúsculas).
3952  A continuación espera encontrar el tipo de archivo que se quiere crear,
3953  pudiendo ser éste último 1, 2 ó 3.
3954  De ser el tipo de archivo con bloques, se le exigirá que ingrese como último
3955  parámetro el tamaño del mismo.
3956 \layout Standard
3957
3958 Para crear el archivo de facturas es el mismo procedimiento, solo que utilizando
3959  el parámetro 
3960 \begin_inset Quotes eld
3961 \end_inset 
3962
3963 -f
3964 \begin_inset Quotes erd
3965 \end_inset 
3966
3967 .
3968  Luego de los parámetros de tipo y tamaño de bloque debe especificarse el
3969  tipo y tamaño de bloque para el archivo de notas.
3970  
3971 \layout Standard
3972
3973 Debe saber que estos parámetros no son mutuamente excluyentes, por lo que
3974  podrá utilizarlos al mismo tiempo.
3975 \layout Section
3976
3977 Características
3978 \layout Standard
3979
3980 A continuación se da una lista detallada de las operaciones que son posibles
3981  hacerse desde esta interfaz :
3982 \layout Itemize
3983
3984 Alta, baja y modificación de Artículos.
3985  Para ello se abrirá una ventana donde se podrá editar comodamente los datos.
3986 \layout Itemize
3987
3988 Alta, baja y modificación
3989 \begin_inset Foot
3990 collapsed true
3991
3992 \layout Standard
3993
3994 En la modificación de una factura no se podrán cambiar ni la cantidad de
3995  items y los datos de los mismo!.
3996  La nota si podrá ser modificada.
3997 \end_inset 
3998
3999  de Facturas.
4000 \layout Itemize
4001
4002 Ver registros.
4003  Ver fisicamente los registros de cualquiera de los archivos sin importar
4004  el tipo al que pertenezcan.
4005  Desde aquí podrá tambien eliminar, agregar o modificar el registro actual.
4006 \layout Itemize
4007
4008 Ver Bloques.
4009  Para aquellos archivos que hallan sido creados con un tipo con bloques,
4010  podrá verlos fisicamente, viendo el bloque actual y los anteriores/posteriores.
4011 \layout Itemize
4012
4013 Ver las estadísticas de cada archivo según su tipo, para realizar comparativas
4014 \layout Itemize
4015
4016 Cambiar el formato de cualquier tipo o parametros de archivo.
4017 \layout Itemize
4018
4019 Compactar los archivos.
4020 \layout Section
4021
4022 Decisiones de Diseño
4023 \layout Standard
4024
4025 Durante el desarrollo se han tomado ciertas decisiones en el diseño o restriccio
4026 nes.
4027  En este punto nos centraremos en las especificas tomadas por la interfaz
4028  de visualización, y no tomaremos en cuenta las que ponen los tipos de archivo
4029  por si solos.
4030 \layout Enumerate
4031
4032 La cantidad de items por factura es igual a 10 para archivos de registro
4033  de longitud fija y bloque parametrizado (TIPO 3).
4034  Esta decición fue tomada por poner un valor típico de items que puede haber
4035  en una factura, evaluando un caso de un comercio chico.
4036  Como el tipo de archivo permite cortar un registro y guardarlo en varios
4037  bloques consecutivos, la restricción de cantidad solo es un hecho de elección,
4038  y así pusieramos 100, 1000, 10000 no habría diferencia, ya que el tipo
4039  de archivo lo guardaría sin problemas.
4040 \layout Enumerate
4041
4042 Si el archivo es de TIPO 3 y se agregan más de 10 items estos son truncados
4043  y descartados sin aviso al usuario.
4044  Esta fue una desición basada en el tiempo del proyecto.
4045  De tener que validar y consultar al usuario se hubiera perdido tiempo de
4046  mucho valor para completar objetivos más importantes del TP.
4047 \layout Enumerate
4048
4049 Los campos son delimitados por el caracter nulo (en caso de los strings)
4050  y por la longitud del tipo de dato en caso de los campos numéricos.
4051  De esta forma se aprovechan las características de manejo de string en
4052  C.
4053 \layout Section
4054
4055 Vista de Registros
4056 \layout Standard
4057
4058 Un ejemplo de vista de registros es la que se observa a continuación :
4059 \layout Standard
4060
4061
4062 \begin_inset Graphics
4063         filename gui_ver_registros.eps
4064         width 14cm
4065         keepAspectRatio
4066
4067 \end_inset 
4068
4069
4070 \layout Standard
4071
4072 Como puede verse el registro actual se ve resaltado respecto de los demás.
4073  También se puede observar que en este caso (el bloque es de 2000 bytes)
4074  no entra toda la información en pantalla, pero es posible desplazar utilizando
4075  las teclas A y Z.
4076 \layout Standard
4077
4078 Los datos binarios son convertidos a texto para ser mostrados, siendo la
4079  representación elegida :
4080 \layout Itemize
4081
4082 (XXX) : Representa un ID.
4083  En el caso de las facturas también aparece en los datos el número de índice
4084  de la nota asociada con esta representación.
4085 \layout Itemize
4086
4087 {XXX} : Representa el tamaño de los datos.
4088  Esto siempre y cuando el registro sea de longitud variable (TIPO1 y TIPO2).
4089 \layout Standard
4090
4091 También es posible ejecutar acciones de edición sobre el registro seleccioado,
4092  así como buscar por ID de registro.
4093 \layout Standard
4094
4095 Cuando se procesa la información en crudo (es decir, el area de datos) algunos
4096  bytes son modificados para evitar errores visuales.
4097  Un caso es cuando el bytes es compuesto por 8 bits de valor 0 (caracter
4098  
4099 \backslash 
4100 0).
4101  Lo que se hace es cambiarlo por un caracter que tenga representacion visual
4102  (en este caso un *).
4103  Lo mismo suscede para los caracteres de control (
4104 \backslash 
4105
4106 \backslash 
4107
4108 \backslash 
4109 r por ejemplo) y los espacion.
4110  Esta política fue tomada ya que estos caracteres modifican la salida en
4111  pantalla, y de no evitar su envío a la pantalla, producirían resultados
4112  inesperados en la visualización.
4113 \layout Section
4114
4115 Bugs conocidos
4116 \layout Standard
4117
4118 A continuación se enumera los errores que sabemos que existen, que no hemos
4119  tenido tiempo de corregir, pero que no hacen al TP en sí :
4120 \layout Enumerate
4121
4122 Si la consola o terminal cambia de tamaño la GUI no sigue el nuevo tamaño,
4123  pudiendose producir defectos visuales.
4124  Esto es debido a que se debe capturar una señal que envia el SO, pero no
4125  pudimos hacer que funciones con todas las terminales bajo X, por lo que
4126  se decidio dejarlo para cuando tengamos tiempo.
4127 \layout Enumerate
4128
4129 Si la GUI fue compilada con -DDEBUG y no se utiliza un PIPE para redirigir
4130  la salida de error estandar, es posible que algun componente del programa
4131  emita un mensaje de debug o warning y esta cause defectos de visualización
4132  o el programa deje directamente de funcionar.
4133  Esto es un defecto de la biblioteca NCurses.
4134 \layout Enumerate
4135
4136 Cuando se cargan datos desde el XML y este contiene caracteres extendidos,
4137  estos son mostrados en UTF8 en la pantalla.
4138  Si no posee una consola configurada en UTF8 verá los caracteres extendidos
4139  en su representación ASCII (2 caracteres por cada caracter extendido).
4140  Esto se da a causa de que la LibXml maneja de forma interna todo en UTF8
4141  sin importar el encoding declarado en el XML.
4142  El encoding solo lo tienen en cuenta para guado se guarde.
4143  No nos hemos tomado el trabajo de hacer la conversión solo por cuestiones
4144  de tiempo.
4145 \layout Chapter
4146
4147 Comparación de tipos de archivo (conclusiones)
4148 \layout Section
4149
4150 Método utilizado para la comparación
4151 \layout Standard
4152
4153 Para realizar la comparación entre los distintos tipos de archivo, se generaron
4154  un XML de artículos con 200 entradas y uno de facturas de 1750 entradas.
4155  Los valores fueron arbitrarios y un poco más elevados que los requeridos
4156  en el enunciado para poner a prueba el sistema.
4157 \layout Standard
4158
4159 En la tabla que se dará más adelante, se pueden apreciar los datos característic
4160 os de cada tipo de archivo.
4161  El método de prueba fue el siguiente :
4162 \layout Enumerate
4163
4164 Para cada tipo de archivo se cargaron los archivos XML de prueba.
4165 \layout Enumerate
4166
4167 Se anotaron las estadísticas que entrega la GUI.
4168 \layout Enumerate
4169
4170 Se eliminaron alrededor de 50 artículos y 200 facturas.
4171  El valor no es exacto, puesto que al ser pseudo-aleatoria la cantidad borrada
4172  puede no ser 50 o 200.
4173 \layout Enumerate
4174
4175 Se anotaron las estadísticas nuevamente.
4176 \layout Standard
4177
4178 Ahora, los tamaños de bloque para los archivos con bloques fueron tomados
4179  de 512 bytes, por ser una unidad típica de dispositivos de almacenamiento,
4180  y nos pareció lógico dada la similitud utilizar esta unidad.
4181 \layout Section
4182
4183 Artículos
4184 \layout Standard
4185
4186
4187 \begin_inset Float table
4188 placement H
4189 wide false
4190 collapsed true
4191
4192 \layout Caption
4193
4194 Artículos con archivos con tamaño de bloque 512 (cuando aplica)
4195 \layout Standard
4196
4197
4198 \size small 
4199
4200 \begin_inset  Tabular
4201 <lyxtabular version="3" rows="8" columns="7">
4202 <features islongtable="true">
4203 <column alignment="left" valignment="top" leftline="true" width="0">
4204 <column alignment="center" valignment="top" leftline="true" width="0">
4205 <column alignment="center" valignment="top" leftline="true" width="0">
4206 <column alignment="center" valignment="top" leftline="true" width="0">
4207 <column alignment="center" valignment="top" leftline="true" width="0">
4208 <column alignment="center" valignment="top" leftline="true" width="0">
4209 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
4210 <row topline="true" bottomline="true">
4211 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4212 \begin_inset Text
4213
4214 \layout Standard
4215
4216
4217 \size small 
4218 Artículos
4219 \end_inset 
4220 </cell>
4221 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4222 \begin_inset Text
4223
4224 \layout Standard
4225
4226
4227 \size small 
4228 T1
4229 \end_inset 
4230 </cell>
4231 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4232 \begin_inset Text
4233
4234 \layout Standard
4235
4236
4237 \size small 
4238 T2
4239 \end_inset 
4240 </cell>
4241 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4242 \begin_inset Text
4243
4244 \layout Standard
4245
4246
4247 \size small 
4248 T3
4249 \end_inset 
4250 </cell>
4251 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4252 \begin_inset Text
4253
4254 \layout Standard
4255
4256
4257 \size small 
4258 T1
4259 \end_inset 
4260 </cell>
4261 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4262 \begin_inset Text
4263
4264 \layout Standard
4265
4266
4267 \size small 
4268 T2
4269 \end_inset 
4270 </cell>
4271 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4272 \begin_inset Text
4273
4274 \layout Standard
4275
4276
4277 \size small 
4278 T3
4279 \end_inset 
4280 </cell>
4281 </row>
4282 <row topline="true" bottomline="true">
4283 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4284 \begin_inset Text
4285
4286 \layout Standard
4287
4288
4289 \size small 
4290 Tamaño de bloque: 512
4291 \end_inset 
4292 </cell>
4293 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4294 \begin_inset Text
4295
4296 \layout Standard
4297
4298
4299 \size small 
4300 Inicial
4301 \end_inset 
4302 </cell>
4303 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4304 \begin_inset Text
4305
4306 \layout Standard
4307
4308 \end_inset 
4309 </cell>
4310 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4311 \begin_inset Text
4312
4313 \layout Standard
4314
4315 \end_inset 
4316 </cell>
4317 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
4318 \begin_inset Text
4319
4320 \layout Standard
4321
4322
4323 \size small 
4324 Luego de borrar
4325 \end_inset 
4326 </cell>
4327 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4328 \begin_inset Text
4329
4330 \layout Standard
4331
4332 \end_inset 
4333 </cell>
4334 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4335 \begin_inset Text
4336
4337 \layout Standard
4338
4339 \end_inset 
4340 </cell>
4341 </row>
4342 <row topline="true">
4343 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4344 \begin_inset Text
4345
4346 \layout Standard
4347
4348
4349 \size small 
4350 Tamaño Datos
4351 \end_inset 
4352 </cell>
4353 <cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4354 \begin_inset Text
4355
4356 \layout Standard
4357
4358
4359 \size small 
4360 10528 bytes
4361 \end_inset 
4362 </cell>
4363 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4364 \begin_inset Text
4365
4366 \layout Standard
4367
4368
4369 \size small 
4370 10528 bytes
4371 \end_inset 
4372 </cell>
4373 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4374 \begin_inset Text
4375
4376 \layout Standard
4377
4378
4379 \size small 
4380 28800 bytes
4381 \end_inset 
4382 </cell>
4383 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4384 \begin_inset Text
4385
4386 \layout Standard
4387
4388
4389 \size small 
4390 7874 bytes
4391 \end_inset 
4392 </cell>
4393 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4394 \begin_inset Text
4395
4396 \layout Standard
4397
4398
4399 \size small 
4400 7278 bytes
4401 \end_inset 
4402 </cell>
4403 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4404 \begin_inset Text
4405
4406 \layout Standard
4407
4408
4409 \size small 
4410 17856 bytes
4411 \end_inset 
4412 </cell>
4413 </row>
4414 <row topline="true">
4415 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4416 \begin_inset Text
4417
4418 \layout Standard
4419
4420
4421 \size small 
4422 Tamaño Datos de Control
4423 \end_inset 
4424 </cell>
4425 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4426 \begin_inset Text
4427
4428 \layout Standard
4429
4430
4431 \size small 
4432 1608 bytes
4433 \end_inset 
4434 </cell>
4435 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4436 \begin_inset Text
4437
4438 \layout Standard
4439
4440
4441 \size small 
4442 1604 bytes
4443 \end_inset 
4444 </cell>
4445 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4446 \begin_inset Text
4447
4448 \layout Standard
4449
4450
4451 \size small 
4452 812 bytes
4453 \end_inset 
4454 </cell>
4455 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4456 \begin_inset Text
4457
4458 \layout Standard
4459
4460
4461 \size small 
4462 1208 bytes
4463 \end_inset 
4464 </cell>
4465 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4466 \begin_inset Text
4467
4468 \layout Standard
4469
4470
4471 \size small 
4472 1108 bytes
4473 \end_inset 
4474 </cell>
4475 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4476 \begin_inset Text
4477
4478 \layout Standard
4479
4480
4481 \size small 
4482 508 bytes
4483 \end_inset 
4484 </cell>
4485 </row>
4486 <row topline="true">
4487 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4488 \begin_inset Text
4489
4490 \layout Standard
4491
4492
4493 \size small 
4494 Espacio Libre
4495 \end_inset 
4496 </cell>
4497 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4498 \begin_inset Text
4499
4500 \layout Standard
4501
4502
4503 \size small 
4504 672 bytes
4505 \end_inset 
4506 </cell>
4507 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4508 \begin_inset Text
4509
4510 \layout Standard
4511
4512
4513 \size small 
4514 0 bytes
4515 \end_inset 
4516 </cell>
4517 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4518 \begin_inset Text
4519
4520 \layout Standard
4521
4522
4523 \size small 
4524 4704 bytes
4525 \end_inset 
4526 </cell>
4527 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4528 \begin_inset Text
4529
4530 \layout Standard
4531
4532
4533 \size small 
4534 3726 bytes
4535 \end_inset 
4536 </cell>
4537 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4538 \begin_inset Text
4539
4540 \layout Standard
4541
4542
4543 \size small 
4544 3746 bytes
4545 \end_inset 
4546 </cell>
4547 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4548 \begin_inset Text
4549
4550 \layout Standard
4551
4552
4553 \size small 
4554 15952 bytes
4555 \end_inset 
4556 </cell>
4557 </row>
4558 <row topline="true">
4559 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4560 \begin_inset Text
4561
4562 \layout Standard
4563
4564
4565 \size small 
4566 Media de Espacio Libre
4567 \end_inset 
4568 </cell>
4569 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4570 \begin_inset Text
4571
4572 \layout Standard
4573
4574
4575 \size small 
4576 26 bytes
4577 \end_inset 
4578 </cell>
4579 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4580 \begin_inset Text
4581
4582 \layout Standard
4583
4584
4585 \size small 
4586 0 bytes
4587 \end_inset 
4588 </cell>
4589 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4590 \begin_inset Text
4591
4592 \layout Standard
4593
4594
4595 \size small 
4596 70 bytes
4597 \end_inset 
4598 </cell>
4599 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4600 \begin_inset Text
4601
4602 \layout Standard
4603
4604
4605 \size small 
4606 149 bytes
4607 \end_inset 
4608 </cell>
4609 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4610 \begin_inset Text
4611
4612 \layout Standard
4613
4614
4615 \size small 
4616 73 bytes
4617 \end_inset 
4618 </cell>
4619 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4620 \begin_inset Text
4621
4622 \layout Standard
4623
4624
4625 \size small 
4626 238 bytes
4627 \end_inset 
4628 </cell>
4629 </row>
4630 <row topline="true">
4631 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4632 \begin_inset Text
4633
4634 \layout Standard
4635
4636
4637 \size small 
4638 Máximo de Espacio Libre
4639 \end_inset 
4640 </cell>
4641 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4642 \begin_inset Text
4643
4644 \layout Standard
4645
4646
4647 \size small 
4648 83 bytes
4649 \end_inset 
4650 </cell>
4651 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4652 \begin_inset Text
4653
4654 \layout Standard
4655
4656
4657 \size small 
4658 0 bytes
4659 \end_inset 
4660 </cell>
4661 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4662 \begin_inset Text
4663
4664 \layout Standard
4665
4666
4667 \size small 
4668 216 bytes
4669 \end_inset 
4670 </cell>
4671 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4672 \begin_inset Text
4673
4674 \layout Standard
4675
4676
4677 \size small 
4678 279 bytes
4679 \end_inset 
4680 </cell>
4681 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4682 \begin_inset Text
4683
4684 \layout Standard
4685
4686
4687 \size small 
4688 480 bytes
4689 \end_inset 
4690 </cell>
4691 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4692 \begin_inset Text
4693
4694 \layout Standard
4695
4696
4697 \size small 
4698 512 bytes
4699 \end_inset 
4700 </cell>
4701 </row>
4702 <row topline="true" bottomline="true">
4703 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4704 \begin_inset Text
4705
4706 \layout Standard
4707
4708
4709 \size small 
4710 Mínimo de Espacio Libre
4711 \end_inset 
4712 </cell>
4713 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4714 \begin_inset Text
4715
4716 \layout Standard
4717
4718
4719 \size small 
4720 2 bytes
4721 \end_inset 
4722 </cell>
4723 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4724 \begin_inset Text
4725
4726 \layout Standard
4727
4728
4729 \size small 
4730 0 bytes
4731 \end_inset 
4732 </cell>
4733 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4734 \begin_inset Text
4735
4736 \layout Standard
4737
4738
4739 \size small 
4740 68 bytes
4741 \end_inset 
4742 </cell>
4743 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4744 \begin_inset Text
4745
4746 \layout Standard
4747
4748
4749 \size small 
4750 36 bytes
4751 \end_inset 
4752 </cell>
4753 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4754 \begin_inset Text
4755
4756 \layout Standard
4757
4758
4759 \size small 
4760  41 bytes
4761 \end_inset 
4762 </cell>
4763 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4764 \begin_inset Text
4765
4766 \layout Standard
4767
4768
4769 \size small 
4770  68 bytes
4771 \end_inset 
4772 </cell>
4773 </row>
4774 </lyxtabular>
4775
4776 \end_inset 
4777
4778
4779 \end_inset 
4780
4781  
4782 \begin_inset Float table
4783 placement H
4784 wide false
4785 collapsed true
4786
4787 \layout Caption
4788
4789 Artículos con archivos con tamaño de bloque 1024 (cuando aplica)
4790 \layout Standard
4791
4792
4793 \size small 
4794
4795 \begin_inset  Tabular
4796 <lyxtabular version="3" rows="8" columns="7">
4797 <features islongtable="true">
4798 <column alignment="left" valignment="top" leftline="true" width="0">
4799 <column alignment="center" valignment="top" leftline="true" width="0">
4800 <column alignment="center" valignment="top" leftline="true" width="0">
4801 <column alignment="center" valignment="top" leftline="true" width="0">
4802 <column alignment="center" valignment="top" leftline="true" width="0">
4803 <column alignment="center" valignment="top" leftline="true" width="0">
4804 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
4805 <row topline="true" bottomline="true">
4806 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4807 \begin_inset Text
4808
4809 \layout Standard
4810
4811
4812 \size small 
4813 Luego de borrar
4814 \end_inset 
4815 </cell>
4816 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4817 \begin_inset Text
4818
4819 \layout Standard
4820
4821 T1
4822 \end_inset 
4823 </cell>
4824 <cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4825 \begin_inset Text
4826
4827 \layout Standard
4828
4829 T2
4830 \end_inset 
4831 </cell>
4832 <cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4833 \begin_inset Text
4834
4835 \layout Standard
4836
4837 T3
4838 \end_inset 
4839 </cell>
4840 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
4841 \begin_inset Text
4842
4843 \layout Standard
4844
4845 T1
4846 \end_inset 
4847 </cell>
4848 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4849 \begin_inset Text
4850
4851 \layout Standard
4852
4853 T2
4854 \end_inset 
4855 </cell>
4856 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4857 \begin_inset Text
4858
4859 \layout Standard
4860
4861 T3
4862 \end_inset 
4863 </cell>
4864 </row>
4865 <row topline="true" bottomline="true">
4866 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4867 \begin_inset Text
4868
4869 \layout Standard
4870
4871
4872 \size small 
4873 Tamaño de bloque: 1024
4874 \end_inset 
4875 </cell>
4876 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4877 \begin_inset Text
4878
4879 \layout Standard
4880
4881
4882 \size small 
4883 Inicial
4884 \end_inset 
4885 </cell>
4886 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4887 \begin_inset Text
4888
4889 \layout Standard
4890
4891 \end_inset 
4892 </cell>
4893 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
4894 \begin_inset Text
4895
4896 \layout Standard
4897
4898 \end_inset 
4899 </cell>
4900 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
4901 \begin_inset Text
4902
4903 \layout Standard
4904
4905
4906 \size small 
4907 Luego de borrar
4908 \end_inset 
4909 </cell>
4910 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4911 \begin_inset Text
4912
4913 \layout Standard
4914
4915 \end_inset 
4916 </cell>
4917 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4918 \begin_inset Text
4919
4920 \layout Standard
4921
4922 \end_inset 
4923 </cell>
4924 </row>
4925 <row topline="true">
4926 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4927 \begin_inset Text
4928
4929 \layout Standard
4930
4931
4932 \size small 
4933 Tamaño Datos
4934 \end_inset 
4935 </cell>
4936 <cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4937 \begin_inset Text
4938
4939 \layout Standard
4940
4941
4942 \size small 
4943 10528 bytes
4944 \end_inset 
4945 </cell>
4946 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4947 \begin_inset Text
4948
4949 \layout Standard
4950
4951
4952 \size small 
4953 ................
4954 \end_inset 
4955 </cell>
4956 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4957 \begin_inset Text
4958
4959 \layout Standard
4960
4961
4962 \size small 
4963 28800 bytes
4964 \end_inset 
4965 </cell>
4966 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4967 \begin_inset Text
4968
4969 \layout Standard
4970
4971
4972 \size small 
4973 7902 bytes
4974 \end_inset 
4975 </cell>
4976 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4977 \begin_inset Text
4978
4979 \layout Standard
4980
4981
4982 \size small 
4983 ................
4984 \end_inset 
4985 </cell>
4986 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
4987 \begin_inset Text
4988
4989 \layout Standard
4990
4991
4992 \size small 
4993 20448 bytes
4994 \end_inset 
4995 </cell>
4996 </row>
4997 <row topline="true">
4998 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
4999 \begin_inset Text
5000
5001 \layout Standard
5002
5003
5004 \size small 
5005 Tamaño Datos de Control
5006 \end_inset 
5007 </cell>
5008 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5009 \begin_inset Text
5010
5011 \layout Standard
5012
5013
5014 \size small 
5015 1608 bytes
5016 \end_inset 
5017 </cell>
5018 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5019 \begin_inset Text
5020
5021 \layout Standard
5022
5023
5024 \size small 
5025 ................
5026 \end_inset 
5027 </cell>
5028 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5029 \begin_inset Text
5030
5031 \layout Standard
5032
5033
5034 \size small 
5035 812 bytes
5036 \end_inset 
5037 </cell>
5038 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5039 \begin_inset Text
5040
5041 \layout Standard
5042
5043
5044 \size small 
5045 1208 bytes
5046 \end_inset 
5047 </cell>
5048 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5049 \begin_inset Text
5050
5051 \layout Standard
5052
5053
5054 \size small 
5055 ................
5056 \end_inset 
5057 </cell>
5058 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5059 \begin_inset Text
5060
5061 \layout Standard
5062
5063
5064 \size small 
5065 580 bytes
5066 \end_inset 
5067 </cell>
5068 </row>
5069 <row topline="true">
5070 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5071 \begin_inset Text
5072
5073 \layout Standard
5074
5075
5076 \size small 
5077 Espacio Libre
5078 \end_inset 
5079 </cell>
5080 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5081 \begin_inset Text
5082
5083 \layout Standard
5084
5085
5086 \size small 
5087 1184 bytes
5088 \end_inset 
5089 </cell>
5090 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5091 \begin_inset Text
5092
5093 \layout Standard
5094
5095
5096 \size small 
5097 ................
5098 \end_inset 
5099 </cell>
5100 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5101 \begin_inset Text
5102
5103 \layout Standard
5104
5105
5106 \size small 
5107 5216 bytes
5108 \end_inset 
5109 </cell>
5110 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5111 \begin_inset Text
5112
5113 \layout Standard
5114
5115
5116 \size small 
5117 4210 bytes
5118 \end_inset 
5119 </cell>
5120 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5121 \begin_inset Text
5122
5123 \layout Standard
5124
5125
5126 \size small 
5127 ................
5128 \end_inset 
5129 </cell>
5130 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5131 \begin_inset Text
5132
5133 \layout Standard
5134
5135
5136 \size small 
5137 13800 bytes
5138 \end_inset 
5139 </cell>
5140 </row>
5141 <row topline="true">
5142 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5143 \begin_inset Text
5144
5145 \layout Standard
5146
5147
5148 \size small 
5149 Media de Espacio Libre
5150 \end_inset 
5151 </cell>
5152 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5153 \begin_inset Text
5154
5155 \layout Standard
5156
5157
5158 \size small 
5159 91 bytes
5160 \end_inset 
5161 </cell>
5162 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5163 \begin_inset Text
5164
5165 \layout Standard
5166
5167
5168 \size small 
5169 ................
5170 \end_inset 
5171 </cell>
5172 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5173 \begin_inset Text
5174
5175 \layout Standard
5176
5177
5178 \size small 
5179 153 bytes
5180 \end_inset 
5181 </cell>
5182 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5183 \begin_inset Text
5184
5185 \layout Standard
5186
5187
5188 \size small 
5189 323 bytes
5190 \end_inset 
5191 </cell>
5192 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5193 \begin_inset Text
5194
5195 \layout Standard
5196
5197
5198 \size small 
5199 ................
5200 \end_inset 
5201 </cell>
5202 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5203 \begin_inset Text
5204
5205 \layout Standard
5206
5207
5208 \size small 
5209 405 bytes
5210 \end_inset 
5211 </cell>
5212 </row>
5213 <row topline="true">
5214 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5215 \begin_inset Text
5216
5217 \layout Standard
5218
5219
5220 \size small 
5221 Máximo de Espacio Libre
5222 \end_inset 
5223 </cell>
5224 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5225 \begin_inset Text
5226
5227 \layout Standard
5228
5229
5230 \size small 
5231 938 bytes
5232 \end_inset 
5233 </cell>
5234 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5235 \begin_inset Text
5236
5237 \layout Standard
5238
5239
5240 \size small 
5241 ................
5242 \end_inset 
5243 </cell>
5244 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5245 \begin_inset Text
5246
5247 \layout Standard
5248
5249
5250 \size small 
5251 728 bytes
5252 \end_inset 
5253 </cell>
5254 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5255 \begin_inset Text
5256
5257 \layout Standard
5258
5259
5260 \size small 
5261 938 bytes
5262 \end_inset 
5263 </cell>
5264 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5265 \begin_inset Text
5266
5267 \layout Standard
5268
5269
5270 \size small 
5271 ................
5272 \end_inset 
5273 </cell>
5274 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5275 \begin_inset Text
5276
5277 \layout Standard
5278
5279
5280 \size small 
5281 1024 bytes
5282 \end_inset 
5283 </cell>
5284 </row>
5285 <row topline="true" bottomline="true">
5286 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5287 \begin_inset Text
5288
5289 \layout Standard
5290
5291
5292 \size small 
5293 Mínimo de Espacio Libre
5294 \end_inset 
5295 </cell>
5296 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5297 \begin_inset Text
5298
5299 \layout Standard
5300
5301
5302 \size small 
5303 0 bytes
5304 \end_inset 
5305 </cell>
5306 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5307 \begin_inset Text
5308
5309 \layout Standard
5310
5311
5312 \size small 
5313 ................
5314 \end_inset 
5315 </cell>
5316 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5317 \begin_inset Text
5318
5319 \layout Standard
5320
5321
5322 \size small 
5323 136 bytes
5324 \end_inset 
5325 </cell>
5326 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5327 \begin_inset Text
5328
5329 \layout Standard
5330
5331
5332 \size small 
5333 7 bytes
5334 \end_inset 
5335 </cell>
5336 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5337 \begin_inset Text
5338
5339 \layout Standard
5340
5341
5342 \size small 
5343 ................
5344 \end_inset 
5345 </cell>
5346 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5347 \begin_inset Text
5348
5349 \layout Standard
5350
5351
5352 \size small 
5353 136 bytes
5354 \end_inset 
5355 </cell>
5356 </row>
5357 </lyxtabular>
5358
5359 \end_inset 
5360
5361
5362 \end_inset 
5363
5364
5365 \layout Standard
5366
5367 Evidentemente para el caso de artículos, una muy mala elección sería utilizar
5368  el archivo de tipo3, puesto que al usar registros constantes es posible
5369  que se desperdicie mucho espacio si ocurren muchas eliminaciones (como
5370  se observa en la tabla).
5371  Entre los tipos 1 y 2 no existe mucha diferencia en los números, por lo
5372  que la decisión podría ser tomada en base a los tiempos de acceso.
5373  Tomando este criterio el T2 sería la mejor forma de almacenar los datos
5374  si lo más frecuente son lecturas, ya que al leer se puede obtener el offset
5375  desde el principio del registro, mientras que en el tipo1 se debe hacer
5376  una búsqueda secuencial sobre el bloque, y de ser éste último muy grande
5377  el tiempo de acceso puede ser elevado.
5378 \layout Standard
5379
5380 Para operaciones que requiera muchas bajas de elementos el tipo 2 no sería
5381  la mejor opción, puesto que la liberación es compleja, ya que cuando se
5382  da de baja un registro se debe verificar si dicho espacio se solapa con
5383  algún espacio libre actual, de manera de mantener espacios libres como
5384  lo hacen los sistemas de archivo ext2, manteniendo la lista de los offsets
5385  y tamaño de espacios libres, a fin de buscar el que mejor ajuste en caso
5386  de una alta.
5387 \layout Standard
5388
5389 Para el caso de artículos, donde puede haber un continuo cambio en la oferta
5390  de nuestro negocio, nos inclinaremos por el tipo de archivo 1, con un tamaño
5391  de bloque reducido.
5392  Solo recordaremos compactar el archivo periódicamente a fin de minimizar
5393  el espacio desperdiciado.
5394 \layout Section
5395
5396 Facturas
5397 \layout Standard
5398
5399
5400 \begin_inset Float table
5401 placement H
5402 wide false
5403 collapsed true
5404
5405 \layout Caption
5406
5407 Facturas con archivos con tamaño de bloque 512 (cuando aplica)
5408 \layout Standard
5409
5410
5411 \size small 
5412
5413 \begin_inset  Tabular
5414 <lyxtabular version="3" rows="8" columns="7">
5415 <features islongtable="true">
5416 <column alignment="left" valignment="top" leftline="true" width="0">
5417 <column alignment="center" valignment="top" leftline="true" width="0">
5418 <column alignment="center" valignment="top" leftline="true" width="0">
5419 <column alignment="center" valignment="top" leftline="true" width="0">
5420 <column alignment="center" valignment="top" leftline="true" width="0">
5421 <column alignment="center" valignment="top" leftline="true" width="0">
5422 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
5423 <row topline="true" bottomline="true">
5424 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5425 \begin_inset Text
5426
5427 \layout Standard
5428
5429
5430 \size small 
5431 Facturas
5432 \end_inset 
5433 </cell>
5434 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
5435 \begin_inset Text
5436
5437 \layout Standard
5438
5439
5440 \size small 
5441 T1
5442 \end_inset 
5443 </cell>
5444 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
5445 \begin_inset Text
5446
5447 \layout Standard
5448
5449
5450 \size small 
5451 T2
5452 \end_inset 
5453 </cell>
5454 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
5455 \begin_inset Text
5456
5457 \layout Standard
5458
5459
5460 \size small 
5461 T3
5462 \end_inset 
5463 </cell>
5464 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5465 \begin_inset Text
5466
5467 \layout Standard
5468
5469
5470 \size small 
5471 T1
5472 \end_inset 
5473 </cell>
5474 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5475 \begin_inset Text
5476
5477 \layout Standard
5478
5479
5480 \size small 
5481 T2
5482 \end_inset 
5483 </cell>
5484 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5485 \begin_inset Text
5486
5487 \layout Standard
5488
5489
5490 \size small 
5491 T3
5492 \end_inset 
5493 </cell>
5494 </row>
5495 <row topline="true" bottomline="true">
5496 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5497 \begin_inset Text
5498
5499 \layout Standard
5500
5501
5502 \size small 
5503 Tamaño de bloque = 512
5504 \end_inset 
5505 </cell>
5506 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
5507 \begin_inset Text
5508
5509 \layout Standard
5510
5511
5512 \size small 
5513 Inicial
5514 \end_inset 
5515 </cell>
5516 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
5517 \begin_inset Text
5518
5519 \layout Standard
5520
5521 \end_inset 
5522 </cell>
5523 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
5524 \begin_inset Text
5525
5526 \layout Standard
5527
5528 \end_inset 
5529 </cell>
5530 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
5531 \begin_inset Text
5532
5533 \layout Standard
5534
5535
5536 \size small 
5537 Luego de borrar
5538 \end_inset 
5539 </cell>
5540 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5541 \begin_inset Text
5542
5543 \layout Standard
5544
5545 \end_inset 
5546 </cell>
5547 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5548 \begin_inset Text
5549
5550 \layout Standard
5551
5552 \end_inset 
5553 </cell>
5554 </row>
5555 <row topline="true">
5556 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5557 \begin_inset Text
5558
5559 \layout Standard
5560
5561
5562 \size small 
5563 Tamaño Datos
5564 \end_inset 
5565 </cell>
5566 <cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5567 \begin_inset Text
5568
5569 \layout Standard
5570
5571
5572 \size small 
5573 268707 bytes
5574 \end_inset 
5575 </cell>
5576 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5577 \begin_inset Text
5578
5579 \layout Standard
5580
5581
5582 \size small 
5583 268707 bytes
5584 \end_inset 
5585 </cell>
5586 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5587 \begin_inset Text
5588
5589 \layout Standard
5590
5591
5592 \size small 
5593 546000 bytes
5594 \end_inset 
5595 </cell>
5596 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5597 \begin_inset Text
5598
5599 \layout Standard
5600
5601
5602 \size small 
5603 207295 bytes
5604 \end_inset 
5605 </cell>
5606 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5607 \begin_inset Text
5608
5609 \layout Standard
5610
5611
5612 \size small 
5613 212465 bytes
5614 \end_inset 
5615 </cell>
5616 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5617 \begin_inset Text
5618
5619 \layout Standard
5620
5621
5622 \size small 
5623 482664 bytes
5624 \end_inset 
5625 </cell>
5626 </row>
5627 <row topline="true">
5628 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5629 \begin_inset Text
5630
5631 \layout Standard
5632
5633
5634 \size small 
5635 Tamaño Datos de Control
5636 \end_inset 
5637 </cell>
5638 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5639 \begin_inset Text
5640
5641 \layout Standard
5642
5643
5644 \size small 
5645 14008 bytes
5646 \end_inset 
5647 </cell>
5648 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5649 \begin_inset Text
5650
5651 \layout Standard
5652
5653
5654 \size small 
5655 14004 bytes
5656 \end_inset 
5657 </cell>
5658 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5659 \begin_inset Text
5660
5661 \layout Standard
5662
5663
5664 \size small 
5665 7012 bytes
5666 \end_inset 
5667 </cell>
5668 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5669 \begin_inset Text
5670
5671 \layout Standard
5672
5673
5674 \size small 
5675 12288 bytes
5676 \end_inset 
5677 </cell>
5678 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5679 \begin_inset Text
5680
5681 \layout Standard
5682
5683
5684 \size small 
5685 12324 bytes
5686 \end_inset 
5687 </cell>
5688 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5689 \begin_inset Text
5690
5691 \layout Standard
5692
5693
5694 \size small 
5695 6200 bytes
5696 \end_inset 
5697 </cell>
5698 </row>
5699 <row topline="true">
5700 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5701 \begin_inset Text
5702
5703 \layout Standard
5704
5705
5706 \size small 
5707 Espacio Libre
5708 \end_inset 
5709 </cell>
5710 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5711 \begin_inset Text
5712
5713 \layout Standard
5714
5715
5716 \size small 
5717 17325 bytes
5718 \end_inset 
5719 </cell>
5720 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5721 \begin_inset Text
5722
5723 \layout Standard
5724
5725
5726 \size small 
5727 0 bytes
5728 \end_inset 
5729 </cell>
5730 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5731 \begin_inset Text
5732
5733 \layout Standard
5734
5735
5736 \size small 
5737 343000 bytes
5738 \end_inset 
5739 </cell>
5740 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5741 \begin_inset Text
5742
5743 \layout Standard
5744
5745
5746 \size small 
5747 80457 bytes
5748 \end_inset 
5749 </cell>
5750 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5751 \begin_inset Text
5752
5753 \layout Standard
5754
5755
5756 \size small 
5757 57922 bytes
5758 \end_inset 
5759 </cell>
5760 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5761 \begin_inset Text
5762
5763 \layout Standard
5764
5765
5766 \size small 
5767 407148 bytes
5768 \end_inset 
5769 </cell>
5770 </row>
5771 <row topline="true">
5772 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5773 \begin_inset Text
5774
5775 \layout Standard
5776
5777
5778 \size small 
5779 Media de Espacio Libre
5780 \end_inset 
5781 </cell>
5782 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5783 \begin_inset Text
5784
5785 \layout Standard
5786
5787
5788 \size small 
5789 29 bytes
5790 \end_inset 
5791 </cell>
5792 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5793 \begin_inset Text
5794
5795 \layout Standard
5796
5797
5798 \size small 
5799 0 bytes
5800 \end_inset 
5801 </cell>
5802 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5803 \begin_inset Text
5804
5805 \layout Standard
5806
5807
5808 \size small 
5809 196 bytes
5810 \end_inset 
5811 </cell>
5812 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5813 \begin_inset Text
5814
5815 \layout Standard
5816
5817
5818 \size small 
5819 137 bytes
5820 \end_inset 
5821 </cell>
5822 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5823 \begin_inset Text
5824
5825 \layout Standard
5826
5827
5828 \size small 
5829 981 bytes
5830 \end_inset 
5831 </cell>
5832 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5833 \begin_inset Text
5834
5835 \layout Standard
5836
5837
5838 \size small 
5839 232 bytes
5840 \end_inset 
5841 </cell>
5842 </row>
5843 <row topline="true">
5844 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5845 \begin_inset Text
5846
5847 \layout Standard
5848
5849
5850 \size small 
5851 Máximo de Espacio Libre
5852 \end_inset 
5853 </cell>
5854 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5855 \begin_inset Text
5856
5857 \layout Standard
5858
5859
5860 \size small 
5861 386 bytes
5862 \end_inset 
5863 </cell>
5864 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5865 \begin_inset Text
5866
5867 \layout Standard
5868
5869
5870 \size small 
5871 0 bytes
5872 \end_inset 
5873 </cell>
5874 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5875 \begin_inset Text
5876
5877 \layout Standard
5878
5879
5880 \size small 
5881 196 bytes
5882 \end_inset 
5883 </cell>
5884 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5885 \begin_inset Text
5886
5887 \layout Standard
5888
5889
5890 \size small 
5891 512 bytes
5892 \end_inset 
5893 </cell>
5894 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5895 \begin_inset Text
5896
5897 \layout Standard
5898
5899
5900 \size small 
5901 10656 bytes
5902 \end_inset 
5903 </cell>
5904 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5905 \begin_inset Text
5906
5907 \layout Standard
5908
5909
5910 \size small 
5911 512 bytes
5912 \end_inset 
5913 </cell>
5914 </row>
5915 <row topline="true" bottomline="true">
5916 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5917 \begin_inset Text
5918
5919 \layout Standard
5920
5921
5922 \size small 
5923 Mínimo de Espacio Libre
5924 \end_inset 
5925 </cell>
5926 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5927 \begin_inset Text
5928
5929 \layout Standard
5930
5931
5932 \size small 
5933 1 bytes
5934 \end_inset 
5935 </cell>
5936 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5937 \begin_inset Text
5938
5939 \layout Standard
5940
5941
5942 \size small 
5943 0 bytes
5944 \end_inset 
5945 </cell>
5946 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5947 \begin_inset Text
5948
5949 \layout Standard
5950
5951
5952 \size small 
5953 196 bytes
5954 \end_inset 
5955 </cell>
5956 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5957 \begin_inset Text
5958
5959 \layout Standard
5960
5961
5962 \size small 
5963 1 bytes
5964 \end_inset 
5965 </cell>
5966 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
5967 \begin_inset Text
5968
5969 \layout Standard
5970
5971
5972 \size small 
5973 216 bytes
5974 \end_inset 
5975 </cell>
5976 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
5977 \begin_inset Text
5978
5979 \layout Standard
5980
5981
5982 \size small 
5983 196 bytes
5984 \end_inset 
5985 </cell>
5986 </row>
5987 </lyxtabular>
5988
5989 \end_inset 
5990
5991
5992 \end_inset 
5993
5994  
5995 \begin_inset Float table
5996 placement H
5997 wide false
5998 collapsed true
5999
6000 \layout Caption
6001
6002 Artículos con archivos con tamaño de bloque 1024 (cuando aplica)
6003 \layout Standard
6004
6005
6006 \size small 
6007
6008 \begin_inset  Tabular
6009 <lyxtabular version="3" rows="8" columns="7">
6010 <features islongtable="true">
6011 <column alignment="left" valignment="top" leftline="true" width="0">
6012 <column alignment="center" valignment="top" leftline="true" width="0">
6013 <column alignment="center" valignment="top" leftline="true" width="0">
6014 <column alignment="center" valignment="top" leftline="true" width="0">
6015 <column alignment="center" valignment="top" leftline="true" width="0">
6016 <column alignment="center" valignment="top" leftline="true" width="0">
6017 <column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
6018 <row topline="true" bottomline="true">
6019 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6020 \begin_inset Text
6021
6022 \layout Standard
6023
6024 Facturas
6025 \end_inset 
6026 </cell>
6027 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
6028 \begin_inset Text
6029
6030 \layout Standard
6031
6032 T1
6033 \end_inset 
6034 </cell>
6035 <cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
6036 \begin_inset Text
6037
6038 \layout Standard
6039
6040 T2
6041 \end_inset 
6042 </cell>
6043 <cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
6044 \begin_inset Text
6045
6046 \layout Standard
6047
6048 T3
6049 \end_inset 
6050 </cell>
6051 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
6052 \begin_inset Text
6053
6054 \layout Standard
6055
6056 T1
6057 \end_inset 
6058 </cell>
6059 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6060 \begin_inset Text
6061
6062 \layout Standard
6063
6064 T2
6065 \end_inset 
6066 </cell>
6067 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6068 \begin_inset Text
6069
6070 \layout Standard
6071
6072 T3
6073 \end_inset 
6074 </cell>
6075 </row>
6076 <row topline="true" bottomline="true">
6077 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6078 \begin_inset Text
6079
6080 \layout Standard
6081
6082
6083 \family roman 
6084 \series medium 
6085 \shape up 
6086 \size normal 
6087 \emph off 
6088 \bar no 
6089 \noun off 
6090 \color none
6091 Tamaño de bloque: 1024
6092 \end_inset 
6093 </cell>
6094 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
6095 \begin_inset Text
6096
6097 \layout Standard
6098
6099
6100 \family roman 
6101 \series medium 
6102 \shape up 
6103 \size normal 
6104 \emph off 
6105 \bar no 
6106 \noun off 
6107 \color none
6108 Inicial
6109 \end_inset 
6110 </cell>
6111 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
6112 \begin_inset Text
6113
6114 \layout Standard
6115
6116 \end_inset 
6117 </cell>
6118 <cell multicolumn="2" alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
6119 \begin_inset Text
6120
6121 \layout Standard
6122
6123 \end_inset 
6124 </cell>
6125 <cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
6126 \begin_inset Text
6127
6128 \layout Standard
6129
6130
6131 \family roman 
6132 \series medium 
6133 \shape up 
6134 \size normal 
6135 \emph off 
6136 \bar no 
6137 \noun off 
6138 \color none
6139 Luego de borrar
6140 \end_inset 
6141 </cell>
6142 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6143 \begin_inset Text
6144
6145 \layout Standard
6146
6147 \end_inset 
6148 </cell>
6149 <cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6150 \begin_inset Text
6151
6152 \layout Standard
6153
6154 \end_inset 
6155 </cell>
6156 </row>
6157 <row topline="true">
6158 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6159 \begin_inset Text
6160
6161 \layout Standard
6162
6163
6164 \size small 
6165 Tamaño Datos
6166 \end_inset 
6167 </cell>
6168 <cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6169 \begin_inset Text
6170
6171 \layout Standard
6172
6173
6174 \size small 
6175 268707 bytes
6176 \end_inset 
6177 </cell>
6178 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6179 \begin_inset Text
6180
6181 \layout Standard
6182
6183
6184 \size small 
6185 ................
6186 \end_inset 
6187 </cell>
6188 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6189 \begin_inset Text
6190
6191 \layout Standard
6192
6193
6194 \size small 
6195 546000 bytes
6196 \end_inset 
6197 </cell>
6198 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6199 \begin_inset Text
6200
6201 \layout Standard
6202
6203
6204 \size small 
6205 219731 bytes
6206 \end_inset 
6207 </cell>
6208 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6209 \begin_inset Text
6210
6211 \layout Standard
6212
6213
6214 \size small 
6215 ................
6216 \end_inset 
6217 </cell>
6218 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6219 \begin_inset Text
6220
6221 \layout Standard
6222
6223
6224 \size small 
6225 482976 bytes
6226 \end_inset 
6227 </cell>
6228 </row>
6229 <row topline="true">
6230 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6231 \begin_inset Text
6232
6233 \layout Standard
6234
6235
6236 \size small 
6237 Tamaño Datos de Control
6238 \end_inset 
6239 </cell>
6240 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6241 \begin_inset Text
6242
6243 \layout Standard
6244
6245
6246 \size small 
6247 14008 bytes
6248 \end_inset 
6249 </cell>
6250 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6251 \begin_inset Text
6252
6253 \layout Standard
6254
6255
6256 \size small 
6257 ................
6258 \end_inset 
6259 </cell>
6260 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6261 \begin_inset Text
6262
6263 \layout Standard
6264
6265
6266 \size small 
6267 7012 bytes
6268 \end_inset 
6269 </cell>
6270 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6271 \begin_inset Text
6272
6273 \layout Standard
6274
6275
6276 \size small 
6277 12440 bytes
6278 \end_inset 
6279 </cell>
6280 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6281 \begin_inset Text
6282
6283 \layout Standard
6284
6285
6286 \size small 
6287 ................
6288 \end_inset 
6289 </cell>
6290 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6291 \begin_inset Text
6292
6293 \layout Standard
6294
6295
6296 \size small 
6297 6204 bytes
6298 \end_inset 
6299 </cell>
6300 </row>
6301 <row topline="true">
6302 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6303 \begin_inset Text
6304
6305 \layout Standard
6306
6307
6308 \size small 
6309 Espacio Libre
6310 \end_inset 
6311 </cell>
6312 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6313 \begin_inset Text
6314
6315 \layout Standard
6316
6317
6318 \size small 
6319 10157 bytes
6320 \end_inset 
6321 </cell>
6322 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6323 \begin_inset Text
6324
6325 \layout Standard
6326
6327
6328 \size small 
6329 ................
6330 \end_inset 
6331 </cell>
6332 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6333 \begin_inset Text
6334
6335 \layout Standard
6336
6337
6338 \size small 
6339 45016 bytes
6340 \end_inset 
6341 </cell>
6342 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6343 \begin_inset Text
6344
6345 \layout Standard
6346
6347
6348 \size small 
6349 60701 bytes
6350 \end_inset 
6351 </cell>
6352 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6353 \begin_inset Text
6354
6355 \layout Standard
6356
6357
6358 \size small 
6359 ................
6360 \end_inset 
6361 </cell>
6362 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6363 \begin_inset Text
6364
6365 \layout Standard
6366
6367
6368 \size small 
6369 108848 bytes
6370 \end_inset 
6371 </cell>
6372 </row>
6373 <row topline="true">
6374 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6375 \begin_inset Text
6376
6377 \layout Standard
6378
6379
6380 \size small 
6381 Media de Espacio Libre
6382 \end_inset 
6383 </cell>
6384 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6385 \begin_inset Text
6386
6387 \layout Standard
6388
6389
6390 \size small 
6391 35 bytes
6392 \end_inset 
6393 </cell>
6394 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6395 \begin_inset Text
6396
6397 \layout Standard
6398
6399
6400 \size small 
6401 ................
6402 \end_inset 
6403 </cell>
6404 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6405 \begin_inset Text
6406
6407 \layout Standard
6408
6409
6410 \size small 
6411 77 bytes
6412 \end_inset 
6413 </cell>
6414 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6415 \begin_inset Text
6416
6417 \layout Standard
6418
6419
6420 \size small 
6421 212 bytes
6422 \end_inset 
6423 </cell>
6424 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6425 \begin_inset Text
6426
6427 \layout Standard
6428
6429
6430 \size small 
6431 ................
6432 \end_inset 
6433 </cell>
6434 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6435 \begin_inset Text
6436
6437 \layout Standard
6438
6439
6440 \size small 
6441 186 bytes
6442 \end_inset 
6443 </cell>
6444 </row>
6445 <row topline="true">
6446 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6447 \begin_inset Text
6448
6449 \layout Standard
6450
6451
6452 \size small 
6453 Máximo de Espacio Libre
6454 \end_inset 
6455 </cell>
6456 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6457 \begin_inset Text
6458
6459 \layout Standard
6460
6461
6462 \size small 
6463 922 bytes
6464 \end_inset 
6465 </cell>
6466 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6467 \begin_inset Text
6468
6469 \layout Standard
6470
6471
6472 \size small 
6473 ................
6474 \end_inset 
6475 </cell>
6476 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6477 \begin_inset Text
6478
6479 \layout Standard
6480
6481
6482 \size small 
6483 708 bytes
6484 \end_inset 
6485 </cell>
6486 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6487 \begin_inset Text
6488
6489 \layout Standard
6490
6491
6492 \size small 
6493 1024 bytes
6494 \end_inset 
6495 </cell>
6496 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6497 \begin_inset Text
6498
6499 \layout Standard
6500
6501
6502 \size small 
6503 ................
6504 \end_inset 
6505 </cell>
6506 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6507 \begin_inset Text
6508
6509 \layout Standard
6510
6511
6512 \size small 
6513 1024 bytes
6514 \end_inset 
6515 </cell>
6516 </row>
6517 <row topline="true" bottomline="true">
6518 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6519 \begin_inset Text
6520
6521 \layout Standard
6522
6523
6524 \size small 
6525 Mínimo de Espacio Libre
6526 \end_inset 
6527 </cell>
6528 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6529 \begin_inset Text
6530
6531 \layout Standard
6532
6533
6534 \size small 
6535 5 bytes
6536 \end_inset 
6537 </cell>
6538 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6539 \begin_inset Text
6540
6541 \layout Standard
6542
6543
6544 \size small 
6545 ................
6546 \end_inset 
6547 </cell>
6548 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6549 \begin_inset Text
6550
6551 \layout Standard
6552
6553
6554 \size small 
6555 76 bytes
6556 \end_inset 
6557 </cell>
6558 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6559 \begin_inset Text
6560
6561 \layout Standard
6562
6563
6564 \size small 
6565 5 bytes
6566 \end_inset 
6567 </cell>
6568 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
6569 \begin_inset Text
6570
6571 \layout Standard
6572
6573
6574 \size small 
6575 ................
6576 \end_inset 
6577 </cell>
6578 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
6579 \begin_inset Text
6580
6581 \layout Standard
6582
6583
6584 \size small 
6585 76 bytes
6586 \end_inset 
6587 </cell>
6588 </row>
6589 </lyxtabular>
6590
6591 \end_inset 
6592
6593
6594 \end_inset 
6595
6596
6597 \layout Standard
6598
6599 Primero descartaremos al tipo 3 como un buen modo de almacenar las facturas,
6600  por el sólo hecho de que la cantidad de ítems que puede tener una factura
6601  está limitada al tamaño de registro utilizado.
6602  Esto sólo sería razonable en un contexto en donde la variabilidad del registro
6603  no sea drástica como es el caso de las facturas.
6604  De tomar valores grande de registros, se corre el riesgo de tener mucho
6605  espacio desperdiciado en los datos, y tomando valores pequeños de registro
6606  se limita el sistema en cuanto a cantidad de ítems a colocar en una factura
6607  se refiere.
6608  Se puede notar una leve baja en el espacio libre, y aumentar el tamaño
6609  del bloque quizás más haga que este valor baje, pero se aumentaría el tiempo
6610  de acceso a los registros.
6611 \layout Standard
6612
6613 Nuevamente tenemos una disputa entre el los tipo 1 y 2.
6614 \layout Standard
6615
6616 Idealmente, si sólo tuviéramos altas el mejor tipo sería el 2 sin dudarlo,
6617  ya que aprovecha el máximo espacio al no tener pérdidas, debido a que los
6618  registros van uno a continuación del otro.
6619  También tenemos la ventaja de que el acceso es directo.
6620  Para un caso teórico donde las facturas no se dan de baja, esto sería ideal.
6621  Hasta aquí solo hemos visto comparaciones con la carga inicial.
6622 \layout Standard
6623
6624 Analizaremos ahora que pasa luego de borrar varios registros en posiciones
6625  pseudo-aleatorias.
6626  Primeramente se puede observar que el tamaño de datos de control es similar
6627  (recordar que se guarda el id del registro para poder realizar tareas de
6628  recuperación de datos en caso de que el índice se dañe).
6629  El máximo espacio libre no nos da mucha información, ya que en el caso
6630  del tipo 1 podríamos tener n bloques consecutivos libres y tener posiciones
6631  para almacenar registros grandes en ambos casos (recordar que tipo1 tiene
6632  recuperación de espacio libre para n bloques consecutivos, no siempre se
6633  agrega al final).
6634  De todos determinar un espacio libre para un archivo de tipo 2 es mucho
6635  más rápido que para tipo1 si el tamaño del registro es grande, ya que el
6636  archivo de tipo1 debe hacer una búsqueda sobre n bloques, mientras que
6637  el tipo 2 encuentra un gap de tamaño suficiente más rápido.
6638 \layout Standard
6639
6640 Pero no todo es color de rosa en el mundo de archivos de tipo2.
6641  Como se dijo anteriormente las bajas de registros requieren de un proceso
6642  grande al actualizar el índice de espacio libre, para asegurarse de tomar
6643  espacios libres consecutivos como un solo espacio libre, y en el caso de
6644  que las bajas y las altas comunes, esto es una pérdida de performance del
6645  sistema.
6646 \layout Standard
6647
6648 En este caso como se trata de facturas, y suponemos que como usuarios de
6649  sistema queremos cancelar pocas facturas (ya que cancelar una factura significa
6650  que se cayó una venta) optamos por que el mejor tipo de archivo para almacenar
6651  las facturas sera el tipo2.
6652 \the_end