You are on page 1of 49

ESTRUCTURA DE ARCHIVO

Objetivos
Conocer y comprender conceptos con los archivos computacionales.

Unidades

I Conceptos Generales
- Dato
- Información
- Archivo Físico
- Archivo Lógico
- Operaciones sobre archivos

II Driver de un Disco
- Tablas
- Operaciones de E/S de alto nivel

III Organización de Archivos


- Organización Secuencial
- Organización Indexada

IV Métodos de Acceso
- Modo de Acceso Secuencial Indexado
- Betree
- Algoritmos de Inserción y Eliminación
- Construcciones de índices Betree a partir de un archivo
- Tablas de Hashing
- Algoritmo de Hashing

Bibliografía

- File System: Diseño e implementación.


- File System: Estructuras y Algoritmos
- Estructuras de datos y algoritmos de archivos
Unidad I. Conceptos Generales

Informática: Es la ciencia que estudia el tratamiento ordenado y


racional de la información; como ciencia, la informática desarrolla
técnicas para el procesamiento de datos. Comprende aspectos teóricos y
prácticos (computación).

Computación: Es la parte de la informática que estudia los aspectos


técnicos y prácticos, los cuales incluyen el conocimiento de la estructura
de un computador y la base de su funcionamiento.

Lenguaje de Máquina: es el lenguaje de nivel más bajo que entiende


un computador. Son códigos binarios, es decir, utilizan sucesos de 0 y 1.

Lenguaje Assembler: Es un lenguaje similar en estructura al lenguaje


de máquina pero compuesto además por símbolos matemáticos que
tienden a simplificar lo complicado.

Compilador: es un programa que traduce a algún lenguaje de


máquina.

Conceptos sobre archivos

Registro Lógico: Unidad homogénea de información formada por ítems


o campos de datos elementales o compuestos, referenciados as un
determinado dato, individuo o concepto.

Por tanto, un archivo esta compuesto poe un conjunto de registros


lógicos del mismo tipo.

Supongamos un archivo que contenga datos personales de los


individuos que trabajan en una empresa. Los registros lógicos de este
archivo podrían contener entre otros los siguientes datos:
REG_PER { código empleado
RUN
Nombre
Apellidos
Dirección
Teléfono
Profesión
categoría
Sueldo
}
De entre todos los campos que contiene un registro, al menos uno de
ellos nos sirve para identificarlo de entre los demás; dicho campo se
denomina campo clave o identificador de registro.

Como los archivos de datos están almacenados en soporte de


almacenamiento externos, será necesario transferir la información del
soporte a la memoria Ram para poder operar con ella; análogamente,
después del tratamiento del archivo para poder conservar la
información, habrá que realizar el proceso inverso desde la Ram al
soporte.

Si dicha transferencia se hiciera de registro a registro, el tiempo


invertido en la operación seria considerable. Por tanto, cuando los PC
leen o escriben una determinada información en un archivo,
intercambian con la Ram varios registros lógicos uno a continuación del
otro, formando un bloque. A dicho bloque se le denomina Registro
Físico.

Registro físico: es la cantidad mínima de información que se transfiere


entre un medio de almacenamiento y la Ram, en una sola operación de
entrada o salida. El número de Registros lógicos que contiene un bloque
se llama Factor de Bloqueo.

Tipos de archivo según su función y tiempo de vida

Archivos Permanentes. Son archivos de larga vida, que se usan para


más de una transacción o proceso. Generalmente, existen durante un
periodo más o menos largo de tiempo. Se pueden subdividir en:
• A. Maestro o de constantes. Los datos contenidos en este tipo de
archivos tiene muy pocas inclusiones de registros nuevos.
• A. de Situación. Contienen Registros con campos que están variando
frecuentemente.
• A. Histórico. Está constituido por Registros que contienen las distintas
modificaciones de los datos en el tiempo, tanto de los archivos
Maestros como de los de Situación, reflejando su ubicación en el
tiempo. Por ejemplo, los archivos que guardan un Registro con los
movimientos o transacciones de los clientes de un banco.

Archivos de Movimiento. Estos archivos contienen Registros que


actualizan otros archivos. Después de la actualización llamada
comúnmente COMMIT o UpDate, se almacenan en un Histórico o se
destruyen. Por ejemplo, un archivo temporal con las altas, bajas y
modificaciones de los artículos de un almacén.
Archivo de maniobra o de trabajo. Son archivos con una vida
limitada, generalmente corta, se crean en los procesos habitualmente
contienen resultados intermedios de un programa que sirve como datos
de entrada de otro archivo. Estos archivos no se suelen conservar.
Se usa por ejemplo en:
• archivo intermedio usado en la ordenación de un archivo maestro.
• Archivo intermedio usado en la eliminación de un registro de un
archivo maestro de texto.

Operaciones frecuentes que se realizan sobre archivos

- Creación
- Consulta
- Actualización
- Listado
- reorganización

Creación de un archivo. Consiste en grabar los registros en un medio


de almacenamiento, según una determinada organización. Las formas
de grabarlo pueden ser:
- A través del teclado
- Desde otro Archivo. Se lee determinados Registros de un archivo
original; los que cumplan una determinada condición, se graban en el
archivo que deseamos crear.
- Fusión de varios archivos. Consiste en unir 2 o más archivos,
clasificados con el mismo criterio, de forma que el archivo resultante,
mantenga el mismo orden (con campo clave).

Consulta. Permite buscar y leer registros concretos dentro de un


archivo, identificándolos mediante su campo clave o identificativo.

Actualización. Es la operación que permite la puesta al día de los


registros del archivo (Mantención).

Listado. Volcado del contenido de un archivo ya sea por impresora o


por pantalla.

Reorganización. El uso frecuente de un archivo hace que con el tiempo


la información contenida en el mismo se deteriore. Ello hace necesario
que periódicamente los Registros deban ser reorganizados de forma que
se eliminen físicamente los registros dados de baja, y así se puedan
utilizar los posibles espacios libres intermedios existentes entre los
distintos tipos de archivos. Esta operación implica en una MEJORA en la
rapidez de acceso.
Concepto básico sobre archivo

Un archivo informático esta compuesto por lo que se denominan


Registros. Un Registro es la unidad menor de información que puede ser
escrita en un archivo de una sola vez. Se pueden escribir muchos
registros o parte de uno pero siempre que se haga, se hará de Registro
en Registro. Si se escriben varios, se hará uno a uno y para escribir una
parte del registro, hay que escribirlo completo.

No obstante, un Registro se compone de campos, que son datos


elementales del Registro que se relacionan entre si para obtener
información referente a un objeto, concepto o personas.

Cada registro de un archivo esta separado se los demás por una marga
denominada Flag.

Terminología usada
• nodo de datos es un Registro, que esta compuesto de campos.
• Nodo de memoria es el bloque que también se llama Registro físico.
En un bloque se pueden almacenar más de un Registro.
• Un archivo puede estar estructurado por Registro y almacenado en
algún medio físico de almacenamiento.

Representación de Campos o ITEMS de un Registro

Una manera resumida de representar valores de campo pueden ser las


siguientes alternativas, las que están ejemplificadas por los siguientes
datos:
{<N° Empleado,”035”>, <nombre,”l. González”>, <Sexo,”M”>,
<Edad,”26”>, <Sueldo,”14000”>}

Representación Posicional

Es esta representación sólo se almacena el valor de cada campo; el


atributo queda implícito por las posiciones estáticas que ocupan los
valores en el registro. Para usarla es necesario conocer el largo máximo
que ocupa cada campo. Cuando este largo es difícil de conocer, esto
implicará dejar muchos bytes sin uso del campo o el truncamiento de
valores cuando la longitud reservada en Ram para el tipo de dato del
campo sea insuficiente.
N° Nombre Sexo Edad Sueldo
| | | | |
0 3 5 L . G O N Z A L E Z M 2 6 1 4 0 0 0
Representación Relacional

Los valores pueden ser de cualquier largo y se distinguen uno de otros a


través de un separador de campo, por ejemplo, el “/”. Debe observarse
que en esta representación, si bien los atributos están implícitos por
posicionamiento, si lo están en su ordenamiento relativo.

0 3 5 / L . G O N Z A L E Z / M / 2 6 / 1 4 0 0 0 /

Representación Indexada

En esta representación se usan Índices para señalar el final de cada


campo (podría ser al principio); los índices se almacenan todos al
comienzo del registro y apuntan al número del último carácter de cada
valor. Alternativamente, puede ser simplemente los largos de cada uno
de los campos. Nuevamente, en esta representación los atributos están
implícitos en el ordenamiento de los valores. Se debe observar que para
leer un campo, podría ser necesario avanzar o retroceder en el registro
la cantidad de bytes reservados en memoria por cada campo predecesor
o sucesor del deseado a leer.

* * * * * 0 3 5 L . G O N Z A L E Z M 2 6 1 4 0 0 0

Representación con Rótulos

Los atributos se especifican explícitamente. De esta manera, el carácter


“#” representa el atributo “número empleado” y “N” representa
“Nombre”. Los rótulos pueden tener largos mayores que un carácter.
Debe observarse también que los rótulos también sirven como
delimitadores de campo. Los diversos campos pueden aparecer en un
registro en cualquier orden y también no estar presentes, esta
representación es útil cuando hay muchos campos que pueden o no
estar presentes en cada registro, porque en esta situación, permite un
ahorro de espacio en almacenamiento (y en la memoria); por otro lado,
la obtención de información usando este método de representación es la
menos simple de programar, ya que requiere un análisis de cada uno de
los caracteres del registro a fin de poder reconocer los valores de cada
campo.
Rótulos: #, N, S, E, $.
# 0 3 5 N L . G O N Z A L E Z S M E 2 6 $ 1 4 0 0 0
Buffer

Es un área de almacenamiento temporal, por lo general en la Ram. El


objetivo de la mayor parte del buffer es de actuar como un área propia.
Necesita el permiso de la CPU antes de la transferencia de datos a un
dispositivo. Como la lectura y escritura de datos a un disco son
relativamente lento, muchos programas almacenan la información de los
cambios de datos dentro de un buffer y luego lo carga en un disco. Por
ejemplo, los procesadores de texto emplean un buffer para almacenar
los cambios de un archivo. Entonces, cuando se guarda el archivo, el
procesador de textos lo actualiza respecto a los cambios efectuados con
el contenido del buffer. Esto es mucho más seguro que tener acceso
sobre el archivo que hay guardado en el disco originario. Así podemos
evitar posibles daños irreparables, por eso cuando hay un corte de
energía eléctrica, toda la información que tengamos dentro del buffer se
pierde; por eso cuando se crea un documento es aconsejable guardar la
información cada cierto tiempo. El buffer también es usado en la
impresión de documentos.

Características de los archivos

• existen muchas posibilidades de disposición de los Registros de un


archivo y algunos de ellos con varias alternativas de métodos de
búsqueda incorporados (secuencial, al azar).
• Cada una de estas organizaciones de archivo alternativas, pueden ser
las más adecuadas para una aplicación específica, porque no existe
una organización que sea óptima para todos los casos.
• Las siguientes características de los archivos pueden servir para una
comparación y selección adecuada a la aplicación particular, aunque
en la práctica, el conjunto de alternativas puede ser muy limitado.

a) Importancia del Archivo

Los Archivos Permanentes o Maestros

• Los Registros de estos archivos son almacenados uno a la vez,


consultados (leídos) muchas veces y clasificados.
• Los archivos que contienen clasificaciones a un archivo maestro se
denominan área de transacciones. Normalmente están estructurados
de manera muy simple, porque su vida es muy corta: sus Registros
están destinados a ser leídos una vez y ser borrados enseguida.
• Los archivos de respaldo son copias de archivos maestros que se
necesitan por razones de seguridad de los datos. En efecto, si se
destruye por error el archivo maestro original, existen copias para
reproducirlo. En algunos casos, muchas clasificaciones al archivo
maestro se guardan también por cierto tiempo.
• En le momento de comenzar los procesamientos, se toman dos
copias A y B (suponiendo); al finalizar la primera semana, se
reemplaza el respaldo A por el contenido del maestro; desde ese
momento, al terminar la segunda semana, se reemplaza el contenido
del respaldo B por el de A y, en seguida, el contenido del archivo
maestro es copiado al respaldo A, y así se continua de esta manera.
Observar que es necesario guardar las transacciones de hasta dos
semanas atrás; también que con este esquema, si se enfrenta un
error cometido en el maestro durante la semana actual del proceso,
se puede recurrir al archivo de respaldo A para repararlo; y si este
error se cometió en la semana previa, se usa el respaldo B con el
mismo objetivo.

b) Frecuencia de Acceso

Esta característica se refiere al N° de procesos que usan el archivo por


unidad de tiempo y también el N° de registros que cada uno de estos
procesos accede. Estas cifras tienen importancia en el diseño de la
organización del archivo porque en un extremo no vale la pena gastar
esfuerzo de diseño y programación en una organización de archivo que
es acezada muy poco: la organización más simple será suficiente; pero
por otro lado, un archivo que se accederá muy frecuentemente justifica
un estudio detenido de la organización que se le debe dar.

c) Distribución del Acceso

El acceso a los Registros puede ser solamente a los primeros registros, o


bien a los últimos o en forma homogénea a todos los Registros. Esta
característica en muchos casos se conoce en el momento de diseñar la
organización, y es muy importante cuando se busca optimizar el tiempo
total. Existen dos formas básicas de procesar un archivo:
i) Modo Secuencial o Serial. Consiste en procesar un Registro tras
otro en la secuencia en la que están almacenados, el acceso
puede hacerse del primero al último o viceversa.
El acceso también puede ser a la totalidad de los registros o sólo a
unos pocos.
ii) Modo NO Secuencial. El acceso es a un Registro cualquiera,
después de otro cualquiera, etc. Generalmente, en este modo de
procesamiento no se accedan todos los Registros del archivo.
El termino al azar no significa que los registros se acceden a
valores de identificador iguales a N° aleatorios, sino solamente a
un Registro cualquiera.

d) Tamaño del Archivo

La organización de un archivo muy pequeño (50 Registros por ejemplo)


es sin importancia ya que el acceso más lento a ese archivo demorará
una cantidad pequeña de tiempo; por el contrario, si el archivo es
voluminoso, pequeñas variaciones en la estructura de almacenamiento o
en la búsqueda, pueden significar grandes ahorros de tiempo de
ejecución, en el acceso a un determinado Registro. De esta manera, el
tamaño del archivo es otra de las características a considerar en el
diseño de una organización (la estructura del archivo).

e) Volatilidad Del Archivo

Es la frecuencia de modificaciones a las que están sujetas sus Registros,


y más particularmente a la frecuencia de adiciones y eliminaciones.
Estas modificaciones pueden ser realizadas más eficientemente en
algunas arquitecturas que en otras.

f) Apoyo del Software

La utilización de una organización de archivo implica el uso de


programas que realizan una gran cantidad de labores como: Asignación
de un Registro a ser insertado en una posición específica del medio de
almacenamiento, Eliminación física de un Registro del archivo, Búsqueda
de un Registro dado su identificador, Medidas de seguridad sobre los
datos almacenados como el uso de programas autorizados para acceder
a los datos, Obtención de respaldos, Generación de archivos maestros, a
partir de Respaldos y transacciones, internas con las instrucciones del
lenguaje de programación con el usuario.

Organización Secuencial

Es la organización de archivos más simple y usada. Consiste en una lista


con continuidad almacenada en un dispositivo de almacenamiento, que
generalmente son de acceso directo.
La actualización tiene características que podemos considerar como las
siguientes:
• Para archivos secuenciales en disco, el reemplazo de campos de igual
lago puede realizarse sin dificultades, las adiciones y eliminaciones de
Registros intermedios, implica una reescritura del archivo.
• Cuando la volatilidad es baja, no importa mayormente el desempeño
de la organización de archivo respecto a la actualización.
• Para procesamientos al azar la organización secuencial no es muy
conveniente si la búsqueda es lineal, cuando el archivo esta guardado
en disco, es posible realizar el método de búsqueda binaria, que es
mucho más rápida pero requiere tener los registros ordenados y
saber la cantidad de Registros a la hora de realizar la búsqueda.
• El Software de Apoyo es la mejor de todas las Organizaciones. Todos
los modelos de computación con dispositivos de almacenamiento
externo, tienen software para la Organización secuencial.

En la Aplicación se usan lenguajes algorítmicos, con códigos


especialmente dedicados al manejo de archivos:
i) Su Declaración. Un archivo será declarado con algún nombre con
el atributo file, que aceptará otros atributos como secuencial,
indexado, etc., que especificarán su tipo.
ii) Entradas y Salidas. Para realizar operaciones de E/S es necesario
preparar los archivos previamente para ser accedidos, realizando
una operación de open sobre el archivo indicando el modo de
acceso deseado. Ya realizadas todas las operaciones de E/S, se
cerrarán los archivos con una instrucción close o reset,
dependiendo del lenguaje.
iii) Lectura. La lectura tiene la forma Read, Input, Get, etc., seguido
del nombre del archivo o puntero a él y el nombre de una variable
de datos, que será el área indicada por el programador para
almacenar los datos leídos del archivo para su manipulación.
iv) Escritura. Se hará con Write, Output u otra forma de
redireccionar la información que está en el área de memoria
reservada por la variable de memoria al archivo, por ejemplo,
write nombre_archivo from nombre_datos.
v) Fin de Archivo. Las especificaciones de fin de archivo se obtendrán
por medio de la instrucción EOF, BOF, LOF u otra función con
parámetro especificativo del tipo de archivo a tratar, según el
lenguaje y/o el tipo de archivo (un archivo binario es distinto a
uno binario).

Organización Secuencial con Índices

Esta Organización de archivos mantiene las características de la


Organización secuencial con respecto al procesamiento secuencial de
registros pero tiene mejoras significativas con respecto al procesamiento
al azar y a la actualización. Estas ventajas se obtienen pagando con
mayor espacio de almacenamiento y cierta mayor dificultad relativa.
Consideremos la estructura de archivo que debe residir en un dispositivo
de almacenamiento (acceso) directo y está compuesto de las siguientes
áreas de almacenamiento:
Área Principal. Donde se almacenan los registros de datos.
Área de Rebalse u Overflow. Se almacenan nuevos registros agregados.
Área de Índices. Es la memoria usada por el mecanismo de búsqueda.

Los registros almacenados en el área principal están ordenados por


identificador (en ascendencia) y pueden ser accedidos de la misma
manera que los registros en una organización secuencial.

Para el acceso al azar se usa el mecanismo de búsqueda de índices. Un


índice es una lista de pares <identificador, puntero>, en este caso se
aplica como sigue.
Identificador. Es el valor del identificador para el último registro de un
grupo de ellos.
Puntero. Es el nexo al 1° de los registro de este grupo. Por ejemplo.

La búsqueda con un índice es más rápida que la búsqueda de registros


de manera secuencial, por ejemplo, la búsqueda de un registro con
identificador 063, significa hacer 3 comparaciones de una búsqueda
lineal sobre el índice (comparación de 063 con el 023, 031 y 069). Si se
busca un registro que no está almacenado, se detecta a través de la
ordenación de los registros (al ir comparando valores del Id, pasa de un
Id menor al buscado a uno mayor)

Ejercicio. Describir proceso para buscar “035”.

Comparo los índices del archivo de punteros con el valor “035”, es


decir, con “023”, “031” y “063”; como “063” es mayor que “035” paso
a comparar con el primer índice del archivo de registros perteneciente al
grupo de “063”, el cual es accedido por el puntero de “063” en el
archivo de puteros y que apunta a la pista 6; en la pista 6 se encuentra
el Id 032, y como es menor que “035”, paso a la siguiente pista 7 y
comparo “035” con Id 063, y como “035” < “063” entonces el
registro con el Id 035 no existe.

En conclusión, si el Id X buscado es mayor que todos los <Id,


Puntero> del archivo de Punteros, entonces no existe y se ahorra
el proceso de búsqueda en al archivo de <Id, Registro>. Si es
menor o igual que uno de los <Id, Puntero>, entonces se usa el
proceso de búsqueda para <Id, Registro> en el archivo de
registros comparando el Id correspondiente a la pista indicada
por el Puntero con el Id X; si ¿Id X = Id?  ¡¡¡registro
encontrado!!! fin de la búsqueda; sino, si ¿Id X > Id? 
¡¡¡registro No EXISTE!!! fin de la búsqueda; sino, quiere decir
que Id X < Id, por tanto, se compara el siguiente Id de la pista
siguiente de la misma forma.

La idea básica de un índice puede extenderse para tener varios niveles


de índice en archivos jerarquizados, e decir, los punteros de un índice
apuntan al comienzo de otro archivo de índices, el que a su vez, puede
apuntar a un tercer de índices, etc., hasta que los punteros direccional
registros de datos propiamente tales. En un archivo secuencial con
índices almacenados en disco, el nivel más bajo de índice es el índice de
pista, cuyos punteros direccional cada uno de ellos, al grupo de registros
que están almacenados en una pista.
Área Principal

Este
Esquema se
asemeja a
La estructura
De un árbol.

Ahora se examinará el problema de mantención de esta organización.

LA ELIMINACIÓN DE REGISTROS. Se lleva a cabo normalmente


marcando esos registros en un bit determinado, por el cual serán
ignorados posteriormente, pero físicamente su espacio no es
reasignado. El reemplazo de campos no tiene características especiales.

LA ADICIÓN DE REGISTROS. Es más bien compleja ya que la idea no es


tener que recurrir a una reescritura completa del archivo, como es el
caso de la organización secuencial, se usa el área de rebalse para la
inserción de registros intermedios. En ésta área se construye una lista
de registros que en secuencia lógica, va ubicada entre 2 pistas del área
primaria. El comienzo de esta lista se conoce también a partir del índice
de pista:

Cada par <Id, Punt al área primaria>, de este índice tiene además
asociado un par < Id, Punt al área de rebalse>, que apunta al
comienzo de la lista de registros de Overflow que están
lógicamente antes al próximo par < Id, Punt al área primaria >. La
figura siguiente ilustra la situación.
Obsérvese que en el índice quedan ordenados en secuencia tanto los
registros del área principal como los de Overflow; también, nótese que
en el valor de identificador para el par de Overflow cuando no hay R, es
el mismo que el par primario correspondiente.

Ejercicio. Si se introduce un registro con identificador 0096, qué ocurre


con el Overflow.
 Se almacena directo en el Overflow en la pista 11 entre 0094 y 0105.
Observar que la pista 7 se ocupa cuando empieza el archivo de base de
datos (Cuando se actualiza el área principal en la reorganización del
archivo), donde además, se eliminan físicamente los registros marcados
como borrados y se reordenan los registros en el área principal y no hay
lista de rebalse.

El uso del área de rebalse tiene 2 implicancias importantes:


• El acceso secuencial al archivo requiere ahora de todas maneras del
índice, a fin de conocer la dirección de comienzo de la lista de
Overflow. Esto es necesario porque después de acceder los registros
de una pista, se deben procesar los registros de la lista de Overflow
correspondiente. La conclusión es que el procesamiento secuencial en
un archivo secuencial con índices, es más lento que el procesamiento
secuencial correspondiente. En la práctica, la diferencia en tiempo de
ejecución no es grande.
• Después de un periodo de muchas actualizaciones, el proceso es más
bien lento y es conveniente crear una copia nueva del archivo en la
que no haya listas de rebalse ni registros marcados como eliminados.
Este proceso se llama reorganización del archivo.
El almacenamiento de registros, el manejo de reblase, la reorganización,
el acceso secuencial y el acceso al azar (con su respectivo manejo de
índices), son algunas de las labores que realizan los software de apoyo a
la organización secuencial con índices. Estos programas son más
complejos que los de la organización secuencial. Desde el punto de vista
del programador, las instrucciones son simples.

DISPOSITIVOS DE ALMACENAMIENTO

¿Qué Es una unidad de almacenamiento?


Son dispositivos periféricos del sistema que actúan como medio de
soporte para la grabación de los programas de usuario y de los datos y
archivos que son manejados por las aplicaciones que se ejecutan en
estos sistemas.

Por ejemplo, la memoria Ram es un lugar posicional de almacenamiento


para los archivos que Usted usa. La mayoría de la información guardada
en la Ram se borra al apagar el PC. Por tanto, el PC necesita formas de
permanentes de almacenamiento para guardar y recuperar programas
de software y archivo de datos que desee usar a diario. Los dispositivos
de almacenamiento (unidades) fueron creados para satisfacer esta
necesidad. Los siguientes constituyen los dispositivos de
almacenamiento más usados: Discos duros, disquetes, unidades ZIP,
CDs, DVD, etc.

Los dispositivos de almacenamiento magnéticos son aquellos que usan


la propiedad de los metales ferrosos o las cintas cubiertas con este
material. El disco duro es el medio de almacenamiento más importante
de un PC y en él se guardan los archivos de los programas como OS,
hojas de cálculo, procesadores de texto, juegos, etc.

La tecnología IDE (Integrated Drive Electronics) de los discos duros


actuales ha sido mejorada y se le conoce como Enhanced IDE o EIDE,
permitiendo mayor transferencia de datos por segundo. Algunos
fabricantes los denominan como Fast ATA-2, que son más rápidos.

Partes del Disco Duro

Un disco duro se organiza en platos (platters) y en la superficie de cada


una de sus caras existen pistas (tracks) concéntricas como surcos de un
disco de vinilo y las pistas se dividen en sectores. El disco duro tiene un
cabeza (head) en cada cara de cada plato y esta es movida por un
motor servo, cuando busca los datos en una pista y un sector correcto.
Cilindro (Cylinder). Es un parámetro de organización y está conformado
por las pistas concéntricas de cada cara de cada plato que están situada
una sobre la otra, de modo que la cabeza no tiene que moverse para
acceder a las diferenctes pistas de un mismo cilindor.

Organización Lógica. Cuando damos un formato lógico (el físico a bajo


nivel), bien dicho el que viene de fábrica, no es recomendable hacerlo
de nuevo, excepto en casos excepcionales, porque podría inutilizar el
disco, lo que hacemos es agrupar los sectores en unidades de
asignación (clusters) que es en donde se guardan los datos de manera
organizada.

Cada unidad de asignación solo puede ser usada por un archivo (nunca
por dos o más), pero un archivo si puede ocupar más de una unidad de
asignación.
Cuando Usted o el software indican al OS a que deba leer o escribir un
archivo, el OS solicita que el controlador del disco duro traslade los
cabezales de lectura-escritura a la tabla de asignación de archivos
(FAT). El OS lee la FAT para determinar en que parte comienza un
archivo o que partes están disponibles para guardar un nuevo archivo.

Los cabezales escriben datos en los platos al alinear partículas


magnéticas sobre la superficie de estos. Los cabezales leen datos al
detectar las polaridades de las partículas que ya han alineado.

Es posible guardar un archivo en racimos diferentes sobre varios platos


comenzando tonel primer racimo disponible que se encuentra. Después
de que el OS escribe un nuevo archivo en el disco, se graba en una lista
de todos los racimos del archivo en la FAT.

Un computador funciona al ritmo marcado por su componente más lento


y por eso, un disco duro lento, puede hacer al computador vencido en
prestaciones por otro hardware menos equipado en cuanto a procesador
y cantidad de memoria, pues la velocidad del disco duro depende del
tiempo necesario para cargar programas y para recuperar y almacenar
datos.

Velocidades de Rotación (RPM)

Es la velocidad de rotación del disco duro, más exactamente la velocidad


a la que giran en el disco los platos, que es en donde se guardan los
datos magnéticamente. La regla es que a mayor velocidad de rotación,
más alta es la transferencia de datos, pero también será mayor el calor
generado por el disco. Se mide en revoluciones por minuto.

Una velocidad de 5400 RPM permitirá una transferencia de entre 10


MB/Seg y 16 MB/seg para los datos que están en la parte posterior del
cilindro o plato, algo menos en el interior (ya que la velocidad angular
aumenta al crecer el radio de lectura respecto al eje del disco).

Tiempo de Acceso (Access Time)

Es el tiempo medio necesario que tarda el cabezal del disco en acceder a


los datos que necesitamos. Realmente es la suma de varias velocidades:
1.- Tiempo que tarda el disco en cambiar de una cabeza a otra cuando
busca datos.
2.- El tiempo que tarda la cabeza lectora en buscar la pista con los datos
saltando de una a otra.
3.- el tiempo que tarda la cabeza en buscar el sector correcto dentro de
la pista.

Estos son factores relevantes a la hora de escogen un disco duro,


cuando se escucha hacer ligeros clic al disco, es porque está buscando
los datos que hemos pedido.

Los Sistemas de Archivo

Todo dispositivo para el almacenamiento de datos debe ser formateado


antes de su uso; es decir, se le debe dar un cierto formato lógico que
indique como va a ser almacenada la información: el tamaño de los
paquetes, la forma en que se distribuyen los atributos posibles de los
archivos (nombre, tipo, fecha y otras características que definan un tipo
de sistema de archivo concreto).

En el mundo PC, un sistema de archivos puede ser por ejemplo:


FAT16/32, VFAT, NTFS, EXT2, EXT3, etc.

Uno de los sistemas de bastante uso es el FAT32. las ventajas de este


sistema de archivo frente a otros anteriores, radica en que es de 32 bits
y tiene un tamaño de cluster muy pequeño, lo que lo hace capaz de
admitir grandes discos duros y aprovecharlos muy bien, además de no
necesitar artificios como VFAT para usar archivos con nombre largos.

Los cluster son como cajones en que la capacidad del disco duro esta
divida, en los cuales se guardan los archivos. Se da la peculiaridad de
que un cluster no puede ser compartido por 2 archivos, por lo que si
tenemos un cluster de 16 kbytes y queremos guardar un archivo de 17
kbytes, este se repartirá en dos cluster, ocupando el primero los 16
kbytes y el resto del archivo en otro cluster que ocupará 1 kbyte de los
16 que le corresponden y estos cluster se marcarán como ocupados en
la tabla de asignación de archivos (se actualizará la FAT).

Como comprenderá, en estas condiciones resulta muy importante


mantener el tamaño del cluster lo menor posible, para minimizar las
perdidas que ocasionan estos archivos, especialmente los más
pequeños.

Observe la tabla a continuación, la que relaciona el tamaño de las


particiones y el tamaño de los cluster.
PARTICIÓN CLUSTER En la arquitectura X86:
FAT 16 Cluster 220= Direccionamiento de memoria
Hasta 2 GB 32 KB Entonces para 8GB/220 = 8 KB Cluster
Menos de 1.2 GB 16 KB Para 4GB/220 = 4 KB Cluster
Menos de 512 MB 8 KB
Menos de 256 MB 4 KB
Menos de 128 MB 2 KB
FAT32 Cluster
A partir de 8 GB 8 KB
Menos de 8 GB 4 KB

En cuanto al tamaño de los discos, no es para entender el sistema de


archivos, sino su sistema de direcciones de archivo de 16 o 32 bits,
direcciones que en FAT16 serían 216=65536 direcciones en un disco de
2 GB como máximo para FAT16.

¿Quiere decir esto que no podemos usar discos de más de 2 GB? No, ya
que si el disco es de mayor capacidad, podemos dividirlos en dos o más
particiones, que son cada una de las divisiones de un disco, las cuales se
manejan como si fueran discos individuales.

Para FAT32 el cálculo es similar, aunque no se usan los 32 bits, sino


solo 28, lo que da un total de 2048 GB (2 TeraByte) por partición
usando cluster de 8 Kb ([1024kb x 1024mb x 1024gb x 2]/2 28=8 kb).
Sin duda no es hacer más de una partición al disco duro.

Calcular la capacidad con FAT16, el cluster de 16 kb, debería dar para


un disco de menos de 1.2 GB.
216direcciones*16kb=1048576 kb = 1024 MB = 1 GByte de capacidad

Caché del Disco – Tamaño del Buffer

Es la memoria que viene incluida en la controladora interna del disco


duro, de modo que todos los datos que se leen y escriben, se almacenan
primero en el buffer. La regla de memoria aquí es de 128 kb para menos
de 1 GB, 256 kb para más de 1 GB y 512 kb para 2 GB en adelante.
Si un disco duro esta bien organizado la serie de datos que se va a
necesitar a continuación de una lectura, estará situada en una posición
físicamente contigua a la última lectura, por esto los discos duros
almacenan en la caché los datos contiguos para proporcionar una acceso
más veloz sin tener que buscarlos. De ahí la conveniencia de
desfragmentar el disco duro con cierta frecuencia.
El buffer es muy útil cuando se está grabando un disco duro a un CD-
ROM, pero en general, cuanto mayor sea la caché mejor, porque
contribuye de modo importante a la velocidad de búsqueda de datos.

Tasa de Transferencia

Es la cantidad de datos que en un disco se puede leer/escribir en la


parte más exterior del disco en un periodo de 1 segundo, normalmente
se mide en MB/segundo.

Discos Flexibles

Están construidos de material plástico flexible, el cual está cubierto de


material ferromagnético sobre el cual el cabezal graba. Auí se muestra
la estructura de un disco flexible:
Características:

Lados = Superficie superior o


inferior.

Pistas = Círculos concéntricos


longitudinales.

Sectores = Porciones
radiales. Son como un trozo
de torta.

Los datos se graban en el lado, pista y sector especificado en unidades


de localización llamadas cluster. Los cluster en los disquetes son de 512
bytes. Cuando se desea acceder a un cluster, se debe especificar en que
lado, pista y sector se encuentra. El cluster es el mínimo tamaño al que
se puede acceder, por tanto, es el mínimo tamaño que se puede
reservar un archivo en el disquete, aun cuando sea de 1 byte.

Para poder grabar y leer los archivos, se tienen los cabezales. Estos se
componen de un núcleo metálico alrededor del cual se enrolla una
bobina (cables de cobre enrollados en un metal). El núcleo no está
totalmente cerrado ya que tiene un espacio de aire llamado GAP. Este
GAP al estar en contacto en el material ferromagnético del que se
compone el disquete, orienta a los dipolos de una manera tal que los
datos quedan grabados. Para leer, los dipolos magnéticos orientados
que están en el disquete, al pasar cerca del núcleo, producen en la
bovina un voltaje que es entendido como 0 o 1 siendo por tanto leídos
los datos antes grabados.

Para desplazarse de una pista a otra, los cabezales de lectura/escritura,


cuentan con un motor de pasos que puede ser movido en pasos de 1.8°
grados. En el eje de este motor está el mecanismo tipo espiral que
mueve los cabezales.

Para encontrar los sectores, un motor de giro mueve el disquete a una


velocidad de 300 RPM.

Tunelamiento: Para grabar las pistas, el cabezal graba los datos entre
2 pistas de borrado. De esta forma no se producen solapamiento de
datos entre pistas adyacentes.

Conectores

La disquetera tiene 2 conectores: 1° es de 4 cables para la fuente de


alimentación y en 2° es un cable plano para datos y control.

Unidades de CD-R/RW

Existe una gran variedad de ellos. Es necesario entender las diferencias


entre las tecnologías del Lector de CD y los CD-R. entre los tipos de CD,
no todos son creados de igual forma desde un punto de vista de
durabilidad por lo tanto, es importante conocer ciertas características
sobre la longevidad del CD para una mejor elección del producto dentro
de los diferentes tipos y marcas, así como los requerimientos de
almacenamiento que cada CD necesita.

Toda la variedad de CDs comparten ciertas características como la


misma dimensión física, hechos al menos parcialmente de policarbonato
plástico y tienen una capa metálica para refractar el as láser que lee la
información.

Los CDs tienen una ranura espiral microscópica dibujada dentro del
policarbonato plástico, que son tan pequeñas y cercanas unas con otras
que actúan como una rejilla de disfracción. Están creados con líneas
relucientes de colores de arco Iris que emanan de la cabeza central
hacia el exterior en cada superficie del CD. El surco de la espiral es
continua en cada CD grabable, porque es necesario para guiar el láser
durante la escritura.

La mayor diferencia para poder distinguir entre las distintas


fabricaciones de CDs de solo lectura y aquellos regrabables, puede ser a
primera vista: los CD-ROM tienen un color metálico en ambos lados; en
cambio el CD regrabable metálico dorado en la superficie y verde dorado
por el otro lado. El CD grabable en la superficie tiene información
impresa y el otro lado no tiene marcas excepto en el área cercana al
centro. El láser lee el disco desde el lado verde, por tanto, niveles o
daños en esta área dañarán la lectura.

Hay dos tipos de CDs, los que son de solo lectura y los que permiten ser
grabados y son muy diferentes en estructura, materiales y tecnología de
fabricación. Cuando se necesitan una gran cantidad de copias, el CD es
la elección natural y todos los discos serán creados de un mismo
modelo.

El proceso de modelaje usa un disco de policarbonato en su mayor


parte. Este disco modelo tiene un pista espiral de marcas impresas en
uno de sus lados, estas marcas contienen información codificada. Como
el láser en el lector de CD es guiado hacia delante a lo largo de la posta,
es interrumpido por las marcas, y estas interrupciones son decodificadas
en música, texto o imágenes.

Después de que el CDROM deja el molde, es sólo un disco plástico


limpio, con tenues marcas, y si se trata de leer en un lector de CD, el
láser no podrá distinguir entre una marca o un área plana. Es por esto
que el CDROM debe tener una capa metálica plateada. La cubierta
metálica en la superficie es la que reflecta y hace rebotar la luz láser
dentro del censor de luz. Cuando el rayo encuentra una marca, este es
reflectado.

La capa metálica de reflexión es el problema de la durabilidad del CD. La


tecnología del CDROM que es desarrollada a partir de los 80 es más
antigua que la del CD-R. Como todo nuevo producto, hay lecciones
aprendidas e incorporadas en la nueva fabricación. La capa de reflexión
era un ejemplo claro; actualmente en el CDROM la capa es de aluminio
o aleación de cromo-aluminio, no de plata. El metal es aplicado a la cara
de las marcas del modelo de disco de policarbonato por medio de una
capa de renqueo donde átomos de metal son depositados como una
delgada película semitransparente usando una cámara al vacío.

DVD

Disco Versátil Digital o de Video Digital es un dispositivo de


almacenamiento masivo de datos cuyo aspecto es idéntico al del CD,
aunque tiene hasta 125 veces más capacidad y puede transmitir al PC
unas 200 veces más veloz que el CD. Su mayor capacidad de
almacenamiento se debe entre otras cosas, a que pueden grabarse
ambas caras del disco y en algunos casos hasta 2 capas por cada cara;
mientras tanto el CD admite 1 cara y 1 capa.

Todos los DVD tienen la misma forma física y tamaño, pero difieren en
el formato de almacenamiento de los datos y en consecuencia en su
capacidad. Así, los DVD-Video de 1 cara y 1 capa almacenan 4.7 GB y
los DVD-ROM de 2 cara y 2 capa almacenan hasta 17 GB. Del mismo
modo no todos los DVD se pueden reproducir en cualquier lector, por
ejemplo; un DVD-Video no puede leer un DVD-ROM, aunque si al revés.

Por supuesto los lectores de CD y unidades de DVD disponen de un


láser, ya que la lectura de información se hace por procesos ópticos.
Existen las unidades de sólo lectura o de lectura y escritura.

Soporte Capacidad Dur. Audio Dur. Video Equivalencia en CD650


CD 650/700MB 74-80 min. 15-16 min. 1
DVD
1cara 4.7GB 9h 30m 2h 15m 7
1capa
DVD
1cara 8.7GB 17h 30m 4 horas 13
2capas
DVD
2caras 9.4GB 19 horas 4h 30m 14
1capa
DVD
2caras 17GB 35 horas 8 horas 26
2capas

Memorias Flash

Son dispositivos de almacenamiento que ofrecen gran versatilidad y


seguridad además de comodidad, ya que su tamaño no supera al de un
llavero grande y su capacidad de almacenamiento hace que estos
llaveros sean una buena elección a la hora de elegir un dispositivo para
transportar información rápido y con seguridad.

Utilizan el puerto USB aprovechando muy bien su alta taza de


transferencia como la que se da en la versión 2.0 que soporta la 1.0.

En cuanto a capacidad existen de 16/32/64/128/256/512 MB y hasta


versiones superiores a 2GB. Utiliza la tecnología PnP (Plug & Play), que
hace posible que con solo conectar el dispositivo este sea reconocido y
disponible para operar con él.

Unidad IV. Tecnologías De Búsqueda de Datos

Búsqueda Lineal

El método más simple búsqueda es leer consecutivamente un nodo tras


otro hasta que coincida el valor buscado con el valor del identificador del
nodo buscado y; en el caso de que no exista un valor como el buscado
en el conjunto de datos, la búsqueda finaliza cuando se han examinado
todos los nodos (que pueden estar almacenados en forma
desordenada). Esta técnica se llama Scanning o Búsqueda Lineal.

Máximo de comparaciones: n + 1

Suponiendo que el valor buscado existe como el valor de identificador en


el conjunto de datos, el número promedio de nodos examinados es
[n+1]/2 para nodos o registros de 1 a n.

1 2 3 4 5 6 7

Para ¿8?
Máximo de comparaciones = 7
Mínimo de comparaciones =1
Promedio de comparaciones = [7+1]/2=4

La búsqueda lineal tiene como ventaja su sencillez y cuando n es


pequeño, es la forma más recomendable de realizar la búsqueda.
Búsqueda Binaria

Exige que los nodos estén ordenados por su identificador al momento de


realizar la búsqueda y para fijar ideas, por valores ascendentes, es
decir, un nodo cuyo valor de identificador es menor que el valor de
identificador de otro nodo, está posicionado antes que este. También
supongamos que el número de nodos es una potencia de 2-1, es decir,
N = 2J-1 para todo J ∈ Z+.

La búsqueda binaria consiste en comparar un valor dado con el valor de


identificador del nodo, posicionado en [n+1]/2 tomado las siguientes
decisiones:

- Si ambos valores son iguales, entonces la búsqueda ha terminado.


- Si el valor buscado es menor que el valor dado, puesto que los nodos
están ordenados, se debe buscar en la primera mitad del conjunto, para
lo cual se compara el valor buscado con el identificador del nodo
posicionado en [n+1]/4.
- Si el valor buscado es mayor que el valor dado, se debe buscar en la
segunda mitad del conjunto, para lo cual se compara el valor buscado
con el identificador del nodo posicionado en ¾[n+1].

Consideremos la figura anterior donde se ha generado un árbol de


decisiones para las comparaciones de identificador de 15 nodos. En cada
bifurcación, una rama ascendente significa que el valor buscado es
menor que el comparado y una descendente que es mayor. El resultado
es un Árbol Binario que no se almacena (no es una estructura de datos),
sino que representa el algoritmo de búsqueda. Tiene la siguiente
formalización:
• V1, V2, …, Vn son los valores de los identificadores de los n nodos
con V1<V2<V3…<Vn.
• Val es el valor buscado.
• Inf, Sup y J son punteros o índices.

// Contraste el programa con la figura anterior


#define exito=1
#define fracaso=0

void Función BusqBin (V, Val, N) {


Inf=1;
Sup=N;
while (Inf<=Sup) {
J=(Inf+Sup)/2
if(V[J]==Val) return(exito);
if(V[J]<Val) {
Inf=J+1;
Sup=J-1;
}
}
return(fracaso);
}

Para determinar el número promedio de comparaciones, observemos la


figura anterior, hay un elemento que requiere 1 comparación (el 8 para
este caso); 2 que requieren 2 comparaciones (4 y 12); y 4 que
requieren 3 comparaciones (2, 6, 10, 14); y en general, 2J
comparaciones que necesitan J comparaciones, así el promedio de
comparaciones serán:

[Log2 N]  sería el J máximo


1 Log 2 N J
P= ∑2 J
N J =2
Donde [Log2 N] es el mayor entero menor o igual a Log 2 N; puede
escribirse P = [[[Log2 N]-1] * [N + 1]+2]

Si N es muy grande entonces P ≈ [Log2 N]-1

En la discusión anterior, N fue siempre una potencia de 2-1. Cuando N


es cualquier entero, una manera de seguir usando la búsqueda binaria
representada es agregar nodos de relleno en el conjunto de datos a fin
de que N cumpla la condición buscada. Esta solución aunque simple no
es práctica cuando N es grande, la mejor solución es reemplazar la
instrucción de asignación del índice J del algoritmo de Búsqueda Binaria
por J = int [ [ Inf + Sup ] /2 ].

Usando este algoritmo también el N promedio de comparaciones es del


orden [Log2 N] para N muy grande.

N = 15  P = [Log2 N]
P = [Log2 15]
P=3

Ahora formulas para N chicos.

N = 15  P = 1/15 * (([Log2 15]-1) * (15+1)+2)


P = 1/15 * ((3-1) * (16)+2)
P = 1/15 * (2*16+2)
P = 34/15 = 2.266

Para visualizar el número promedio de comparaciones (P) de este


método y el método de búsqueda lineal veamos la siguiente tabla:
N Búsq. Lineal (N/2) Búsq. Binaria (Log2 N)
10 5 3
100 50 6
1000 500 9
10000 5000 13
100000 50000 16
1000000 500000 19
10000000 5000000 23

Desventajas de la Búsqueda Binaria

El algoritmo es más complejo que el correspondiente a la búsqueda


lineal y además los nodos deben estar ordenados, lo que ocupa tiempo.
Si hay adiciones y eliminaciones de nodos, normalmente debe
procederse a reordenar los nodos.

Existe una alternativa de la búsqueda binaria utilizando tabla. Se deben


ordenar los pares <identificador, puntero>. De acuerdo 2 valores
ascendentes del identificador (o descendentes), enseguida se busca en
la tabla con búsqueda binaria y, una vez encontrado el identificador del
valor buscado, se accede al nodo de datos correspondientes usando el
puntero índice asociado.
Este método permite que los nodos estén almacenados en cualquier
forma, hacer reordenamientos de cuando no se use la tabla. Esto ultimo
porque solo se necesita reordenar los pares <identificados, puntero> de
la tabla que normalmente son más pequeños en número de Word (2
Bytes) que los nodos de datos mismos y por lo tanto el cambiarlos de
ubicación es más rápido.

El uso de tabla implica un uso adicional de almacenamiento que se


requiere para guardar los nodos de datos. Si se hace búsqueda muy
frecuentemente por varios identificadores diferentes, puede construirse
tabla para cada uno de los identificadores, lográndose un tiempo de
acceso pequeño a los datos a un costo de almacenamiento extra
requerido para guardar cada una de las tablas.

Organización Directa

Esta Organización de Archivos que también se denomina Organización al


Azar, es una implementación de las técnicas de Hashing en memoria
secundaria de acceso directo. La aplicación inmediata es entonces
procedimiento al azar.

Explicación de una búsqueda usando Hashing

Supongamos un factor de carga de 1.00 de conjunto de datos y además


que N =100 y el valor del identificador que este en el rango 2741 a
2840. Entonces, una manera simple de buscar un nodo cuyo
identificador sea igual T, en esta situación es buscar el nodo de
memoria señalado por f(T)=T-2740.

Observación
Donde N = número de nodos
L = Largo de cada Nodo (Bytes o Words)
M = Memoria disponible (M posiciones)
La cantidad (M*L)/M se llama factor de carga del conjunto de datos y
representa la función de nodos activos del total de nodos posibles de
almacenar en la memoria.

Ejemplo, si tenemos identificador T = 2752 -> f(2752)=2752-2740=12

Este ejemplo sencillo es un caso particular de un poderoso método de


búsqueda llamado Hashing, que consiste brevemente en obtener una
dirección (o número de nodo, índice, etc.) a partir del valor del
identificador, usando una función o transformación de Hashing f.

En la discusión que sigue, consideramos la memoria disponible en


ternito de nodos que puede contener: P = M/L. la función Hashing f será
f(T) tal que al aplicarla sobre un valor de identificador T, entonces
f(T)=d, donde 0<=d<=P-1.

En otras palabras definimos P de tal modo que las direcciones estén en


el rango de 0 a P-1 en la memoria (nodo0, nodo1… nodo P-1).

El caso más general es aquel que el identificador tiene un rango de


variación posible V número mayor que el número de valores de
identificador realmente presentes en el conjunto de datos. Por ejemplo,
si el identificador es el número de empleados en un conjunto de datos
de personal y este es de 6 dígitos, entonces hay 106 valores posibles de
000000 al 999999 (se acepta del 0 al 9, por eso es 10 6); en
circunstancias en que la cantidad de empleados es mucho menor.

En este caso no se deja almacenamiento para contener V nodos, sino


que una cantidad un poco mayor que la necesaria para contener los
nodos presentes (activos). En otras palabras, el Factor de Carga es un
poco menor que 1.00.

• Factor de carga: [N*L]/M donde


N = Cantidad de nodos
L = Longitud de cada nodo
M = Memoria principal

• Cantidad de nodos en memoria: P=M/L nodos


• Función de Hashing que ocupa las P direcciones:
f(t)=d donde 0<=d<=P-1

Ejemplo. Si los números de empleados de una empresa son de 6 dígitos,


e inicialmente 99 empleados tenían los números 010000, 020000,
030000… 990000, entonces una función de Hashing simple de una
memoria de P = 120 nodos es:
f(t)=INT[t/10000]

Pero puede suceder que ingresen nuevos nodos empleados, si a un


empleado se le asigna el número 505000, entonces la aplicación de la
función anterior da: f(505000)=INT(505000/10000)=50, y este
valor es idéntico para el nodo correspondiente al empleado número
500000, por tanto el nodo de memoria 50 tiene dos nodos de datos
asociados a él.

Cuando hay valores de identificados que tienen el mismo valor de la


función Hashing, se dice que estos valores de identificador son
sinónimos y que tienen una colisión en el valor de la función Hashing.

Toda técnica de Búsqueda por Hashing tiene 2 aspectos que requieren


mayor estudio:

- La determinación de la función Hashing f es un caso específico.


- El mecanismo de resolución y manejo de sinónimos bajo una función
de Hashing.

Una buena función Hashing debe provocar un número pequeño de


colisiones. Por supuesto, esto depende de la función estadística y
probabilística de los valores activos del identificador sobre los valores
posibles.

La distribución de valores de identificador más sencilla es la uniforme.


Desafortunadamente no son únicos los casos en que los identificadores
siguen esta distribución; es más frecuente el caso de los valores
aglutinados en grupos. Por ejemplo, en el caso de empleados visto
anteriormente puede que se le asignen los primeros 3 dígitos para
designar el departamento en el que se desempeña y el siguiente dígito
para el sexo; así habrá varios empleados con los primeros 4 dígitos
iguales, lo cual es muy difícil cuando una distribución es uniforme.

Una función de Hashing aritmética (+ - / etc.) no siempre puede


aplicarse directamente sobre el identificador. Es necesario hacer muchas
veces una transformación previa del tipo de dato, a fin de poder realizar
aritmética. En algunos casos un carácter de 16 bits puede ser necesario
convertirlo a 2 dígitos octales y enseguida agregar 1 bits a cada uno,
para obtener 2 dígitos decimales, a fin de realizar aritmética decimal o;
en otros caso, puede requerirse la conversión decimal a binario.
División  También sirve para sacar el resto. Ej. Con el entero primo 7.

21:7=3 22:7=3 23:7=3 24:7=3 25:7=3


0// 1// 2// 3// 4//

7 Direcciones, el último sería 7-1=6. Da la vuelta el número entero


menos 1.

La división consiste en dividir el valor del identificador por P, y usar el


Mod (resto) como dirección. Resulta que con ésta función valores
consecutivos del identificador producen restos consecutivos después de
dividirlos por cualquier puntero P, considerando que el 0 sigue al P-1.

Mientras haya menos de P valores consecutivos del identificador en una


secuencia, esto significa que todos los restos que se obtienen en esa
secuencia son distintos. Los mismo es cierto para una ejecución en la
que valores sucesivos están separados por una constante C (C>1),
siempre que P y C sean primos relativos (es decir, no tengan factores
comunes mayores que 1).
Ej.
7 y 2  Primos relativos.
7 y 14  No primos relativos.

El mejor número para hacer una división es un número Primo.

La siguiente tabla ilustra esto mostrando restos después de dividir


números de 3 dígitos por 19.

Ejemplo de uso de divisor como función Hashing (divisor = 19).

Identidad | Resto | Ident. | Resto | Ident. | Resto


-------------------------------------------------------------------
101 | 6 | 150 | 17 | 550 | 18
102 | 7 | 200 | 10 | 600 | 11
103 | 8 | 250 |3 | 650 |4
104 | 9 | 300 | 15 | 700 | 16
105 | 10 | 350 |8 | 750 |9
106 | 11 | 400 |1 | 800 |2
107 | 12 | 450 | 13 | 850 | 14
108 | 13 | 500 |6 | 900 |7

Todavía existe el problema de las secuencias distintas de valores que


tienen n colisiones (101 con 500). Si los puntos de comienzo de 2
secuencias difieren en una constante S, sus direcciones obtenidas con la
función Hashing no coincidirán, siempre que S con tenga factor común
con P. de esta manera existirán a lo más colisiones parciales entre las
direcciones obtenidas de las 2 secuencias de valores de identificador. Ya
que las colisiones no pueden ser evitadas completamente, de todas
maneras habrá algunas direcciones duplicadas, distribuidas
irregularmente.

Con esta discusión podemos concluir que normalmente un número


primo debe elegirse como divisor P. de esta manera, si C y S no pueden
tener factor común a P, a menos que sea P mismo. En la práctica sería
muy raro que el conjunto de identificadores activos tuviera separación
sistemática en valores que fuesen múltiplos de números primos
grandes. Los esquemas de clasificación usualmente producen
separaciones que son pequeños múltiplos de alguna potencia de 2 o 10,
y por tanto, no son múltiplos de ningún número primo grande. Ahora P
es el tamaño de memoria disponible (P en cantidad de nodos), que
usualmente es un dato y un número múltiplo de 10, lo que se hace en
este caso es tomar un primo cercano a esta cantidad y ligeramente
menor, por ejemplo; si hay 10000 nodos de memoria disponible, P
puede elegirse como el primo 9973, lo que deja 27 nodos no usados.

No siempre todos los primos son la mejor elección como divisores. Por
ejemplo, los primos de la forma K*Rn±1 (K constante y R base). Deben
evitarse para valores de identificador cuya base numérica es R
(normalmente 2 o 10), siendo K un entero pequeño porque observando
la expansión binomial de (Rn±1)-1, el resto después de la división es
esencialmente una superposición de grupos sucesivos de n dígitos del
dividendo, y esta superposición sistemática se mantiene para un K>1
pequeño. Así para valores de identificadores en el rango de 102 y 105,
primos 101, 199, 301, 401, 499, 599, 4999, 90001 no son buenos
divisores.

Otra función de Hashing es la truncación de valores decimales. Cuando


se utilizan los n últimos dígitos, esto equivale a dividir por 10n y guardar
el resto. Si los valores activos son enteros consecutivos, con solo unos
pocos actos, la truncación puede ser mejor que la división porque es la
más rápida en la mayoría de los computadores. Sin embargo, con un
conjunto de valores más irregular el divisor 10n se compara muy
desfavorablemente con un primo de valor cercano.
Ej.:

0347:102=3.47 => Truncar (3.47)=3


Otro método es el de doblar valores de identificador (Folding), como
función de Hashing consistiendo en separar un identificador largo en
grupos de menor largo, y sumar los dígitos que corresponden
posicionalmente, por ejemplo; el número decimal 34495283 puede
separarse en 2 grupos: 3449 y 5283, sumando unidades con unidades,
decenas con decenas, etc., nos queda 8732. lo mismo puede hacerse
con dígitos binarios. La cantidad de 16 bits siguientes
1010110011000101 puede dividirse en 2 grupos de 8 bits 10101100 y
11000101 que al sumarse y descartarse en primer bits resulta
01110001. Esta técnica introduce una buena cantidad de aleatoriedad
en el resultado y por tanto, aumenta un poco las probabilidades de
colisiones al compararla con la división, pero es una alternativa que
generalmente produce una buena distribución.

Mecanismos de manejo de sinónimos (Colisiones)

Cualquiera sea la función de Hashing siempre se producirán, al menos


eventualmente sinónimos, si V < P. el mecanismo de manejo de
sinónimos debe proveer modo de almacenar los nodos sinónimos y una
manera de recuperarlos.

Un primer enfoque es usar el método de encadenamiento (Chaining)


que consiste en unir a través de una lista lineal, almacenada con nexos
todos los sinónimos de cada nodo de memoria. En la figura siguiente se
ilustra la disposición típica de la memoria:

Un área principal, donde se almacenan los nodos de datos usando la


función Hashing como dirección y un área secundaria o de Overflow,
donde la administración de memoria disponible se hace con lista de
espacio disponible (DIPS). En la figura se muestra un ejemplo en la que
el identificador tiene 3 dígitos decimales de longitud y la función de
Hashing es la siguiente.

 I N T ( Xs ix</ 11 00 )=
f (x) = 
 1 1 d oe t mr o o d o
El mecanismo de almacenamiento es como sigue:

- Se obtiene una dirección aplicando la función Hashing sobre el


identificador.
- Si el nodo de memoria con esa dirección esta desocupado, se
almacena ahí el nuevo nodo de datos.
- En caso contrario, se almacena el nuevo nodo de datos en el área de
Overflow (tomando un nodo de memoria desde la lista DISP)m y se
actualiza a la parte NEXO del último nodo de la lista de nodos de
datos si son sinónimos con el que esta siendo insertado.

Por ejemplo, en la figura anterior si se va a insertar un nodo con


identificador 039, el nodo de memoria 16 tendrá el contenido, los cual
se muestra en la figura anterior, y la parte NEXO R del nodo de
memoria 3 guardará la dirección 16.

El mecanismo de recuperación de datos es similar al de


almacenamiento:

- se examinan los elementos de la lista de sinónimos correspondientes


al nodo de memoria que es diseccionado al aplicar sobre el
identificador buscado la función Hashing. Esta búsqueda lineal
concluye cuando se encuentra el nodo esperado o hasta obtiene el
final de la lista.

Con estos mecanismos y la lista DISP, la inserción y eliminación de


nodos de datos es simple. Para saber, si un nodo de memoria en el área
principal esta ocupado, se puede hacer uso de un bits especial destinado
a este propósito o bien puede seguirse alguna convención cuando el
nodo esta desocupado. Un ejemplo de esto último es colocar la parte
identificador del nodo rellena con “blancos”.

Resumiendo, la técnica de Chaining es simple y permite realizar


adiciones y eliminaciones de nodos de datos sin mayor dificultad.
La alternativa de encadenamiento se llama direccionamiento abierto y
tiene diversas variantes. En general, consiste en intentar buscar un
segundo nodo de memoria si el primero después de aplicar la función
Hashing esta ocupado por otro nodo de datos en forma precisa. El
direccionamiento abierto se define como:

FK(t)={F(t)+ r(K)} Mod P

FK(t)= Es la dirección en donde se intentará buscar (para almacenar o


recuperar) el identificador cuyo valor esté después de K-1 intentos
infructuosos previos.
F(t)= Función de Hashing.
r(K)= Es un termino que depende de la técnica específica que se esté
aplicando.
P = Es el número de nodos de memoria disponible:
P = Mem. Disponible / Tamaño 1 nodo

Con el direccionamiento abierto se intenta encontrar el nodo buscado


hasta que se verifica un valor de identificador igual al que de búsqueda
o hasta que se encuentra un nodo desocupado. El algoritmo de
búsqueda para un valor P es el siguiente:

Función Dirección_Abierta(t)
Begin
J=F(t);
K=0;
Mientras Nodo[J]<>NULL hacer
Begin
Si T== Nodo[J] Entonces
Retorno(Exito);

/* Aquí se verifica si se revisaron todos los nodos de datos*/


Si Fin_Lista() Entonces
Begin
Overflow();
K=K+1;
J= FK(t);
End;
End;
Retorno(Fracaso);
End.

Aplicación de las funciones de Hashing en una Organización


Directa de Archivos

La Organización Directa de Archivos es la implementación de las


técnicas de Hashing en memoria secundaria de acceso directo, la
aplicación inmediata es:

- Procesamiento al Azar:

A diferencia de la memoria principal, en los dispositivos de acceso


directo el direccionamiento no es continuo, entonces para resolver
esta dificultad, los OS usualmente proveen software que traduce
direcciones “relativas” a físicas reales. Este direccionamiento relativo
permite definir direcciones continuas de bloques (nodos de memoria).

La función de Hashing (Método de Aleatoriedad) usadas son las misma


vistas anteriormente.

En la práctica las más usadas son las divisiones con resto y la extracción
de dígitos determinados del identificador. Debido a las características
particulares de cada aplicación, no existe software de uso visto que
realice la función de Hashing de esta manera, usualmente es el
programador quien debe seleccionar una técnica y además programarla.
Las mismas técnicas de repetir programación se encuentran en el
mecanismo de manejo de sinónimos.

El programador debe escribir el software que contiene la búsqueda en


caso recolisión; sin embargo, en algunos sistemas de provee un
direccionamiento abierto automático.

Un aspecto interesante en relación con el manejo de sinónimos es la


determinación del tamaño y bloque, si este tamaño es mayor que un
registro, entonces se puede tener una holgura automática a nivel de
cada bloque, por ejemplo, en la siguiente figura se tiene que en cada
bloque se tiene espacio para 3 registros; existirán sinónimos conflictivos
sólo cuando se hayan ocupado los espacios del bloque. Si se introduce el
registro con identificador 002, al que le corresponde bloque 0 por una
función de Hashing particular, esto no ocasionará problema porque una
búsqueda lineal trivial le asignará el segundo espacio en el bloque 0.
Esto también conviene desde el punto de vista de la eficiencia en E/S,
puesto que, en una sola operación se tiene en memoria principal el
registro buscado (el bloque es la unidad de memoria sobre la que se
realizan las transferencias) desde y hacia la memoria principal.

El método usual de procesamiento con la Organización Directa es el


Procesamiento al Azar, ya sea para actualizar, leer o borrar registros.
Por supuesto muchos de estos procesos requieren el uso de subrutinas
que realizan la función Hashing y el manejo de sinónimos. La
Organización Directa es adecuada al procesamiento On-Line a archivos
de consulta que no son muy volátiles, además en general, cuando se
requiere una alta eficiencia en el tiempo de ejecución, el factor de carga
debe ser relativamente bajo, lo que implica un uso adicional de espacio
de almacenamiento que usualmente es comparable con el requerido por
la Organización Secuencial con Índices.

En resumen la Organización Directa está orientada al Procesamiento al


Azar y como tal esta basada en el Método de Búsqueda de Hashing. La
eficiencia de los algoritmos de Hashing y de manejo de sinónimos es
gradualmente responsabilidad del programador.

Al comparar Organizaciones Secuenciales con Índices y Directo, se


puede mencionar que para el procesamiento al Azar la Organización
Secuencial con Índices es más lenta que la Organización Directa, pero
más rápida para Procesamiento Secuencial.
B-TREES

Es una organización de archivo que permite acceso al azar y secuencial,


basada en el uso de Árboles de Búsqueda. Consideremos un pequeño
recuadro con Árboles de Búsqueda.

- La idea básica es construir un árbol con los nodos de datos y


enseguida realizar una búsqueda en esta estructura; en los nodos del
árbol se almacenan respectivamente los nodos de datos.

El siguiente Árbol Binario ejemplifica esta técnica. Los nodos de datos


contienen nombres tomados de un diccionario de términos de
computación y la pagina correspondiente donde esta definida.

El Árbol se construye de la siguiente manera:

1°- Si el identificador < nodo raíz => almacenar en subárbol


izquierdo.
2°- Si el identificador > nodo raíz => almacenar en subárbol derecho.
3°- Enseguida se compara con el identificador en el segundo nivel
(“Algo” “Overflow”) en la figura y se aplica el 1° o 2° paso hasta
que se encuentra un nodo vacío.

Ejemplo. Para almacenar el nodo Key | 171, la comparación con


el nodo raíz, determina que se debe almacenar en el subárbol
derecho de “DEVICE”; al comparar con “Overflow” se determina
que se debe almacenar en el subárbol izquierdo; con “Fosdic” en
el subárbol derecho; y con “Lag” en el subárbol izquierdo;
llegándose a que debe guardarse en un nodo dependiente a la
izquierda “Lace”. La Búsqueda para modificar o eliminar nodos se
realiza de la misma manera.
Observemos que en árbol anterior recorriéndolo en Pre-Orden, se
recuperan los nodos ordenados por identificador. También, que la
manera en que quedan almacenados los nodos depende del orden en
que fueron insertados.

El árbol de búsqueda no necesita se binario. A continuación veremos un


gráfico que ilustra un nodo de un árbol que tiene 2D nodos y 2D+1
punteros. La búsqueda en este tipo de árboles es como sigue:

El identificador buscado es comparado con el primero almacenado


en el nodo raíz; si es menor se sigue el primer puntero; si es mayor se
comparará el identificador con el segundo almacenado, etc.

Otra variación importante con respecto al árbol de búsqueda


esquematizado en el ejemplo anterior se refiere a las características de
Balanceo. Un Árbol de Búsqueda No Balanceado tiene algunas
trayectorias de la raíz al nodo terminal más largo que otros; en cambio,
un Si Balanceado tiene todas estas características de trayectoria de
mismo largo. La siguiente figura ilustra un árbol Balanceado.

La Búsqueda en un Árbol Balanceado tiene la ventaja de que está


garantizado un número pequeño de nodos del árbol. Para acceder
cualquier nodo de datos:

Si el árbol tiene n nodos con 2D nodos de datos cada uno, el árbol tiene
Log D N niveles (donde n es el número de nodos de datos). Por tanto
para acceder cualquier nodo de datos se necesita consultar a lo más
Log D N nodos del árbol.

En compensación por esta ventaja, un árbol Balanceado requiere que los


procesos de mantención (inserción y eliminación) sean más complejos.

Por ejemplo, durante la inserción si el nodo del árbol en el cual


correspondería agregar el dato un nodo AVL contiene entre D y 2D
nodos de datos, entonces se divide el nodo del árbol en 2 y se incluye
un nodo de datos y puntero correspondiente al nodo padre; este a su
vez puede tener división, etc., llegando este proceso de división
eventualmente hasta la raíz.

La siguiente figura ilustra un ejemplo en el que se inserta el nodo de


datos “LAD” en el árbol de la anterior figura que quedaría como:

El Árbol de Búsqueda Balanceado fue llamado B-TREE por sus creadores


R. Bayer y E. McCreight. Se han propuesto diversas variaciones de la
idea básica, siendo una de las más importantes la de Knut denominada
“B+-TREE”.

Un “B+-TREE” consiste en 2 áreas:

- Un Índice, que es un B-TREE.


- Un área donde están los nodos de datos ligados por nexos.

El hecho de que los nodos de datos estén ligados en secuencial hace que
el acceso secuencial a los nodos sea muy eficiente. El Índice por su
parte, es usado para acceder al Azar. Veamos la siguiente figura de un
B+-TREE:
ESTRUCTURA DE ARCHIVOS – OTRA TEORIA ANEXA

ARCHIVO SECUENCIAL

Al llegar al Flag, se pasa al siguiente dato en forma


secuencial. Los DATA son conjunto de caracteres
alfanuméricos.

Hay dos formas de manipulación para DATA 1.

- Estática: Para los datos con longitud de bytes fija, definida


internamente en la programación de la estructura, como se muestra
en la siguiente ilustración:

30  Nombre
12  Rut

- Dinámica: Para los datos con longitud variable en la que se busca un


separador o delimitador de campo. Por ejemplo el carácter # para la
siguiente ilustración:

Nombre # Fono

Con respecto a la seguridad.


- Dinámico: Bajo nivel de seguridad (Any access).

ARCHIVO INDEXADO

Su largo de registro va desde el más pequeño de 2500 pero hay hasta


de 10000. Son seguros, las búsquedas son más rápidas y optimizan la
utilización de la memoria. Para almacenar o acceder a un archivo
indexado es necesario tener la Mascara de las estructura para no
corromperlo, por ejemplo:

Mascara (FDL)
Nombre (30)
Apellido (20)
Rut (12)
Teléfono (02)
Seguridad
Owner  Eddie (Dueño original)
[Cuenta/Máquina]

Define LA cuenta a la cual este archivo pertenece y en la cual tiene


permitido correr. También tiene la lista de usuarios que puedan
tener algún tipo de acceso a él.

ID  [136,100] Es la cuenta asociada al grupo de trabajo (dominio)


136.

Esta es la seguridad de un indexado, que guarda los datos de quien lo


creó y el dominio al cual pertenece que es otorgado por el OS que
establece comunicación con el indexado al hacer Login una cuenta.

Desventajas:
- El uso de este tipo de archivos no es de bajo costo porque depende
de la plataforma en que esté soportada (UNIS, OPEN VMS, VMS,
etc.).
- Su largo de registro está determinado por la plataforma en que se
utilice (capacidad finita de largo de registro).
- Menos versátil.

Violación de seguridad

Si se abre un indexado con un editor de texto y le agrego datos


(corromper archivo), el sistema los transforma en secuencial para no
perder datos.

Investigar que es la Máscara o un FDL (File Description Lenguage). AL


parecer como antecedente este busca el marcador delimitador y lo
compara con tas tablas que posee y además es posible que con la
Mascara recupere la información para dejarlo como archivo indexado.
También crea un LOG de las cuentas. ***AVERIGUARLO***

Máscara o FDL (File Description Location)

- Si se modifica la estructura interna de un indexado, este se corrompe


y no se puede tener acceso a él con el FDL.
- Cuando se hace un “Analizer” a un indexado, me generará la
máscara de la estructura para acceder a él.
- Si le hago Analizar a un TXR plano, me generará otro archivo al que
se le puede aplicar Convert.

CRUCE DE ARCHIVOS

Para un Cruce de Archivos lo primero que se debe hacer es conservar un


campo clave (común a los archivos), que será la llave para el cruzar los
archivos y provocar la carga del archivo cruzado resultante, el cual se
accederá a través de este campo clave. El archivo resultante puede
tener 1 o más campos comunes a los archivos de origen, sin que sea
necesario que todos sean la llave(es un caso que se debe evaluar según
los requerimientos). Consideraciones:
- En el cruce, lo primero que se debe hacer es conservar la Llave.
- La Llave o Clave de acceso puede ser 1 o N campos.
- Los archivos a cruzar pueden ser 2 o más (siempre que estén
relacionados).
- El cruce es independiente del formato

En la siguiente figura se ilustra un Cruce:

REQUERIMIENTOS DE SOFTWARE

1° Validación

Es un requerimiento o pauta que solicita el usuario. Ej.:

Se pide el perímetro de una circunferencia que es 2*pi*R. esto


implica que se debe validar con cuantos decimales se trabajará pi
y R y el tipo del resultado.

La verificación le corresponde al que da la solución y cosiste en validar


los tipos de datos que se ingresan (input) y las salidas (output) y por
que periféricos, por ejemplo, si son numéricos no se admiten entradas
alfanuméricas.
2° Caja Blanca y Negra. LA Blanca Corresponde al código del
programa.

La Caja Negra. Significa que el código realice la tarea para la cual tiene
fin. También debe cumplir con las operaciones de orden y las
condiciones de excepción o interrupciones que obedecen al OS (manejo
de eventos como si la impresora esta apagada al imprimir comunicar un
“error externo de hardware y/o OS”).

3° Integración

Es el OS donde esta instalado el programa, en el que no debe crear


conflictos al instalarse o desinstalarse con los programas vecinos, es
decir, no usar bibliotecas compartidas (pueden provocar errores al
desinstalar).

CASOS REPRESENTATIVOS

Un negocio con Stock = [neumáticos, lubricantes, aceites]

Preguntas:
- Numero stock crítico.
- Detalles varios.
- 3 Operadores más 1 administrador.

Otras opciones:

Linux y OPEN VMS pueden trabajar con archivos indexados.


Un Inyector puede traspasar archivos de un OS a otro. Por lo general es
Fullduplex.

Seguridad:
- Si Access se corrompe, si el OS es inestable (tiene errores) o falla el
hardware de disco duro, se debe tener un ADM gemelo que respalde
los datos. Siempre hay que tener una política de respaldo y un plan
de contingencia. Por ejemplo, un PC Servidor como Isla que contiene
una base de datos común con PC ADM para los mismos puntos de
ventas.

- Para que Access no tenga recursos compartidos con otros programas,


se puede probar renombrándolo.

- Los PC1, PC23 PC3 (vendedores), no deben tener acceso a Internet


porque si hay un hoyo en la seguridad hay riesgos de ataques.
Tienen que trabajar como Workstation pidiendo Login y Clave de
acceso y que entren a un asistente cerrado que solo está conectado
con el ADM y pueda descargar cosas solo de la base de datos.

- El ADM y ADM 2 deben estar con todos los parches de seguridad.

- Si los Workstation están conectados al ADM y se modifican los datos


en una Workstation reflejándose los datos (actualizándose) en el
ADM, esto quiere decir entonces que están conectados On-Line, por
lo que también deberán actualizarse los datos en las demás
Workstation. Si sucede un error al modificar, el servidor deberá
notificar inmediatamente a la Workstation.

- Cuando están Off-Line el ADM no notifica sobre errores y se debe


mantener la integridad de los datos para cada Workstation por lo que
el refresco de datos es periódico (Off-Line). Por ejemplo, si el PC1
provoca un error en un registro y el PC2 accede al mismo, no sabrá
que hubo un error, es por esto que se debe mantener la integridad
de los datos.

- Todos los archivos de base de datos son de Concurrencia 1 debido a


que se tiene una cola única de Transacción por procesador y si se
dispone de un servidor bi-procesador, se mantiene una única cola,
puesto que el segundo procesador es paralelo o se lo reserva el OS,
por lo que por cola se accede a 1 registro a la vez. El encolamiento
produce un Stress en el ADM por lo que se pueden tener Islas (otros
servidores con una base de datos común). Por lo anterior, debe
realizarse una Prueba de Carga y concluir que se debe hacer.
Por ejemplo, SII implementó (suponiendo el número) una cola de
lago 100, lo que quiere decir que sólo los primeros 100 que se
conecten podrán acceder al servicio por Internet y a los demás se les
cortará la conexión notificando que “el servidor esta ocupado y que
espere un turno en un reintento posterior.”, y podrá acceder cuando
uno de los cien primeros se desconecte o cuelgue.

Chess List: Se pide a las empresas y tiene que ver con la configuración
regional con la que se esta trabajando. Por ejemplo, formato de fecha y
hora, moneda, si se usa punto o coma para separador se miles o no se
usa, punto o coma para los decimales, etc. Eje.:
Si se ingresa UF = $17000 y topean 17.000 es un error si no se
esta usando separador de miles. Lo mismo para números con
decimales.

- si se tiene un sistema de stock configurado de X manera, la


implementación de otro sistema en el mismo equipo por ejemplo
para saber quién vende más en el mes para premiarlo, deberá
adaptarse a la configuración X.

System File de Bodega

En cada interfas de entrada o salida de cada sucursal, debe haber


Cargadores que verifiquen que los datos no vengan cortados para
cargarlos en la base de datos o pedir un reenvío de datos (Cargadores e
Inyectores).

Esta es una verificación que se hace además de la que hace el protocolo


usado como TCP/IP.

Se debe asegurar la integridad de la información, que el tambor no se


afecte ni tampoco su entorno (por ejemplo, si se hace un CTRL+C en
Oracle, el tambor se corrompe a excepción tal vez de versiones más
avanzadas.).

Archivos con Índices

Se les aplican índices para optimizar las búsquedas cuando existe una
cantidad masiva de datos. Se aplican cuando el crecimiento es
exponencial, separando en segmentos de índices. Se estructura con
parámetros fijos y la gracia de usar índices es de emular la caché,
tratando de hacer el menor número de accesos.

Índices de segmentos: un ejemplo sería:

Archivos con segmentos de un mes con el registro de los movimientos


realizados durante el año, que será el segmento superior de los
anteriores y que forma parte de un conjunto de N años. Así, si se desea
obtener los movimientos de Enero del 2001, se redireccionará 200101
donde los primeros 4 dígitos indicarán el segm-{ñ´p’0ento de año y los
últimos dígitos el mes específico dependiente de este año. Se puede
Observar que el acceso se produce de segmento en segmento y que
pueden haber N niveles de segmentos según las necesidades derivadas
del volumen de datos existentes.

Otro Ej.: si busco el RUT 12.345.678-5 el proceso sería:

1° Verificar si el Rut es verdadero.


2° Buscar el segmento de los 12 millones.
3° El anterior segmento de índices redireccionará al archivo de índices
correspondiente al segmento de 300 a 400 mil y este al de 40 a 49 mil y
así sucesivamente o el proceso inverso desde el código del guión “-
Código” donde si los 3 últimos dígitos no están en los sub segmentos,
entonces el Rut no está registrado.

Los índices de segmentación son la base de la estructura de Hashing.

Criterios para usar índices:

- La relación [Volumen, Tipo de Acceso, Cantidad de acceso]. El tipo de


acceso (off-line u on-line, interfas de conexión, etc.). El acceso tiene
que ver con la frecuencia con que se producen lecturas y escrituras
de registros.
- Los índices ocupan más cantidad de memoria.
- Ver amplitud, profundidad y balance de los árboles e índices.
- Para menos de 100 registros es mejor el acceso secuencial.

Determinismo o No Determinismo
Determinista => Tiempo de Acceso Determinado

El título depende del tipo de acceso que se pueda realizar sobre un


archivo.

El acceso a un archivo secuencial como los de un archivo de texto plano


es No Determinista (Probabilístico), ya que el tiempo de acceso
depende del tamaño en bytes del archivo (sin mencionar si está o no
fragmentado en disco). Por tanto, no es controlable.

El acceso a un indexado es Determinista ya que por naturaleza se


asigna índices y si se le crean, se le agregan segmentándose.

La CPU por ejemplo, es Determinista, ya que si es de 500Mhz, los


procesos se encolan y por cada ciclo de 500Mhz corta el proceso, lo
apila si es necesario y a continuación ejecuta el siguiente proceso.

Notas sobre algunos conceptos

Bases de datos: Son estructuras arbóreas en archivos que están


estructurados para el almacenamiento masivo de registros.

TRIGGERS: Son procesos almacenados que se gatillan dado un evento y son


parte de los demonios.

DB Dunga: Son archivos indexados que poseen una máscara para acceder a
diferentes datos de un registro.

Archivo ejecutable: Son archivos en código de máquina donde la cabecera


con respecto a las instrucciones manda segmentos a la memoria para que se
codifiquen y ejecuten de acuerdo a la estructura generada en la cabecera del
ejecutable, no en el fuente. La cabecera identifica la instrucción que debe
ejecutarse porque están como registros delimitados por marcadores.

Archivo: Todo archivo si o si pasa por la memoria. Los ejecutables en forma


directa; y otros como las DB en forma indirecta, por esto es que crean archivos
temporales.

Motor Transaccional: Es un programa demonio en forma de TRS como


archivo fantasma, invisible e inaccesible. Se crean y optimizan para el manejo
de grandes bases de datos, no se deben caer, deben ser autónomos y deben
tomar decisiones según los eventos que se produzcan.
Protocolos: Son canales libres de comunicación. La mayoría es del tipo Full
Duplex, por ejemplo, entre Linux y Windows está el Administrador Samba.

Samba: Es un administrador de archivos que trabaja de forma transparente


entre Windows y Linux como si estuvieran los dos sistemas montados al mismo
tiempo.

Máscara: Es la forma en que se acceden a los registros de una base de datos


indexada, como una determinada Representación Posicional o Ítems de
Campo, de parámetros estáticos (fijos).

Caché: Memoria volátil pequeña y rápida que interviene en los procesos de


paginación y segmentación.

File System: Indica como están almacenados los archivos sean o no


secuenciales, atributos disponibles, tamaño de unidades de asignación,
métodos de ajuste para la escritura de archivos, etc.

You might also like