Leandro Lucarella
\newline
Ricardo Markiewicz
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset
+
+
\layout Chapter
Introducción
\layout Standard
A continuación, veremos que el manejo de los archivos en EMUFS se realiza
- a través de una estructura de control comun para cualquier tipo de archivo,
- dandole flexibilidad y escalabilidad a nuestro sistema.
+ a través de una estructura de control común para cualquier tipo de archivo,
+ dándole flexibilidad y escalabilidad a nuestro sistema.
\layout Standard
Hacia el final de esta presentación, se observaran las pruebas realizadas
\family default
que actúa como interfaz común para el manejo de cualquier tipo de archivo
(no importa que tipo de organización física posea un archivo, esta estructura
- prooverá una interfaz (funciones) para su manejo).
+ proveerá una interfaz (funciones) para su manejo).
\layout Subsection
Tipos Comunes
\layout Standard
-En la implementación de cada tipo de organización física, así como tambien
+En la implementación de cada tipo de organización física, así como también
en las API de los archivos auxiliares comunes a ellas, se da la utilización
de tipo definidos para una clara interfaz entre las mismas, los cuales
son brevemente descriptos a continuación y pueden ser hallados en el archivo
\emph on
\emph default
-es la estuctura principal que encapsula todas las funciones para el manejo
+es la estructura principal que encapsula todas las funciones para el manejo
de un archivo de datos.
- Posee punteros a funciones que dependiendo de la organización fisica por
+ Posee punteros a funciones que dependiendo de la organización física por
la cual se opte dentro del sistema, serán asignados de acorde.
\layout Standard
media_fs
\family default
: promedio de espacio libre en el archivo de datos (por bloque o gap promedio
- segun la org)
+ según la org)
\layout Itemize
\family typewriter
min_fs
\family default
-: idem pero mínimo.
+: ídem pero mínimo.
\layout Itemize
\layout Standard
En base a la estructura descripta anteriormente y mediante la utilización
- de la función de lectura de estadísticas l
+ de la función de lectura de estadísticas
\family typewriter
emufs_leer_estadisticas()
\family default
EMUFS
\family default
handler de cualquier tipo de archivo, podremos obtener una serie de estadística
-s que pasamos a detallar (más alla de los datos básicos como cant registros,
+s que pasamos a detallar (más allá de los datos básicos como cant registros,
cant bloques, tam archivo, etc):
\layout Itemize
emufs.c
\layout Standard
-Es decir que a traves de esta estructura, podemos manejar cualquier tipo
+Es decir que a través de esta estructura, podemos manejar cualquier tipo
de archivo, mediante una misma interfaz en común.
La estructura
\family typewriter
\series default
, con la organización física tipo 3 con registros de longitud fija de 50
bytes y bloques de 200 bytes.
- Al mismo tiempo, los se asginarán valores a los punteros a funciones que
+ Al mismo tiempo, los se asignaran valores a los punteros a funciones que
posee dicha estructura, la cual de ahora en más estará en condiciones de
manejar un archivo del tipo 3.
Gráficamente lo que sucede es:
\begin_inset Float figure
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
\layout Standard
-Así pues, cuando se utilize la estructura para por ejemplo leer un registro,
- sucedera lo siguiente:
+Así pues, cuando se utilice la estructura para por ejemplo leer un registro,
+ sucederá lo siguiente:
\layout LyX-Code
efs->leer_registro(params) -- calls --> emufs_tipo3_leer_registro(params)
EMUFS
\family default
permitirá el manejo de cualquier tipo de archivo, a través del mismo código,
- dandole gran flexibilidad a nuestro sistema, que podrá expandirse a más
+ dándole gran flexibilidad a nuestro sistema, que podrá expandirse a más
tipos de archivos de ser necesario.
\layout Chapter
Los registros de este archivo se encuentran representados una estructura
que indica un número de registro y el bloque u offset en donde se encuentra
- el mísmo.
+ el mismo.
\layout Standard
Es necesario que este archivo esté ordenado por
Organización física
\layout Standard
-Los registros de este archivo se encuentran representados a nivel codigo
+Los registros de este archivo se encuentran representados a nivel código
por el siguiente tipo de dato interno (
\family typewriter
EMUFS_IDX
\begin_inset Float table
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
-Ejemplo de registro en archivo índice (.idx), para un archivo de organizacion
+Ejemplo de registro en archivo índice (.idx), para un archivo de organización
Tipo 1 y 3
\layout Standard
\begin_inset Float table
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
-Ejemplo de registro en archivo índice (.idx), para un archivo de organizacion
+Ejemplo de registro en archivo índice (.idx), para un archivo de organización
Tipo 2
\layout Standard
Búsqueda:
\series default
\emph default
- Los registros del archivo indice (
+ Los registros del archivo índice (
\series bold
.idx
\series default
\newline
NOTA:
\series default
- Cabe aclarar que por si bien el indice se encuentra ordenado por
+ Cabe aclarar que por si bien el índice se encuentra ordenado por
\family typewriter
id_reg
\family default
Alta:
\series default
Ante la alta de un registro en el archivo de datos, se insetará un nuevo
- registro en el archivo índice, con el id_reg del registro en cuestion,
+ registro en el archivo índice, con el id_reg del registro en cuestión,
y el offset u bloque donde se lo haya grabado en disco.
\newline
Ver:
Baja:
\series default
Ante el borrado de un registro del archivo de datos, se accederá el registro
- correspondiente en el índice, y se actualizara su LOCATION, estableciendolo
+ correspondiente en el índice, y se actualizara su LOCATION, estableciéndolo
en el valor especial
\family typewriter
EMUFS_NOT_FOUND
\series bold
dat
\series default
- o nó.
+ o no.
\newline
Ver:
Modificación:
\series default
Ante la modificación en la posición física de un registro dentro del archivo
- de datos (por ejemplo luego del proceso de recompactación, se realizará
+ de datos (por ejemplo luego del proceso de re-compactación, se realizará
la modificación respectiva del campo
\family typewriter
location
Los registros de este archivo se encuentran representados una estructura
que indica un número de bloque u offset y el espacio libre disponible en
- el mismo (o apartir del mismo en el caso del offset).
+ el mismo (o a partir del mismo en el caso del offset).
\layout Standard
Organización Física
\layout Standard
-Los registros de este archivo se encuentran representados a nivel codigo
+Los registros de este archivo se encuentran representados a nivel código
por el siguiente tipo de dato interno (
\family typewriter
EMUFS_FSC
\begin_inset Float table
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
\begin_inset Float table
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
N
\family default
bloques consecutivos libres).
- En el caso de organizacion sin bloque, se buscará un gap o espacio libre
+ En el caso de organización sin bloque, se buscará un gap o espacio libre
en el archivo, obteniéndose en consecuencia, el
\family typewriter
offset
\series bold
.fsc
\series default
-) o bien modificandoló.
+) o bien modificándolo.
\newline
\newline
-En el caso de organizaciónes con bloques, se actualizará el valor del espacio
+En el caso de organizaciones con bloques, se actualizará el valor del espacio
libre
\family typewriter
freespace
\family default
- en el bloque (ya sea incrementandoló o decrementandoló) o bien se insertará
+ en el bloque (ya sea incrementándolo o decrementándolo) o bien se insertará
un nuevo registro en caso de que se esté creando un nuevo bloque en el
archivo de datos (en este caso no será debido a un alta o baja de registro
como se mencionó al principio).
), y en caso de estar este lindante con otro gap, se realizará el merge
pertinente.
(esto esta explicado más en profundidad en los casos particulares de organizaci
-ón fisica, registros variables sin bloques).
+ón física, registros variables sin bloques).
Para el caso de una alta en el archivo de datos (
\series bold
.dat
\series bold
Baja
\series default
-: Unicamente para el caso de una organización que presente gaps en el archivo,
+: Únicamente para el caso de una organización que presente gaps en el archivo,
se podrá dar a lugar la eliminación de un registro del archivo de espacios
libres (
\series bold
id
\emph default
que se guardó en el archivo (o se eliminó del archivo de datos), y truncará
- el archivo eliminandolo.
+ el archivo eliminándolo.
\family typewriter
\newline
(cuenta tanto con bloques como con registros variables), hereda los inconvenien
tes (y ventajas) de ambos, más los propios.
- Al implementar este tipo de archivo se puso enfásis en la eficiencia mientras
+ Al implementar este tipo de archivo se puso énfasis en la eficiencia mientras
esta no comprometa la mantenibilidad del código, es por esto que en algunas
circunstancias no se hace un uso óptimo del espacio.
\layout Standard
EMUFS_BLOCK_SIZE
\family default
, 4 bytes) que almacena el tamaño del bloque que usa el archivo.
- De esta menera, al abrir un archivo de este tipo no se necesita tener ninguna
+ De esta manera, al abrir un archivo de este tipo no se necesita tener ninguna
información sobre él.
A esta cabecera le siguen cero o más bloques del tamaño fijo especificado
en la cabecera antes mencionada.
Puede darse el caso excepcional en que un registro sea de mayor longitud
que un bloque.
Al ser una situación excepcional, no siempre se resuelve de la forma más
- eficiente ni se mínimiza el espacio ocupado por datos de control (como
+ eficiente ni se minimiza el espacio ocupado por datos de control (como
se dijo anteriormente, se prefirió conservar la simpleza del código, adoptando
algoritmos generales aunque no sea de la forma más eficiente o maximizando
el uso del espacio para no perjudicar la mantenibilidad).
\layout Standard
-Para menejar un registro
+Para manejar un registro
\emph on
multibloque
\emph default
al penúltimo.
\layout Itemize
-Cada framento posee las cabeceras mencionadas en la sección
+Cada fragmento posee las cabeceras mencionadas en la sección
\begin_inset LatexCommand \ref{sub:tipo1_reg}
\end_inset
), se buscan N bloques consecutivos (todos los que necesite el registro)
absolutamente libres
\begin_inset Foot
-collapsed true
+collapsed false
\layout Standard
\layout Standard
Al eliminar un registro lo primero que se hace es actualizar los archivos
- de índice y de indentificadores recuperables, poniendo como número de bloque
+ de índice y de identificadores recuperables, poniendo como número de bloque
el valor especial
\family typewriter
EMUFS_NOT_FOUND
Se optó por un algoritmo simple y general, que usa las funciones de alto
nivel mencionadas hasta ahora.
- Simplemento borra el registro y vuelve a crearlo.
+ Simplemente borra el registro y vuelve a crearlo.
Al recuperar el último identificador de registro borrado, nos aseguramos
de que se mantenga el identificador del registro.
\layout Standard
Este tipo de archivo nos traerá a la mesa la particularidad de grabar registros
de longitud variable sin realizar su agrupación en bloques, y como veremos
- en la siguiente sección, tambien permitirá la administración de gaps que
+ en la siguiente sección, también permitirá la administración de gaps que
queden en el archivo luego de operaciones de baja de registros.
\layout Section
de archivo en cuestión.
\layout Standard
-Para poder entender mejor la organización fisica de este tipo de archivo,
+Para poder entender mejor la organización física de este tipo de archivo,
tomemos el caso hipotético en el que se encuentran grabados
\series bold
dos registros
), y posteriormente el registro (bloque de datos) en sí.
Luego se encuentra el espacio libre de 18 bytes dejado por el registro
de 10 bytes eliminado (10 bytes de datos + header de 8 bytes) y finalmente
- el segundo registro mencionado.dsds
+ el segundo registro mencionado.
\layout Subsection
Comportamiento Particular de los Archivos Auxiliares
Archivo índice o de posiciones relativas (.idx)
\layout Standard
-El archivo indice (
+El archivo índice (
\series bold
.idx
\series default
\begin_inset Float table
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
te luego del header tendremos el registro en sí (los datos).
\layout Subsubsection
-Achivo de Gaps / Espacios Libres (.fsc)
+Archivo de Gaps / Espacios Libres (.fsc)
\layout Standard
El archivo de espacios libres o gaps (.fsc), tiene como función la administración
de registros en el archivo de datos.
El mismo, nos indicará donde hay lugar para insertar un nuevo registro
(se podrán insertar en algún gap acorde, o bien al final del archivo).
- Este archivo será utilizado tambien para el proceso de compactación de
+ Este archivo será utilizado también para el proceso de compactación de
un archivo, explicado luego.
\layout Standard
\begin_inset Float table
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
\layout Standard
Nuestro sistema actuará en consecuencia, realizando un merge de los espacios
- libres, y unificándolos en una UNICA entrada en el archivo .fsc, que contendrá
+ libres, y unificándolos en una ÚNICA entrada en el archivo .fsc, que contendrá
como dato de freespace, la suma correspondiente de los espacios libres
antes mencionados.
\layout Subsubsection
Lectura de registros
\layout Standard
-Como se vió al comienzo, los registros en este tipo de archivo no se encuentran
- agrupados en bloques de ninguna índole y estan dispersos a lo largo del
+Como se vio al comienzo, los registros en este tipo de archivo no se encuentran
+ agrupados en bloques de ninguna índole y están dispersos a lo largo del
archivo, con la particularidad de que pueden existir gaps o espacio libre,
entre dos registros dados.
\layout Standard
\layout Standard
Dado que en la implementación de este tipo de organización física contamos
- con los gaps o espacios libres entre registros, no se eliminará fisicamente
+ con los gaps o espacios libres entre registros, no se eliminará físicamente
el registro del archivo de datos (
\series bold
.dat
\series default
).
En cambio, se agrega el gap dejado por la eliminación a dicho archivo,
- y se marca fisicamente en el archivo de datos la eliminación mediante un
+ y se marca físicamente en el archivo de datos la eliminación mediante un
fill de los bytes correspondientes con un caracter nulo.
(hexa 00 y con el propósito de probar fehacientemente que el sistema funciona).
\layout Standard
\layout Enumerate
Se realiza la lectura del registro, mediante el respectivo procedimiento
- ya desarollado anteriormente.
+ ya desarrollado anteriormente.
\layout Enumerate
Una vez que se cuenta con los nuevos datos modificados, se procede a dar
Compactación del archivo de datos
\layout Standard
-Asi como los otros dos tipos de datos, el que nos compete también cuenta
+Así como los otros dos tipos de datos, el que nos compete también cuenta
con la posibilidad de realizar la compactación de datos cuando el usuario
lo desee, justificando todos los registros a izquierda, eliminando así
- los gaps existentes y decrementando el tamaño del archivo en disco (truncandolo
+ los gaps existentes y decrementando el tamaño del archivo en disco (truncándolo
).
\layout Standard
-Para poder comprender como hemos implementado el proceso de recompactación
+Para poder comprender como hemos implementado el proceso de re-compactación
en nuestro tipo de archivo 2, nos ayudaremos de esquemas a través de los
cuales iremos describiendo el proceso.
Notemos antes, que el proceso de compactación esta directamente ligado
).
\layout Standard
-Comenzemos con el siguiente cuadro situacional:
+Comencemos con el siguiente cuadro situacional:
\begin_inset Float figure
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
{
\layout Enumerate
-Se levanta el proximo gap al levantado en una instancia previa.
+Se levanta el próximo gap al levantado en una instancia previa.
En este ejemplo, durante el primer loop del while, se levantará
\series bold
Gap1
de Mustmove_bytes.
\layout Enumerate
-Se establece como gap de referencia, al ultimo gap leido (En este caso se
+Se establece como gap de referencia, al ultimo gap leído (En este caso se
realiza:
\series bold
StartGap0
\begin_inset Float figure
placement H
wide false
-collapsed true
+collapsed false
\layout Caption
Se han tomado ciertas consideraciones para algunos casos particulares que
se pueden presentar durante el uso/ejecución de la aplicación, así como
- tambien politicas respecto del diseño e implementación del sistema:
+ también políticas respecto del diseño e implementación del sistema:
\layout Itemize
En la organización física tipo 2 para los registros que se graban en disco
\newline
\newline
-B) Luego de un proceso de recompactación, los espacios libres que pudieron
+B) Luego de un proceso de re-compactación, los espacios libres que pudieron
haber existido en el archivo de datos (
\series bold
.dat
)
\layout Itemize
-Si se desea insertar un registro y no se puede hayar un gap o espacio libre
+Si se desea insertar un registro y no se puede hallar un gap o espacio libre
donde quepa, se los inserta al final del archivo.
\layout Itemize
del archivo.
\layout Standard
-El archivo estara compuesto por una cabecera que da información sobre el
+El archivo estará compuesto por una cabecera que da información sobre el
tipo (2, o el valor T3 del tipo
\family typewriter
EMUFS_Tipo
Cada bloque será capaz de contener la cantidad de registros enteros que
quepan en él.
De esta manera un registro que no entre completamente en el bloque deberá
- almacenarce en un bloque diferente.
+ almacenarse en un bloque diferente.
\layout Standard
Los bloques no contienen ninguna información adicional, solo se conoce su
\begin_inset Quotes erd
\end_inset
- zonas en el archivo y obtener de esta manera acceso semi-aleatoreo a los
+ zonas en el archivo y obtener de esta manera acceso semi-aleatorio a los
registros.
\layout LyX-Code
/------------- tamaño del bloque ---------/
\layout Subsection
-Organizacion Física de Registros
+Organización Física de Registros
\layout Standard
Cada registro se almacena en un bloque, y contiene una cabecera que indica
\emph on
ID,
\emph default
-por este motivo al realizar la busqueda de espacio en un bloque se lo hará
+por este motivo al realizar la búsqueda de espacio en un bloque se lo hará
preguntando por el tamaño del registro más
\family typewriter
sizeof(EMUFS_REG_ID).
\emph default
el cual contiene la información de la posición del registro dentro del
archivo de datos.
- Una vez leida esta información, se recupera el bloque (en su totalidad)
+ Una vez leída esta información, se recupera el bloque (en su totalidad)
del archivo y se busca secuencialmente el registro con el
\emph on
ID
\layout Standard
Borra un registro del archivo de datos, para esto levanta el bloque al que
- pertenece el archivo y ajusta los demás registros justificandolos hacia
+ pertenece el archivo y ajusta los demás registros justificándolos hacia
la izquierda.
\layout Standard
id al grabarse.
\layout Standard
-Al finalizar este proceso se verifica si existen bloques vacios para truncar
+Al finalizar este proceso se verifica si existen bloques vacíos para truncar
el archivo.
Lo mismo se debe hacer con el archivo de espacios libres .
\emph on