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