]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - doc/doc_t3/tipo3_doc.lyx
c40b9e670d8bd5848669cbad04ed8df7fc3b01d9
[z.facultad/75.06/emufs.git] / doc / doc_t3 / tipo3_doc.lyx
1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
2 \lyxformat 221
3 \textclass article
4 \language spanish
5 \inputencoding auto
6 \fontscheme default
7 \graphics default
8 \paperfontsize default
9 \papersize Default
10 \paperpackage a4
11 \use_geometry 0
12 \use_amsmath 0
13 \use_natbib 0
14 \use_numerical_citations 0
15 \paperorientation portrait
16 \secnumdepth 3
17 \tocdepth 3
18 \paragraph_separation indent
19 \defskip medskip
20 \quotes_language english
21 \quotes_times 2
22 \papercolumns 1
23 \papersides 1
24 \paperpagestyle default
25
26 \layout Title
27
28 EMUFS
29 \layout Title
30
31 Organización de Archivos con Bloques Parametrizados y Registros de Tamaño
32  Constante
33 \layout Section
34
35 Introducción:
36 \layout Standard
37
38 Las distintas organizaciones de archivos buscan aprovechar al máximo el
39  espacio del archivo.
40 \layout Standard
41
42 En este caso veremos que sucede luego de agregar y borrar una gran cantidad
43  de registros del archivo, lo que provoca como consecuencia directa la fragmenta
44 ción del archivo, es decir, quedan huecos entre un registro y otro, lo que
45  produce un desperdicio de espacio.
46 \layout Section
47
48 Organización Física:
49 \layout Standard
50
51 Esta organización guarda los registros pertenecientes al archivo en bloques
52  de tamaño parametrizado, de modo que intentará guardar la mayor cantidad
53  de registros que quepan en un bloque.
54  
55 \layout Standard
56
57 Así como los graba, también tendrá la posibilidad de leer registros y borrarlos
58  del archivo.
59 \layout Subsection
60
61 Archivos Auxiliares:
62 \layout Subsubsection
63
64 Archivo de Bloques y Registros (.IDX)
65 \layout Standard
66
67 Con la ayuda de un archivo de bloques y registros (de extensión .idx), podremos
68  ubicar cualquier registro existente dentro del archivo.
69  
70 \layout Standard
71
72 El archivo de índice contiene una estructura que contiene el id de un registro
73  y el número de bloque al que pertenece.
74  Este archivo esta ordenado por id, de modo que incrementa su tamaño cada
75  vez que se grabe en el archivo de datos un nuevo registro, excepto que
76  un registro haya sido borrado con anterioridad lo cual produce que al guardar
77  un nuevo registro se actualice y no crezca.
78 \layout Standard
79
80 Si un registro es borrado del archivo de datos, debe actualizarse el índice,
81  esto se logra colocando un flag que indique que el id no pertenece a ningún
82  bloque, hemos adoptado poner -1 en el campo location de la estructura EMUFS_IDX.
83 \layout Standard
84
85 Es necesario que este archivo esté ordenado por id de registro, ya que esto
86  permitirá el acceso directo para la búsqueda de un registro en el archivo
87  de datos.
88 \layout Subsubsection
89
90 Archivo de Bloques y Espacio Libre (.FSC)
91 \layout Standard
92
93 El archivo de de espacios libres permite decidir a la hora de guardar un
94  registro, donde será guardado.
95  
96 \layout Standard
97
98 La estructura de este archivo está formada por un número que indica el bloque
99  y otro que indica el espacio libre en él.
100 \layout Standard
101
102 De esta manera al querer guardar un registro este archivo informará donde
103  cabe el mismo, previa invocación al la función EMUFS_BLOCK_ID emufs_fsc_buscar_
104 lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE*) perteneciente a fsc.h, la cual devuelve
105  el número de bloque donde entra el registro o -1 si no hay un bloque con
106  lugar suficiente, y toma como parámetros una estructura EMUFS, y dos EMUFS_FREE
107  donde el segndo parámetro es el tamaño buscado, y el tercero devuelve el
108  tamaño disponible.
109 \layout Standard
110
111 De la misma manera, al borrar un registro este archivo debe ser actualizado
112  colocando el nuevo espacio libre en el bloque.
113 \layout Subsubsection
114
115 Archivo de Id`s Borrados (.DID)
116 \layout Standard
117
118 Este archivo funciona como una pila de id`s borrados, es decir, cuando se
119  borra un registro el id se almacena en este archivo y será recuperado cuando
120  se desee grabar un registro nuevo, de esta manera se aprovechan todos los
121  id`s sin necesidad de crear uno nuevo cada vez que se borra y graba un
122  registro.
123 \layout Section
124
125 Funciones Principales
126 \layout Subsection
127
128 EMUFS Tipo 3
129 \layout Standard
130
131 Dento de 
132 \emph on 
133 tipo3.h
134 \emph default 
135  y 
136 \emph on 
137 tipo3.c
138 \emph default 
139  se encuentran las cabeceras y la implementación de las funciones principales
140  respectivamente, las cuales dan funcionalidad a esta organización.
141 \layout Standard
142
143 A continuación se comentará el funcionamiento algunas de las mas importantes.
144 \layout Subsubsection
145
146 void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE*
147  reg_size, int* err)
148 \layout Standard
149
150 Devuelve un puntero con la memoria reservada que contiene al registro solicitado
151  por el segundo parámetro ( 
152 \emph on 
153 ID
154 \emph default 
155  ), y almacena en 
156 \emph on 
157 reg_size 
158 \emph default 
159 el tamaño del registro leido, que en este caso no es necesario pues es constante
160  y es conocicdo de antemano.
161 \layout Standard
162
163 Para realizar esta acción, busca en el archivo 
164 \emph on 
165 .idx 
166 \emph default 
167 el bloque al cual pertenece el registro.
168 \layout Subsubsection
169
170 void* emufs_tipo3_leer_bloque(EMUFS *emu, EMUFS_BLOCK_ID num_bloque, int*
171  err)
172 \layout Standard
173
174 Devuelve un puntero con la memoria reservada que contiene el bloque solicitado
175  por el segundo parámetro ( 
176 \emph on 
177 num_bloque 
178 \emph default 
179 ).
180  
181 \layout Standard
182
183 Como la numeración de los bloques es 
184 \emph on 
185 virtual, 
186 \emph default 
187 el acceso al archivo para levantar un bloque es directo, es decir, se posiciona
188  directamente en en número de bloque multiplicado por el tamaño del mismo,
189  salteando antes el encabezado del archivo.
190 \layout Subsubsection
191
192 EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE
193  tam, int* err)
194 \layout Standard
195
196 Graba un registro en un bloque donde haya espacio suficiente, y si no crea
197  un nuevo bloque y lo agrega al final del archivo.
198 \layout Standard
199
200 El registro a grabar es apuntado por el segundo parámetro ( 
201 \emph on 
202 ptr 
203 \emph default 
204 ) y el tamaño viene indicado en el tercero ( 
205 \emph on 
206 tam
207 \emph default 
208  ).
209 \layout Standard
210
211 Luego de realizar la grabación, actualiza los archivos índice con los valores
212  correspondientes.
213 \layout Subsubsection
214
215 int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID)
216 \layout Standard
217
218 Borra el registro indicado por el segundo parámetro ( 
219 \emph on 
220 ID
221 \emph default 
222  ) del archivo de datos, y actualiza los archivos de índice para mantener
223  la coherencia en las próximas modificaciones.
224 \layout Standard
225
226 Al borrar un registro, justifica los demás registros del bloque hacia la
227  izquierda.
228 \layout Subsubsection
229
230 EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu)
231 \layout Standard
232
233 Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas
234  del archivo de datos, espacio libre total, cantidad de registros, cantidad
235  de bloques, tamaño del archivo en bytes, relaciones entre tamaños y espacios
236  libres, etc.
237 \layout Subsubsection
238
239 void emufs_tipo3_compactar(EMUFS *emu)
240 \layout Standard
241
242 Esta función intenta reorganizar el archivo de manera que el espacio libre
243  sea lo menor posible, recordando siempre que un registro no puede ser almacenad
244 o en mas de un bloque excepto que el tamaño del registro sea mayor que el
245  del bloque.
246 \layout Standard
247
248 Para realizar esto, se aprovecha la funcionalidad de 
249 \emph on 
250 emufs_tipo3_grabar_registro() 
251 \emph default 
252 ya que esta tiene la capacidad de determinar una posición mas eficiente
253  en el archivo para un registro.
254  Por esto lo que se hace es levantar uno por uno los registros y volverlos
255  a grabar, de ese modo todos los 
256 \emph on 
257 gaps 
258 \emph default 
259 que pudieron haberse formado por la eliminación de registros serán cubiertos
260  por otros.
261 \layout Subsection
262
263 IDX
264 \layout Subsection
265
266 FSC
267 \layout Subsection
268
269 DID
270 \layout Section
271
272 Consideraciones y Políticas de Diseño
273 \layout Standard
274
275 Se han tomado ciertas consideraciones para algunos casos particulares que
276  se pueden presentar durante el uso/ejecución de la aplicación.
277 \layout Enumerate
278
279 Cada registro tiene un encabezado que indica el 
280 \emph on 
281 id 
282 \emph default 
283 del mismo.
284 \layout Enumerate
285
286 Si el tamaño del registro es mayor que el tamaño del bloque el registro
287  se particionará en la cantidad de bloques que sea necesario, pero siempre
288  se guardará desde el comienzo de un bloque, esto quiere decir que nunca
289  se podrá encontrar un comienzo de registro en algún lugar de un bloque
290  que no sea el comienzo del mismo.
291 \the_end