estructuras de archivos

138
ESTRUCTURAS DE ARCHIVOS Un Enfoque Informático

Upload: neko-tukusama

Post on 24-Dec-2015

50 views

Category:

Documents


15 download

DESCRIPTION

Libro muy completo sobre Estructura de Archivos.BlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablablaBlablablabla

TRANSCRIPT

Page 1: Estructuras de Archivos

ESTRUCTURAS DE ARCHIVOS

Un Enfoque Informático

Page 2: Estructuras de Archivos
Page 3: Estructuras de Archivos

ESTRUCTURASDE ARCHIVOS

Un Enfoque Informático

M. en I. P. Eduardo René Carrillo IñiguezProfesor de T. C. del Centro Universitario de la Ciénega, UdG, México

M. en A. Norma Alicia Gómez TorresProfesor de T. C. del Centro Universitario de la Ciénega, UdG, México

M. en Cs. Karime Pulido HernándezProfesor de T. C. del Centro Universitario de la Ciénega, UdG, México

M. S. I. José Sandoval ChávezProfesor de T. C. del Centro Universitario de la Ciénega, UdG, México

M. en Cs. José Avila PazProfesor de T. C. del Centro Universitario de la Ciénega, UdG, México

DiseñoLic. Fidel Antonio Romero Álvarez

MovenDesignwww.movendesign.com

Page 4: Estructuras de Archivos
Page 5: Estructuras de Archivos

5

INTRODUCCIÓN

Este libro nace de la inquietud de un grupo de profesores que imparten la asig-natura de Estructura de Archivos en el Centro Universitario de la Ciénega en los campus de Ocotlán y Atotonilco, al coincidir en que existía material escaso para exponer su cátedra es que deciden reunir material que habían acumulado durante algunos semestres, y lo que inicialmente eran sólo notas para los profesores a fin de homogeneizar su cátedra, hoy tras largas horas de trabajo, se convierte en este texto, dirigido también a sus alumnos, y que basa su enfoque en el libro “Estruc-turas de Archivos, un conjunto de herramientas contextuales”, de Folk Michael J. y Zoellick Bill. Este material está encaminado especialmente a alumnos de las carreras de Licenciatura en Informática, Ingeniería en Computación o carreras afines que aborden en sus asignaturas conceptos de estructuras de archivos y su organización.

A continuación se muestra un resumen que comprende la secuencia de los temas que se analizan en el texto organizados en 6 capítulos:

Capítulo 1: Dispositivos de almacenamiento secundario

Dado que uno de los componentes fundamentales de las computadoras es el espacio de almacenamiento, es ésta habilidad para almacenar las instrucciones y/o información lo que hace versátiles a las computado-ras. Este capítulo aborda temas como los propósitos de almacenamien-to, la clasificación de los dispositivos de almacenamiento y la forma en que se organizan. Especialmente se hace hincapié en el almacena-miento secundario.

Capítulo 2: Registros, tipos y operaciones

Este apartado comprende los conceptos fundamentales de archivos ta-les como campos, registros, y campos llave. La forma en que se estruc-turan los archivos internamente, bien sea en registros de longitud fija o variable y su clasificación, uso y operaciones básicas.

Page 6: Estructuras de Archivos

6

Capítulo 3: Organización y manejo de archivos.

El capitulo 3 describe brevemente la jerarquía de clases para el manejo de archivos en lenguaje java, tanto para archivos de lectura (InputS-tream) como para la escritura de datos (OutputStream), la forma de organización dependiendo del tipo de soporte de almacenamiento (se-cuencial, directa e indexada) y la organización basada en listas.

Capítulo 4: Búsqueda y clasificación externa

Este capítulo aborda el tema de la búsqueda de información en los archivos así como algunos métodos para su clasificación u ordena-miento, dada que es una de las operaciones más importantes es el pro-cesamiento de la información pues permite la recuperación de datos previamente almacenados.

Capítulo 5: Sistemas de Archivos

El presente capítulo describe la forma en que se organiza el sistema de archivos y como se estructuran los directorios con la finalidad que posteriormente puedan ser representados de forma textual o gráfica mediante un administrador de archivos, y que tan importante es esto para mantener la integridad y seguridad en los datos de los archivos.

Capítulo 6: Dispersión (hash)

Este capítulo menciona conceptos sobre la técnica de dispersión (hash), algunas funciones de dispersión y problemas que se pueden generar (colisiones) así como posibles aproximaciones para resolverlas.

Particularmente en el Centro Universitario de la Ciénega, de la Universidad de Guadalajara, este material será empleado como libro de texto y referencia para la asignatura antes mencionada y permitirá a los estudiantes y profesores tener un primer acercamiento con estos conceptos tan indispensables en el contexto de la forma de estructurar la información mediante archivos. Los autores tienen el deseo particular que este material sea de utilidad para todos aquellos que lo referencien.

Page 7: Estructuras de Archivos

ÍNDICE GENERAL

Capítulo 1: Dispositivos de almacenamiento secundario1.1 Fundamento de las estructuras de archivos 111.2 Almacenamiento primario y secundario 121.3 Dispositivos de almacenamiento secundario 14 1.3.1 Discos magnéticos y ópticos 15 1.3.2 Cintas, casetes y raid de discos 31 1.3.3 Flash memory (Memoria Flash) 38

Capítulo 2: Registros, tipos y operaciones2.1 Definiciones 432.2 Registros físicos y lógicos 442.3 Registros de longitud fija y variable 492.4 Estructura interna de un registro 532.5 Operaciones básicas sobre archivos y registros 54

Capítulo 3: Organización y manejo de archivos3.1 Definición de clases para manejo de archivos 633.2 Organización de archivos 74 3.2.1 Secuencial, estructura y operaciones 75 3.2.2 Directa, estructura y operaciones 76 3.2.3 Indexada, estructura y operaciones 77 3.3 Organización basada en listas 79

Capítulo 4: Búsqueda y clasificación externa4.1 Búsqueda secuencial 894.2 Búsqueda binaria. 924.3 Búsqueda indizada 934.4 Ordenamiento por inserción binaria 1004.5 Ordenamiento por mezcla (merge sort) 102

Page 8: Estructuras de Archivos

Capítulo 5: Sistemas de Archivos5.1 El sistema de archivos y sus principales funciones 1115.2 Organización de estructuras de directorios 1125.3 Seguridad y protección de archivos 116

Capítulo 6: Dispersión (hash)6.1 Funciones de dispersión (hash) 1236.2 Colisiones y la forma de resolverlas 1246.3 Algoritmo de dispersión simple 1266.4 Funciones de dispersión y distribuciones de registros. 1296.5 Otros métodos de dispersión 1306.6 Resolución de colisiones mediante saturación progresiva 131

Bibliografía 136

Page 9: Estructuras de Archivos

Capítulo 1

ADITIVOS DE ALMACENAMIENTO SECUNDARIO

ObjetivoIdentificar y analizar los dispositivos de almacenamiento secundario; así como las unidades básicas de organización (sectores, bloques, pistas y cilindros).

Page 10: Estructuras de Archivos
Page 11: Estructuras de Archivos

11

Plan general del capítulo

1.1 Fundamento de las estructuras de archivos1.2 Almacenamiento primario y secundario1.3 Dispositivos de almacenamiento secundario 1.3.1 Discos magnéticos y ópticos 1.3.2 Cintas, casetes, raid de discos 1.3.3 Otros tipos (zip drive, flash memory)

1.1 Fundamento de estructuras de archivos

Conceptos básicos

La información es aquella que se obtiene a partir de datos conocidos o por conocer. En el área de las ciencias de la computación, los datos están compuestos de caracteres y éstos a su vez de bits, entonces el bit es conocido como el elemen-to mínimo de información. Inicialmente los bits se agruparon en conjuntos de ocho para formar el concepto de byte y así pudiera representar 256 valores dife-rentes. Cuando hubo la necesidad de representar estos valores en una pantalla se tomó como acuerdo plasmar 256 símbolos en una tabla, la cual es llamada tabla de códigos ASCII (Código Americano Estándar para el Intercambio de Informa-ción) y corresponde a caracteres visibles y no visibles en una pantalla.

Un dato tal como pudiera ser 1, uno, blanco, viernes, m, de manera separada no representa nada, pero cuando se reúnen varios de éstos relacionados entre sí, como Juan, García, Hidalgo 35, [email protected], estos pudiera suponerse que se trata de datos de una persona que se llama Juan García, que vive en Hidal-go 35 y cuyo correo electrónico es [email protected], de esta manera estos datos relacionados entre sí, y que aportan significado o sentido, se convierten en información. Se podría entonces crear un archivo con los datos personales de los trabajadores de una empresa almacenando para cada uno: el nombre, apellido, domicilio y correo electrónico, pero se habrá de dar una estructura a estos datos para que sean fáciles de comprender e interpretar. Por lo tanto, una estructura debe ser interpretada como el soporte de la información. Así, las ideas deben ser llevadas a estructuras que permitan organizar de una mejor manera los datos y que puedan ser almacenadas para facilitar su acceso posteriormente.

Page 12: Estructuras de Archivos

12

1.2 Almacenamiento primario y secundario

Propósitos del almacenamiento

Los componentes fundamentales de las computadoras de propósito general son la unidad aritmético-lógica, la unidad de control, el espacio de almacena-miento y los dispositivos de entrada/salida; si se elimina el almacenamiento, el aparato sería una simple calculadora en lugar de una computadora. Es ésta habi-lidad para almacenar las instrucciones que forman un programa y la información que manipulan las instrucciones lo que hace versátiles.

Las computadoras representan toda la información haciendo uso del sistema binario donde el texto, los números, las imágenes, el sonido y casi cualquier otra forma de información, pueden ser transformadas en una sucesión de bits o dígitos binarios; donde cada uno tiene un valor de 0 ó 1, aun cuando la unidad de alma-cenamiento más común es el byte, que equivale a 8 bits.

Almacenamiento primario

El almacenamiento primario está directamente conectado a la Unidad Cen-tral de Proceso (CPU) de la computadora, este tipo de almacenamiento se clasi-fica en tres tipos:

Los registros del procesador (AX,BX,CX, etc) son internos de la CPU y contienen información que las unidades aritmético-lógicas necesitan llevar a la instrucción en ejecución. Técnicamente, son los almacenamientos más rápidos de la computadora, siendo transistores de conmutación integrados en el chip de silicio de la CPU que funcionan como “flip-flop” electrónicos.

La memoria caché es un tipo especial de memoria interna usada en muchas unidades centrales de proceso para mejorar su eficiencia o rendimiento, donde parte de la información de la memoria principal se duplica en la memoria caché, para que el acceso desde el procesador sea más rápido. Comparada con los regis-tros, la caché es ligeramente más lenta pero de mayor capacidad, sin embargo, es más rápida pero de mucha menor capacidad que la memoria principal.

La memoria principal contiene los programas en ejecución y los datos con que operan. La unidad aritmético-lógica puede transferir información muy rápi-damente entre un registro del procesador y localizaciones del almacenamiento principal, también conocidas como direcciones de memoria. Las computadoras

Page 13: Estructuras de Archivos

13

modernas utilizan memorias de acceso aleatorio basadas en electrónica de estado sólido, las cuales están directamente conectadas a la CPU a través de un bus de memoria y de un bus de datos.

CAPACIDADTIEMPO DE

ACCESO

COSTE

Los programas y datos puedenser utilizados directamente por elprocesador

Los programas y datos deben sertransferidos a la memoriaprincipal antes de ser tratadospor el procesador

CPU

REGISTROS

MEMORIACACHE

MEMORIAPRINCIPAL

MEMORIASECUNDARIA

Figura 1.1 Jerarquía de Almacenamiento

La figura 1.1 ilustra la jerarquía de almacenamiento y algunas característi-cas importantes (tiempo de acceso, costo y capacidad) de los distintos medios de almacenamiento.

El almacenamiento primario tiene dos funciones: la primera es guardar todo o una parte del programa que se está ejecutando y la segunda es que en la memoria se guardan los programas del sistema operativo que controlan el funcionamiento de la computadora. El área de almacenamiento primario contiene la información que el programa está usando; y es aquí donde los datos y programas se colocan antes de ser procesados para posteriormente devolverlos al almacenamiento se-cundario o enviarlos a un dispositivo de salida.

Al almacenamiento primario interno se le conoce como RAM (Memoria de Acceso Aleatorio), porque se puede acceder a ella directamente desde

Page 14: Estructuras de Archivos

14

cualquier posición elegida aleatoriamente. Se divide en posiciones de almacena-miento que alcanza para almacenar una letra, digito o símbolo especial, cada una tiene una dirección única que indica dónde se encuentra dentro de la RAM.

Almacenamiento secundario

Los sistemas de los usuarios necesitan almacenar información de manera permanente fuera de la computadora, en un estado que no requiera alimenta-ción eléctrica, y guardar volúmenes de datos tan grandes que no es posible almacenar en la memoria principal. Por tanto, al lugar de almacenamiento de datos, fuera de la CPU y del almacenamiento primario, se le denomina alma-cenamiento secundario que es un conjunto de dispositivos periféricos para el almacenamiento masivo de datos con mayor capacidad que la memoria prin-cipal pero más lenta. El acceso a la información almacenada en la memoria primaria es electrónico y se efectúa casi a la velocidad de la luz, en cambio el almacenamiento secundario no es volátil y conserva los datos aún cuando se apague la computadora.

Existen muchos tipos de almacenamiento secundario, los cuales pueden transferir grandes cantidades de datos rápidamente a la CPU, la mayoría de ellos requieren movimiento mecánico para acceder a los datos lo cual ocasiona que sea relativamente lento en comparación con el almacenamiento primario.

El disquete, el disco duro, las unidades ópticas, las unidades de memoria flash y los discos zip, pertenecen a esta categoría; y son dispositivos periféri-cos que quedan vinculados a la memoria principal o memoria interna, confor-mando el subsistema de memoria de la computadora.

1.3 Dispositivos de almacenamiento secundario

Aunado con la evolución del hardware, también han evolucionado los pro-gramas de software que demandan cada vez mayores cantidades de almace-namiento. Dado que estos datos serían imposible almacenarlos en la memoria principal (tanto por el tamaño como por la volatilidad que la caracteriza), se hace necesario otro tipo de almacenamiento que guarde grandes cantidades de información de manera relativamente permanente y a un más bajo costo.

Existen diversas tecnologías que utilizan los dispositivos de almacena-miento secundario, cada una de éstas presenta características particulares, for-

Page 15: Estructuras de Archivos

15

mas de acceso bien diferenciadas y maneras de almacenamiento y recuperación de información que se describen a continuación.

1.3.1. Discos magnéticos y ópticos

Los discos magnéticos y ópticos tienen la misma finalidad, no obstante, se distinguen en muchos aspectos tales como su tecnología, capacidad de almacenamiento, tiempo de acceso, transferencia de bytes, seguridad, mante-nimiento de los datos e inclusive el coste de fabricación.

Desde el punto de vista de almacenamiento de la información, en los discos magnéticos el medio de grabación consiste en un soporte rígido, en el caso de discos duros (aluminio o cristal cerámico), o blando, en el caso de discos flexibles o cintas, etc., sobre el que se deposita una fina película de un material magnetizable para su grabación. Esta película está compuesta de diferentes materiales magnéticos como pueden ser óxido de hierro, de cromo, de hierro-cobalto, de cobalto-níquel, entre otros.

El principio básico tanto para la lectura de la información previamen-te almacenada como para la escritura consiste en que las partículas ferro-magnéticas conserven su magnetismo aunque desaparezca el campo que las magnetizó, de esta forma, los datos se almacenan cambiando el sentido del campo magnético de dicha sustancia. Este tipo de dispositivos disponen de una cabeza de lectura y escritura que graba la superficie del disco, éste com-ponente se mueve radialmente mientras que el disco gira en un sentido y está conformada por un electroimán capaz de inducir campo magnético o detectar el sentido del mismo.

Figura 1.2 Disco Magnético

Page 16: Estructuras de Archivos

16

La información es almacenada en pistas concéntricas, que a su vez se dividen en sectores y éstos en bloques. Estas pistas son creadas durante el formateo, el cual consiste en escribir magnéticamente los sucesivos sectores que componen cada una de las pistas, quedando así ellas magnetizadas. En el llamado formateo físico o de bajo nivel, realizado por el fabricante, se determinan el número de pistas y sectores de cada cara del disco.

El formateo lógico o de alto nivel implica escribir en el campo de datos de ciertos sectores información exclusiva para el uso del sistema operativo. Se crean entonces en el disco el área de sistema que comprende:

• Tabla de particiones• Sector de arranque “boot” que se encuentra en el primer sector de cada

disco• La FAT (Tabla de asignación de archivos)• Directorio raízLos discos magnéticos presentan diferentes características que los hacen de gran

utilidad, como son:

a) Un disco magnético (rígido o flexible) es un soporte de almacenamiento secundario, complemento auxiliar de la memoria principal o memoria RAM (memoria electrónica interna de capacidad limitada, mucho más rápida, pero volátil).

b) Capacidad para almacenar grandes cantidades de información en espa-cios reducidos y a un bajo costo por byte almacenado.

c) Es memoria “no volátil”, es decir, guarda la información aunque se reti-re el suministro de energía eléctrica.

d) Acceso directo a la información, es decir, accede más rápidamente al lugar donde se encuentran los datos a leer o escribir, sin necesidad de buscar los bloques de datos que le preceden (como ocurría antiguamente con las cintas magnéticas). Los datos se guardan en archivos, a los que se acceden mediante su nombre.

e) Gran parte de los procesos de E/S tienen como origen los discos magné-ticos, debido a que:

• La mayoría de los programas se almacenan en discos, construyendo eje-cutables.

Page 17: Estructuras de Archivos

17

• Para ejecutarlos, se pasa del disco a la memoria una copia de los archivos que necesitará el programa. Los resultados van en sentido contrario (me-moria a disco), formando parte del mismo archivo o de otro distinto.

• Sirven para simular “memoria virtual”, lo que permite una memoria ma-yor que la principal y por tanto ejecutar más procesos e incluso mayores a la capacidad de la memoria principal.

f) Los disquetes son utilizados como copias de seguridad de archivos im-portantes o para el transporte de programas y datos.

g) Dentro de los discos duros distinguimos entre los fijos (PACK), que se instalan por medio de una controladora de discos magnéticos; y los re-movibles (Disk Pack), que pueden ser desmontados para su transporte.

h) Mantenimiento de discos magnéticos:• Los discos magnéticos son medios de almacenamiento “delicados”, pues

si sufren un pequeño golpe pueden ocasionar daños en la información o una caída en el sistema.

• El cabezal debe estar lubricado para evitar daños al entrar en contacto con la superficie del disco.

• Se debe evitar que el equipo se coloque en zonas donde se acumule calor, para no provocar la dilatación de piezas.

• A pesar de estar cerrado herméticamente, hay que evitar las partículas de polvo alrededor de sus circuitos.

• No mover el equipo estando encendido, para evitar daños en los discos, por el movimiento inadecuado de sus cabezas.

A continuación se describen diferentes dispositivos que utilizan estas tec-nologías.

Disco duro (HD)

Los discos duros (hard disc) pertenecen a la llamada memoria secundaria o almacenamiento secundario, se le conoce con gran cantidad de denominaciones como disco duro, rígido (frente a los discos flexibles o por su fabricación a base de una capa rígida de aluminio), fijo (por su situación en el ordenador de manera permanente). Estas denominaciones aunque son las habituales no son exactas ya que existen discos de iguales prestaciones pero son flexibles, o bien removibles o transportables, u otras marcas de diferentes fabricantes de cabezas.

Page 18: Estructuras de Archivos

18

Figura 1.3 Disco duro

Las capacidades de los discos duros varían desde 10 Mb hasta varios Gb en minis y grandes computadoras. Para conectar un disco duro a un ordenador es nece-sario disponer de una tarjeta controladora. La velocidad de acceso depende en gran parte de la tecnología del propio disco duro y de la tarjeta controladora asociada al disco duro.

Éstas unidades de disco están compuestos por varios platos, es decir, diversos discos de material magnético montados en un eje central sobre el que se mueven. Para leer y escribir datos en estos platos se usan las cabezas de lectura/escritura que mediante un proceso electromagnético codifican / decodifican la información que han de leer o escribir. La cabeza de lectura/escritura en un disco duro está muy cerca de la superficie, de forma que casi vuela o se desliza sobre el colchón de aire, formado por su propio movimiento. Debido a esto, están cerrados herméticamente, porque cualquier partícula de polvo puede dañarlos.

Los discos duros están recubiertos de una capa magnética delgada, habitualmente de óxido de hierro, y se dividen en círculos concéntricos llamados cilindros (coinci-dentes con las pistas de los disquetes), que empiezan en la parte exterior del disco (pri-mer cilindro) y terminan en la parte interior (último). De igual manera estos cilindros se dividen en sectores, cuyo número está determinado por el tipo de disco y su formato, siendo todos ellos de un tamaño fijo en cualquier disco. Los cilindros como sectores se identifican con una serie de números que se les asignan, empezando por el 1, pues el número 0 de cada cilindro se reserva para propósitos de identificación más que para

Page 19: Estructuras de Archivos

19

almacenamiento de datos. Éstos, escritos/leídos en el disco, deben ajustarse al tamaño fijado del almacenamiento de los sectores. Habitualmente, los sistemas de disco duro contienen más de una unidad en su interior, por lo que el número de caras puede ser más de 2; éstas se identifican con un número, siendo el 0 para la primera. La capacidad del disco resulta de multiplicar el número de caras por el de pistas por cara y por el de sectores por pista, al total por el número de bytes por sector.

Para escribir, la cabeza se sitúa sobre la celda a grabar y se hace pasar por ella un pulso de corriente, lo cual crea un campo magnético en la superficie. De-pendiendo del sentido de la corriente, así será la polaridad de la celda. Para leer, se mide la corriente inducida por el campo magnético de la celda, es decir, que al pasar sobre una zona detectará un campo magnético que según se encuentre magnetizada en un sentido u otro, indicará si en esa posición hay almacenado un 0 o un 1. En el caso de la escritura el proceso es el inverso, la cabeza recibe una corriente que provoca un campo magnético, el cual pone la posición sobre la que se encuentre la cabeza en 0 o en 1 dependiendo del valor del campo mag-nético provocado por dicha corriente.

Figura 1.4 Estructura interna de un disco duro

Los componentes físicos de una unidad de disco duro son:

Los discos están elaborados de compuestos de vidrio, cerámica o alumi-nio pulidos y revestidos por ambos lados con una capa muy delgada de una aleación metálica; éstos se encuentran unidos a un eje y un motor que los

Page 20: Estructuras de Archivos

20

hace guiar a una velocidad constante entre las 3600 y 7200 RPM (Revolu-ciones Por Minuto). Convencionalmente los discos duros están compuestos por varios platos, es decir, varios discos de material magnético montados sobre un eje central y normalmente tienen dos caras que pueden usarse para el almacenamiento de datos, reservando una para almacenar información de control.

Las cabezas están ensambladas en pila y son las responsables de la lec-tura y la escritura de los datos en los discos. La mayoría de los discos duros incluyen una cabeza lectura/escritura a cada lado del disco, sin embargo al-gunos discos de alto desempeño tienen dos o más cabezas sobre cada superfi-cie, de manera que cada cabeza atiende la mitad del disco reduciendo la dis-tancia del desplazamiento radial. Las cabezas de lectura/escritura no tocan el disco cuando éste girando a toda velocidad; por el contrario, flotan sobre una capa de aire extremadamente delgada (10 millonésimas de pulgada). Esto reduce el desgaste en la superficie del disco durante la operación normal, ya que cualquier polvo o impureza en el aire puede dañar suavemente las cabezas o el medio. Su funcionamiento consiste en una bobina de hilo que se acciona según el campo magnético que detecte sobre el soporte magnético, produciendo una pequeña corriente que es detectada y amplificada por la electrónica de la unidad de disco.

El eje es la parte del disco duro que actúa como soporte, sobre el cual están montados y giran los platos del disco.

El actuador es un motor que mueve la estructura que contiene las cabe-zas de lectura entre el centro y el borde externo de los discos. Un actuador usa la fuerza de un electromagneto empujado contra magnetos fijos para mover las cabezas a través del disco. La controladora manda más corriente a través del electromagneto para mover las cabezas cerca del borde del disco y en caso de una pérdida de poder, un resorte mueve la cabeza nuevamente hacia el centro del disco sobre una zona donde no se guardan datos. Dado que todas las cabezas están unidas al mismo “rotor” ellas se mueven simul-táneamente, mientras que lógicamente la capacidad de un disco duro puede ser medida según los siguientes parámetros:

Page 21: Estructuras de Archivos

21

Figura 1.5 Componentes de un disco duro

Los cilindros son el par de pistas en lados opuestos del disco. Si el HD contiene múltiples discos (sean n), un cilindro incluye todos los pares de pis-tas directamente uno encima de otra (2n pistas). Los HD normalmente tienen una cabeza a cada lado del disco. Dado que las cabezas de lectura/escritura están alineadas unas con otras, la controladora puede escribir en todas las pistas del cilindro sin mover el rotor. Como resultado los HD de múltiples discos se desempeñan levemente más rápido que los HD de un solo disco.

Las pistas son delgados círculos concéntricos. Las cabezas se mueven entre la pista más externa ó pista cero a la mas interna. Es la trayectoria circular trazada a través de la superficie circular del plato de un disco por la cabeza de lectura/escritura. Cada pista está formada por uno o más cluster.

Los HD almacenan los datos en pedazos gruesos llamados sectores. La mayoría de estos dispositivos usan sectores de 512 bytes y la controladora del disco duro determina el tamaño de un sector en el momento en que el dis-co es formateado, aunque algunos modelos permiten especificar el tamaño de un sector. Cada pista del disco está dividida en 1 ó 2 sectores dado que las pistas exteriores son más grandes que las interiores.

Page 22: Estructuras de Archivos

22

Tabla 1.6 Distribución del disco duro en sectores

Los cluster son una agrupación de sectores y su tamaño depende de la capa-cidad del disco. La figura 1.9 muestra esta relación.

Tamaño del drive MB

Tipo de FAT bits

Sectores por cluster

Tamaño del cluster Kb

0 –15 12 8 4

16-127 16 4 2

128-255 16 8 4

256-511 16 16 8

512-1023 16 32 16

1024-2048 16 64 32

Figura 1.7 Relación de capacidades de disco, agrupación de sectores y tamaño.

Disco flexible

Es un medio de almacenamiento magnético que puede ser grabado y borra-do muchas veces. Consta de un plástico flexible circular que tiene una capa de óxido ferroso capaz de sostener puntos magnéticos. Antes de usarlo éste debe ser formateado para dividirlo en pistas y cada pista dividirla en sectores. Cada sector almacena 512 bytes.

Page 23: Estructuras de Archivos

23

Figura 1.8 Disco Flexible

5.25 DD

5.25 HD

3.5 DD

3.5 HD

Número de pistas 40 80 80 80

Sectores por pistas 9 15 9 18

Total sectores 720 2400 1440 2880

Total almacenamiento 360 K 1.2 M 720 K 1.44 M

Figura 1.9 Capacidad de almacenamiento de discos flexibles

Discos ópticos

En los discos ópticos la grabación se realiza por efecto de un rayo láser, es decir, el sistema de escritura óptica consiste en usar un rayo de luz que calienta la superficie a escribir, cambiando sus propiedades de reflexión. En estos tipos de almacenamiento se usa la propiedad de reflexión para poder leer datos mediante un fotodetector (mide la intensidad de luz que es reflejada por el disco), donde la intensidad del rayo de luz al leer debe ser muy inferior a la de escribir para así no dañar al disco. Los lásers más usados son los rojos, que son más baratos que los azules pero permiten menor densidad de grabación.

Los discos ópticos aparecieron a fines de la década de los 80’, siendo utiliza-dos como un medio de almacenamiento de información para la televisión. Su alta

Page 24: Estructuras de Archivos

24

capacidad y su fácil transportabilidad, hicieron que este dispositivo se populari-zara y comercializara en 1988, utilizándose en las computadoras.

Figura 1.10 Disco óptico

Este tipo de discos utilizan dos tecnologías para el almacenamiento de datos:

1. Tecnología WORM (Una Escritura y Múltiples Lecturas).

La tecnología WORM, es un sistema de almacenamiento de datos, no-edi-tables, que no pueden ser borrados, ni modificados, no sobrescritos, ni corrom-pidos. Permite ajustarse a los requerimientos legales de retención de datos de contenido fijo y a los requerimientos de no modificación de la información. Es decir, esta tecnología se basa en la idea de que la información se graba una única vez y se conservará para siempre en su estado original, sin poder ser modificada ni borrada pero pudiéndose acceder para su lectura infinita cantidad de veces.

Esto sucede porque una vez que el drive ha grabado un sector individual del disco, no puede borrarlo o escribir encima del mismo. No obstante los archivos pueden ser editados y/o grabados con modificaciones o agregados en sectores nuevos adicionales. Así, un archivo puede ser llamado nuevamente cambiado y salvado en la versión más reciente, pero cada versión del archivo permanecerá en el disco.

En la actualidad la tecnología WORM la podemos encontrar las siguientes categorías:

Page 25: Estructuras de Archivos

25

• Discos ópticos (UDO, DVD y magneto-ópticos) • Cintas • Discos magnéticos Hasta ahora la tecnología WORM más extendida es la relacionada con

los discos ópticos, aunque tiene algunas limitaciones con el almacenamiento que son:

• La capacidad • Los costesLos avances que se han producido en el campo de las cintas y de los discos

magnéticos, permiten soluciones efectivas desde el punto de vista de costes, para dar soluciones a las empresas con crecientes necesidades de capacidad y de re-tención de datos.

UDO (Ultra Densidad Óptica)

Es la tecnología de almacenamiento óptico profesional en 5.25”, ofrece la más alta fiabilidad de conservación de la información en el tiempo de aproxima-damente 50 años de vida, eliminando la necesidad de migración a otro tipo de almacenamiento una vez transcurridos “X” años de vida de la información.

La primera generación de productos UDO tuvieron una capacidad de 30GB y actualmente se han incrementado a 60GB y 120GB, las cuales proveen una total compatibilidad de lectura hacia medias de anterior generación. Utiliza láser blue-violet y la tecnología de grabación cambio de fase como los productos DVD de consumo para dar un enorme salto en las densidades de almacenamiento de datos.

El uso del laser blue-violet y un alto nivel óptico, incrementa drásticamente las densidades de almacenamiento de datos por lo que necesita un nuevo tipo de construcción de discos con una superficie de cobertura de 0.1mm para proteger la superficie de datos. Como con la existente tecnología magneto - óptico, UDO uti-liza una grabación sin contacto para brindar robustez y performance confiables.

DVD

Anteriormente al DVD se le conocía como Dispositivo de Video Digital o Disco Digital Versátil, pero ahora se entiende directamente por DVD la siguiente generación de tecnología de almacenamiento en disco óptico. Es esencialmente

Page 26: Estructuras de Archivos

26

un CD más rápido y con más capacidad que puede almacenar tanto video de cali-dad de cine y audio de mayor calidad que un CD, así como datos de computadora. El DVD intenta abarcar entretenimiento doméstico, computadoras e información de negocios en un único formato digital, reemplazando eventualmente al CD de audio, a la cinta de video, el laser-disc, CD-ROM, los cartuchos de video juegos, entre otros. El DVD se ha extendido ampliamente gracias al soporte de todos los grandes fabricantes de electrónica, hardware de computadora y todos los grandes estudios de cine y música.

Figura 1.11 DVD

Es importante entender la diferencia entre formatos físicos (tales como DVD-Video, DVD-ROM) y formatos de aplicación (tales como DVD-Video o DVD-Audio). DVD-ROM es el formato básico que almacena datos. DVD-Video (a menudo llamado DVD) define cómo están los programas de video y las pelí-culas almacenados en un disco y cómo son leídos en un lector DVD-Video o una computadora con DVD. La diferencia es similar entre la que hay entre CD audio y CD-ROM. El DVD-ROM incluso incluye variaciones grabables (DVD-R/RW, DVD-RAM, DVD+R/RW) y los formatos de aplicación incluyen DVD-Video, grabación DVD-Video, DVD-Audio, grabación DVD-Audio Grabación chorros DVD, y SACD. Hay incluso formatos de aplicaciones especiales para consolas de videojuegos tales como la Sony PlayStation 2.

Un ejemplo de DVD es el de capa simple, el cual puede guardar hasta 4.7 gigabytes (se le conoce como DVD-5), alrededor de siete veces más que un CD estándar. Emplea un láser de lectura con una longitud de onda de 650 nm (en el caso de los CD, es de 780 nanometros) y una apertura numérica de 0’6 (frente a los 0’45 del CD), la resolución de lectura se incrementa en un factor de 1’65.

Page 27: Estructuras de Archivos

27

Esto es aplicable en dos dimensiones, así que la densidad de datos física real se incrementa en un factor de 3’3.

Un DVD puede contener:

• DVD-Video: Películas (video y audio)

• DVD-Audio: Audio de alta definición

• DVD-Data: Datos cualesquiera

El tipo de disco puede ser:

DVD-ROM Sólo lectura, manufacturado con prensaDVD-R Grabable una sola vez

DVD-RW RegrabableDVD-RAM Regrabable de acceso aleatorio. Lleva a cabo una com-

probación de la integridad de los datos siempre activa tras completar la escritura

DVD+R Grabable una sola vezDVD+RW RegrabableDVD-R DL Grabable una sola vez de doble capaDVD+R DL Grabable una sola vez de doble capa

DVD-RW DL Regrabable de doble capaDVD+RW DL Regrabable de doble capa

El disco puede tener una o dos caras, y una o dos capas de datos por cada cara; el número de caras y capas determina la capacidad del disco. Los formatos de dos caras apenas se utilizan.

• DVD-5: Una cara, capa simple. 4.7 GB o 4.38 gibibytes (GiB) - Discos DVD±R/RW.

• DVD-9: Una cara, capa doble. 8.5 GB o 7.92 GiB - Discos DVD±R DL.

• DVD-10: Dos caras, capa simple en ambas. 9.4 GB o 8.75 GiB - Discos DVD±R/RW.

Page 28: Estructuras de Archivos

28

• DVD-14: Dos caras, capa doble en una, capa simple en la otra. 13’3 GB o 12’3 GiB - Raramente utilizado.

• DVD-18: Dos caras, capa doble en ambas. 17.1 GB o 15.9 GiB - Discos DVD+R.

También existen DVD de 8 cm (no confundir con mini-DVD, que son CD conteniendo información de tipo DVD video) que tienen una capacidad de 1.5 GB.

La capacidad de un DVD-ROM puede ser determinada visualmente obser-vando el número de caras de datos, y observando cada una de ellas. Las capas dobles normalmente son de color dorado, mientras que las capas simples son plateadas, como la de un CD. Otra manera de saber si un DVD contiene una o dos capas es observar el anillo central del disco, el cual contendrá un código de barras por cada capa que tenga.

La velocidad de transferencia de datos de una unidad DVD está dada en múltiplos de 1.350 KB/s, lo que significa que una unidad lectora de 16x permite una transferencia de datos de 16 x 1350 = 21600 KB/s (21’09 MB/s). Como las velocidades de las unidades de CD se dan en múltiplos de 150 KB/s, cada múl-tiplo de velocidad en DVD equivale a nueve múltiplos de velocidad en CD. En términos de rotación física (revoluciones por minuto), un múltiplo de velocidad en DVD equivale a tres múltiplos de velocidad en CD, así que la cantidad de datos leída durante una rotación es tres veces mayor para el DVD que para el CD, y la unidad de DVD 8x tiene la misma velocidad rotacional que la unidad de CD 24x.

Magneto- ópticos

Las tecnologías Magneto-Ópticos (MO) utilizan un laser óptico, un campo magnético y un fotodetector para registrar los datos sobre medias MO protegi-das en cartuchos plásticos. Este método tiene una cantidad de beneficios para el usuario entre los que se destaca su alta confiabilidad y durabilidad.

Los discos Magneto-ópticos están cubiertos con un material especial que puede ser magnetizado, pero sólo a una alta temperatura (150°C aproximada-mente).

Esto hace que la carga magnética no se vea afectada por la exposición campos magnéticos a temperaturas normales. Los datos grabados bajo tecno-

Page 29: Estructuras de Archivos

29

logía magnética normal -como la de los discos rígidos, diskettes y drives de cinta- pueden ser fácilmente afectados por campos magnéticos imprevistos a temperaturas normales, provocando la pérdida de los datos.

La superficie de grabación de las medias MO consiste en una fina capa metálica con propiedades magnéticas y altamente reflectiva, recubierta por una capa protectora de material plástico. Cuando el laser óptico calienta la superfi-cie del disco a más de 150°C, un imán se mueve debajo de la superficie metálica generando un campo magnético positivo o negativo en donde está enfocado el láser. Al alejarse el láser, el disco conserva las áreas polarizadas como códigos binarios.

La información grabada es leída utilizando un láser óptico de menor in-tensidad, que se aplica sobre la superficie grabada altamente reflectiva y con una carga magnética. La luz es reflejada fuera del disco y tiene un ángulo de rotación diferente dependiendo de la carga positiva o negativa que contenga, dicho ángulo de rotación de esa luz reflejada corresponde a un 1 o 0 binarios, y es registrada por un foto-detector.

Las medias (o discos) MO sobre los que se graban los datos, pueden ser WORM CCW o regrabables. Si bien los drives MO utilizan la misma tecnolo-gía de láser asistido magnéticamente para la grabación de los datos en discos WORM CCW y regrabables, difieren en cuanto a la posibilidad de modificar o no los datos allí grabados.

2. Tecnología CD-ROM (Disco Compacto – Memoria de Solo Lectura).

El CD-ROM constituye una innovación radical dentro de la tecnología del almacenamiento de información. Es un nuevo medio de edición, el centro de una nueva generación de aplicaciones para la computadora y un instrumento educa-tivo de potencia hasta ahora inimaginable. Es el primer dispositivo práctico que permite a casi cualquier empresa confeccionar y vender, y a cualquier usuario comprar y usar directamente bases de datos digitales de gran volumen.

Estos discos se basan en la misma tecnología que se utiliza en los CDs de audio, son un medio ideal para distribuir software, se producen en masa, a muy bajo costo y con una maquinaria totalmente automatizada. Sin embargo tiene la desventaja de que no es posible reescribir en ellos.

Page 30: Estructuras de Archivos

30

Figura 1.12 CD-ROM

Los CD-ROMs se elaboran utilizando un láser de alto poder para formar agujeros en un disco maestro, luego se hace un molde que se usa para im-primir copias en discos plásticos. Posteriormente se aplica en la superficie una delgada capa de aluminio, seguida de otra de plástico transparente para protección.

Los CD-ROMs se leen mediante un detector que mide la energía refle-jada de la superficie al apuntar a ésta un láser de bajo poder. Los agujeros, que se denominan huecos (pits), y las áreas sin laserizar entre estos, que se denominan zonas planas (lands), producen una diferente reflectividad del haz de láser, lo que hace posible distinguir entre ambos y recibir dos estados posibles: 0 y 1. Pero no se indica un 0 o un 1 con un land o un pit, sino que un pit indica el cambio de estado, o sea de 0 a 1 o de 1 a 0, y según la canti-dad de lands que haya, el estado se mantiene estable, es decir, mientras no se cambie de estado se mantiene una zona de lands. De esta manera, se trata de realizar la mínima cantidad de huecos(pits) posibles en el disco, y así poder escribir más rápidamente.

Puede estimarse entre 10 y 15 años la permanencia de la información en un CD ROM común, dado que la superficie de aluminio que contiene la información se oxida muy lentamente en ese lapso, salvo que sea sometida a una protección anti-óxido especial, o sea de oro.

Los CD-ROMs están constituidos por una pista en espiral que presenta el mismo número de bits por centímetro en todos sus tramos(densidad lineal constante),para aprovechar mejor el medio de almacenamiento, y no desper-diciar espacio como sucede en los discos magnéticos. Es por esto que en la

Page 31: Estructuras de Archivos

31

lectura y grabación de un CD, a medida que el haz láser se aleja del centro del disco, la velocidad debe disminuir, ya que en el centro el espiral es de menos longitud que en los bordes. Alternando las velocidades se logra que la cantidad de bits leídos por segundo sea constante en cualquier tramo, sea en el centro o en los bordes. Si esta velocidad fuera constante, se leerían menos bits por segundo en caso de que la zona está más cerca del centro, y más si está más cerca de los bordes. Todo esto significa que un CD gira a una velo-cidad angular variable.

Hoy en día existen CD’s de distintas capacidades, siendo lo normal una capacidad de 650 Mb. Los hay de sólo lectura (vienen ya grabados de fábri-ca), CD-R (Se pueden grabar una vez pero leer cuantas veces haga falta), y CD-RW (se pueden leer y grabar múltiples veces).

1.3.2 Cintas, casetes y raid de discos

Cinta magnética

Las cintas magnéticas se han utilizado para el almacenamiento de datos du-rante los últimos 20 años, aunque con el paso del tiempo se les han hecho varios cambios en su composición, envoltura y densidad de los datos. Son un medio o soporte de almacenamiento de información de acceso secuencial que se graba en pistas sobre una banda plástica con un material magnetizado, generalmente óxido de hierro o algún cromato. El tipo de información que se puede almacenar es variado, como vídeo, audio o datos; y frecuentemente es utilizada para respaldar el contenido de las unidades de disco duro, además, es muchas ocasiones es el medio elegido para almacenar archivos grandes que se leen y procesan de manera secuencial.

Figura 1.13 Cinta magnética

Page 32: Estructuras de Archivos

32

Para acceder a algún registro se debe pasar inicialmente por los primeros registros hasta llegar al deseado, esto debido a que accede secuencialmente; y es muy difícil leer o escribir en una misma cinta.

Movimiento de la cinta

1 2 3 4

Separación entre registros

Marca de fin de carrete

Figura 1.14 Acceso a los registros en cinta magnética

Los datos se almacenan en forma de pequeñas marcas en el material magne-tizable que cubre una cara de la cinta de plástico. La superficie recubierta de la cinta se divide en columnas verticales (o cuadros) e hileras horizontales llamadas canales o pistas.

Dado que cualquier cinta magnética es un medio continuo, para identificar registros individuales en cada cinta se pueden separar los registros mediante es-pacios en blanco llamados separación entre registros. Esta separación se crea automáticamente al grabar la información en la cinta. Cuando se leen los datos desde un registro de una cinta en movimiento al procesador, la cinta se detiene al llegar a una sedación. La cinta permanece inmóvil hasta que se termine de procesar el registro y a continuación se mueve otra vez para pasar el siguiente registro a la computadora. El procedimiento se repite hasta que se procesa todo el archivo, los archivos pueden ser de longitudes variables. Si la cinta contiene un gran número de registros muy cortos y si cada uno de los registros está separado por medio de una separación entre registros es posible que más de la mitad de la cinta este en blanco y que se interrumpa constantemente el movimiento de la cinta. Para evitar esta situación ineficiente, es posible unir varios registros cortos para formar un bloque de cinta.

Si en el casete hay registros cortos y largos mezclados, la lectura y escritura en el mismo casete se vuelve desesperante. Si se almacena cada registro lógico en la cinta como un solo registro físico no pueden escribirse registros con longitudes diferentes en el mismo espacio. El registro más largo borrará parte del registro siguiente, mientras que el registro más corto dejara parte del registro más antiguo lo que producirá un error.

Page 33: Estructuras de Archivos

33

Esto se puede solucionar con dos alternativas, en la primera se necesitan hacer los siguientes pasos:

a) Encontrar el registro lógico anterior al deseado. b) Encontrar el comienzo del registro lógico deseado. c) Avanzar el casete para encontrar el resto del registro lógico deseado. d) Rebobinar para encontrar el registro lógico siguiente.

En la segunda alternativa se desperdicia mucho espacio del casete, si los registros estaban ordenados alfabéticamente o de otra forma pronto estarán completamente desordenados porque, en el registro que se va a leer hay una merca o etiqueta que indica en que número de registro lógico se encuentra la información. Se recomienda tener dos unidades de cinta, una para leer y otra para escribir.

Cabe mencionar que las cintas magnéticas han sido durante años (y siguen siendo en la actualidad) el dispositivo de respaldo por excelencia. Las más an-tiguas, las cintas de nueve pistas, son las que mucha gente imagina al hablar de este medio: un elemento circular con la cinta enrollada en él; este tipo de dispo-sitivos se utilizó durante mucho tiempo, pero en la actualidad está en desuso, ya que a pesar de su alta fiabilidad y su relativa velocidad de trabajo, la capacidad de este medio era muy limitada.

En la actualidad, la gran mayoría de las cintas magnéticas están encapsu-ladas en cartuchos y casetes, y son utilizadas principalmente como medios de almacenamiento de alta capacidad usados para copias de seguridad. El cartucho de mayor almacenamiento es actualmente el “Digital Linear Tape, DLT-S4”; éste puede almacenar 800GB de datos sin compresión.

Sin embargo las cintas magnéticas tienen las siguientes limitaciones:

• Falta de acceso directo a los registros. La cinta es un medio de acceso secuencial que se utiliza para el procesamiento por lotes. Es necesario leer y procesar toda la cinta para actualizar todos los registros de un ar-chivo organizados en forma secuencial. Si se requiere acceso frecuente a los registros del archivo en forma rápida y aleatoria, el archivo no de-berá almacenarse en cinta magnética; se requeriría demasiado tiempo de operador para montar y desmontar cintas, se desperdiciaría mucho tiempo de máquina en la lectura de registros que no necesitan.

Page 34: Estructuras de Archivos

34

• Problemas ambientales. Las partículas de polvo y la falta de control de los niveles de la temperatura o humedad pueden causar errores en la lectura, las cintas y sus envases deben etiquetarse y controlarse cuidado-samente para no borrar por error un archivo importante.

Raid de discos (Arreglo Redundante de Discos Independientes)

RAID es la sigla para Redundant Array of Independent Disks. Su definición en español sería “Matriz Redundante de Discos Independientes”. Se trata de una tecnología que combina varios discos rígidos (HD) para formar una única unidad lógica, donde los mismos datos son almacenados en todos los discos (redundan-cia). En otras palabras, es un conjunto de discos rígidos que funcionan como si fueran uno solo. Eso permite tener una tolerancia alta contra fallas, pues si un disco tiene problemas, los demás continúan funcionando, teniendo el usuario los datos a su disposición como si nada pasara. El RAID es una tecnología consoli-dada, que surgió de la Universidad de Berkesley, en California (EUA) a finales de la década de 1980.

Para conformar el RAID, es preciso utilizar por lo menos 2 discos rígidos. El sistema operativo, en este caso, mezclará los discos como una única unidad lógica. Cuando se graban datos, los mismos se reparten entre los discos del RAID (dependiendo del nivel). Con eso, además de garantizar la disponibilidad de los datos en caso de fallo de un disco, es posible también equilibrar el acceso a la información, de forma que no haya “cuellos de botella”.

Figura 1.15 Raid de discos

Ventajas de la tecnología RAID:

• Tolerancia a fallos: RAID protege contra la pérdida de datos

Page 35: Estructuras de Archivos

35

• Mejora del Rendimiento/ Velocidad: RAID permite a varias unidades trabajar en paralelo, lo que aumenta el rendimiento del sistema.

• Mayor Fiabilidad: RAID emplea dos técnicas para aumentar la fiabilidad: La redundancia de los datos implica el almacenamiento de los mis-

mos datos en más de una unidad. Es muy eficaz pero también es muy costoso.

La paridad de datos se realiza mediante un algoritmo matemático. Es menos costoso que la redundancia, ya que no requiere el uso de un conjunto redundante de unidades de disco.

• Alta Disponibilidad: Se divide en dos aspectos: La integridad de los datos, capacidad de obtener los datos adecua-

dos en cualquier momento. Reparación dinámica de sectores (debi-dos a errores de software)

La tolerancia a fallos capacidad para mantener los datos disponibles en caso de que se produzcan uno o varios fallos en el sistema.

Los niveles RAID

La tecnología RAID funciona de varias maneras. Éstas son conocidas como “niveles de RAID”. En total, existen 6 niveles básicos, los cuales son citados a continuación:

RAID nivel 0: Este nivel también es conocido como “Striping” o “ Fraccio-namiento”. En él, los datos son divididos en pequeños segmentos y distribuidos entre los discos. Este nivel no ofrece tolerancia a fallos, pues no existe redundan-cia. Eso significa que un fallo en cualquiera de los discos rígidos puede ocasionar pérdida de información. Por esta razón, el RAID 0 es usado para mejorar la per-formance de la computadora, ya que la distribución de los datos entre los discos proporciona gran velocidad en la grabación y lectura de información. Mientras más discos existan, más velocidad es lograda. Esto porque, si los datos fueran grabados en un único disco, este proceso sería realizado en forma secuencial. Con el RAID, los datos que se guardan en cada disco son grabados al mismo tiempo. El RAID 0, por tener estas características, es muy usado en aplicaciones CAD (Diseño Asistido por Computadora) y tratamiento de imágenes y vídeos.

RAID nivel 1: También conocido como “Mirroring” o “ Espejado”, el RAID 1 funciona añadiendo discos rígidos paralelos a los discos rígidos principales

Page 36: Estructuras de Archivos

36

existentes en la computadora. Así, si por ejemplo, una computadora posee 2 discos, se puede anexar un disco rígido para cada uno, totalizando 4. Los discos que fueron añadidos, trabajan como una copia del primero. Así, si el disco principal recibe datos, el disco anexado también los recibe. De ahí el nombre de “espejado”, pues un disco rígido pasa a ser una copia práctica-mente idéntica del otro. De esa forma, si uno de los discos rígidos presen-ta una falla, el otro inmediatamente puede asumir la operación y continuar disponibilizando la información. La consecuencia en este caso, es que la grabación de datos es más lenta, pues es realizada dos veces. Sin embargo, la lectura de esa información es más rápida, pues puede ser accedida de dos fuentes. Por esta razón, una aplicación muy común del RAID 1 es su uso en servidores de archivos.

RAID nivel 2: Este tipo de RAID, adapta el mecanismo de detección de fallas en discos rígidos para funcionar en memoria. Así, todos los discos de la matriz están siendo “monitorizados” por el mecanismo. Actualmente, el RAID 2 es poco usado, ya que prácticamente todos los discos rígidos nuevos salen de fábrica con mecanismos de detección de fallas implantados.

RAID nivel 3: En este nivel, los datos son divididos entre los discos de la matriz, excepto uno, que almacena información de paridad. Así, todos los bytes de los datos tienen su paridad (aumento de 1 bit, que permite identifi-car errores) almacenada en un disco específico. A través de la verificación de esta información, es posible asegurar la integridad de los datos, en casos de recuperación. Por eso y por permitir el uso de datos divididos entre varios discos, el RAID 3 logra ofrecer altas tasas de transferencia y confianza en la información. Para usar el RAID 3, por lo menos 3 discos son necesarios.

RAID nivel 4: Este tipo de RAID, básicamente, divide los datos entre los discos, siendo uno de esos discos exclusivo para paridad. La diferencia entre el nivel 4 y el nivel 3, es que en caso de falla de uno de los discos, los datos pueden ser reconstruidos en tiempo real a través de la utilización de la pari-dad calculada a partir de los otros discos, siendo que cada uno puede ser ac-cedido de forma independiente. El RAID 4 es el indicado para el almacena-miento de archivos grandes, donde es necesario asegurar la integridad de la información. Eso porque, en este nivel, cada operación de grabación requiere un nuevo cálculo de paridad, dando mayor confianza al almacenamiento (a pesar de que esa operación torna las grabaciones de datos más lentas).

Page 37: Estructuras de Archivos

37

RAID nivel 5: Este es muy semejante al nivel 4, excepto por el hecho de que la paridad no está destinada a un único disco, sino a toda la matriz. Eso hace que la grabación de datos sea más rápida, pues no es necesario acceder a un disco de paridad en cada grabación. A pesar de eso, como la paridad es distribuida entre los discos, el nivel 5 tiene un poco menos de performance que el RAID 4. El RAID 5 es el nivel más utilizado y que ofrece resultados satisfactorios en aplicaciones no muy pesadas. Este nivel necesita de por lo menos 3 discos para funcionar. RAID 0 + 1: El RAID 0 + 1 es una combinación de los niveles 0 (Striping) y 1 (Mirroring), donde los datos son divididos entre los discos para mejorar el ingre-so, pero también utilizan otros discos para duplicar la información. Así, es posible utilizar el buen ingreso del nivel 0 con la redundancia del nivel 1. Sin embargo, es necesario por lo menos 4 discos para montar un RAID de este tipo. Estas ca-racterísticas hacen del RAID 0 + 1 el más rápido y seguro, sin embargo es el más caro de ser implementado.

Figuras 1.16 RAID 0

Tipos de RAID

Existen 2 tipos de RAID, uno basado enhardware y el otro basado en soft-ware. Cada uno posee ventajas y desventajas. El primer tipo es el más utilizado, pues no depende de un sistema operativo (pues estos ven al RAID como un único disco grande) y son bastante rápidos, lo que posibilita explorar íntegramente sus recursos. Su principal desventaja es ser caro.

Page 38: Estructuras de Archivos

38

El RAID basado en hardware, utiliza dispositivos denominados “controlado-res RAID”, que pueden ser conectados en slots PCI (Interconexión de Compo-nentes Periféricos) de la placa madre de la computadora. El RAID basado en soft-ware no es muy utilizado, pues a pesar de ser menos costoso, es más lento, posee más dificultades de configuración y depende del sistema operativo para tener una performance satisfactoria. Este tipo es dependiente del poder de procesamiento de la computadora en que es utilizado.

Por lo tanto, la tecnología RAID es uno de los principales conceptos cuando el tema en cuestión es el almacenamiento de datos seguro. Su eficiencia es com-probada por tratarse de una tecnología en uso hace varios años y que aún está vi-gente. Grandes empresas, como lntel, ofrecen soluciones RAID, y esa tecnología es posible encontrarla incluso en computadoras domésticas. Es muy probable que el RAID aún vaya a presentar nuevas funcionalidades, ampliando su uso para los más diversos tipos de necesidades de almacenamiento y acceso a datos.

1.3.3 Flash memory (Memoria Flash)

La memoria flash es una forma evolucionada de la memoria EEPROM (Me-moria de Solo Lectura Programable y Borrable Eléctricamente). Permite que múl-tiples posiciones de memoria sean escritas o borradas en una misma operación de programación mediante impulsos eléctricos, en comparación con otras que sólo permiten escribir o borrar una única celda cada vez. Por ello, flash permite funcionar a velocidades muy superiores cuando los sistemas emplean lectura y escritura en diferentes puntos de esta memoria al mismo tiempo.

Figura 1.17 Memoria flash

Características generales

Las memorias flash son de tipo no volátil, esto es, la información que alma-cenan no se pierde cuando se desconecta la corriente, es una característica muy

Page 39: Estructuras de Archivos

valorada por la multitud de usos en los que se emplea este tipo de memoria. Los principales usos de este tipo de memorias son pequeños dispositivos basados en el uso de baterías como teléfonos móviles, PDA (Asistente Digital Personal), pequeños electrodomésticos, cámaras de fotos digitales, reproductores portátiles de audio, etc.

Las capacidades de almacenamiento de estas tarjetas que integran memorias flash comenzaron en 128 MB pero actualmente se pueden encontrar en el mer-cado tarjetas de hasta 16 GB.

La velocidad de transferencia de estas tarjetas, al igual que la capacidad de las mismas, se ha incrementado progresivamente. La nueva generación de tarje-tas permitirá velocidades de hasta 30 MB/s.

El costo de estas memorias es muy bajo respecto a otro tipo de memorias si-milares como EEPROM y ofrece rendimientos y características muy superiores. No obstante, el costo por MB en los discos duros son muy inferiores a los que ofrece la memoria flash y, además los discos duros tienen una capacidad muy superior a la de las memorias flash. Ofrecen, además, características como gran resistencia a los golpes, bajo consumo y es muy silencioso, ya que no contiene ni actuadores mecánicos ni partes móviles. Su pequeño tamaño también es un factor determinante a la hora de escoger para un dispositivo portátil, así como su ligereza y versatilidad para todos los usos hacia los que está orientado.

Sin embargo, todos los tipos de memoria flash sólo permiten un número limitado de escrituras y borrados, generalmente entre 10,000 y un millón, de-pendiendo de la celda, de la precisión del proceso de fabricación y del voltaje necesario para su borrado.

Los sistemas de archivos para estas memorias están en pleno desarrollo aunque ya en funcionamiento, sin embargo, en la práctica se emplea un sistema de archivos FAT (Tabla de Asignación de Archivos) por compatibilidad, sobre todo en las tarjetas de memoria extraíble.

Otra característica de reciente aparición ha sido la resistencia térmica de algunos encapsulados de tarjetas de memoria orientadas a las cámaras digitales de gama alta. Esto permite funcionar en condiciones extremas de temperatura como desiertos o glaciares, ya que el rango de temperaturas soportado abarca desde los 25ºC hasta los 85ºC.

Page 40: Estructuras de Archivos

40

Las aplicaciones más habituales son:

• El llavero USB, además del almacenamiento, suele incluir otros servi-cios como radio FM (Frecuencia Modulada), grabación de voz y, sobre todo como reproductor portátil de MP3 y otros formatos de audio.

• Las computadoras personales card • Las tarjetas de memoria flash que son el sustituto del carrete en la foto-

grafía digital, ya que en las mismas se almacenan las fotos.

Existen varios estándares de encapsulados promocionados y fabricados por la mayoría de las multinacionales dedicadas a la producción de hardware.

Funcionamiento

Flash, como tipo de EEPROM, contiene un arreglo de celdas con un tran-sistor evolucionado con dos puertas en cada intersección. Tradicionalmente sólo almacenan un bit de información. Las nuevas memorias flash, llamadas también dispositivos de celdas multinivel, pueden almacenar más de un bit por celda variando el número de electrones que almacenan.

Estas memorias están basadas en el transistor FAMOS (Floating Gate Ava-lanche-Injection Metal Oxide Semiconductor) que es, esencialmente, un tran-sistor NMOS (Canal Negativo de Semiconductores de Óxido Metálico) con un conductor (basado en un óxido metálico) adicional entre la CG (Puerta de Control) y los terminales fuente/drenador contenidos en la FG (Puerta Flotan-te) o bien que rodea a FG y es quien contiene los electrones que almacenan la información.

Page 41: Estructuras de Archivos

Capítulo 2

REGISTROS, TIPOS Y OPERACIONES

ObjetivoIdentificar los límites de campos y registros,

así como su acceso y organización.

Page 42: Estructuras de Archivos
Page 43: Estructuras de Archivos

43

Plan general del capítulo

2.1 Definiciones

2.2 Registros físicos y lógicos

2.3 Registros de longitud fija y variable

2.4 Estructura interna de un registro, campos y llaves

2.5 Operaciones básicas sobre archivos y registros

2.1 Definiciones

A continuación se enlistan algunas definiciones básicas para una mejor comprensión de este capítulo.

Estructuras de Archivos: Organización impuesta a un archivo para fa-cilitar su procesamiento. Estas estructuras de archivos incluyen campos, registros, bloques, árboles, índices, secuencias y otras instrucciones con-ceptuales.

Registro: Es un tipo de dato estructurado que consta de un conjunto de elementos que pueden ser del mismo tipo o tipos diferentes. A cada elemento se le denomina campo.

Registro Lógico: Unidad completa de información que describe una co-lección o asociación de elementos de datos, basándose en su contenido más que en su localización física. Es opuesto al registro físico. Ejemplo: un obje-to que se maneja en el lenguaje Java.

Registro Físico: Corresponde a la cantidad de información que se trans-fiere en cada operación de lectura y escritura sobre un archivo. Es la unidad de información que se encuentra soportada físicamente por algún medio de almacenamiento.

Archivo: Es una colección de bytes que representa información almace-nada en algún dispositivo de almacenamiento secundario, generalmente en discos o cintas magnéticas.

Page 44: Estructuras de Archivos

44

Archivo Físico: Archivo que en realidad existe en el almacenamiento se-cundario. Es el archivo tal como lo conoce el sistema operativo y aparece en su directorio de archivos.

Archivo Lógico: Es el archivo visto por el programa. El uso de los archivos lógicos permite a un programa describir las operaciones que van a efectuarse en un archivo sin saber cual archivo físico se usará.

Campo: Es la unidad lógicamente significativa de un archivo.

Llave: Expresión derivada de uno o más campos dentro de un registro, que pueden usarse para ubicar el registro. A los campos usados para construir una llave se les denomina “campos llave”.

Administrador de archivos: Es la parte del sistema operativo responsable de la administración de archivos, que incluye un conjunto de programas cuyas responsabilidades van desde seguirle la pista a los archivos hasta llamar a los pro-cesos de E/S que transmiten la información entre los almacenamientos primario y secundario.

2.2 Registros físicos y lógicos

En la actualidad, para poder cumplir con los objetivos, cualquier empresa u organización necesita almacenar y manejar grandes cantidades de datos. Por ejemplo, se necesitan los datos de los empleados, de los clientes, proveedores, productos almacenados, etc.

Anteriormente, la gestión de los datos se realizaba manualmente, es decir, se organizaban en forma de fichas, informes o expedientes, colocándolos en car-petas y almacenándolos en archiveros. Por ejemplo, un archivo de clientes en el que cada ficha contenía todos los datos correspondientes a éste o un archivo de alumnos dónde cada ficha contendrá todos los datos de cada estudiante.

Es por ello, que la utilización de las computadoras en la administración de las empresas ha cambiado el concepto de almacenamiento y gestión de sus datos, dando lugar al uso de los denominados archivos informáticos y bases de datos.

En el contexto informático, un archivo es cualquier información permanente que se almacena en algún dispositivo de almacenamiento secundario y que es tratado como una unidad por el sistema operativo, el cual incluye órdenes tales

Page 45: Estructuras de Archivos

45

como crear, copiar y borrar archivos. Normalmente a cada archivo se le asocia un nombre y una extensión que lo identifica y diferencia del resto. Otros datos im-portantes asociados al archivo son su fecha, hora de creación y de actualización, el tamaño, permisos de acceso, etc. Ejemplo: en la figura 2.1 se muestran distintos tipos de archivos y los valores de sus atributos, tales como, tamaño, tipo, fecha y hora de modificación.

Figura 2.1 Tipos de archivos y valores de sus atributos

Los archivos pueden contener distintos tipos de información: datos, ins-trucciones de programas, imágenes, sonido, información de control, entre otros. Cabe mencionar que los datos no se guardan en una computadora al azar, sino que se estructuran y planifican de forma adecuada, según un determinado for-mato. Esta tarea es realizada habitualmente por analistas y programadores.

Archivos de datos

Desde el punto de vista físico, un archivo se almacena en un conjunto de clústers que ocupan un determinado número de sectores. En consecuencia, el tamaño real que ocupa un archivo en disco es relativo, por ejemplo un archivo de 200 bytes ocupará en disco el tamaño completo de un clúster. Si existen 2 sectores por clúster = 512 x 2 = 1.024 bytes = 1 KB, éste será el tamaño real del archivo.

Page 46: Estructuras de Archivos

46

Desde el punto de vista lógico, los archivos de datos suelen dividirse en uni-dades lógicas llamadas registros, que a su vez se dividen en campos. Es decir, un archivo es una estructura de datos que reside en memoria secundaria, consistente en un conjunto de información del mismo tipo y se agrupa en unidades de acceso denominadas registros.

Un registro lógico o simplemente registro es cada uno de las componentes del archivo, que contiene el conjunto de información correspondiente a cada ele-mento individual el cual se accede y se trata de manera unitaria. Está constituido por uno o más elementos denominados campos que pueden ser de diferentes tipos y que a su vez pueden estar compuestos por subcampos.

El campo es un conjunto de caracteres que constituye un dato del objeto o entidad cuya información se almacena y en el cual se deben establecer tres ca-racterísticas:

• Nombre del campo: permite rotular el mismo.• Tipo de campo: Establece que tipo de dato contiene el campo (alfabéti-

co, numérico, alfanumérico, entre otros)• Tamaño del campo: cantidad de caracteres que pueden almacenarse.En la figura 2.2 se ilustran los conceptos de registros, campos y nombres de

campos

Figura 2.2 Registros, campos y nombres de campos

Un registro puede tener un campo clave, cuyo valor sirve para identificar de forma única el registro, y, por tanto, dicho valor no puede aparecer repetido

Page 47: Estructuras de Archivos

47

en otro registro diferente. Sin embargo, puede suceder que un archivo no tenga campo clave en sus registros o, por el contrario, que tenga varios, denominándose a la principal clave primaria y a las demás secundarias.

Las claves simples están formadas por el valor de un solo campo, ejemplo, número del empleado. En cambio, las claves compuestas, por el valor de más de un campo, por ejemplo, código de localidad y número del empleado.

Si un archivo contiene la información de un conjunto de individuos u obje-tos, sus registros contienen la información de cada uno de ellos y los campos de los diferentes datos que la componen. Por ejemplo, en el archivo de personal de una empresa, cada registro contiene la información de un empleado y los campos contienen los datos asociados a ese empleado, tales como: código, nombre, di-rección, fecha de ingreso, etc. El campo dirección puede dividirse en subcampos tales como, calle y número. El campo clave puede ser el código.

Código 8654834Nombre Juan Manuel González HernándezDirección Av. Independencia 834Localidad GuanajuatoDepartamento FinanzasCategoría laboral ContadorFecha de ingreso 20 04 2009

Un registro físico o bloque corresponde a la cantidad de información que se transfiere físicamente en cada operación de acceso (lectura o escritura) sobre el exterior. Cuanto mayor sea el tamaño del bloque, menor será el número de acce-sos al dispositivo necesarios para procesar el archivo, lo que se traduce en una mayor velocidad de proceso.

Conviene separar claramente los conceptos de registro lógico y registro fí-sico, diferenciándose en que el tamaño y formato del registro lógico los define el programador mientras que el tamaño del registro físico viene dado por las ca-racterísticas físicas del soporte físico utilizado (disco, disquete, unidad de cinta, entre otros).

En general, un bloque tendrá capacidad para contener uno o más registros, pero también puede ocurrir que un registro ocupe más de un bloque.

Page 48: Estructuras de Archivos

48

Características de los archivos

• Residencia en soportes de información externos, también denominados memorias secundarias, masivas o auxiliares, como son las cintas y dis-cos.

• Independencia respecto de los programas. Significa que la vida del ar-chivo no está limitada por la vida del programa que lo creó, y también que el archivo puede ser utilizado por diferentes programas.

• Permanencia de la información almacenada. Es decir, toda la informa-ción almacenada en la memoria central desaparece cuando se termina la ejecución del programa que la maneja, pero para hacer desapare-cer un archivo será necesario realizar explícitamente una operación de borrado.

• Gran capacidad de almacenamiento. Teóricamente esta capacidad es ilimitada, está en función del soporte de almacenamiento. Por el con-trario, las estructuras de datos que residen en la memoria central tienen limitado su tamaño por la capacidad de ésta.

Clasificación de los archivos según su uso

A. Archivos permanentes: Contienen información que varía poco a lo largo del tiempo:• Archivos constantes: Contiene datos fijos para la aplicación. Su infor-

mación permanece prácticamente inamovible, utilizándose principal-mente como archivos de consulta. Un ejemplo puede ser el de la red del metro de una ciudad, que contiene la descripción, número de estaciones, número de trenes, etc., de cada línea.

• Archivos de situación: También denominados archivos maestros, con-tienen la información que refleja el estado o situación de una empresa o entidad, o algún aspecto de ella en un determinado momento. Estos ar-chivos se actualizan periódicamente para adaptarlos a cada nueva situa-ción. Un ejemplo es el archivo de personal en una empresa, o también el archivo de existencias en almacén.

• Archivos históricos: Se obtienen de los anteriores cuando se dejan fuera de uso para futuros estudios estadísticos o consultas. Será un archivo histórico el que contiene la información de libros adquiridos por una biblioteca en la década de los ochenta o un archivo con los pagos reali-

Page 49: Estructuras de Archivos

49

zados en los últimos 5 años ó el detalle de comprobantes considerados en un ejercicio contable ya cerrado.

B. Archivos de movimientos. En ellos se almacena la información que se uti-lizará para actualizar los archivos maestros. Sus registros, denominados movimientos o transacciones, pueden ser de tres tipos: altas, bajas y modi-ficaciones.• Una vez realizado el proceso de actualización de un archivo maestro

por medio de un archivo de movimientos, éste pierde su validez y no se necesita conservarlo.

• Un archivo de este tipo para actualizar el antes mencionado archivo de personal, es el que refleja las nuevas incorporaciones, finalizaciones de la relación laboral y modificaciones de los mismos producidas en la em-presa durante el mes actual.

C. Archivos de trabajo. Tienen una vida limitada, normalmente igual a la du-ración de la ejecución de un programa, y se utilizan como auxiliar de los anteriores. Por ejemplo, si se desea una lista alfabética del personal con-tratado, se hará por medio de un archivo de trabajo en el que se almacene esta información a partir del archivo de personal. Este archivo es temporal, desaparecerá una vez que se tenga la lista impresa.

2.3 Registros de longitud fija y variable

Los archivos se encuentran organizados lógicamente como una secuencia de registros de varias longitudes diferentes y se clasifican en:

Registros de longitud fija

Es la organización de archivos en la que todos los registros tienen la misma longitud. Los registros se completan con espacios nulos u otros caracteres de tal forma que extiende la longitud fijada. Puesto que todos los registros tienen la misma longitud es posible calcular la posición de inicio de cada registro haciendo posible el acceso directo.

Un enfoque sencillo consiste en ir colocando los registros fijos dentro del bloque de manera secuencial. Sin embargo, se presentan dos problemas:

1. Resulta difícil borrar un registro de esta estructura. Se debe rellenar el espacio ocupado por el registro que hay que borrar con algún otro regis-

Page 50: Estructuras de Archivos

50

tro del archivo o tener algún medio de marcar los registros borrados para que puedan pasarse por alto.

2. A menos que el tamaño de los bloques sea un múltiplo exacto del tama-ño del bloque (lo que resulta improbable), algunos de los registros se saltarán los límites de los bloques. Es decir, parte del registro se guar-dará en un bloque y parte en otro. Harán falta, por tanto, dos accesos a bloques para leer o escribir ese tipo de registros.

No resulta deseable desplazar los registros para ocupar el espacio libe-rado por los registros borrados, por la sobrecarga que supondría. Como las inserciones tienden a ser más frecuentes que los borrados, sí resulta en general aceptable dejar libre el espacio ocupado por los registros borrados y esperar a una inserción posterior para volver a utilizar ese espacio. Sin embargo, no basta con una simple marca en el registro borrado, dado que resulta difícil encontrar el espacio disponible mientras se realiza una inserción; es necesario introducir una estructura adicional.

Al comienzo del archivo se asigna cierto número de bytes como cabecera del archivo, los cuales contendrán gran variedad de información sobre el ar-chivo. Para guardar ahí la dirección del primer registro cuyo contenido ha sido borrado, se utiliza este primer registro para guardar la dirección del segundo registro disponible, y así sucesivamente. De manera intuitiva se pueden consi-derar estas direcciones guardadas como punteros, dado que indican la posición de un registro. Los registros borrados, por tanto, forman una lista enlazada a la que se suele denominar lista libre.

Al insertar un registro nuevo se utiliza el registro indicado por la cabece-ra. Se cambia el puntero de la cabecera para que apunte al siguiente registro disponible. Si no hay espacio disponible, se añade el nuevo registro al final del archivo.

Registro de longitud variable

Es una organización de archivo en donde los registros no tienen una longi-tud predeterminada; son tan largos como sea necesario y, por lo tanto, permiten un mejor uso del espacio que los de longitud fija. El único inconveniente es que no es posible calcular la distancia en bytes de un registro de este tipo puesto que no se sabe el tamaño que tienen sus campos.

Page 51: Estructuras de Archivos

51

Aunque los bloques sean de un tamaño fijo determinado por las propiedades físicas del disco y por el sistema operativo, los tamaños de los registros varían. En las bases de datos relacionales las tuplas de las diferentes relaciones suelen ser de tamaños distintos.

Existen diferentes técnicas para implementar los registros de longitud variable.

A. Representación en cadenas de bytes: Un método sencillo de implementar los registros de longitud variable es adjuntar un símbolo especial de fin de registro ( | ) al final de cada registro. Así se puede guardar cada registro como una cadena de bytes consecutivos. Otra alternativa de la representación en cadenas de bytes es guardar la longitud del registro al comienzo de cada re-gistro.Por lo tanto, la representación en cadenas de bytes presenta varios inconve-

nientes:

• No resulta sencillo volver a utilizar el espacio ocupado anteriormente por un registro borrado. Aunque existen técnicas para gestionar la in-serción y el borrado de registros, generan una gran fragmentación de disco.

• Por lo general, no queda espacio para el aumento del tamaño de los re-gistros. Si un registro de longitud variable aumenta de tamaño hay que desplazarlo (el movimiento puede resultar muy costoso).

También se puede utilizar una forma modificada de la representa-ción en cadenas de bytes, denominada estructura de páginas con ranuras, para organizar los registros de longitud variable dentro de cada bloque. En dicha estructura hay una cabecera al principio de cada bloque que contiene la información del número de elementos del registro de la ca-becera, el final del espacio vacío del bloque y un array cuyas entradas contienen la ubicación y el tamaño de cada registro.

Los registros reales se ubican de manera contigua en el bloque, em-pezando desde el final del mismo. El espacio libre dentro del bloque es contiguo, entre la última entrada del array de la cabecera y el primer registro. Si se inserta un registro se le asigna espacio al final del espacio libre y se añade a la cabecera una entrada que contiene su tamaño y su ubicación.

Page 52: Estructuras de Archivos

52

Al borrar un registro se libera el espacio que ocupa y se asigna el valor de “borrado” a su entrada (por ejemplo, se le asigna a su tamaño el valor de −1). Además, se desplazan los registros de bloque situados antes del registro borrado, de modo que se ocupe el espacio libre creado por el borrado y todo el espacio libre vuelve a hallarse entre la última entrada del arreglo de la cabecera y el primer registro. También se ac-tualiza de manera adecuada el puntero del final del espacio libre de la cabecera. Se puede aumentar o disminuir el tamaño de los registros utili-zando técnicas parecidas, siempre y cuando quede espacio en el bloque. El coste de trasladar los registros no es demasiado elevado, dado que el tamaño del bloque es limitado: un valor típico es cuatro kilobytes.

B. Representación de longitud fija: otra manera de implementar eficientemente los registros de longitud variable en un sistema de archivos es utilizar uno o varios registros de longitud fija para representar cada registro de longitud variable.

Hay dos técnicas para hacer esto:

• Espacio reservado. Si hay una longitud de registro máxima que no se supera nunca, se pueden utilizar registros de longitud fija de esa longi-tud. El espacio no utilizado por los registros más cortos se rellena con un símbolo especial de valor nulo o de final de registro.

• Representación con listas. El registro de longitud variable se represen-ta mediante una lista de registros de longitud fija, enlazada mediante punteros.

El método del espacio reservado resulta útil cuando la mayor parte de los registros son de una longitud cercana a la máxima. En caso contrario, se puede desperdiciar mucho espacio.

Un inconveniente de la representación con listas es que se desperdicia espacio en todos los registros excepto en el primero de la serie. Para resolver este problema se permiten en el archivo dos tipos de bloques:

• Bloque ancla, que contiene el primer registro de cada cadena.

• Bloque de desbordamiento, que contiene los registros que no son los primeros de sus cadenas.

Page 53: Estructuras de Archivos

53

2.4 Estructura interna de un registro

Es otro nivel de organización que se impone sobre los datos para preservar su significado. Los registros no necesariamente existen en el archivo en sentido físico; sin embargo, se constituye una noción lógica importante incluida en la estructura de archivos.

Métodos que se usan para organizar un archivo en registros:

1. Hacer los registros de una longitud predecible: Esta longitud puede medirse en términos de bytes o en términos del número de campos.• Es el método más utilizado.• Los registros contienen el mismo número de bytes.• Los registros son de longitud fija pero los campos pueden ser de longi-

tud variable.Existen 3 formas de volver constantes y predecibles las longitudes de los

registros.

a) Conteo de bytes: Registros de longitud fija con campos de longitud fija

10 10 15 9 9

JIMÉNEZ MANUEL MADERO 123 OCOTLÁN OK7210

MARTÍNEZ LUIS OCAMPO 84 LEÓN OK7426

b) Conteo de bytes: Registros de longitud fija con campos de longitud variable

JIMÉNEZ|MANUEL|MADERO 123|OCOTLÁN|OK7210| espacio en blanco

MARTÍNEZ|LUIS|OCAMPO 84|LEÓN|OK7426| espacio en blanco

c) Conteo de campos: 5 campos por registro

JIMÉNEZ|MANUEL|MADERO123|OCOTLÁN|OK7210|MARTÍNEZ|LUIS|OCAMPO 84|LEO…

2. Comenzar cada registro con un indicador de longitud: Se puede transmitir la longitud de los registros y hacerlos predecibles, comenzado cada registro con un campo que contenga un número entero que indique cuántos bytes hay en el resto del registro. Este método es muy utilizado en registros de longitud variable.

Page 54: Estructuras de Archivos

54

41JIMÉNEZ|MANUEL|MADERO 123|OCOTLÁN|OK7210|36MARTÍNEZ|LUIS|OCAM...

3. Usar un segundo archivo para mantener información sobre las direcciones de los registros: Se puede emplear un segundo archivo de índice para mante-ner la información sobre la distancia en bytes de cada registro en el archivo original. La distancia en bytes permite encontrar el comienzo de cada regis-tro sucesivo y calcular su longitud. Se busca la posición de un registro en el índice y después se alcanza el registro dentro del archivo de datos.

Archivo de DatosJIMÉNEZ|MANUEL|MADERO 123|OCOTLÁN|OK|7210|MARTÍNEZ|LUIS|OCAMPO 84|LEON|OK |7426|SOL...

00 41 78

Archivo de Índice

4. Colocar un delimitador al final de cada registro: Se coloca un delimitador ‘#’ al final de cada registro. La marca de fin de línea se usa frecuentemente como delimitador de registro.

JIMÉNEZ|MANUEL|MADERO 123|OCOTLÁN|OK|7210|#MARTÍNEZ|LUIS|OCAM...

2.5 Operaciones básicas sobre los archivos y registros

Operaciones básicas sobre los archivos

Las distintas operaciones que se pueden realizar a los registros de un archivo son:

A. Creación de un archivo Es la primera operación que sufrirá el archivo de datos. Implica la elec-

ción de un entorno descriptivo que permita un ágil, rápido y eficaz trata-miento del archivo.

Para utilizar un archivo, éste tiene que existir, es decir, la información de este archivo tiene que haber sido almacenada sobre un soporte y ser uti-lizable. La creación exige organización, estructura, localizar, observar el espacio en el soporte de almacenamiento y la transferencia del archivo de soporte antiguo al nuevo.

Page 55: Estructuras de Archivos

55

Un archivo puede ser creado por primera vez en un soporte, proceder de otro previamente existente en el mismo o diferente soporte, o ser el resultado de un cálculo o ambas cosas a la vez.

B. Consulta de un Archivo Es la operación que permite al usuario acceder al archivo de datos para

conocer el contenido de uno, varios o todos los registros.C. Actualización de un archivo

Es la operación que permite tener actualizado (puesto al día) el ar-chivo, de tal modo que sea posible realizar las siguientes operacio-nes con sus registros: Consulta del contenido de un registro. Inserción de un registro nuevo en el archivo. Supresión de un registro existente Modificación de un registro

D. Clasificación de un ArchivoUna operación muy importante en un archivo es la clasificación u ordena-

ción. Esta clasificación se realizará de acuerdo con el valor de un campo especí-fico, pudiendo ser ascendente (creciente) o descendente (decreciente): alfabética o numérica.

E. Reorganización de un archivo Las operaciones sobre archivos modifican la estructura inicial o la óp-

tima de un archivo. Lo índices, enlaces (punteros), zonas de sinóni-mos, zonas de desbordamiento, entre otros, se modifican con el paso del tiempo, lo que hace a la operación de acceso al registro cada vez más lenta.

La reorganización suele consistir en la copia de un nuevo archivo a partir del archivo modificado, a fin de obtener una nueva estructura lo más óptima posible.

F. Destrucción de un archivo Es la operación inversa a la creación de un archivo. Cuando se destruye

(anula o borra) un archivo, éste ya no se puede utilizar y por consiguien-te no se podrá acceder a ninguno de sus registros.

Page 56: Estructuras de Archivos

56

G. Reunión, fusión de un archivo Reunión: Esta operación permite obtener un archivo a partir de otros

varios. Fusión: Se realiza una fusión cuando se reúnen varios archivos en

uno solo, intercalándose unos en otros, siguiendo unos criterios de-terminados.

H. Rotura/ estallido de un archivo Es la operación de obtener varios archivos a partir de un mismo archivo

inicial.I. Abrir un archivo

La acción de abrir un archivo es permitir al usuario localizar y acceder a los archivos que fueron creados anteriormente.

La diferencia esencial entre una instrucción de abrir un archivo y crear un archivo reside en que el archivo no existe antes de utilizar crear y se supone que debe existir antes de utilizar abrir.

J. Cerrar archivo El propósito de la operación de cerrar un archivo es permitir al usuario

cortar el acceso o detener el uso del archivo, permitiendo a otros usua-rios acceder al archivo. Para ejecutar esta función, el sistema de trata-miento de archivos sólo necesita conocer el nombre del archivo que se debe cerrar, y que previamente debía estar abierto.

Mantenimiento de archivo

La operación de mantenimiento de un archivo incluye todas las operaciones que sufre un archivo durante su vida y desde su creación hasta su eliminación o borrado.

El mantenimiento de un archivo consta de dos operaciones diferentes: actua-lización y consulta.

La actualización es la operación de eliminar o modificar los datos ya existen-tes, o bien introducir nuevos datos. En esencia, es la puesta al día de los datos del archivo. Las operaciones de la actualización son: altas, bajas y modificaciones.

En cambio, las operaciones de consulta tienen como finalidad obtener in-formación total o parcial de los datos almacenados en un archivo y presentarlos

Page 57: Estructuras de Archivos

57

en dispositivos de salida: pantalla o impresora, bien como resultados o como listados.

Por lo tanto, todas las operaciones de mantenimiento de archivos suelen construir módulos independientes del programa principal y su diseño se realiza con subprogramas (subrutinas o procedimientos específicos).

Altas: consiste en la adición de un nuevo registro. En un archivo de emplea-dos, un alta consistiría en introducir los datos de un nuevo empleado. Para situar correctamente un alta se deberá conocer la posición donde se desea almacenar el registro correspondiente: al principio, en el interior o al final de un archivo.

Bajas: es la acción de eliminar un registro de un archivo. La baja de un regis-tro se puede presentar de dos formas distintas: indicación del registro específico que se desea bajar o bien visualizar los registros del archivo para que el usuario elija el registro a borrar. En esta operación la baja de un registro puede ser lógica o física. Una baja lógica supone el no borrado del registro en el archivo, la cual se manifiesta en un determinado campo del registro con una bandera, indicador o “flag”- carácter *, $, entre otros, o bien con la escritura o rellenado de espacios en blanco en el registro específico.

En cambio, una baja física implica el borrado y desaparición del registro de modo que se crea un nuevo archivo que no incluye al registro dado de baja.

Modificaciones: consiste en la operación de cambiar total o parcialmente el contenido de uno de sus registros. Esta fase es típica cuando cambia el contenido de un determinado campo de un archivo; por ejemplo, la dirección o la edad de un empleado.

La forma práctica de modificar un registro es la visualización del conteni-do de sus campos; para ello se debe elegir el registro o registros a modificar. El proceso consistente en la lectura del registro, modificación de su contenido y escritura, total o parcial del número.

Consulta: tiene como finalidad visualizar la información contenida en el ar-chivo, de un modo completo o bien, de modo parcial. Estas operaciones deben contemplar diversos aspectos que faciliten la posibilidad de conservación de da-tos. Los aspectos más interesantes a tener en cuenta son:

Opción de visualización en pantalla o listado en impresora

Page 58: Estructuras de Archivos

58

Detención de la consulta a la voluntad del usuario. Listado por registros o campos individuales o bien listado total del

archivo (en este caso deberá existir la posibilidad de impresión de listados, con opciones de saltos de página correctos).

Operaciones sobre registros

Un registro es un conjunto organizado de datos del mismo o diferente tipo, que están relacionados entre sí por contener información relativa a una entidad particular y superior, de la que forman parte y los unifica.

Los registros están compuestos por campos. Un campo es una unidad míni-ma de información, dentro del registro, independiente de las demás. Representa un concepto global en la finalidad unitaria del registro y se caracteriza por el tipo de datos asociados y el tamaño de memoria que necesita para su almacenamiento. El campo se puede dividir en subcampos.

Para distinguir algunos registros que contienen los mismos campos se recurre a un campo que contiene información única o diferente que se le llama clave.

Tipos de Registros

Registro Lógico. Cada uno de los componentes de un archivo que posee una estructura para almacenar información referente a un tema general del archivo. Diseñado por el programador.

Registro Físico. Información que el sistema puede transferir como una uni-dad, en una sola operación de entrada o salida. Registros según la longitud de sus campos:

• Registros de Longitud Fija. Su tamaño no varía. En cuanto a su es-tructura interna, el registro puede tener el mismo número de campos de igual longitud cada uno, o diverso número de campos de dife-rentes longitudes. En ambos casos la suma de las longitudes de los campos es la misma para cada registro.

• Registros de Longitud Variable. Su tamaño varía de un registro a otro. Su longitud variable puede estar determinada por un valor máximo o también sin ninguna limitación. Entre las agrupaciones estructuradas de registros se tienen los archivos de datos y las bases de datos.

Page 59: Estructuras de Archivos

59

Operaciones sobre Registros

Aquí se analizan las operaciones que solo afectan a algunos registros. Todas estas operaciones necesitan la operación de búsqueda como preliminar para loca-lizar los registros deseados.

Recuperación (Consultas y Listados). Consiste en acceder a los registros de un archivo para obtener una información determinada, almacenada en el.

• Consultas: Se accede a uno o varios registros determinados de un archi-vo y se visualiza el contenido de sus campos, por impresora o pantalla.

• Listados: La visualización de la información es una lista ordenada. Actualización o Mantenimiento. Consiste en introducir nuevos datos en el

archivo o en eliminar o modificar los ya existentes.

• Inserciones: Se introducen uno o varios registros en un archivo, ya crea-do, al final o en cualquier lugar del mismo.

• Borrados: Se eliminan uno o varios registros del archivo, borrando su contenido definitivamente o prohibiendo su acceso.

• Modificaciones: Consiste en cambiar los datos de uno o varios campos de cualquier registro de archivo.

Page 60: Estructuras de Archivos
Page 61: Estructuras de Archivos

Capítulo 3ORGANIzACIÓN Y MANEJO DE ARCHIVOS

ObjetivoExaminar las limitaciones y ventajas de los métodos de clasificación

y recuperación de información en los archivos.

Page 62: Estructuras de Archivos
Page 63: Estructuras de Archivos

63

Plan general del capítulo

3.1 Definición de clases para manejo de archivos3.2 Organización de archivos3.2.1 Secuencial, estructura y operaciones3.2.2 Directa, estructura y operaciones3.2.3 Indexada, estructura y operaciones3.3 Organización basada en listas

3.1 Definición de clases para el manejo de archivos

Todos los lenguajes de programación tienen alguna forma de interactuar con los sistemas de archivos locales y Java no es una excepción. El procesamien-to de archivos es una de las herramientas más importantes que debe tener un lenguaje para soportar las aplicaciones comerciales, que generalmente procesan cantidades masivas de datos persistentes. Java tiene poderosas características de procesamiento de archivos y flujos de entrada/salida, las cuales permiten a un programa leer y escribir bytes en memoria, en archivos y a través de conexiones de red.

Archivos

Java considera a cada archivo como un flujo secuencial de bytes. Cada sis-tema operativo proporciona un mecanismo para determinar el fin de un archivo, bien sea con un marcador de fin de archivo o la cuenta de bytes totales. Antes de realizar acciones sobre un archivo, se requiere un poco de información sobre éste. La clase File proporciona muchas utilidades, y la obtención de información básica relacionadas con archivos.

Creación de un objeto File

Para crear un objeto File nuevo, se puede utilizar cualquiera de los tres constructores siguientes:

File miArchivo;miArchivo = new File( “c:\directorio\archivo” ); omiArchivo = new File( “ c:\directorio”,”archivo” );

Page 64: Estructuras de Archivos

64

o

File miDirectorio = new File( “ c:\directorio” );miArchivo = new File( miDirectorio,”archivo” );El constructor utilizado depende a menudo de otros objetos File necesarios

para el acceso. Por ejemplo, si sólo se utiliza un archivo en la aplicación, el pri-mer constructor es el mejor. Si en cambio, se utilizan muchos archivos desde un mismo directorio, el segundo o tercer constructor serán más cómodos. Y si el directorio o el archivo es una variable, el segundo constructor será el más útil.

Comprobaciones y utilidades

Una vez creado un objeto File, se puede utilizar uno de los siguientes méto-dos para reunir información sobre el archivo:

- Nombres de archivoString getName( )String getPath( )String getAbsolutePath( )String getParent( )boolean renameTo( File nuevoNombre )

- Comprobacionesboolean exists( )boolean canWrite( )boolean canRead( )boolean isFile( )boolean isDirectory( )boolean isAbsolute( )

- Información general del archivolong lastModified( )long length( )

- Utilidades de directorioboolean mkdir( )String [ ] list( )

El siguiente código es una pequeña aplicación que muestra información so-bre archivos en lenguaje java.

Page 65: Estructuras de Archivos

65

import java.io.*;

class InfoArchivo{public static void main( String args[] ) throws IOException {

File f = new File( “C:\\Users\\Ejemplo\\Documents\\Archivos\\nuevo.txt” );

System.out.println( “Nombre: “+f.getName( ) );System.out.println( “Camino: “+f.getPath( ) );if( f.exists( ) ) { System.out.print( “Archivo existente “ ); System.out.print( (f.canRead( ) ? “ y se puede Leer” : “ y no se puede

leer” ) ); System.out.print( (f.canWrite( ) ? “ y se puede Escribir” : “ y no

se puede escribir” ) ); System.out.println( “.” ); System.out.println( “La longitud del archivo son “+ f.length( )+”

bytes” ) } else System.out.println( “El archivo no existe.” ); }}

Figura 3.1 Programa que muestra información sobre un archivo hecho en java

Cuya salida será:

Nombre: nuevo.txtCamino: C:\Users\Ejemplo\Documents\Archivos\nuevo.txtArchivo existente y se puede Leer y se puede Escribir.La longitud del archivo son 105 bytes

Streams de entrada

Hay muchas clases dedicadas a la lectura de datos desde un archivo, a continuación se presenta el esquema de la jerarquía de clases de entrada por archivo:

Page 66: Estructuras de Archivos

66

InputStream

SecuenceInputStream

PipedInputStreamFilterInputStream StringBufferInputStream

ByteArrayInputStream

FileInputStream

DataInputStream

PushbackInputStream

LineNumberInputStream

BufferedInputStream

Figura 3.2 Jerarquía de clases de entrada por archivo

Objetos FileInputStream

Los objetos FileInputStream típicamente representan archivos de texto ac-cedidos en orden secuencial, byte a byte. A través de esta clase se puede elegir acceder a un byte, varios bytes o al archivo completo.

Apertura de un FileInputStream

Para abrir un FileInputStream sobre un archivo, se le envía al constructor un String:

FileInputStream miArchivoSt; miArchivoSt = new FileInputStream( “c:\\directorio\\archivo” );

o un objeto File:

File miArchivo; FileInputStream miArchivoSt; miArchivo = new File( “todos.txt “ ); miArchivoSt = new FileInputStream (miArchivo );

Lectura de un FileInputStream

Una vez abierto el FileInputStream, se puede leer de él mediante el método read( ) el cual tiene muchas opciones:

int read( )

Lee un byte y devuelve -1 al final del stream.

Page 67: Estructuras de Archivos

67

int read( byte b[] )

Intenta leer hasta b.length bytes situándolos en b y devuelve el número real de bytes que se leyeron con éxito ó -1 si se alcanzó el final del stream.

int read( byte b[],int offset,int longitud)

Intenta leer el numero de bytes que se indicaron en el parámetro longitud dentro de b, comenzando por b[offset] y devuelve el número de bytes que se leyeron con éxito ó -1 si se alcanzó el final del stream.

Cierre de FileInputStream

Cuando se termina con un archivo, existen dos opciones para cerrarlo: explí-citamente, o implícitamente cuando se recicla el objeto.

Para cerrarlo explícitamente, se utiliza el método close( ):

miArchivoSt.close( );

Objetos DataInputStream

Los objetos DataInputStream se comportan como los FileInputStream. Los streams de datos pueden leer cualquier tipo de datos primitivo de java, como float, int o char. Generalmente se utilizan DataInputStream con archivos binarios.

Apertura y cierre de DataInputStream

Para abrir y cerrar un objeto DataInputStream, se utilizan los mismos méto-dos que para FileInputStream:

DataInputStream miDStream;FileInputStream miFStream;

// Obtiene un controlador de archivomiFStream = new FileInputStream ( “c:\\directorio\\archivo.dat” );

//Relaciona o encadena un archivo de entrada de datosmiDStream = new DataInputStream( miFStream );

// Ahora se pueden utilizar los dos streams de entrada para acceder al archivo (vea los siguientes ejemplos:) miFStream.read();int i = miDStream.readInt( );

Page 68: Estructuras de Archivos

68

// Cierra el archivo de datos explícitamente, siempre se cierra primero el archivo stream de mayor nivel

miDStream.close( );miFStream.close( );

Lectura de un DataInputStream

Al acceder a un archivo como DataInputStream, se pueden utilizar los mis-mos métodos read( ) de los objetos FileInputStream. No obstante, también se tiene acceso a otros métodos diseñados para leer cada uno de los tipos de datos:

byte readByte( )int readUnsignedByte( )

short readShort( ) int readUnsignedShort( ) char readChar( ) int readInt( ) long readLong( ) float readFloat( ) double readDouble( ) String readLine( )

Cada método leerá un objeto del tipo pedido, y en el caso del método String readLine( ), se marca el final de la cadena con \n, \r, \r\n o con EOF (end of file).

Ejemplo:

Para leer un int: int numeroSerie;

...

numeroSerie = miDStream.readInt( );

Streams de salida

Lo opuesto a la lectura de datos es la escritura de datos, y de la misma mane-ra que con los streams de entrada, las clases de salida están ordenadas jerárquica-mente de la siguiente manera:

Page 69: Estructuras de Archivos

69

OutputStream

FileOutputStream

PipedOutputStream FilterOutputStreamByteArrayOutputStream

DataOutputStreamPrintStream

BufferedOutputStream

Figura 3.3 Jerarquía de clases de salida por archivo

A continuación se examinarán las clases FileOutputStream y DataOutputS-tream para complementar los streams de entrada que se han visto.

Objetos FileOutputStreamLos objetos FileOutputStream son útiles para la escritura de archivos de tex-

to, para ello se requiere abrir el archivo primeramente para luego escribir en el.Apertura de un FileOutputStreamPara abrir un objeto FileOutputStream, de la misma manera que con los

stream de entrada, se envían al constructor un String o un objeto File.Para abrir un FileOutputStream sobre un archivo, se le envía al constructor

un String: FileOutputStream miArchivoSt; miArchivoSt = new FileOutputStream( “c:\\directorio\\archivo” );o un objeto File: File miArchivo; FileOutputStream miArchivoSt; miArchivo = new File( “todos.txt “ ); miArchivoSt = new FileOutputStream (miArchivo );Escritura en un FileOutputStreamUna vez abierto el archivo, se pueden escribir bytes de datos utilizando el

método write( ). Como con el método read( ) de los streams de entrada, tenemos tres posibilidades:

Page 70: Estructuras de Archivos

70

void write( int b );Escribe un byte.

void write( byte b[] );Escribe todo el array, si es posible.

void write( byte b[],int offset,int longitud );Escribe longitud bytes en b comenzando por b[offset].

Cierre de FileOutputStream

Para cerrar un stream de salida se puede utilizar el método explícito:

miArchivoSt.close( );

O se puede dejar que el sistema de forma automática cierre el archivo cuando se recicle miArchivoSt.

Ejemplo: Almacenamiento de Información

El siguiente programa, solicita al usuario una lista de nombres y números de teléfono. Cada nombre y número se añade a un archivo situado en una locali-zación fija. Para indicar que se ha introducido toda la lista, el usuario especifica “Fin” ante la solicitud de entrada del nombre.

El código fuente del programa es el siguiente:import java.io.*;class Telefonos { static FileOutputStream fileDeSalida; public static final int longLinea = 40; //número máximo de caracteres aceptados en cada línea private static void leeLinea( byte linea[] ) throws IOException { int b = 0; int i = 0; while( (i < ( longLinea-1) ) && ( ( b = System.in.read( ) ) != ‘\n’ ) ) linea[i++] = (byte) b; linea[i] = (byte)0; } public static void main( String args[] ) throws IOException { byte tel[] = new byte[longLinea]; byte nombre[] = new byte[longLinea]; fileDeSalida = new FileOutputStream( “telefono.dat” ); while( true ) { System.err.println( “Teclee un nombre (‘Fin’ termina)” ); leeLinea( nombre ); // el ciclo terminará si el nombre capturado es “fin” if( “fin”.equalsIgnoreCase( new String( nombre,0,0,3 ) ) ) break; // si el nombre capturado es diferente a fin, soliciará el número de telefono System.err.println( “Teclee el número de teléfono” ); leeLinea( tel );

Page 71: Estructuras de Archivos

71

//escribe en el archivo el telefono for( int i=0; tel[i] != 0; i++ ) fileDeSalida.write( tel[i] ); fileDeSalida.write( ‘,’ ); //escribe en el archivo el nombre for( int i=0; nombre[i] != 0; i++ ) fileDeSalida.write( nombre[i] ); fileDeSalida.write( ‘\r’ ); fileDeSalida.write( ‘\n’ ); } fileDeSalida.close( ); } }

Figura 3.4 Programa que permite cerrar un stream de salida

En la ejecución del programa se puede observar lo siguiente:

Figura 3.5 Captura de datos para almacenamiento de información

Una vez que el usuario ha terminado de teclear la lista, el programa creará un archivo de salida que contiene los datos antes capturados:

Figura 3.6 Creación de archivo de salida para almacenamiento de información

Page 72: Estructuras de Archivos

72

Streams de salida con buffer

Si se trabaja con gran cantidad de datos, o se escriben muchos elementos pequeños, será una buena idea utilizar un stream de salida con buffer. Los streams con buffer ofrecen los mismos métodos de la clase FileOutputStream, pero toda salida se almacena en un buffer. Cuando se llena el buffer, se envía a disco con una única operación de escritura; o, en caso necesario, se puede enviar el buffer a disco en cualquier momento.

Creación de Streams de salida con buffer

Para crear un stream BufferedOutput, primero se necesita un stream Fi-leOutput normal y posteriormente se añade un buffer al stream:

FileOutputStream miFileStream;BufferedOutputStream miBufferStream; // Obtiene un controlador de archivomiFileStream = new FileOutputStream( “c:\\directorio\\archivo” ); // Encadena o relaciona un stream de salida con buffermiBufferStream = new BufferedOutputStream( miFileStream );

Volcado y Cierre de Streams de salida con buffer

Al contrario que los streams FileOutput, cada escritura al buffer no se co-rresponde con una escritura en disco. A menos que se llene el buffer antes de que termine el programa, cuando se quiera volcar el buffer explícitamente se debe hacer mediante una llamada a flush( ):

// Se fuerza para realizar el volcado del buffer a disco miBufferStream.flush( ); // Cerrar el archivo de datosmiBufferStream.close( );

miFileStream.close( );

Streams DataOutput

Java también implementa una clase de salida complementaria a la clase Da-taInputStream. Con la clase DataOutputStream se pueden escribir datos binarios en un archivo.

Apertura y cierre de objetos DataOutputStream

Page 73: Estructuras de Archivos

73

Para abrir y cerrar objetos DataOutputStream, se utilizan los mismos méto-dos que para los objetos FileOutputStream:import java.io.*;class InfoArchivo{public static void main(String args[]) {

try{ String cadena=”escribe esta cadena en el archivo dataS-

tream.txt”; DataOutputStream miDataStream;

FileOutputStream miFileStream; BufferedOutputStream miBufferStream; // Obtiene un controlador de archivo miFileStream = new FileOutputStream( “C:\\Users\\Ejemplo\\Docu-

ments\\Archivos\\dataStream.txt” ); // Encadena un stream de salida con buffer (por eficiencia) miBufferStream = new BufferedOutputStream( miFileStream ); // Encadena un archivo de salida de datos miDataStream = new DataOutputStream( miBufferStream ); miDataStream.writeBytes(cadena); //escribe en el archivo el con-

tenido de la variable cadena // Cierra el archivo de datos explícitamente miDataStream.close( ); miBufferStream.close( ); miFileStream.close( );} catch(IOException e){ System.out.println(“error en el archivo”); } } }

Figura 3.7 Programa para abrir y cerrar objetos con las instrucciones Da-taOutputStream y FileOutputStream

Escritura en un objeto DataOutputStream

Cada uno de los métodos write( ) accesibles por los FileOutputStream tam-bién lo son a través de los DataOutputStream además de los métodos comple-mentarios:

Page 74: Estructuras de Archivos

74

void writeBoolean( boolean b ); void writeByte( int i ); void writeShort( int i ); void writeChar( int i ); void writeInt( int i ); void writeFloat( float f ); void writeDouble( double d ); void writeBytes( String s ); void writeChars( string s );Para las cadenas, se tienen dos posibilidades: bytes y caracteres, la diferencia

radica en que los bytes son objetos de 8 bits y los caracteres lo son de 16. Si las cadenas que se están utilizando son caracteres Unicode, se deben escribir con el método writeChars( ).

Contabilidad de la salida

Otra función muy útil durante la escritura (salida) es el método size( ), el cual devuelve el número total de bytes escritos en el archivo. Por ejemplo si se anexara la siguiente línea System.out.println(miDataStream.size( )); después de escribir la cadena en miDataStream, ésta visualizaría en el número de caracteres escritos con el método write.

3.2 Organización de archivos

El soporte es el medio físico donde se almacenan los datos, existen 2 tipos de soporte utilizados en la gestión de archivos son:

Soportes secuenciales Soportes direccionables

Los soportes secuenciales son aquellos en los que los registros de informa-ción están escritos unos a continuación de otros y para acceder a un determinado registro n, se necesita pasar por los n-1 registros anteriores. La secuencia puede corresponder al orden físico de los registros en el archivo (organización secuen-cial) o bien al orden de claves (ascendente o descendente) de los registros (orga-nización indexada).

Los soportes direccionables se estructuran de modo que la información al-macenada se puede localizar directamente por su dirección y no se requiere pasar

Page 75: Estructuras de Archivos

75

por los registros precedentes. En estos soportes los registros deben poseer un campo clave los diferencie del resto de los registros del archivo. Una dirección en un soporte direccionable puede ser un número de pista y un número de sector en un disco.

Un ejemplo típico de los soportes direccionables son los discos magnéticos, aunque también pueden actuar como soporte secuencial.

Según las características del soporte empleado y el modo en que se han or-ganizado los registros, se consideran dos tipos de acceso a los registros de un archivo:

Acceso secuencial Acceso directo

El acceso secuencial implica el acceso a un archivo según el orden de alma-cenamiento de sus registros, uno tras otro, este modo tiene que ver con la manera en que son accedidos los datos sin importar el tipo de almacenamiento que se haya utilizado (secuencial o direccionable). En cambio, el acceso directo implica el acceso a un registro determinado, y por tanto omite la consulta de los registros precedentes. Este tipo de acceso sólo es posible si la información se encuentra almacenada en soportes direccionables.

La organización de un archivo define la forma en la que los registros se disponen o se colocan en el soporte de almacenamiento, o también se define la organización como la forma en que se estructuran los datos en un archivo. En general, se consideran tres organizaciones fundamentales:

Organización secuencial Organización directa o aleatoria Organización secuencial indexada

3.2.1 Secuencial, estructura y operaciones

Un archivo con organización secuencial es una sucesión de registros almace-nados consecutivamente en el soporte externo, de tal modo que para acceder a un registro i dado, es obligatorio pasar por todos los i-1 elementos que le preceden.

Los registros se graban consecutivamente cuando el archivo se crea y se debe acceder consecutivamente cuando se leen dichos registros.

Page 76: Estructuras de Archivos

76

Acceso secuencial

Registro 1 Registro 2 Registro 3 Registro 4 … Registro n Inicio del Archivo Final de Archivo

Figura 3.8 Archivo con organización secuencial

Para este tipo de organización El orden físico en que fueron grabados (escritos) los registros es el

orden de lectura de los mismos. Todos los tipos de dispositivos de memoria auxiliar soportan la or-

ganización secuencial. Los archivos organizados secuencialmente contienen un registro

particular (el último) que contiene una marca de fin de archivo (EOF o bien FF).

3.2.2 Directa, estructura y operaciones

En un archivo con esta organización, también denominada relativa, las in-formaciones se colocan y se acceden aleatoriamente mediante su posición, es decir, indicando el lugar relativo que ocupan dentro del conjunto de posiciones posibles. Un archivo está organizado en modo directo cuando el orden físico no se corresponde con el orden lógico.

Se utiliza esta forma de organización cuando existe la necesidad de acceder a registros individuales directamente. Esta organización tiene la ventaja de que se pueden leer y escribir registros en cualquier orden y posición, además de ser rápidos de acceso a la información que contienen. Es importante comprender que el ordenamiento lógico de los registros no necesita tener ninguna relación con su secuencia física. Los registros no necesariamente aparecen físicamente ordena-dos de acuerdo al valor de sus llaves.

Acceso Directo

Registro 2 Registro 1 Registro 5

Posición 1 Posición 2 Posición 3 Posición 4 Posición 5Figura 3.9 Archivo con organización directa

Page 77: Estructuras de Archivos

77

Tiene el inconveniente de que se necesita programar mediante una función de mapeo, la relación existente entre el contenido de un registro y la posición física que ocupa y su desventaja radica (dependiendo de la función) en que diferentes valores de llaves pueden presentar una misma dirección, es decir, se presentan colisiones. Otra desventaja puede ser el desperdicio de espacio debido a la distribución al azar de los registros por la posible existencia de huecos libres dentro del soporte.

Las condiciones para que un archivo sea de organización directa son:

Almacenado en un soporte direccionable Los registros deben contener un campo específico denominado cla-

ve que identifica cada registro de modo único; es decir, dos registros distintos no pueden tener un mismo valor de clave.

Existencia de una correspondencia entre los posibles valores de la clave y las direcciones disponibles sobre el soporte.

El principal soporte direccionable normalmente es un disco, donde cada po-sición se localiza por su dirección absoluta, que en el caso del disco suele venir definida por dos parámetros, número de pista y número de sector o bien por tres parámetros pista, sector y número de cilindro; un cilindro i es el conjunto de pis-tas de número i de cada superficie de almacenamiento de la pila.

En la práctica el programador no gestiona directamente direcciones absolu-tas, sino direcciones relativas respecto al principio del archivo (este es un proceso transparente), por tanto, la manipulación de direcciones relativas permite diseñar el programa con independencia de la posición absoluta del archivo en el soporte, lo que el programador hace, es crear una relación perfectamente definida entre la clave indicativa de cada registro y su posición física dentro del dispositivo de almacenamiento.

3.2.3 Indexada, estructura y operaciones

Esta organización tiene como objetivo fundamental organizar de manera efectiva una colección de registros para facilitar y agilizar su acceso. La infor-mación almacenada y basada en esta organización consta de dos archivos, un archivo índice y un archivo de datos.

Page 78: Estructuras de Archivos

78

En los archivos indexados pueden verse como un conjunto de registros, los que pueden accesarse mediante una clave.

Este tipo de archivos consta de 2 partes:

área principal área de índices

En el área principal se almacenan los registros, con los datos, al momento de crear el archivo. El archivo es creado secuencialmente, es decir, se escriben los registros en el archivo primario en una secuencia indicado por el ordenamiento previo de las claves. Esta área incluye a todos los campos de cada registro.

Mientras tanto, el área de índices es creada por el sistema, y contiene tantos registros como registros existan en el área principal. Cada registro del área de índices consta de 2 campos: clave de los registros y un puntero al registro en el área principal.

Archivo de Índices

Clave Dirección

15 3

24 7

36 1

54 5

.

.

.

240 8

Figura 3.10 Archivos con organización indexada

Un archivo está organizado en esta forma si:

Cada registro contiene un campo clave

Los registros están almacenados en un soporte direccionable

El índice contienen la clave del registro y la dirección de acceso al registro

Page 79: Estructuras de Archivos

79

Entre las principales ventajas se encuentran un rápido acceso y el sistema de gestión de archivos se encarga de relacionar la posición de cada registro con su contenido mediante la tabla de índices. Mientras que sus desventajas principales están el desaprovechamiento del espacio por quedar huecos intermedios cada vez que actualiza el archivo y que se requiere espacio adicional para el área de índi-ces.

Los soportes que se utilizan para esta organización son los que permiten el acceso directo. Los soportes de acceso secuencial no pueden utilizarse, ya que no dispone de direcciones para sus posiciones de almacenamiento.

3.3 Organización basada en listas Listas

Las listas son una sucesión de cero o más elementos, las cuales se clasifican en varios tipos: enlazadas, no enlazadas, ordenadas y no ordenadas.

La diferencia que existe entre las listas enlazadas y las no enlazadas es que las enlazadas utilizan punteros, es decir, asignación dinámica de memoria, lo que optimiza la gestión de la misma. Una lista no enlazada es un simple array, y por lo tanto es un bloque contiguo de memoria, mientras que una lista enlazada es un conjunto de nodos que no necesariamente tienen porque ocupar posiciones conti-guas de memoria, así mismo, la diferencia entre listas ordenadas y no ordenadas es obvia, las ordenadas mantienen cierto orden entre sus elementos.

Una lista enlazada es una sucesión de nodos en la que a partir de un nodo se puede acceder al que ocupa la siguiente posición en la lista. Esta característica nos indica que el acceso a las listas es secuencial y no indexado, por lo que para acceder al último elemento de la lista hay que recorrer los n-1 elementos previos (n es el tamaño de la lista).

Para que un nodo pueda acceder al siguiente y la lista no se rompa en varias listas, cada nodo tiene que tener un puntero que guarde la dirección de memoria que ocupa el siguiente elemento. De esta forma un nodo se podría representar esquemáticamente así:

información puntero

Figura 3.11 Representación gráfica de un nodo

Page 80: Estructuras de Archivos

80

En el campo información se almacena el objeto a guardar y el puntero man-tendrá la conexión con el nodo siguiente. De esta forma al ir añadiendo nodos se iría formando una sucesión de nodos encadenados mediante punteros.

información puntero información puntero información puntero

Figura 3.12 Almacenamiento de datos en un nodo

Operaciones básicas de las listas

En toda estructura de datos hay dos operaciones que sobresalen por encima del resto: insertar y borrar. Estas dos operaciones aparecerán en toda estructura de datos, y aunque el nombre puede variar o con una funcionalidad ligeramente diferente, en esencia la filosofía es la misma: proporcionar unas operaciones para la construcción de la estructura de datos.

Insertar. La operación insertar consiste en la introducción de un nuevo ele-mento en la lista.

En una lista no ordenada no es necesario mantener ningún orden, por lo tanto la inserción de elementos se puede realizar en cualquier lugar de la lista, al prin-cipio, al final o en una posición aleatoria. Generalmente se realiza la inserción de tal forma que la complejidad temporal sea mínima, es decir, que sea una opera-ción sencilla para que se realice en el menor tiempo posible. La operación más sencilla depende de la implementación de la estructura de datos, en unos casos puede ser la inserción al inicio, en otros la inserción al final.

Borrar. La operación borrar consiste en la eliminación de la lista de un ele-mento concreto.

El elemento a borrar será escogido por el programador. La eliminación en una lista no conlleva ningún trabajo adicional más que el propio de la elimina-ción del elemento en sí. Para borrar un elemento cualquiera habría que realizar un recorrido secuencial de la lista hasta encontrar el nodo buscado y una vez localizado reestructurar los punteros para saltarse el nodo a borrar y así poder eliminarlo.

Page 81: Estructuras de Archivos

81

Otras operaciones

A partir de estas dos operaciones básicas cada lista puede presentar muchas operaciones diferentes, algunas de ellas son las siguientes además de las dos bá-sicas anteriores.

• Tamaño: Esta operación suele informar sobre el número de elementos que tiene en ese instante la lista.

• Buscar: Comprueba si existe un determinado elemento en la lista. • Recorrer lista: Recorre toda la lista, realizando una operación en cada nodo. Por

ejemplo, mostrar el contenido por pantalla. Listas ordenadas

Las listas ordenadas con exactamente lo mismo que las listas no ordenadas excepto en una característica adicional, sus elementos mantienen un orden. El orden que mantienen los elementos de una lista ordenada depende de la imple-mentación de la lista. Según las necesidades del programador la lista puede estar ordenada alfabéticamente, ordenada por números, o por cualquier clave ordinal, es decir, que mantenga cierto orden.

Operaciones básicas de las listas ordenadas

Como en el caso de las listas no ordenadas hay dos operaciones fundamen-tales, insertar y borrar. El borrado de un elemento es idéntico en el caso de una lista ordenada que en una lista no ordenada, la diferencia consiste en la operación de inserción.

Insertar

El procedimiento de añadir un nuevo elemento a una lista ordenada es ligera-mente más complejo que en una lista desordenada. Cuando una lista es ordenada hay que mantener el orden siempre, para ello hay que tener especial cuidado al modificar la estructura de datos.

El procedimiento para insertar un elemento es:

• Buscar el lugar adecuado en la lista para el elemento a insertar. • Efectuar la inserción en el lugar buscado. El proceso de búsqueda se suele realizar generalmente mediante una búsque-

da secuencial. De esta forma se recorrerá la lista empezando por el inicio hasta encontrar el lugar adecuado para llevar a cabo la inserción.

Page 82: Estructuras de Archivos

82

Supóngase se tiene la siguiente lista:

2 5 9

(a)

Y se desea insertar el elemento 7, la lista sufrirá los siguientes cambios:

Paso 1: Búsqueda secuencial de la posición adecuada para insertar el ele-mento nuevo en la lista. La búsqueda es para llegar al elemento 9, ya que es mayor que el elemento a insertar, y por lo tanto, el elemento 9, debe estar en una posición posterior al nuevo elemento.

Anterior Actual

2 5 9

(b)

Seguidamente, para poder realizar la inserción hay que recorrer la lista man-teniendo dos referencias, una al nodo actual y otra al nodo anterior.

Paso 2: Inserción del elemento 7 en la posición entre los elementos 5 y 9. Para realizar esta operación se reestructuran los punteros del nodo que contiene al elemento 5 y del nuevo nodo. El nuevo nodo pasa a contener una referencia al nodo actual (elemento 9), mientras que el nodo anterior (elemento 5), pasa a apuntar al nuevo nodo.

2 5 7 9(c)

Figura 3.13 Inserción de un elemento nuevo en una lista ordenada (a) Lista des-ordenada (b) Búsqueda secuencial de la posición adecuada para insertar el elemento nuevo en la lista (c) Inserción del nuevo elemento

Page 83: Estructuras de Archivos

83

Borrar

La operación borrar en listas ordenadas es igual que la operación borrar en listas no ordenadas, ya que la eliminación de un elemento nunca violará la condi-ción de orden de esa lista, siempre y cuando la lista estuviese realmente ordenada antes de la eliminación.

Otras operaciones

Como en el caso de listas no ordenadas las operaciones adicionales que pue-den incorporar las listas ordenadas es muy variado, pero también como en el caso anterior las dos operaciones principales son las descritas anteriormente. Sin em-bargo hay una diferencia en la operación de búsqueda en las listas ordenadas, ya que en estas estructuras se puede aplicar un algoritmo más rápido que la búsqueda secuencial aplicada en las listas no ordenadas.

Este tratamiento es la búsqueda binaria, que consiste en dividir la lista en dos partes, comprobando en cuál de ellas debería estar el elemento (si existiese). Una vez localizada la mitad en la que se encuentra el objeto buscado se realizaría la misma operación recursivamente sobre esa mitad hasta que se encuentre el ele-mento en el caso de que efectivamente exista, o hasta que el número de elementos de la mitad resultante sea 0 para el caso de que el elemento no exista.

PilasLas pilas son un tipo especial de listas con una política de inserción y bo-

rrado de elementos particular. Las pilas tienen una forma especial para insertar y de eliminar los elementos por ser una estructura de datos LIFO, Last In First Out (último en entrar, primero en salir), lo cual quiere decir que en una pila siempre se extrae el elemento que menos tiempo lleva en la estructura.

Un ejemplo de pilas más típico, es una pila (altero) de platos, donde para añadir un nuevo plato se coloca en la cima (parte superior) y para quitar uno de la pila, se toma el de la parte de arriba también.

Operaciones básicas de las pilas

Insertar

Esta operación es comúnmente denominada push, la inserción en una pila se realiza en su cima, considerando la cima como el último elemento insertado.

Page 84: Estructuras de Archivos

84

Esta es una de las particularidades de las pilas, mientras el resto de estructuras de datos lineales se representan gráficamente en horizontal, las pilas se representan de forma típica verticalmente, por esta razón es por lo que se le denomina cima de la pila al último elemento de la estructura de datos.

Las operaciones a realizar para la inserción en la pila son muy simples: hacer que el nuevo nodo apunte a la cima anterior y definir el nuevo nodo como cima de la pila.

Obsérvese el siguiente ejemplo:

cima 3162724

(a)

Al insertar un nuevo elemento, la pila resultante sería:

cima 83162724

(b)

Figura 3.14 Inserción de un elemento nuevo en una pila (a) Pila con 5 elementos almacenados (b) Inserción del nuevo elemento en la pila

Borrar

Esta operación es normalmente conocida como pop. Cuando se elimina un elemento de la pila, el elemento que se borra es el elemento situado en la cima de la pila, es decir, el que menos tiempo lleva en la estructura.

Las operaciones a realizar son muy simples: borrar el elemento de la cima y modificar el puntero de la cima.

Page 85: Estructuras de Archivos

85

8cima 31

62724

Figura 3.15 Eliminación de un elemento de la pila

Utilización de las pilasLas pilas son muy usadas en procedimientos recursivos tales como algo-

ritmos de backtracking, evaluación de expresiones algebraicas y recorridos por niveles de árboles.

ColasLas colas son una forma especial de lista. En esta estructura, los nodos de

las colas también están enlazados entre sí como las listas y se caracterizan por la forma de añadir y de eliminar elementos.

Una cola es una estructura de datos FIFO, acrónimo de First In First Out, o lo que es lo mismo, el primer elemento en entrar es el primero en salir, lo cual im-plica que en las colas siempre se insertan elementos por el final (cola) y siempre se extraen elementos por el principio (cabeza).

Los ejemplos típicos de colas son las filas de personas en un banco o para la compra de boletos para el cine. En esta cola humana el primero en llegar es el primero en marcharse, y de forma similar se comportan las colas informáticas.Insertar

La inserción en las colas se realiza al final de la estructura. Para llevar a cabo esta operación únicamente hay que reestructurar un par de punteros: el último nodo debe pasar a apuntar al nuevo nodo (que en ese momento será el último) y el nuevo nodo pasa a ser la nueva cola de la cola.

C a b e z a (inicio)

Cola (final)

6 2 4

(a)

Page 86: Estructuras de Archivos

86

Observe el ejemplo siguiente:

Si se añadiera un elemento nuevo, la cola resultante sería:C a b e z a (inicio)

Cola (final)

6 2 4 8

(b)Figura 3.16 Inserción de un elemento nuevo en una cola (a) Cola con 3 elementos

almacenados (b) Inserción del nuevo elemento en una cola

Borrar

El borrado es una operación muy simple en las colas, ésta operación debe extraer la cabeza de la cola, ya que es el elemento que más tiempo lleva en la estructura. Para llevar a cabo esta operación únicamente hay que extraer el ele-mento situado en la cabeza de la cola y avanzar el puntero cabeza una posición, para que de esta forma la nueva cabeza sea el segundo elemento que más tiempo lleva en la cola, como se visualiza en la siguiente gráfica

C a b e z a (inicio)

Cola (final)

6 2 4 8

(c)

Figura 3.17 Eliminación de un elemento de una cola

Una diferencia importante entre las colas y las listas, es que en las colas no se puede borrar un elemento cualquiera, se borra siempre el que está en la cabeza de la cola.

Utilización de las colasEl ámbito de utilización de las colas es muy amplio, pero para citar algunos,

se tiene el control del proceso de tareas en un sistema operativo o simulaciones del sistema de control aéreo de un aeropuerto. Esta estructura asegura un trata-miento justo de los objetos que contienen, ya que siempre se extraerá el elemento que más tiempo lleva en la misma.

Page 87: Estructuras de Archivos

Capítulo 4

BúSqUEDA Y CLASIFICACIÓN ExTERNA

ObjetivoExaminar los métodos principales para la clasificación y acceso en archivos

grandes.

Page 88: Estructuras de Archivos
Page 89: Estructuras de Archivos

89

Plan general del capítulo4.1 Búsqueda secuencial

4.2 Búsqueda binaria

4.3 Búsqueda indizada

4.4 0rdenamiento por inserción binaria

4.5 0rdenamiento por mezcla (merge sort)

La búsqueda es una de las operaciones más importantes en el procesamiento de la información, y permite la recuperación de datos previamente almacenados. Cuando el almacenamiento se encuentra en memoria principal la búsqueda se califica de interna, y si se encuentra en dispositivos externos se califica como externa.

4.1 Búsqueda secuencialLa búsqueda secuencial consiste en recorrer y examinar cada uno de los ele-

mentos hasta alcanzar el final de la lista de datos. Si en algún lugar de la lista se encontrara el elemento buscado, el algoritmo deberá informar sobre la o las posi-ciones donde ha sido localizado. Este algoritmo es posible optimizarlo cuando:

• Únicamente se desea obtener la posición donde se localiza el primer ele-mento buscado. Esto se logra, mediante el empleo de una variable lógica que evite seguir buscando una vez que el dato ha sido encontrado.

• La lista se encuentra ordenada –por ejemplo de manera ascendente -, la búsqueda se detendrá cuando el elemento examinado en la lista sea mayor al que se busca, a diferencia, en las listas desordenadas, en las cuales básicamente se debe recorrer la lista de izquierda a derecha hasta que se encuentre el elemento buscado o bien se haya llegado al final (lo que ocurra primero).

Normalmente cuando una función de búsqueda concluye con éxito, interesa conocer en qué posición fue encontrado el elemento como lo puede ver en los próximos algoritmos.

El algoritmo de búsqueda secuencial en un arreglo (una lista) desordenado es el que se explica a continuación:

Page 90: Estructuras de Archivos

90

SECUENCIAL DESORDENADO (v, n, x)

{Este algoritmo busca secuencialmente el elemento x en el arreglo desordenado v, de n elementos}

// i es una variable de tipo entero y bandera es una variable de tipo boolea-no}

i b 1 bandera b falso repetir mientras ( (i ≤ n) y ( bandera = falso) )

si ( v [ i ] = x ) entonces bandera b verdadero

si no i b i+1

fin_repetir si ( bandera = verdadero ) entonces escribir “el elemento está en la posición i” si no escribir “el elemento no está en el arreglo”

Figura 4.1 Programa que busca secuencialmente un elemento x en un arreglo desordenado

Son dos posibles resultados a obtener por este algoritmo: la posición en la que encontró al elemento, o un mensaje que indica que el elemento no existe en el arreglo. Si hubiera dos o más ocurrencias del mismo valor, se encuentra la pri-mera de ellas, pero pudiera realizarse un ajuste al algoritmo si se desea obtener todas las posiciones donde se encuentra el dato buscado.

El algoritmo anterior también recibe el nombre de secuencial con bandera debido a que utiliza una variable auxiliar boolena en la condición para detener el ciclo. El empleo de esta variable evita seguir buscando una vez que el dato ha sido encontrado, con la ventaja de que disminuye el número de comparaciones a realizar y por lo tanto aumenta la eficiencia del algoritmo.

La búsqueda secuencial en arreglos ordenados es similar al caso anterior, sin embargo, el orden que existe entre los elementos del arreglo permite incluir una nueva condición que hace más eficiente el algoritmo.

Page 91: Estructuras de Archivos

91

SECUENCIAL ORDENADO (v, n, x)

{Este algoritmo busca secuencialmente al elemento x en el arreglo ordenado v con n componentes. El arreglo v está ordenado ascendentemente, es decir: v[ 1 ] ≤ v[ 2 ] ≤ … v[ n ]}

{i es una variable de tipo entero y bandera es una variable de tipo booleano} i b 1 bandera b falso repetir mientras ( (i ≤ n) y (bandera = falso) y (x ≥ v[ i ] ) )

si ( v[ i ] = x ) entonces bandera b verdadero

si no i b i+1

fin_repetir si ( bandera = verdadero ) entonces escribir “el elemento está en la posición i” si no escribir “el elemento no está en el arreglo”

Figura 4.2 Programa que busca secuencialmente un elemento x en un arreglo ordenado

Esta nueva condición permite controlar la búsqueda: el elemento buscado debe ser mayor o igual que el elemento en curso para proseguir con la búsqueda. Cuando el valor buscado no esté en el arreglo, se detendrá la búsqueda al dejar de cumplirse la condición x ≥ v[ i ], debido a que si x no se encontró hasta el mo-mento, tampoco se encontrará entre los restantes elementos.

El método de búsqueda secuencial también puede aplicarse a listas ligadas y consiste en recorrer la lista, nodo por nodo, deteniéndose cuando haya encontra-do el valor buscado, o cuando haya revisado todos los nodos de la lista. El orden en el cual puede recorrerse la lista depende de las características de la misma. Es decir, si es simple o doblemente ligada, y además si es circular.

A continuación se muestra un algoritmo de búsqueda secuencial en listas ligadas.

Page 92: Estructuras de Archivos

92

SECUENCIAL CON LISTAS (p, x)

{Este algoritmo busca secuencialmente al elemento x en la lista cuyo nodo inicial está apuntado por p}

{q es una variable de tipo puntero y bandera es una variable de tipo booleano} q b p bandera b falso repetir mientras ( (q ≠ nil) y (bandera = falso) )

si ( q^.info = x ) entonces bandera b verdadero

si no qb q^.liga

fin_repetir si ( bandera = verdadero ) entonces escribir “El elemento está en la lista” si no escribir “El elemento no está en la lista”

Figura 4.3 Programa que busca secuencialmente un elemento x haciendo uso de punteros

4.2 Búsqueda binariaLa búsqueda binaria consiste en dividir el intervalo de búsqueda (la lista) en

dos partes, comparando el elemento buscado con el elemento central. En caso de no ser iguales se redefinen los extremos del intervalo (según el elemento central sea mayor o menor que el buscado) disminuyendo el espacio de búsqueda a la mitad. Este proceso es repetitivo y concluye cuando el elemento es encontrado, o bien cuando el intervalo de búsqueda se anula. Esta búsqueda funciona única-mente para arreglos ordenados y como con cada iteración el espacio de búsqueda se reduce a la mitad, también el número de comparaciones a realizar disminuye notablemente. Esta disminución resulta significativa cuanto más grande sea el tamaño del arreglo.

A continuación se presenta el algoritmo de búsqueda binaria.

Page 93: Estructuras de Archivos

93

BINARIA (v, n, x)

{Este algoritmo busca al elemento x en el arreglo ordenado v de n elementos}

{izq, cen y der son variables de tipo entero y bandera es una variable de tipo boolea-no}

izq b 1 der b n bandera b falso repetir mientras ( (izq ≤ der) y ( bandera = falso ) )

cen b parte entera (( izq + der ) / 2) si ( v[ cen ] = x ) entonces

bandera b verdadero si no //{se debe redefinir intervalo de búsqueda}

if ( x > v[ cen ] ) entonces izq b cen +1

si no der b cen-1

fin_repetir si ( bandera = verdadero ) entonces escribir “el elemento está en la posición cen” si no escribir “el elemento no está en el arreglo”Figura 4.4 Programa de una búsqueda binaria

4.3 Búsqueda IndizadaMantener grandes archivos de datos ordenados es muy costoso, ya que re-

quiere mucho tiempo de procesador, afortunadamente, existe una alternativa más eficiente que consiste en indexarlos (indicarlos), y para ello normalmente se suele generar un archivo auxiliar de índices. Existen varios métodos, y a continuación se examinarán algunos. El más sencillo es crear un archivo plano que sólo con-tenga registros con dos campos: el campo o la expresión por la que se desea or-denar el archivo, y un campo con un index que almacene la posición del registro en el archivo de datos.

Page 94: Estructuras de Archivos

94

Por ejemplo, supóngase que se tiene un archivo de datos con la siguiente estructura de registro:

Archivo de datos:

crn clave materia nombre apellido

(a)

Donde los campos anteriores almacenan:

crn, el campo llave para cada registroclave, la clave que distingue a una materia o asignatura (puede existir una

misma asignatura –misma clave y nombre de materia - pero el crn debe ser único para cada registro)

materia, nombre de la materianombre, nombre del profesor asignado a dicho crn apellido, apellido del profesor asignado a dicho crn

Si en este archivo se desea buscar un registro a partir del crn y no se encuen-tra ordenado por ese campo, obligatoriamente se deben leer todos los registros del archivo hasta encontrar el que se busca, y en el peor de los casos, si el crn no está almacenado, infructuosamente se deberá leer todos los registros que existan en el archivo.

Sin embargo, si se tiene el archivo ordenado por ese campo permitirá aplicar un algoritmo de búsqueda, haciendo que la localización del registro sea de una manera más eficiente.

La búsqueda indizada propone como solución crear un archivo de índices, cada registro de este archivo tendrá la siguiente estructura:

Archivo de índice:

crn indice

(b)

El archivo de índices se creará a partir del archivo de datos, asignando a cada registro el campo “crn” y el número de registro correspondiente (por citar un ejemplo).

Page 95: Estructuras de Archivos

95

Suponga la siguiente información para el archivo de datos:

Crn clave materia Nombre apellido

001 13925 AD117 Administración Estratégica Ramón Mares Sanchez

002 14020 AD120 Administración II Alejandra Manzo Castañeda

003 13937 AD120 Administración II Lucio Guzman Partida

004 13816 AD133 Política y Gestión Publica Jazmín Hurtado Cárdenas

005 13956 AD145 Comportamiento Organizacional Ernesto Burgos Herrera

006 14260 CC200 Programación Orientada a Objetos Jorge Sandoval Pérez

007 14100 CJ111 Derecho Laboral Juan Manuel Sandoval Moreno

008 13936 CO104 Bases de Datos Distribuidas Jose Chávez Núñez

009 14195 CT147 Software Especializado II Guadalupe Montes Gomez

010 13972 DP106 Derecho Vladimir Ortega Gomez

011 13920 CT147 Software Especializado II Virginia Medina Torres

(c)

A partir del archivo de datos anterior, se creará el siguiente archivo de índi-ces, asignando por cada registro del archivo de datos un registro en el archivo de índices con el campo crn y el número de registro correspondiente:

crn indice13925 00114020 00213937 00313816 00413956 00514260 00614100 00713936 00814195 00913972 01013920 011

(d)

Page 96: Estructuras de Archivos

96

Para aplicar una búsqueda más eficiente será recomendable ordenar los ele-mentos del archivo de índices por crn obteniendo entonces:

crn indice

13816 004

13920 011

13925 001

13936 008

13937 003

13956 005

13972 010

14020 002

14100 007

14195 009

14260 006

(e)

De esta manera, si se desea buscar un crn, se realizará en el archivo de índices, por ejemplo el crn 13936 que es el registro 4 en el archivo de índices, corresponde el índice 008. Con ese índice podemos acceder directamente al archivo de datos, que corresponde a:

008 13936 CO104 Bases de Datos Distribuidas Jose Chávez Núñez

(f)

Figura 4.5 Búsqueda indizada (a) Estructura del archivo de datos (b) Estruc-tura del archivo índice (c) Almacenamiento de información en el archivo de datos (d) Creación del archivo índice (e) Ordenación de los registros del archivo índice

(f) Inicio de la búsqueda en el archivo índice

Por supuesto, nada impide tener más archivos de índices para otros campos, el principal problema radica en mantener los archivos de índices ordenados a medida que se añaden, eliminan o se modifican registros. Pero al ser los registros

Page 97: Estructuras de Archivos

97

de índices más pequeños (por tener solo 2 campos), los archivos son más mane-jables, pudiendo incluso almacenarse en memoria en muchos casos. Para evitar tener que reconstruir el archivo de índices cada vez que se actualiza el archivo de datos existen varios métodos, uno de ellos es a través de árboles binarios que se caracteriza por tener una raíz en el que cada nodo tiene como máximo dos hijos, por el lado izquierdo estarán elementos menores a la raíz y por la derecha los mayores.

La idea principal se centrará en que cada nodo del árbol además del campo de la información contiene dos campos extras que apuntan a los nodos izquierdo y derecho respectivamente:

informaciónPuntero

(al hijo izq)puntero

(al hijo der)

Figura 4.6 Estructura interna del un nodo de un árbol

Para el ejemplo anterior se tendrá la siguiente estructura de árbol para crear el archivo de índices, asignando a cada nodo (registro) el campo crn y el núme-ro de registro correspondiente y añadiendo los enlaces correspondientes a otros nodos.

A continuación se verá como se actualiza el archivo de índices a medida que se insertan los registros en el archivo de datos:

Page 98: Estructuras de Archivos

98

Paso uno:

13925 001 --- ---

Paso dos:

13925 001 --- 00214020 002 --- ---

Paso tres:

13925 001 --- 00214020 002 003 ---13937 003 --- ---

Paso cuatro:13925 001 004 00214020 002 003 ---13937 003 --- ---13816 004 --- ---

13925001

13925001

002

14020002

13925001

002

14020002

003

13937003

13816004

13925001

004 002

14020002

003

13937003

Page 99: Estructuras de Archivos

99

Paso cinco:

13925 001 004 00214020 002 003 ---13937 003 --- 00513816 004 --- ---13956 005 --- ---

Paso 6:

13925 001 004 00214020 002 003 00613937 003 --- 00513816 004 --- ---13956 005 --- ---14260 006 --- ---

13816004

13925001

004 002

14020002

003

13937003

005

13956005

14260006

13816004

13925001

004 002

14020002

003 006

13937003

005

13956005

Y así sucesivamente hasta obtener el siguiente árbol

13925 001 004 00214020 002 003 00613937 003 008 00513816 004 --- 01113956 005 --- 01014260 006 007 ---14100 007 --- 00913936 008 --- ---14195 009 --- ---13972 010 --- ---13920 011 --- ---

Figura 4.8 Estructura del árbol después de actualizar el archivo de índices

13920

13936

1419513972

13925

004 002

14020

003 006

13937

008 005

14260

007

14100

009

13956

010

13816

011

Page 100: Estructuras de Archivos

100

Como se puede observar, cada vez que se inserta un registro de datos, tan sólo hay que insertar un nuevo nodo (registro) en el archivo de índice y modificar otro.

Eliminar registros

Si se desea eliminar un registro, en el archivo de datos simplemente se marca como borrado, en teoría, mientras el registro no se elimine físicamente, no será necesario eliminar el registro de índice asociado. Simplemente estará apuntando a un registro marcado como borrado. Posteriormente, cuando se purgue el archi-vo de datos será necesario reconstruir el archivo de índices.

Duplicación de claves

No hay inconveniente en almacenar registros con claves duplicadas, tan sólo habrá que tener en cuenta que se debe almacenar un nodo para cada uno de ellos, y el criterio para la construcción del árbol es que la rama ‘menor’, y pasará a ser la rama ‘menor o igual’.

4.4 Ordenamiento por inserción binariaEl método de ordenación por inserción binaria puede mejorarse fácilmente

recurriendo a una búsqueda binaria en lugar de una búsqueda secuencial para insertar un elemento en la parte izquierda del arreglo, que ya se encuentra orde-nado. El proceso, se repite desde el segundo hasta el n-ésimo elemento.

El algoritmo de ordenación por el método de inserción binaria es el siguiente:

INSERCIÓNBINARIA (a, n)

{El algoritmo ordena los elementos del arreglo utilizando el método de inserción binaria. a es un arreglo de n elementos}

{aux, izq, der, m y j son variables de tipo entero}repetir con i desde 2 hasta n aux b a[ i ] //colocar en aux el elemento que se desea ordenar

izq b 1 // límite inferior ordenadoder b i-1 // límite superior ordenado

repetir mientras ( izq ≤ der ) m b parte entera (( izq + der) entre 2) si ( aux ≤ a[ m ] ) entonces der b m-1

Page 101: Estructuras de Archivos

101

si no izq b m+1 fin_repetir j b i-1 repetir mientras ( j ≥ izq ) //recorrer los elementos mayores hacia la derecha a [ j+1 ] b a[ j ]

j b j – 1 fin_repetir a[ izq ] b aux //en la posición izquierda coloca el elemento que se desea ordenarfin_repetir

Figura 4.9 Algoritmo de ordenación por el método de inserción binaria

Supóngase que se desea ordenar los siguientes elementos del arreglo a utili-zando el método de inserción binaria.

a: 15 67 08 16 44 27 12 35Tras las comparaciones necesarias en cada vuelta del ciclo, el arreglo a debe-

rá ir ordenándose de izquierda a derecha como se observa a continuación en los elementos cuadriculados:

Primera pasadaa: 15 67 08 16 44 27 12 35

Segunda pasadaa: 08 15 67 16 44 27 12 35

Tercera pasadaa: 08 15 16 67 44 27 12 35

Cuarta pasadaa: 08 15 16 44 67 27 12 35

Quinta pasadaa: 08 15 16 27 44 67 12 35

Sexta pasadaa: 08 12 15 16 27 44 67 35

Séptima pasadaa: 08 12 15 16 27 35 44 67

Figura 4.10 Ordenación de un arreglo por el método de inserción binaria

Page 102: Estructuras de Archivos

102

4.5 Ordenamiento por mezcla (merge sort)

La ordenación de archivos externa se lleva a cabo cuando el volumen de los datos a tratar es demasiado grande y los mismos no caben en la memoria principal de la computadora. Al ocurrir esta situación no pueden aplicarse los métodos de ordenación interna, de modo que debe pensarse en otro tipo de algoritmos para ordenar datos almacenados en archivos.

Por la ordenación de archivos se entiende, entonces, la ordenación o cla-sificación de éstos, ascendente o descendentemente, de acuerdo con un campo determinado al que se denominará campo clave. La principal desventaja de esta ordenación es el tiempo de ejecución, debido a las sucesivas operaciones de en-trada y salida.

Los dos métodos de ordenación externa más importantes son los basados en la mezcla directa y en la mezcla equilibrada.

Ordenación por mezcla directa

El método de ordenación por mezcla directa es probablemente el más utili-zado por su fácil compresión.

La idea central de este algoritmo consiste en la realización sucesiva de una partición (dividir el archivo) y una fusión (reunión de dos o más archivos en un solo) que produce secuencias ordenadas de longitud cada vez mayor.

En la primera pasada la partición es de longitud 1, es decir, se baja de uno en uno los elementos a las dos listas y al realizar la fusión o mezcla se producen secuencias ordenadas de longitud 2.

Lista original:

F: 8, 2, 7, 14, 18, 6

Primera pasadaPartición en secuencias de longitud 1F1: 8, 7, 18 F2: 2, 14, 6Fusión en secuencias de longitud 2 F: 2, 8, 7, 14, 6, 18,…

Page 103: Estructuras de Archivos

103

Nota: Para realizar la fusión, se deberá tomar en grupos de 2 elementos (uno de cada lista) y ordene estos dos elementos, así ira obteniendo secuencias ordenadas de 2 en 2

F1: 8, 7, 18,…

F2: 2, 14, 6,…

En la segunda pasada la partición es de longitud 2 (puesto que hay elementos de 2 en 2 elementos ordenados, y la fusión o mezcla produce secuencias ordena-das de longitud 4.

Segunda pasada

Partición en secuencias de longitud 2

F: 2, 8, 7, 14, 6, 18,…

F1: 2, 8, 6, 18

F2: 7, 14,

Fusión en secuencias de longitud 4

F: 2, 7, 8, 14, 6, 18,…

Nota: Para realizar la fusión, tome en grupos de 4 elementos (dos de cada lista) y ordene estos cuatro elementos, así ira obteniendo secuencias ordenadas de 4 en 4

F1: 2, 8, 6, 18F2: 7, 14,

Este proceso se repite (divide de 4 en 4 elementos y fusiona 8, divide de 8 en 8 elementos y fusiona 16, divide de 16 en 16 y fusiona 32….) hasta que la longitud de la secuencia para la partición sea mayor o igual que el número de elementos del archivo original.

Vea el siguiente ejemplo:

Partición en secuencias de longitud 1.

Fusión en secuencias de longitud 2.

Ejemplo 1. Supóngase que se desean ordenar las claves del archivo F. Para

Page 104: Estructuras de Archivos

104

realizar tal actividad se utilizan dos archivos auxiliares a los que se les denomi-nará F1 y F2.

F: 2, 9, 7, 14, 4, 20, 15, 1, 3, 8, 5, 22, 11, 13, 16

Primera Pasada Partición en secuencias de longitud 1F1: 2, 7, 4, 15, 3, 5, 11, 16F2: 9, 14, 20, 1, 8, 22, 13

Fusión en secuencias de longitud 2 F: 2, 9, 7, 14, 4, 20, 1, 15, 3, 8, 5, 22, 11, 13, 16

Segunda PasadaPartición en secuencias de longitud 2F1: 2, 9, 4, 20, 3, 8, 11, 13F2: 7, 14, 1, 15, 5, 22, 16Fusión en secuencias de longitud 4F: 2, 7, 9, 14, 1, 4, 15, 20, 3, 5, 8, 22, 11, 13, 16

Tercera Pasada Partición en secuencias de longitud 4F1: 2, 7, 9, 14, 3, 5, 8, 22F2: 1, 4, 15, 20, 11, 13, 16Fusión en secuencias de longitud 8F: 1, 2, 4, 7, 9, 14, 15, 20, 3, 5, 8, 11, 13, 16, 22

Cuarta PasadaPartición en secuencias de longitud 8F1: 1, 2, 4, 7, 9, 14, 15, 20F2: 3, 5, 8, 11, 13, 16, 22Fusión en secuencias de longitud 16F: 1, 2, 3, 4, 5, 7, 8, 9, 11, 13, 14, 15, 16, 20, 22

Tras esta pasada, observe que F ya esta ordenado

Ejemplo 2. Supóngase que se desean ordenar las siguientes claves

F: 4, 8, 7, 6, 3, 2, 11, 33, 54, 23, 88, 44, 21, 99

Primera Pasada

Page 105: Estructuras de Archivos

105

Partición en secuencias de longitud 1F1: 4, 7, 3, 11, 54, 88, 21F2: 8, 6, 2, 33, 23, 44, 99Fusión en secuencias de longitud 2F: 4, 8, 6, 7, 2, 3, 11, 33, 23, 54, 44, 88, 21, 99

Segunda PasadaPartición en secuencias de longitud 2F1: 4, 8, 2, 3, 23, 54, 21, 99F2: 6, 7, 11, 33, 44, 88Fusión en secuencias de longitud 4F: 4, 6, 7, 8, 2, 3, 11, 33, 23, 44, 54, 88, 21, 99

Tercera Pasada Partición en secuencias de longitud 4F1: 4, 6, 7, 8, 23, 44, 54, 88F2: 2, 3, 11, 33, 21, 99Fusión en secuencias de longitud 8F: 2, 3, 4, 6, 7, 8, 11, 33, 21, 23, 44, 54, 88, 99

Cuarta PasadaPartición en secuencias de longitud 8F1: 2, 3, 4, 6, 7, 8, 11, 33F2: 21, 23, 44, 54, 88, 99Fusión en secuencias de longitud 16F: 2, 3, 4, 6, 7, 8, 11, 21, 23, 33 ,44, 54, 88, 99Tras esta pasada, observe que F ya esta ordenado

Ordenación por mezcla equilibrada

El método de ordenación por mezcla equilibrada, conocido también con el nombre de mezcla natural, es una optimización del método de mezcla directa.

Para la realización de este proceso de ordenación se necesitarán cuatro ar-chivos: el archivo original F y tres archivos auxiliares a los que se denominarán F1, F2 y F3. La idea central de este algoritmo consiste en realizar particiones en F2 y F3 tomando secuencias ordenadas de la máxima longitud posible en lugar de secuencias de tamaño fijo. Posteriormente se realiza una fusión (denominada fusión-partición) de las secuencias ordenadas alternativamente sobre dos archi-

Page 106: Estructuras de Archivos

106

vos, colocando en el primer archivo (F) la fusión hasta donde la secuencia este ordenada tomando elementos de ambas listas (F2 y F3), si en determinado mo-mento es imposible seguir tomando elementos debido a que no están ordenados, se colocará en el segundo archivo (F1) la siguiente secuencia ordenada. Apli-cando estas acciones en forma repetida se logrará que el archivo original quede ordenado. El proceso termina cuando en la realización de una fusión-partición el segundo archivo (F1) quede vacío.

Ejemplo 1. Supóngase que se desea ordenar las claves del archivo F utilizan-do el método de mezcla equilibrada.

F: 2, 9, 7, 14, 4, 20, 15, 1, 3, 8, 5, 22, 11, 13, 16

Partición inicialF2: 2, 9, 4, 20, 1, 3, 8, 11, 13, 16 F3: 7, 14, 15, 5, 22

Primera fusión-particiónF: 2, 7, 9, 14, 15, 1, 3, 8, 11, 13, 16 F1: 4, 5, 20, 22

Segunda fusión-particiónF2: 2, 4, 5, 7, 9, 14, 15, 20, 22 F3: 1, 3, 8, 11, 13, 16

Tercera fusión-particiónF: 1, 2, 3, 4, 5, 7, 8, 9, 11, 13, 14, 15, 16, 20, 22F1: ---------

Observe que en esta última fusión-partición F1 está vacío, lo cual indica que F contiene los elementos ordenados

Ejemplo 2. Supóngase que se desea ordenar las claves del archivo F utilizan-do el método de mezcla equilibrada.

F: 4, 8, 7, 6, 3, 2, 11, 33, 54, 23, 88, 44, 21, 99

Partición inicialF2: 4, 8, 6, 2, 11, 33, 54, 44 F3: 7, 3, 23, 88, 21, 99

Page 107: Estructuras de Archivos

107

Primera fusión-particiónF: 4, 7, 8, 2, 11, 21, 33, 54, 99 F1: 3, 6, 23, 88, 44

Segunda fusión-particiónF2: 3, 4, 6, 7, 8, 23, 88 F3: 2, 11, 21, 33, 44, 54, 99

Tercera fusión-particiónF: 2, 3, 4, 6, 7, 8, 11, 21, 23, 33 ,44, 54, 88, 99F1: ---------

Observe que al realizar la tercera fusión-partición el segundo archivo queda vacío, por lo que puede afirmarse que el archivo ya se encuentra ordenado.

Page 108: Estructuras de Archivos
Page 109: Estructuras de Archivos

Capítulo 5

SISTEMAS DE ARCHIVOS

ObjetivoConsiderar los diferentes enfoques que lleva la estructura

interna de los archivos

Page 110: Estructuras de Archivos
Page 111: Estructuras de Archivos

111

Plan general del capítulo5.1 El sistema de archivos y sus principales funciones

5.2 Organización de estructuras de directorios

5.3 Seguridad y protección de archivos

5.1 El sistema de archivos y sus principales funcionesComo se ha visto a lo largo del libro existen diversas maneras en que se orga-

niza la información, pero una vez que se ha procesado, los usuarios desean alma-cenar dicha información durante semanas, meses, o inclusive años y entonces se ha de concluir que dejar la información en el propio espacio de direcciones de la computadora (memoria principal) resulta inaceptable dado que sus características limitan al almacenamiento a un tiempo determinado sujeto a la alimentación de corriente.

Así pues, los dispositivos para el almacenamiento de la información a largo plazo deben proporcionar principalmente:

1. La posibilidad almacenar una cantidad muy grande de información

2. La información deberá persistir (existir) aun cuando la computadora sea apagada

Para que esto pueda ser posible se debe almacenar la información de manera organizada a través de archivos, así pues, un usuario podrá acceder a dicha in-formación todas las veces que sean necesarias, la cual no deberá verse afectada a menos que el usuario de manera explícita prevea algún cambio e incluso la eliminación de la misma.

Desde el punto de vista de los usuarios, los archivos son grupos de infor-mación relacionada, sobre los que se pueden realizar diversas operaciones tales como lectura, escritura, modificación, eliminación, etc. Todas estas acciones que los usuarios hacen normalmente con la información de los archivos las realiza una parte muy concreta del sistema operativo denominado Sistema de Archivos. Es esta parte del sistema operativo la responsable de que los usuarios puedan co-nocer más detalles sobre los archivos almacenados tales como: ubicación, nom-bre, propiedades, protección, operaciones permitidas, realizar las operaciones antes mencionadas adecuándolas a las características de los dispositivos físicos utilizados, etc. y aun cuando es de menor interés para los usuarios, es también

Page 112: Estructuras de Archivos

112

encargado de los detalles del uso de listas ligadas, o mapas de bits para el registro del espacio libre de almacenamiento en los dispositivos, etc..

Como puede verse, el sistema de archivos realiza múltiples tareas que se pueden agrupar de la siguiente manera:

1. Administración del almacenamiento. Decide como y donde almacenar la información en los dispositivos de almacenamiento.

2. Formas de acceso. Define las formas que tienen los usuarios para acceder y recuperar la información almacenada (acceso secuencial, accedo directo y ac-ceso indexado visto con anterioridad).

3. Administración de archivos. Supervisar la información almacenada permi-tiendo la creación, modificación, cambio de nombre, eliminación y copiado entre otras de los archivos en los dispositivos de almacenamiento.

4. Protección e integridad de los archivos. Resguarda y garantiza la informa-ción contenida, su integridad y privacidad.

5.2 Organización de estructuras de directoriosComo se ha visto, el sistema de archivos es el responsable de administrar los

mismos dentro de los dispositivos de almacenamiento masivo y en capítulos an-teriores se ha explicado a detalle los diversos métodos de acceso que de acuerdo a las características propias de los dispositivos pueden ser utilizados. Es el turno de explicar cómo será posible que se organicen los archivos existentes en la com-putadora bien sean archivos del usuario o del propio sistema.

Para que esto pueda ser posible, los sistemas operativos requieren de directo-rios, haciendo que cada archivo se represente por una entrada en directorio o tabla de contenido del volumen. El directorio en la mayoría de los sistemas es un tipo especial de archivo en realidad, sólo que este guarda información tal como nom-bre, ubicación, tamaño y tipo de todos los archivos almacenados. Así mediante los directorios, el sistema de archivos podrá encontrar rápidamente un archivo solicitado y conocer sus características. De una manera sencilla, un directorio se puede considerar como una tabla de símbolos que refleja los archivos existentes, y la complejidad de la misma está relacionada directamente con cada uno de los sistemas operativos, pero primordialmente deberá permitir buscar, crear, borrar o listar los archivos existentes.

Page 113: Estructuras de Archivos

113

directorioInformación de unarchivo:

nombre

tipo

tamaño

Figura 5.1 Esquema de un directorio

Directorios de un nivel

Para sistemas pequeños (principalmente monousuarios) podría ser suficiente contar con solo un directorio que contenga la descripción de todos los archivos contenidos, pero esto hace obligado el uso nombres únicos.

nombre

tipo

nombre

tipo

nombre

tipo

nombre

tipo

nombre

tipo

Archivos

Directorio

Figura 5.2 Estructura de directorio de un nivel

Sin embargo, al aumentar la cantidad de almacenamiento y el número de usuarios, cada vez es más difícil que los usuarios organicen y controlen todos los archivos, por tanto se requiere de estructuras de directorios más complejas y potentes.

Directorios de dos niveles

Para resolver los problemas de directorio de un nivel tales como no poder organizar adecuadamente los archivos, la imposibilidad de almacenar archivos con el mismo nombre y la confusión de archivos para usuarios diferentes, se hace necesario definir un directorio para cada usuario (similar a la anterior), pero que solo presenta los archivos de un usuario, los cuales serán controlados mediante un directorio maestro del sistema. Así cuando un usuario solicita un archivo, el siste-

Page 114: Estructuras de Archivos

114

ma operativo limita la búsqueda solamente al directorio de ese usuario, dando así la posibilidad que existan archivos con el mismo nombre para usuarios distintos, cada uno en su propio directorio. Así pues, con la estructura de dos niveles para localizar un archivo será necesario conocer obviamente el nombre del archivo y también el nombre del directorio del usuario donde está almacenado y juntos for-man lo que se denomina nombre de ruta (path name) único para cada archivo.

Usuario 1 Usuario 2 Usuario 3Directoriomaestro

Directorios deusuarios

Figura 5.3 Estructura de directorio de dos niveles

Este esquema da solución a la problemática del directorio de un nivel, pero sugiere otro: aislar a un usuario de los demás, sobre todo si los usuarios desean trabajar en equipo, cooperar o simplemente acceder a los archivos de otro usuario, aun cuando existen sistemas que simplemente no permiten este tipo de acceso.

Directorios con estructura de árbol. Estructuras multinivel

El esquema anterior se puede considerar como una organización de árbol de dos niveles, así pues, se puede generalizar esta estructura, añadiendo tantos subdirectorios como niveles se desea que el árbol tenga, posibilitando entonces a que cada usuario no solo almacene archivos, sino que pueda crear sus propios subdirectorios y organizar más adecuadamente sus archivos. Con ello, el direc-torio maestro ahora es denominado Raíz. Esta estructura es muy utilizada por los sistemas operativos actuales y su estructura puede observarse en la figura 5.4.

Page 115: Estructuras de Archivos

115

Directorios de usuarios

Raíz

Subdirectorios

Figura 5.4 Estructura de directorio multinivel

Subdirectorios

Esta estructura al igual que la anterior requiere entonces no sólo del nombre del archivo, sino del camino de directorios que habrá que recorrer para poder lo-calizarlo (path name). Además incorpora el concepto de directorio de trabajo para aquel directorio en el que se encuentre trabajando actualmente un usuario y claro existiendo la posibilidad de cambiar a voluntad a otro si lo desea.

Nombre de las rutas de acceso

Cuando el sistema de archivos está organizado como un árbol de directorios, se requiere una forma de determinar los nombres de los archivos. Típicamente se utilizan dos métodos:

• Ruta de acceso absoluta, la cual está formada por una ruta de acceso desde el directorio raíz hasta el archivo.

• Ruta de acceso relativa, esta se utiliza junto con el concepto de directo-rio de trabajo o directorio activo antes mencionado. Así pues todos los path name que no inicie con raíz serán considerados para buscar a partir del directorio de trabajo.

Page 116: Estructuras de Archivos

116

5.3 Seguridad y protección de archivos

Una de las características más importantes de las computadoras y que la diferencia de una calculadora convencional es la capacidad de poder almacenar información para recuperarla posteriormente, por tanto es substancial evitar la pérdida o modificación de la información bien sea de manera accidental o mal intencionada.

Supóngase que en un equipo de cómputo se tiene almacenada información referente a las cuentas bancarias, estados de cuenta, fechas de transacciones, clientes, etc., en fin información importante y valiosa para el banco, pero si por alguna razón se altera o se pierde, la consecuencias se traducen a primera vista en una pérdida invaluable de un activo si no se tomaron las medidas adecuadas para su preservación. El usuario desea en todo momento tener un alto índice de con-fiabilidad en la información que manipula y almacena, por ello se hace necesario aplicar mecanismos que permitan asegurarse que la información que se presenta es consistente y se encuentra disponible cuando se requiera y sólo para aquellos usuarios que posean los privilegios o permisos para hacerlo, es decir, tener un mejor control del acceso a los datos almacenados.

La seguridad entonces se centrará en todas aquellas medidas que los usua-rios toman para resguardar la integridad, consistencia y disponibilidad de los ar-chivos, entendiendo por esto recuperar información válida y veraz cada vez que es requerida. Sin embargo, los sistemas de archivos también pueden ser dañados por alguna descarga eléctrica, por problemas de hardware, por la temperatura, el polvo, porque fueron destruidos de manera accidental, o bien, porque algún error de software haya provocado la pérdida del contenido de los archivos.

Por tanto, para garantizar en mayor medida la consistencia de la información los desarrolladores de software pueden emplear varias técnicas. Una de las más usuales es realizar regularmente copias de seguridad (backup) en dispositivos ade-cuados, de tal manera que en caso de que se haya detectado un fallo, o borrado la información de manera accidental o premeditada, se pueda hacer uso de estas copias para restaurar la información y esté de nueva cuenta disponible y consis-tente. Otra puede ser que los programadores agreguen “instrucciones atómicas” utilizadas en la programación concurrente, que encapsulan en una sola orden va-rias sentencias, de tal manera que si ocurre un fallo en alguna de ellas (en alguna instrucción), entonces la instrucción atómica completa no se realiza, es decir, su

Page 117: Estructuras de Archivos

117

objetivo es realizar operaciones completas y no a medias, para que cuando rei-nicie el sistema, la información esté consistente. Este tipo de técnica podría ser útil en aplicaciones donde varios usuarios comparten los mismos archivos, por ejemplo, algunas agencias de viaje pueden compartir un archivo con información referente a los espacios libres en un determinado vuelo. Ese archivo es compartido por varios usuarios y si una agencia hace una reservación pero la operación no es completada adecuadamente, es probable que cuando se restaure el sistema existan inconsistencias; en tales casos, sería posible evitar estas anomalías.

También pueden existir aplicaciones que implican el procesamiento e inter-cambio de archivos con información confidencial, los cuales se deben diseñar con altos niveles de protección, por tanto, además de la disponibilidad y fiabilidad que se desea exista en la información contenida en los archivos, también es im-prescindible controlar el acceso sólo para usuarios autorizados.

La protección se define como el conjunto de medidas que se toman para resguardar la información contra robos, ataques, espionaje o sabotaje. Dichas medidas evitan la exposición de la información ante situaciones de peligro y la protegen ante contingencias adversas tales como accesos malintencionados, ac-cesos no autorizados, destrucción, alteración con fines indebidos, entre otros.

La privacidad de los archivos o protección se encarga de controlar la infor-mación contenida en los archivos a fin de que no pueda ser accedida por usuarios no autorizados. La forma más común de lograr esto es mediante identificación del usuario a través de un nombre de usuario, y la autenticación a través de una palabra clave llamada contraseña o password. Con esta información el sistema se encarga de validar si los datos introducidos son correctos para conceder o denegar el acceso al sistema y por tanto a los archivos. La tendencia actual es que la tabla que contiene todas las claves, las almacenen de manera encriptada para evitar su descubrimiento y por tanto evitando así accesos indeseados a los archivos. Sin embargo, un problema muy frecuente que cometen los usuarios es utilizar tanto nombres de usuario como claves triviales, que hacen sencilla su adivinación. Para evitar este riesgo y conseguir una protección adecuada, puede solicitársele que cambie su contraseña periódicamente, que por supuesto no sea igual a la anterior, que incluya tanto letras como dígitos de manera intercalada, o bien, añadir al sis-tema la capacidad de restringir temporalmente el acceso a algún usuario después de realizar varios intentos con una contraseña incorrecta en un mismo intento de conexión.

Page 118: Estructuras de Archivos

118

Una vez que el usuario logra accesar al sistema podrá utilizar los diferentes recursos que se tienen tales como archivos, directorios, programas, dispositivos, entre otros. En sistemas monousuario la protección es relativamente sencilla, ya que solo es necesario guardar en un lugar seguro, o identificar perfectamente los directorios con información importante, tener bajo llave los discos de respaldo que se hayan realizado, o bien con una identificación simple como la que se expu-so con anterioridad. Sin embargo, en un sistema multiusuario surge la necesidad de acceder a los archivos utilizando diferentes mecanismos, que permitan un ac-ceso controlado y limitando los tipos de acceso a los distintos archivos del siste-ma. Si fuera este el caso, es posible pensar en un segundo nivel de control basado en privilegios, para que el usuario identificado y validado pueda tener acceso sólo a un segmento de los recursos disponibles, por ejemplo un vendedor previamente identificado podrá acceder únicamente a ciertos archivos como pueden ser los referentes a los stock de productos, características generales y precios al público, más no tendrá acceso al precio de compra o a archivos con información de los proveedores o asistencia de los empleados.

Otra manera de proteger la información puede lograrse a través del sistema de archivos, de forma que el acceso a los mismos puede ser negado o autorizado dependiendo del tipo que se haya solicitado, ya que es posible controlar varios tipos de operaciones tales como:

• Lectura de los archivos.• Escritura o actualización de los archivos.• Cargar el archivo en memoria y ejecutarlo.• Agregar información nueva al final del archivo.• Eliminar los archivos para liberar el espacio que se había utilizado.• Renombrar un archivo para cambiarle el nombre.• Copiar un archivo.• Editar un archivo existente.

Otro enfoque que permite proteger los archivos sugiere adoptar medidas de seguridad y protección en varios niveles:

• Sistemas de bases de datos: los usuarios pueden estar autorizados solo para accesar a una porción limitada de los archivos. O bien, solo se les

Page 119: Estructuras de Archivos

119

puede permitir realizar consultas sin realizar alguna modificación a los archivos. El sistema de archivos tiene la responsabilidad de volver a garantizar que no se violen estas restricciones.

• Dado que casi todos los sistemas de archivos permiten acceso remoto a través de terminales o redes, la seguridad a nivel de software dentro del sistema operativo es tan importante como la seguridad física.

• Sistema operativo: si no se protege de forma adecuada, éste puede servir para obtener acceso a los archivos

• Humano: tener cuidado con las autorizaciones de nuevos usuarios para accesar al sistema de archivos, ya que se debe reducir la posibilidad de que un usuario autorizado permita el acceso a un intruso a cambio de sobornos u otros favores.

• Físico: las computadoras deben protegerse físicamente contra la pene-tración ingeniosa o clandestina de intrusos.

La seguridad en todos los niveles anteriores debe mantenerse para asegurar la protección de los archivos. Un punto débil en uno de los niveles más bajos como lo son el físico o el humano permitirán que se burlen medidas estrictas de seguridad en niveles más altos.

En muchas aplicaciones vale la pena dedicar un esfuerzo considerable a la conservación de la seguridad e integridad de los archivos, ya que los sistemas de archivos grandes que contienen información privilegiada, importante y confiden-cial que podrían ser un blanco tentador de hackers.

Por último, se presentan algunos ejemplos de las diferentes formas por las cuales se puede intentar accesar a un sistema informático:

• Terminal con sesión abierta. Cuando la terminal queda desatendida por el usuario, por lo que los intrusos que están al asecho aprovechan la oportunidad para accesar completamente a todos los datos disponibles en ese momento para el usuario legítimo cuya identidad asume.

• Contraseña. Las contraseñas que permiten la autorización a los usua-rios pueden ser obtenidas por intrusos con el propósito de accesar de manera ilegal mediante la adivinación, el robo, la prueba y error o el conocimiento de contraseñas suministradas por algunos usuarios para generación y mantenimiento de sistemas.

Page 120: Estructuras de Archivos

120

• Inspección. Los usuarios que desean descubrir información a la que no tienen acceso, lo hacen mediante la inspección de los archivos del sistema.

• Escucha electrónica. Esta puede conseguirse mediante conexiones de intercepción pasiva o activa o mediante captura electromagnética de la radiación de pantalla.

• Mutua confianza. Ocurre cuando la programación es demasiado confia-da o poco cuidadosa, por lo que deja de comprobar la validez de los pa-rámetros transferidos y esto es aprovechado por el intruso para obtener acceso no autorizado a información protegida.

Page 121: Estructuras de Archivos

Capítulo 6

DISPERSIÓN (HASH)

ObjetivoExaminar la elección de un buen algoritmo de dispersión

Page 122: Estructuras de Archivos
Page 123: Estructuras de Archivos

123

Plan general del capítulo6.1 La función de dispersión (hash) 6.2 Colisiones y la forma de resolverlas6.3 Algoritmo de dispersión simple6.4 Funciones de dispersión y distribuciones de registros6.5 Otros métodos de dispersión6.6 Resolución de colisiones mediante saturación progresiva

6.1 La función de Dispersión ﴾hash﴿

Esta función, llamada función de dispersión h(K), se basa en tomar una llave K y mediante un algoritmo convertirla en una dirección. La dirección resul-tante es utilizada como base para la búsqueda y el almacenamiento de registros.

Se puede asimilar como una caja negra a la que se le ingresa una llave y de la cual se extrae una dirección. En la figura 6.1 se muestra la llave k=LORENZO in-gresando a la caja, el resultado obtenido es la dirección 04, así h(LORENZO)=04, donde 04 es la dirección base para la llave LORENZO.

Figura 6.1 Función de dispersión básica

El proceso de dispersión se asimila mucho a la indización debido a que rela-ciona una llave con una dirección, solo que se diferencia en dos aspectos:

Page 124: Estructuras de Archivos

124

• Las direcciones producidas aparentan ser aleatorias, no existe una rela-ción lógica obvia entre la llave y la dirección que se obtiene, por esta razón a la dispersión también se le llama aleatorización.

• La función de dispersión puede permitir que dos llaves diferentes se transformen en la misma dirección, de forma que los dos registros pu-dieran enviarse a la misma dirección en el archivo, si esto ocurre se le denomina colisión y se debe trabajar en encontrar alguna manera de resolverla.

En un ejemplo sencillo, considérese que se desea almacenar 75 registros en un archivo, y se toma el nombre de la persona de cada registro como llave. Su-póngase también que el archivo puede almacenar hasta 1000 registros. Como proceso de dispersión se tomarán los códigos ASCII de los primeros dos carac-teres de nombre en su formato numérico y multiplicarlos, del resultado, tome los 3 últimos dígitos de la derecha como dirección resultante. La tabla muestra las direcciones producidas para algunos registros y se observa que aun cuando los nombres de la lista están ordenados las direcciones no muestran esta característi-ca y parecen ser aleatorias.

Nombre Código ASCII de las primeras dos letras

Producto Dirección Base

BARBARA 66 65 66 X 65 = 4290 290

LORENZO 76 79 76 X 79 = 6004 004

TRINO 84 82 84 X 82 = 6888 888

Figura 6.2 Esquema simple de dispersión

6.2 Colisiones y la forma de resolverlas

Retomando el ejemplo anterior, supóngase que existe una llave con el nom-bre OLIVIA, como las dos letras OL son las mismas que las de LORENZO (de-bido a que la multiplicación es conmutativa) la dirección que se produce es la misma (004). Se genera entonces una colisión entre el registro de OLIVIA y el de LORENZO. Estas llaves que por dispersión producen colisión se les llama sinónimos.

Page 125: Estructuras de Archivos

125

Obviamente que dos registros no pueden ser colocados en la misma direc-ción, lo que genera un problema que debe ser resuelto. Existen dos maneras de solucionar este conflicto, 1. Eligiendo un algoritmo de dispersión que produzca el menor número de colisiones y 2. Otra alternativa es hacer algunos trucos en la forma de almacenar los registros.

De pronto se piensa que podría generarse un algoritmo de dispersión que no genere colisiones, el cual es llamado algoritmo de dispersión perfecta, pero es más difícil de lo que parece. En un estudio de demostración que se realizó (Han-son, 1982) con 4000 registros a almacenarse entre 5000 direcciones se concluyó que sólo un algoritmo entre 10120 000 evitaría todas las colisiones, por lo que prác-ticamente por la dificultad y demora que esto representa, sería importante que los programadores reflexionen si realmente vale la pena intentarlo.

La otra alternativa, por cierto más práctica a efectos de programación, es minimizar la cantidad de colisiones a un número razonable, para ello se plantean diferentes maneras de reducir este número:

• Esparcir los registros: Las colisiones se generan en el momento que dos o más registros persiguen la misma dirección. Se trata entonces de encontrar un algoritmo de dispersión que genere localidades los más aleatorio posible entre el número de direcciones disponibles, y de esta manera se evitaría que grandes números de registros se acumulen alre-dedor de alguna zona en particular.

• Usar memoria adicional: Lógicamente es viable y posible encontrar un algoritmo que evite lo más posible las colisiones sobre todo si se cuenta con pocos registros y muchas direcciones disponibles. Imaginemos al-macenar 75 registros entre 1000 direcciones, se utilizaría solo el 7.5 por ciento del espacio de almacenamiento, por lo que quedaría el 92.5 por ciento para lograr una mejor dispersión.

• Colocar más de un registro por dirección: No se ha planteado la posibi-lidad de que las direcciones soporten más de un registro por dirección, pero se puede generar una estructura de archivo que soporte más de uno, así cada dirección podrá almacenar más de un sinónimo. A esta forma de organizar se le denomina uso de compartimientos.

Page 126: Estructuras de Archivos

126

6.3 Algoritmo de dispersión simple

El propósito fundamental de cualquier algoritmo de dispersión es esparcir los registros que manejará de manera tan pareja como sea posible entre el inter-valo de direcciones disponibles. La definición tomada del diccionario del término dispersar significa “separar aquello que estaba reunido”. El método de dispersión que se ha utilizado en este texto toma las dos primeras letras del nombre en for-mato entero (en base al código ASCII) y multiplica ambos valores (lo cual no es muy bueno ya que muchos nombres comienzan con las mismas dos letras), tan solo basta con imaginar con alguna letra en particular y busque entonces que nombres generarían colisión.

Ciertamente este algoritmo no genera buena dispersión, por lo que se plantea un nuevo algoritmo que tiene un buen nivel de aleatoriedad y genera buenos re-sultados sin importar las llaves que se utilicen, es sencillo de alterar en caso que no de buen rendimiento.

El algoritmo es de tres pasos:

1.- Representar la llave en forma numérica2.- Desglosar y sumar3.- Dividir entre un número primo y usar el residuo como dirección.

Paso 1. Representar la llave en forma numérica. Cuando la llave ya es un número pues este paso se omite, pero si es una cadena de caracteres entonces se usa el Código ASCII de cada carácter para formar un número. Observe el siguiente ejemplo:

76 79 82 69 78 90 79 32 32 32 32 32

LORENZO = L O R E N Z O < ESPACIOS >

Este algoritmo toma una llave de 12 caracteres y es para ello que se agregan los espacios al final para completar esta longitud, al considerar mas caracteres se incrementa a posibilidad de que se generen diferentes direcciones.

Paso 2. Desglosar y sumar. Esto consiste en tomar trozos del número y su-marlos, para este caso se toman pares de números ASCII.

7679 8269 7890 7932 3232 3232

Se consideran entonces estas parejas de números como valores enteros para poder realizar operaciones aritméticas, en este caso para sumarse. Antes de con-

Page 127: Estructuras de Archivos

127

tinuar debe tomarse en cuenta que en algunos lenguajes la representación de un número entero requiere dos bytes (16 bits) y esto puede generar problemas de desbordamiento, por tanto realice algunas pruebas de escritorio para ver si es conveniente utilizar algún otro tipo de dato acorde al lenguaje de programación. Por el momento se continuará con el ejemplo de sumar las parejas:

7679 + 8269 + 7679 + 7932 = 31 559

Si se suma el siguiente 3232 el resultado sería mayor a 32767, lo cual pro-vocaría desbordamiento. Esto se puede resolver identificando el mayor resultado posible que generaría una suma de dos de estas parejas y asegurarse del que el resultado sea menor a 32 767. Si se observa, las llaves consisten en caracteres en mayúscula y espacios de modo que la mayor pareja que se puede localizar en la cadena es ZZ que corresponde a 9090. Al sumarse dos de estas parejas se obtiene 18180 que es cercano a 20 000 que será el resultado intermedio más grande a ob-tener. Para ello utilizaremos el operador módulo que devuelve el residuo de una división y que está disponible en la mayoría de los lenguajes de programación. Así este segundo paso se resume de la siguiente forma:

7679 + 8269 = 15948 15948 Mod 20000 = 1594815948 + 7679 = 23627 23627 Mod 20000 = 3627 3627 + 7932 = 11559 11559 Mod 20000 = 1155911559 + 3232 = 14791 14791 Mod 20000 = 1479114791 + 3232 = 18023 18023 Mod 20000 = 18023

Se tiene entonces que el número 18 023 será el resultado de este segundo paso.

Paso 3. Dividir entre el tamaño de espacio de direcciones. Ahora el objetivo es hacer un poco más corto el número 18 023 para colocarlo dentro del intervalo de direcciones que hay disponibles y esto se puede lograr dividiendo el valor entre el número de direcciones y tomar el residuo como dirección base del registro.

El 18 023 va a representar a un valor obtenido del paso dos y se denota como “s”, el valor “n” corresponderá con el número de direcciones disponibles del ar-chivo y “a” contendrá la dirección generada. Así la fórmula:

a= s mod n

Indica que las n direcciones estarán en el rango de 0 a (n-1) debido a que ese es el posible residuo de la división.

Page 128: Estructuras de Archivos

128

Supóngase que se utilizará un archivo con 100 direcciones (de la dirección 0 a la 99), al aplicar la fórmula se obtiene lo siguiente:

a =18 023 mod 100 = 23

Debido a que no existen reglas que limiten el número de direcciones dispo-nibles del archivo, mientras sean suficientes para almacenar todos los registros se tiene la libertad de elegir un número “n”. Y esto es interesante ya que la elección de “n” afecta de manera directa la forma en que se distribuyen los registros.

Se observa que es común utilizar un número primo “n” como divisor debido a que este tipo de números tienden a distribuir de mejor manera que los pares o impares. Se recomienda utilizar un número primo lo más cercano al máximo de direcciones por la parte derecha de la recta numérica. Para este caso se tienen 100 direcciones y los números primos más cercanos son 97 a la izquierda y 101 a la derecha.

Si se toma en cuenta un archivo con 101 direcciones que va a ser llenado con 75 registros se puede decir que el archivo se llenaría en un 74.3 % ya que 74/101 = 0.743.

Siendo 101 el espacio de direcciones la dirección base “a” que se obtiene con la formula es:

a = 18 023 mod 101 = 45

De esta manera se tiene que el registro que tiene la llave LORENZO debe ser colocado en la dirección 45 del archivo.

Al llevar éstos pasos a su representación en una función llamada disper-sion(), la cual será descrita en el siguiente párrafo, está función toma como entra-da la LLAVE de 12 caracteres ASCII y N que representa la máxima dirección del archivo. Al ejecutarse esta función se obtiene como resultado una dirección.

FUNCION dispersión (LLAVE, N)suma b 0J b 0mientras (J<12) suma b ( suma +( (100*LLAVE [J] )+(llave [J+1] ) ) ) mod 20000 incrementa J en 2fin mientras

Page 129: Estructuras de Archivos

129

regresa (suma mod N)fin FUNCION

Como puede verse esta función realiza el desgloce y la división entre un número primo N para calcular la dirección de dispersión.

6.4 Funciones de dispersión y distribuciones de registros

Analizando los dos métodos de generar dispersión, puede notarse claramente que el primero no dispersa de manera adecuada mientras que el segundo hace una mucho mejor dispersión de los registros, es momento de revisar algunas for-mas de cómo distribuir los registros en un archivo lo que permite tener una mejor comprensión de cómo generar otros métodos de dispersión.

Se pueden observar tres formas de distribución de 5 registros en 7 direccio-nes. La forma ideal en que una función de dispersión disperse los registros es que no exista ninguna colisión (Figura 6.2a), a esta es una forma de distribución uniforme. Y como se comentó antes lograr este tipo de distribución es difícil y generalmente no vale la pena intentarlo.

La segunda manera (Figura 6.2b) señala la distribución en que todos los registros son asignados a la misma dirección, por lo que se genera el máximo de colisiones, y por supuesto es un gran problema.

Y finalmente la tercera (Figura 6.2c) en la que los registros se esparcen de manera apropiada entre si y existen pocas colisiones, y es este el comportamiento de una distribución aleatoria normal. Las funciones de dispersión deben presentar comportamientos aleatorios y responden a las leyes de la probabilidad. Si una dirección es elegida una vez esto no disminuye la probabilidad de ser elegida por alguna otra llave.

Al utilizar funciones de dispersión aleatorias que distribuyen grandes can-tidades de direcciones a partir de un número grande de llaves se ve que la ca-sualidad provoca que grupos de llaves se aglomeren sobre ciertas direcciones. Suponga que 100 llaves serán dispersadas en 100 direcciones (0..99) es normal que algunas direcciones queden vacías y otras sean elegidas más de una vez.

El uso de funciones de distribución aleatorias no es siempre la ideal y pueden analizarse formas de distribuir lo más uniforme posible los registros, generando un número aceptable de sinónimos.

Page 130: Estructuras de Archivos

130

a) Sin sinónimos (uniforme) b) Todos son sinónimos (peor caso) c) Pocos sinónimos

Figura 6.3 Ejemplos de distribuciones

6.5 Otros métodos de dispersión

Se puede esperar encontrar en algún momento una función de dispersión que sea mejor que la aleatoria para todos los casos que se requieren distribuir registros, lamentablemente no la hay. Las direcciones a las que las llaves envían a los registros dependen de las llaves mismas, por lo que deben analizarse estas llaves y realizar algunos experimentos con ellas. Folk[1992] nos presenta algunos métodos que son algo mejor que los aleatorios.

• Examinar las llaves para buscar un patrón. Si se revisa con atención las llaves es posible encontrar que algunas de ellas se dispersan de manera natural, y sucede con mayor probabilidad en llaves numéricas que en las alfabéticas, por ejemplo en un número de empleado que se le asigna un consecutivo y la fecha de ingreso a la organización, lo que de hecho no genera llaves duplicadas, por tanto, si la llave de los registros presenta esta característica entonces contiene un patrón útil y debe tomarse en cuenta esta parte de la llave.

• Desglosar partes de la llave. En el ejemplo de algoritmo básico que se presento en este texto, puede observarse que el segundo paso de des-

Page 131: Estructuras de Archivos

131

glose implica extraer trozos de la llave y sumar estos fragmentos. La llave original por tanto es destrozada y es posible que alguno de estos fragmentos se esparza de forma natural, por lo que vale la pena tomarlos en cuenta.

• Dividir la llave entre un número. En la última parte del algoritmo se toma el residuo de una división y que se acerca a la dirección que se desea obtener. Al dividir entre un número que tiene muchos factores pequeños da como resultado muchas colisiones. Investigaciones sobre el tema mencionan que los números con pocos divisores evitan este problema por tanto adoptar el uso de números primos genera menos colisiones que otros como los pares o impares.

Estas formas de tratar a las llaves para obtener las direcciones a las que irán a parar los registros aprovechan el orden natural de las llaves, pero existen otros métodos que pueden aprovecharse cuando los aleatorios no funcionan, y que tam-bién buscan como objetivo esta aleatoriedad.

• Elevar al cuadrado la llave y tomar la mitad. También conocido como medio cuadrado y consiste en utilizar la llave como un solo número grande, se eleva al cuadrado y se obtiene el número de dígitos nece-sarios según el rango de direcciones. Como ejemplo, suponga que se desea generar una dirección entre 0 y 99 y la llave que se tiene es 453, su cuadrado es 205 209 y al extraer los dos dígitos del medio se obtiene un número entre 0 y 99, en este caso, 52.

• Transformación de la base. Este método consiste en convertir la llave a alguna otra base numérica que sea diferente a la que se está usando y tomar después el resultado del módulo con la máxima dirección como la dirección de la dispersión. Como ejemplo, supóngase que quieren ge-nerarse direcciones entre 0 y 99. Si la llave es el número decimal 453, su equivalente en base 11 es 382; 382 mod 99 = 85, de modo que 85 es la dirección de dispersión. Este método es más confiable que el medio cuadrado.

6.6 Resolución de colisiones mediante saturación progresiva

Cualquier algoritmo de dispersión que se diseñe por bueno que sea generará colisiones, entonces es común que se integren líneas de programación que traten a los registros que no sea posible integrar en la dirección base. Hay un conjunto

Page 132: Estructuras de Archivos

132

de formas que manejan estos registros en saturación y los programadores siguen analizando y diseñando nuevas formas, a continuación se muestra un método sencillo, que de manera general funciona bien, llamado saturación progresiva.

En el ejemplo que se ilustra se muestra como los registros con llaves YO-LANDA y OLIVIA colisionan, el registro de YOLANDA llega después por lo que no puede ingresar a la dirección y se convierte en un registro en saturación. La saturación progresiva busca en las siguientes direcciones hacia adelante hasta encontrar una dirección vacía que se convierte en la dirección del registro. Para este caso la dirección base de YOLANDA es 6, pero como está ocupada por el registro de OLIVIA pues inicia la búsqueda del siguiente bloque vacío, y para este caso el registro es colocado finalmente en la dirección 9.

Figura 6.4 Colisiones

Esto ocurre al momento del almacenamiento, pero cuando en algún momento sea necesario buscar el registro cuya llave es YOLANDA, la búsqueda comenza-rá en la dirección base 6, al no encontrarse ahí iniciará la búsqueda hacia adelante y terminará con la localización del registro en la dirección 9.

Surge un problema obvio cuando se analiza a detalle este algoritmo, al lle-gar al final de las direcciones tanto en la búsqueda como del almacenamiento, y este problema consiste en que se llegue al final del espacio de direcciones bien sea en la búsqueda de un espacio vacío o en la búsqueda de algún registro. La solución a esto es que para un rango de direcciones de 0 a 99 debe de unirse del

Page 133: Estructuras de Archivos

133

extremo inferior al comienzo dando así una secuencia cíclica que permitirá que siempre exista una siguiente dirección, de esta manera, si se desea almacenar el registro de la llave BLANCA el cual por dispersión se le asigna la dirección 99, al revisarse se observa que ya está ocupada la dirección por el registro cuya llave es JOAQUIN, por lo que se le da la vuelta al especio de direcciones y se continua buscando, pasando de la dirección 99 a 0, luego a 1 y así hasta encontrar una dirección disponible.

Figura 6.5 Secuencia cíclica

Cabe mencionar que existen casos excepcionales, como por ejemplo: ¿Qué ocurre si se desea localizar un registro que nunca se colocó en el archivo? El proceso de búsqueda comienza por la dirección base y se continuará tratando de localizar el registro que coincida con la llave que se trata de encontrar analizando cada una de las llaves que se va localizando hacia adelante, este proceso conti-nuará hasta que suceda una de dos cosas:

• Al localizar una dirección vacía se supone que el registro no está en el archivo o

• Cuando el archivo este lleno la búsqueda volverá al comienzo desde donde se partió, si esto ocurre y el archivo es muy grande la búsqueda se tornará bastante lenta y de cualquier manera fallará.

Sin embargo, una gran ventaja de este método de saturación progresiva es que es bastante simple y en muchas ocasiones es el preferido para tratar a los registros en saturación.

Page 134: Estructuras de Archivos

134

Por último, se analizará qué ocurre con este método al realizar eliminaciones de registros, puesto que agregar uno nuevo es tarea relativamente simple, bastará con localizar el siguiente bloque vacío, pero la eliminación es un proceso que debe revisarse con atención por dos razones:

• El espacio liberado por la eliminación no debe generar problemas en las búsquedas o inserciones posteriores.

• Debe permitir la reutilización del espacio liberado para inserciones pos-teriores.

Al utilizar la saturación progresiva, la búsqueda termina al encontrar un re-gistro vacío y por ello no conviene al eliminar vaciar simplemente el registro. Para ello se plantea el siguiente ejemplo: ADRIANA, JUAN, MARTIN y SO-LEDAD se almacenan en un archivo en el cual cada dirección solo almacena un registro, por lo que ADRIANA y SOLEDAD se asignan a la dirección 3 y JUAN y MARTIN a la dirección 4, al almacenarse con el método de saturación progre-siva se obtiene el siguiente esquema:

Figura 6.6 Esquema de registros antes de la eliminación

Si se desea eliminar el registro MARTIN, el proceso comienza tratando de localizarlo en su dirección base 4, luego al no encontrarlo se buscará hacia ade-lante hasta llegar a la dirección 5 y allí se encuentra, si simplemente se vacía como se observa en el esquema, se podría provocar errores en futuras consultas.

Page 135: Estructuras de Archivos

135

Figura 6.7 Esquema de registros antes de la eliminación

Para esquematizar dichos errores, suponga que ahora se intentará localizar el registro cuya llave es SOLEDAD, el proceso comienza en la dirección 3 y al estar ocupado por otra llave se pasa al siguiente, que también está ocupado, y así se lle-ga al que está VACIO por lo que el algoritmo considera que el registro no existe en el archivo, y esto es un error ya que la eliminación anterior dejo un problema que debe resolverse para evitar este tipo de inconsistencias.

Page 136: Estructuras de Archivos

136

Bibliografía

Alcalde E. / Morera J. y Pérez J.A. – Campanero, Introducción a los sistemas operativos MS/DOS,UNIX, MVS, VMS, OS/400, Mc Graw Hill, 1992

Cairó / Guardati, Estructuras de Datos 1ª Ed., McGraw Hill, 1993

E. Martinez, J.A Montón, J. Megía, J. Del Verbo, J.A. López, Tecnología de la información y la comunicación, McGraw Hill, ISBN: 84-481-4690-5

Folk Michael J., Zoellick Bill, Estructuras de Archivos, un conjunto de he-rramientas contextuales, Addison Wesley Iberoamericana. Versión en español de Luis F. Castro Careaga, ISBN: 0-201-62923-2, 1992

Joyanes Aguilar Luis, Rodríguez Baena Luis, Fernández Azuela Matilde, Fundamentos de Programación 1ª Ed., McGraw Hill, 1997

Joyanes Aguilar Luis, Zahonero Martínez Ignacio, Algoritmos y Estructuras de Datos, Una Perspectiva en C 1ª Ed., McGraw Hill, 2004

Joyanes Aguilar Luis, Estructura de datos en C.Shaum, McGraw Hill, ISBN: 84-481-4512-7

Joyanes Aguilar Luis, Programación en Pascal, 4ª Ed., McGraw Hill, ISBN: 84-481-5041-4

Joyanes Aguilar Luis, Programación en C++. Algoritmos, estructuras de da-tos y objetos 2ª Ed., McGraw Hill, ISBN: 84-481-4645-X

Milenkovic, Milan, Sistemas Operativos. Conceptos y Diseño 2ª Ed., Mc-Graw Hill

Prieto A., Lloris A., Torres J.C., Introducción a la informática 4ª Ed., Mc-Graw Hill, ISBN: 84-481-4624-7

Silberschatz A., Korth H. F., Sudarshan S., Fundamentos de base de datos. 5ª Ed., McGraw Hill, ISBN: 84-481-4644-1

Silberschatz A., Peterson J. y Galvin P., Sistemas Operativos. Conceptos Fun-damentales., 3ª Ed., Adisson Wesley, 1994

Tanenbaum Andrew S., Sistemas Operativos Modernos, Prentice Hall, 1993.

Page 137: Estructuras de Archivos
Page 138: Estructuras de Archivos

Estructuras de Archivos.Un enfoque informáticose terminó de imprimir

en febrero de 2011en los talleres gráficos

de Amateditorial, S.A. de C. V. E. Zapata núm. 15, El Mante

Zapopan, JaliscoTel-fax: 36120751

36120068

[email protected]