ADMINISTRACIÓN DE ARCHIVOS.
Ejemplos prácticos de utilización de archivos: Secuenciales, Indexados y directos, utilizando el lenguaje C++.
Autores : José Luis Hernández Hernández René Edmundo Cuevas Valencia Angelino Feliciano Morales.
Responsable de la publicación digital: M. en C. Félix Molina Ángel.
Gestión del ISBN: M. en C. José Luis Hernández Hernández. Revisó : M. en C. Mario Hernández Hernández. Diseño de portada : Luis Ángel Hernández Villanueva. Responsable de la reproducción en discos compactos: M. en C. René Edmundo Cuevas Valencia y M. en C. Juan Carlos Medina Martínez, director de la UA de Ingeniería.
Sitio WEB: http://ingenieria.uagro.mx/catics ISBN: 978-607-00-3901-0 El contenido de este E-Book, es con fines educativos, que impacte en el programa de Ingeniero en Computación de la UAI de la UAGro. Se permite la reproducción total o parcial del mismo por cualquier medio, siempre y cuando se cite a los autores.
Chilpancingo de los Bravo Guerrero, México. Diciembre de 2010.
INDICE
CONTENIDO.
Página
Indice
ii
Introducción
iv
Indice de Figuras
vi
Capítulo I.- Dispositivos de almacenamiento externo. I.1 Cintas magneticas, tambor magnetico, discos magneticos. I.2 Diskettes, Disco duro. I.3 Dispositivos de memoria intermedia.
1
Capítulo II.- Definiciones y conceptos. II.1 Campo, campo secuencial, registro, llave, archivo, base de datos, transacción. II.2 Organización de registros y archivos.
22
Capítulo III.- Archivos Secuenciales. III.1 Estructura de un archivo secuencial. III.2 Operaciones a efectuar. III.3 Mantenimiento. III.4 Ejemplo de aplicación.
38
Capítulo IV- Archivos Secuencial-Indexado. IV.1 Estructura de un archivo secuencial-Indexado. IV.2 Operaciones a efectuar. IV.3 Mantenimiento. IV.4 Ejemplo de aplicación.
57
Capítulo V.- Archivos Directos. V.1 Estructura de un archivo directo. V.2 Operaciones de inserción, supresión y manejo de colisiones. V.3 Estructura de arbol para multiniveles de indices. V.4 Mantenimiento. V.5 Ejemplo de aplicación.
72
ii
Capítulo VI.- Correspondencia entre la llave y la dirección física.
89
VI.1 Direccionamiento directo e indirecto. VI.2 Clasificación de los tipos de correspondencia. VI.2.1 Directa. VI.2.2 Asociación. VI.2.3 Por circulo (Técnicas aleatorias tipicas, truncamiento, selección, analisis de frecuencias, división por número primo, cambio de base, multiplicación y cuadrado). VI.2.4 Soluciones con claves no numéricas Capítulo VII.- Otros métodos de organización de archivos y busquedas de economías. VII.1 Memoria Virtual. VII.2 Sistema de paginación. VII.3 Concepto de segmentación y sistema. VII.4 Archivos Vsam (virtual storage access method). VII.5 Compactación de datos.
109
Capítulo VIII- Acceso Multi-llaves. VIII.1 Organización multilista. VIII.2 Lista Invertida. VIII.3 Multilista restringida y estructurada. VIII.4 Particionada celular. VIII.5 Mantenimiento (De cada una de las anteriores).
128
Capítulo IX.- Evaluación general del sistema de Archivos. IX.1 Estimación del uso del sistema. IX.2 Análisis de los beneficos del sistema. IX.3 Necesidades de almacenamiento. IX.4 Comparación entre costo y beneficio.
143
Bibliografía.
155
Glosario de términos
157
iii
INTRODUCCION
La utilización de memoria para almacenar información tiene ciertos inconvenientes. En primer lugar, la información que se almacena en la memoria no persiste en el tiempo, pues cuando la computadora es apagada la información se pierde. Por otro lado, si se desea almacenar una gran cantidad de información no es posible hacerlo en memoria, pues por lo general las computadores no contienen grandes cantidades de memoria, aparte de que es un recurso de alto costo. El sistema de archivos es una de las partes más visibles del sistema operativo. Los usuarios utilizan los archivos para almacenar sus datos o programas en forma persistente, esto quiere decir que la información no se pierde una vez que la computadora es apagada. Para almacenar dicha información se utilizan dispositivos de memoria secundaria, como discos, cintas, cd-rom, etc. El sistema de archivos como parte del sistema operativo proporciona hacia el usuario una interfaz sencilla, amigable y organizada, que le permite al usuario almacenar y organizar su información. Dicha interfaz es proporcionada principalmente mediante archivos, directorios y operaciones sobre ellos. Una parte de las operaciones que el sistema otorga a los usuarios tiene relación con los mecanismos de protección que les permite a los usuarios proteger su información. Los mecanismos de protección son especialmente importantes para sistemas multiusuarios. Por otro lado, el sistema de archivos debe representar la información a almacenar de alguna manera en el sistema de tal forma que pueda interactuar fácilmente con otra parte del sistema, que corresponde a la Unidad de Entrada/Salida, pues debe almacenar realmente la información de archivos y directorios en los dispositivos de almacenamiento secundario. En el capítulo I trata sobre el uso de los medios magnéticos para grabar y almacenar información numérica, textual, sonido y video ha brindado a las organizaciones una forma de conservar la información para ser utilizada posteriormente. En el capítulo II se habla sobre procesamiento de la información y se abordan todas las definiciones y conceptos que están ligados con la Administración de los archivos. En el capítulo III se tratan a fondo los archivos de datos con organización secuencial, en la cual los registros de datos se graban en el archivo uno detrás de
iv
otro, sin dejar huecos. La grabación de dichos registros se lleva a cabo exactamente en el mismo orden en que fueron introducidos por el capturista. En el capítulo IV nos adentramos a la organización de archivos secuencialindexados y se tratan en forma general las ventajas que tiene ésta organización de archivos con respecto a la organización de archivos secuencial del capítulo II. En el capítulo V, se llega a una organización de archivos donde el acceso casi a cualquier registro es inmediato, me estoy refiriendo a la organización de archivos directa y todas sus bondades. En el capítulo VI se hace un análisis minucioso sobre todas las operaciones que pueden hacerse con el fin de registrar adecuadamente la correspondencia entre la llave de búsqueda de un registro y su ubicación física dentro de algún medio de almacenamiento. En el capítulo VII se buscan nuevas alternativas de organización de los archivos de datos, con el fin de buscar economía en el tiempo máquina de acceso y buscar optimización en los procesos. En el capítulo VIII se maneja una variante de los archivos secuencialindexados, la cual consiste en tener varías áreas de índice de un solo archivo de datos, de tal forma que el acceso a un registro en particular pueda darse por varias vías. Dicha organización de archivo de datos se le llama de acceso multi-llaves y se manejan cuatro variantes, cada una de ellas con sus limitantes y sus ventajas. En el capítulo IX que es el último capítulo del presente documento, se tratan en forma general todo lo que debe considerarse para evaluar en forma general un sistema de archivos y sobre todo obtener en forma general el costo/beneficio. En forma general, se investigó en forma general todo el contenido de la materia de administración de archivos, que es una materia que se imparte en la carrera de Ingeniería en Sistemas Computacionales del Instituto Tecnológico de Chilpancingo.
v
Indice de Figuras, Programas y Tablas.
FIGURAS.
Figura No. 1.1 Características técnicas de las cintas magnéticas.
2
Figura No. 1.2 Proceso de grabación / reproducción de una cinta magnética.
3
Figura No. 1.3 Cabeza de lectura / escritura.
3
Figura No. 1.4 polvo ambiental que afecta a la cinta.
4
Figura No. 1.5 Tambor Magnético.
6
Figura No. 1.6 Disco Magnético.
6
Figura No. 1.7 Lector de Discos Compactos
7
Figura No. 1.8 Partes de un Diskette.
8
Figura No. 1.9 Disco Duro de varios platos.
10
Figura No. 1.10 Estructura física de un Disco Duro.
11
Figura No. 1.11 Unidad Zip de almacenamiento
17
Figura No. 1.12 Unidad SuperdDisk y Disco para grabar.
18
Figura No. 1.13 Unidad lectora/grabadora de Magneto-ópticos.
19
Figura No. 1.14 Unidad lectora/grabadora de JAZZ.
20
Figura No. 2.1 Ejemplo de campo secuencial.
23
Figura No. 2.2 Ejemplo de campo llave, campo, registro y archivo.
24
Figura No. 2.3 Ejemplo de una base de datos trivial.
25
Figura No. 2.4 Separadores entre registros y fin de archivo de una corriente de texto. Figura No. 2.5 Conversiones Caracteres a Binario y viceversa.
26 26
Figura No. 2.6 No existen separadores entre registros en la Corriente Binaria.
27
Figura No. 2.7 Conversiones Caracteres a Binario.
27
Figura No. 2.8 Jerarquía de clases de Entrada / salida de C++.
28
Figura No. 2.9 Funciones miembro de la clase ifstream.
29
Figura No. 2.10 Funciones miembro de la clase ofstream.
29
vi
Figura No. 2.11 Funciones miembro de la clase fstream.
30
Figura No. 2.12 Elementos a considerar para ubicar un archivo.
31
Figura No. 2.13 Ejemplo de archivo de trabajo o temporal.
33
Figura No. 3.1 Registros grabados en forma secuencial (Uno detrás de otro).
38
Figura No. 3.2 Estructura del registro de datos.
40
Figura No. 3.3 Representación gráfica de una clase.
40
Figura No. 3.4 Encadenar varios archivos de clases para crear una aplicación. 43 Figura No. 3.5 Alta un registro a un archivo secuencial.
45
Figura No. 3.6 Eliminación de un registro en un archivo secuencial.
46
Figura No. 3.7 Modificación de algunos datos de un registro.
48
Figura No. 3.8 Estructura genérica del programa práctico.
50
Figura No. 4.1 Área de datos de un archivo secuencial-indexado.
57
Figura No. 4.2 Estructura del registro del área de datos.
58
Figura No. 4.3 El área de datos y el área de índice permiten la Organización Secuencial-indexado.
58
Figura No. 4.3 El área de datos y el área de índice permiten la organización.
58
Figura No. 4.5 Una área de datos y dos áreas de índice.
60
Figura No. 4.6 Se incluye el archivo .hpp con sus clases para crear el ejecutable.
62
Figura No. 5.1 Estructura de un archivo directo.
72
Figura No. 5.2 Archivo directo donde debe transformarse la llave.
73
Figura No. 6.1 Direccionamiento Directo.
90
Figura No. 6.2 Estructura de los índices.
91
Figura No. 6.3 Estructura de un cilindro.
94
Figura No. 6.4 Ejemplo de direccionamiento por sector.
94
Figura No. 6.5 Formación de número de control de un alumno del Tecnológico 96 Figura No. 6.6 Área de datos y área de índice de un archivo secuencialIndexado.
97
Figura No. 6.7 Asociación cuando existen 2 áreas de índices y un área de datos.
98
vii
Figura No. 6.8 Esqueleto de un archivo relativo que considera un área para colisiones. Figura No. 6.9 Dirección relativa seleccionando la fecha de nacimiento.
99 101
Figura No. 6.10 Ubicación física de un registro con la división por número primo.
103
Figura No. 6.11 Direcciones físicas utilizando el cambio de base 10 a base 8.
103
Figura No. 6.12 Cálculo de la dirección relativa por medio de multiplicación.
104
Figura No. 6.13 Uso del cuadrado para obtener la dirección física.
105
Figura No. 6.14 Llaves tipo cadenas convertidas a direcciones relativas.
107
Figura No. 7.1 Memoria virtual de una computadora.
110
Figura No. 7.2 Correspondencia entre la dirección física y lógica de la memoria. 110 Figura No. 7.3 Páginas de memoria compartidas por uno o más procesos.
112
Figura No. 7.4. Traducción de página virtual a página real.
113
Figura No. 7.5 Eliminación de la memoria principal de una página que no está en uso y se reemplaza por otra página que se requiere.
115
Figura No. 7.6 Segmentos que puede tener la memoria.
117
Figura No. 7.7 Archivo VSAM luego de la carga inicial.
121
Figura No. 7.8 Archivo VSAM luego de una inserción en un intervalo no lleno.
121
Figura No. 7.9 Inserción en intervalo lleno con intervalo vacío en el área.
122
Figura No. 7.10 Inserción con fisión de intervalo y de área.
122
Figura No. 8.1 Ejemplo de un registro de una sucursal bancaria.
129
Figura No. 8.2 Organización multilista por profesión y categoría.
131
Figura No. 8.3 Organización de datos de lista invertida (dos índices).
133
Figura No. 8.4 Organización multilista restringida por grupo y categoría.
135
Figura No. 8.5 Estructura de un archivo organizado en forma particionada celular.
136
Figura No. 8.6 Adición de un registro en las listas ligadas de profesión y categoría.
140
viii
PROGRAMAS.
Programa No. 3.1 Codificación de la clase registro_empleado.
42
Programa No. 3.2 Ejemplo de manipulación de un archivo secuencial.
55
Programa No. 4.1 Codificación de la clase empleado y la clase índice.
61
Programa No. 4.2 Programa para la creación del área de índices. 65 Programa No. 4.3 Programa dar de alta un registro en el área de datos y en el área de índice.
68
Programa No. 4.4 Modificaciones a un registro en el área de datos sin modificar el área de índice.
70
Programa no. 5.1 Codificación de la clase empleado para usarla en Archivos Directos.
78
Programa No. 5.2 que ejemplifica la creación de un archivo directo.
83
Programa No. 5.3 Ejemplo de alta de un registro a un archivo Directo.
84
Programa No. 5.4 Ejemplo de eliminación de un registro a un archivo Directo.
86
Programa No. 5.5 Ejemplo de modificación de un registro en un archivo Directo.
87
ix
TABLAS.
Tabla No. 1.1 Tabla de capacidades de los dos tipos de diskettes. 9 Tabla No. 8.1 Datos para crear un archivo multilista.
130
Tabla No. 8.2 Registros que se almacenan en una multilista restringida.
134
Tabla No. 8.3 Insertar un registro a un archivo multilista.
139
Tabla No. 9.1 Concentrado para conocer la cantidad de espacio de almacenamiento secundario requerido.
150
Tabla No. 9.2 Cantidad en bytes para los Ăndices.
150
Tabla No. 9.3 EstimaciĂłn general para el sistema de archivos.
151
Tabla No. 9.4 Incremento global mensual.
151
x
CAPITULO 1 Dispositivos de almacenamiento externo.
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Capitulo 1.- Dispositivos de almacenamiento externo. El uso de los medios magnéticos para grabar y almacenar información numérica, textual, sonido y video ha brindado a las organizaciones una forma de conservar la información para ser utilizada posteriormente. Por un lado, los medios magnéticos incrementan los tipos de objetos y eventos que se pueden captar y almacenar. Por el otro, sus necesidades especiales de almacenamiento a largo plazo son diferentes a las de los materiales tradicionales. Las organizaciones donde se maneja información en cualquiera de sus múltiples formas necesitan de un cuidado y manejo especifico para asegurar que la información grabada sea preservada. Es posible que se necesite de ambientes de almacenamiento especiales si la información registrada ha de preservarse por muchos años. Para la información que debe preservarse indefinidamente, la transcripción periódica de los viejos medios a otros nuevos medios se hace necesaria, no sólo debido a que el medio es inestable, sino también porque la tecnología de grabación se hace obsoleta y los avances tecnológicos crean mejores medios de almacenamiento. A continuación se explica en forma detallada los principales dispositivos de almacenamiento externos que se han utilizando para preservar los datos que serán utilizados por una computadora para generar la información requerida.
Tema I.1 Cintas magnéticas, Tambor magnético y Discos Magnéticos. 1.- CINTAS MAGNETICAS.
Las cintas magnéticas son de un material plástico recubierto de óxido férrico, de un ancho de menos de dos centímetros, sobre la cual la información es registrada en forma de puntos magnetizados o no magnetizados a lo largo de varias pistas paralelas para representar los símbolos binarios 1 y 0. Así como en una grabadora común de sonido los datos son grabados o leídos por medio de una cabeza magnética, en el caso de los procesadores hay tantas cabezas como pistas paralelas. Varias unidades de cinta pueden ser interconectadas al mismo procesador, permitiendo de esta manera almacenar millones de datos, registrándolos o leyéndolos a la velocidad de aproximadamente 15,000 números y letras por segundo.
Página :
1
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
En las cintas magnéticas para la grabación de datos se pueden distinguir varias capas : A) Revestimiento posterior. Su misión es reducir la carga estática de la cinta para eliminar la suciedad, la cual si se acumula en un punto de la cinta provoca fallos en la señal, que son conocidos como “dropouts” . Su espesor varía de 1 a 2 micras. B) Material base de la cinta. Esta capa le proporciona a la cinta sus propiedades mecánicas y suele ser de poliéster. Su espesor varía entre 0.005 y 0.0038 milímetros. C) Revestimiento magnético. Esta capa le da a la cinta sus características magnéticas y en la actualidad se fabrica en cuatro tipos diferentes: 1. Óxido férrico. Es la más utilizada hasta el momento. coercitividad entre 300 y 360 Oersteds.
Posee una
2. Óxido de hierro dopado. Dopado de cobalto presenta una coercitividad entre 500 y 1200 Oersteds , pero tiene una gran dependencia con la temperatura. 3. Dióxido de cromo. Es el material usado para la duplicación por contacto térmico. Este material y el anterior presentan una relación señal / ruido 6 dB superior al óxido férrico. 4. Partículas metálicas. Con una coercitividad de 1000 a 1500 Oersteds poseen una relación señal / ruido de 12 dB superior a la del óxido férrico. Su ciclo de histéresis es casi rectangular lo que permite grabaciones de frecuencias más altas, y la cinta puede desplazarse a más baja velocidad sin sacrificar el rango dinámico. Este tipo es el que está siendo utilizado en los nuevos formatos que aparecen en el mercado. En la Figura No. 1.1, se pueden apreciar las características técnicas de las cintas magnéticas.
Figura No. 1.1 Características técnicas de las cintas magnéticas
Página :
2
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Para la grabación sobre la cinta es necesario una cabeza de grabación. En la figura 1.2 se puede apreciar el proceso. Durante la grabación una corriente aplicada produce la magnetización de la cinta (los pequeños imanes que la forman son orientados por el campo magnético producido). En la reproducción estos pequeños imanes producen en la cabeza una pequeña corriente inducida.
Figura No. 1.2 Proceso de grabación / reproducción de una cinta magnética.
La cabeza es un electroimán con su núcleo interrumpido en un punto. Esta interrupción es en el entrehierro, donde el campo magnético que existe en el núcleo por la corriente que se ha aplicado se dispersa un poco hacia el exterior. De ésta manera si la cinta se “pega” al entrehierro es posible su magnetización. En la figura No. 1.3 se aprecia un esquema de una cabeza. Los parámetros más importantes son dos : • •
Por un lado la longitud del entrehierro, la cual nos limita la máxima frecuencia a grabar. Y por otro lado el ancho de la pista que como su nombre indica nos da la anchura de la pista que el cabezal graba sobre la cinta.
Figura No. 1.3 Cabeza de lectura / escritura.
Página :
3
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Esta anchura nos da la cantidad de señal que podemos obtener, a mayor anchura más señal (mejor relación señal / ruido), y además la cantidad de información o pistas que podemos grabar en un ancho de cinta determinado (cantidad de información Ventajas de las cintas : 1.- Alta densidad de datos: Un carrete común de cinta de 10½ plg. de diámetro. Tiene una longitud de 2400 pies. Y puede grabar 800,1600, 2400, 3200, 4000, 4800, 5600 y hasta 6400 bytes en cada pulgada dependiendo de la unidad de cinta que utilice, por lo tanto, si se graban 6400 caracteres en una pulgada de cinta y si la cinta tiene una longitud de 28800 pulgadas entonces la capacidad máxima de la cinta será de 184,320,00 bytes. 2.- Bajo costo y facilidad de manejo.- Un carrete de 10½ pulgada cuesta menos de 20 dólares. Y dado que el carrete es compacto y pesa menos de 1 kg. y medio, ocupa muy poco espacio de almacenamiento y es fácil de manejar. Limitaciones de las cintas: 1.- 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 archivo organizados en forma secuencial. Si se requiere acceso frecuente a los registros del archivo en forma rápida y aleatoria, el archivo no deberá almacenarse en cinta magnética; se requiere demasiado tiempo de operador para montar y desmontar cintas, se desperdiciaría mucho tiempo máquina en la lectura de registros que no necesitan. 2.- Problemas ambientales.- Las partículas de polvo como puede apreciarse en la Figura No. 1.4 y la falta de control de los niveles de la temperatura o humedad pueden causar errores en la lectura de cintas. Las cintas y sus envases deben etiquetarse y controlarse cuidadosamente para no borrar por error un archivo importante. [i-2]
Figura No. 1.4 polvo ambiental que afecta a la cinta.
Página :
4
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Recomendaciones Generales. 1. Se debe mantener las cintas lejos de campos magnéticos; campos magnéticos muy débiles pueden causar errores. Motores de inducción como aquellos usados en aires acondicionados, refrigeradoras y compresores pueden generar fuertes campos magnéticos. Un televisor puede generar campos magnéticos cuando es conectado o debido al desmagetizador automático que es el responsable de eliminar el magnetismo que el tubo genera. 2. Nunca se deben archivar las cintas magnéticas sobre equipos electrónicos aunque sea temporalmente. Casi todos los equipos electrónicos generan campos magnéticos y calor. 3. Descartar las cintas físicamente dañadas, ellas pueden transportar impurezas y desperdicios a las cabezas lectoras y en esta forma contaminar otras cintas. 4. Para mejor protección, mantenga las cintas magnéticas en su estuche original cuando no están en uso. 5. Siempre mantenga las cintas en posición vertical, nunca horizontal, esto reduce la posibilidad que las cintas se dañen por el peso excesivo.
Ambiente de uso 1. Nunca tocar la superficie o los bordes de las cintas magnéticas. 2. El ambiente de operación y almacenamiento de las cintas debe estar libre de: polvo, humo y comida. 3. Mantenga un ambiente de humedad y temperatura adecuado todo el tiempo. 4. En la medida de lo posible cuando se transporta cintas magnéticas en ambientes extremos se debe permitir la climatización de las mismas por lo menos 24 horas.
2.- TAMBOR MAGNETICO “Un tambor magnético era como una pila de CD (pero claro de material ferromagnético) con una fila de lectores a su lado, estas pequeñas agujas se encontraban a la pequeñísima distancia de 0.001 pulgadas por lo cual si se movían de una forma no debida o por el simple hecho de la expansión de los materiales por el calor esta separación ya no era la misma por lo que este dispositivo era inservible. La figura 1.5 muestra esquemáticamente la forma del tambor magnético.
Página :
5
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Figura No.- 1.5 Tambor Magnético.
La forma como se hacia una lectura o escritura era con los componentes del tambor, por ejemplo, en el sector 8, pista 3; su tiempo de acceso era tomado en revoluciones por minuto (se alcanzo hasta 8000 rpm) y el número de bits que era capaz de almacenar se medía según sus características físicas como lo son el diámetro del tambor, su altura, etc. técnicamente se usó máximo a 1200 bps”. [i-1].
3.- DISCOS MAGNETICOS Para grabar datos en un soporte físico más o menos perdurable se usan dos tecnologías en los discos. La magnética se basa en la propiedad magnética de algunos materiales y otros fenómenos magnéticos, mientras que la óptica utiliza las propiedades del láser y su alta precisión para leer o escribir los datos. La tecnología magnética para almacenamiento de datos se lleva usando desde hace decenas de años, tanto en el campo digital como en el analógico. Consiste en la aplicación de campos magnéticos a ciertos materiales cuyas partículas reaccionan a esa influencia, generalmente orientándose en unas determinadas posiciones que conservan tras dejar de aplicarse el campo magnético. Esas posiciones representan los datos, bien sean una canción de los Beatles o bien los bits que forman una imagen o el último balance de la empresa. Un ejemplo de los discos magnéticos se puede apreciar en la Figura No. 1.6.
Figura No. 1.6 Disco Magnético.
Página :
6
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Una de las características relevantes de la ultima década en el ámbito de las tecnologías de la información, lo constituye sin duda alguna, el cambio de los medios magnéticos a los medios ópticos. Esta transición, provocada por el auge de los formatos digitales, se inicia en el comienzo de los años 80, con el uso intensivo del disco compacto o CD, el cual revoluciona la música y da origen a la era digital. “Los discos ópticos, además de ser medios removibles con capacidad para almacenar masivamente datos en pequeños espacios -por lo menos diez veces más que un disco rígido de igual tamaño- son portables y seguros en la conservación de los datos (que también permanecen si se corta la energía eléctrica). El hecho de ser portables deviene del hecho de que son removibles de la unidad”. [i-3] Los discos ópticos presentan una capa interna protegida, donde se guardan los bits mediante distintas tecnologías, siendo que en todas ellas dichos bits se leen por un rayo láser incidente. Este, al ser reflejado, permite detectar variaciones microscópicas de propiedades óptico-reflectivas ocurridas como consecuencia de la grabación realizada en la escritura. Un sistema óptico con lentes encamina el haz luminoso, y lo enfoca como un punto en la capa del disco que almacena los datos. La Figura No. 1.7 muestra el mecanismo de lectura / escritura de un disco compacto.
Figura No. 1.7 Lector de Discos Compactos
El CD ROM logró un éxito semejante al de las grabaciones sonoras digitales, con más de 130 millones de lectores vendidos y decenas de miles de títulos disponibles. De hecho se configuró en el estándar para cualquiera de las PC que se venden actualmente en el mercado actual y ahora constituye la segunda revolución industrial; es decir, las de los datos de un CD. Básicamente este formato es la derivación natural del CD de audio con la diferencia que en vez de grabar la información de forma que puedan interpretarlo las lectoras de audio, la misma esta organizada de forma similar a un disco rígido, pero de 640 Mb. Su evolución paralela produjo el CD-R y CD R-W, tecnología que nos permite grabar y borrar nuestros discos compactos para usarlos como respaldo de datos, música o multimedia. Página :
7
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Tema 1.2 Diskettes, Disco duro. DISKETTES
Hoy en día , el medio de almacenamiento secundario más usado en las microcomputadoras es el llamado disquete, o también disco flexible, diskette, o floppy disk. En contraste con las unidades de cinta magnética, las unidades de diskette permiten a la computadora localizar los archivos rápidamente ubicando de modo directo a cualquier pista en el disco, de igual forma en que se localizan grabaciones en un disco compacto. Un diskette es simplemente una hoja circular de plástico Mylan recubierta con una capa de óxido de hierro que puede almacenar impulsos magnéticos. Los diskettes vienen en distintos tamaños (identificados por su diámetro). Los más comunes son los de 3.5 y 5.25 pulgadas. El Disco de 5.25 pulgadas tuvo originalmente una capacidad de 160 kb y se escribian los datos a doble densidad y en una cara, en seguida se originó un avance y el mismo diskette tuvo una capacidad de 360 Kb a doble densidad y en las dos caras. Finalmente y algunos avances tecnológicos, se logró almacenar 1.2 Mb a alta densidad y en las dos caras. El disco de 3.5 pulgadas se manejó en su primera versión a 720 Kb a doble densidad, doble cara; y la última modificación, se graba a 1.44 Mb a alta densidad y en las dos caras tal como se muestra en la Figura No. 1.8.
Figura No. 1.8 Partes de un Diskette.
Página :
8
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Estos discos fueron popularizados por la Macintosh de Apple, y hoy en día son estándares en la industria de la computación. Las unidades de diskettes son compatibles "hacia atrás"; es decir, que en una unidad de 3,5" de alta densidad que almacena 1.44 MB, puede usar discos de 720 Kb o de 1,44 MB, pero en una de doble densidad, más antigua, sólo se pueden usar diskettes de 720 Kb. Para ver más claramente las diferencias entre los dos tipos de diskettes y sus capacidades, se muestra la Tabla No. 1.1.
Tamaño
Tipo de disco
Capacidad Explicación
5,25"
SS/DD
180 Kb
Una cara, doble densidad. Desfasado
5,25"
DS/DD
360 Kb
Dos caras, doble densidad. Desfasado
5,25"
DS/HD
1,2 MB
Dos caras, alta densidad. Desfasado pero útil
3,5"
DS/DD
720 Kb
Dos caras, doble densidad. Desfasado pero muy común
3,5"
DS/HD
1,44 MB
Dos caras, alta densidad. El estándar actual
Tabla No. 1.1 Tabla de capacidades de los dos tipos de dikettes.
Los diskettes tienen fama de ser unos dispositivos muy poco fiables en cuanto al almacenaje a largo plazo de la información; y en efecto, lo son. Les afecta todo lo imaginable: campos magnéticos, calor, frío, humedad, golpes o polvo. Hace unos días verifiqué unos 20 diskettes de diferentes marcas que fueron grabados por una computadora 486 los cuales estaban almacenados en una caja. Casi la mitad no funcionaba, porque no se cuidaron como es debido. Si se tienen programas o información en diskettes, se recomienda hacer copias inmediatamente y guardar los originales en lugar seguro. Si se tienen datos importantes almacenados en diskette, se sugiere hacer copias nuevas y pensar en otro método mejor de almacenamiento más actual. Y ante todo, se sugiere comprar siempre diskettes de marca.
DISCO DURO Los sistemas de discos duros son muy importantes como medio de almacenamiento en los sistemas computacionales, porque pueden almacenar más datos y se puede recuperar éstos más rápidamente que en los diskettes. Los discos duros contienen una o más superficies rígidas para grabar datos, cada una cubierta Página :
9
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
con un óxido metálico que registra cargas magnéticas. La cabeza de escritura / lectura se encuentra típicamente a unos catorce millonésimos de pulgada por encima de la superficie del disco. Los platos giran sobre un eje aproximadamente a 3600 rpm, 12 veces más rápido que los disquetes (cuanto más rápido gire un disco, más pronto la cabeza de lectura / escritura puede encontrar datos). En la actualidad existen discos duros de tecnologías que le permiten un tiempo de acceso muy corto; entre los líderes de este tipo de tecnologías se cuenta con empresas como Quantum, Seagate y Maxtor, quienes fabrican discos duros con superficies aprovechables (libres de errores) en casi un 100%. Y con capacidades de almacenar hasta unos 120 Gb en formatos de 3½ y hasta de tamaños más pequeños para computadoras portátiles (notebook). La Figura No. 1.9 muestra la composición de un disco duro de varios platos.
Figura No. 1.9 Disco Duro de varios platos.
La estructura física de un disco es la siguiente: un disco duro se organiza en platos, y en la superficie de cada una de sus dos caras existen pistas concéntricas, como surcos de un disco de vinilo, y las pistas se dividen en sectores. El disco duro tiene una cabeza en cada lado de cada plato, y esta cabeza es movida por un motor cuando busca los datos almacenados en una pista y un sector concreto. Para poder utilizar el disco duro, tiene que pasar por una etapa de configuración, la cual es dada por el formateo del disco duro, en el cual se hacen las siguientes tares: se le marcan las pistas y sectores al disco, se le define la zona de directorio, se crean la FAT (File Allocation Table) y el registro de arranque y, eventualmente, se le graban los archivos del sistema operativo para el arranque del sistema. Existen dos tipos de formateo: el de bajo nivel y el lógico. El formateo de bajo nivel es un proceso físico que divide las pistas circulares en un número específico de sectores con capacidad para 528 bytes cada uno, de los cuales 512 son para datos y 16 para control del sistema. El inicio de cada sector se indica mediante un código magnético de dirección, a continuación, sigue un código para encabezamiento del sector (Id), que contiene los números del cilindro, la cabeza y el sector respectivo. Los datos de información se graban en la porción central de Página :
10
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
cada sector. En la actualidad, teóricamente sólo es necesario el formateo de bajo nivel una sola vez, y se debe dejar como último recurso para arreglar un disco. El formateo lógico se hace para dotar al disco de un sistema de direcciones que permita leer y escribir datos en sectores definidos. El formateo lógico permite la recuperación de la información en caso de un formateo accidental, en cambio, el formateo de bajo nivel no. Se manejan varios conceptos para identificar sus partes físicas, los cuales se describen a continuación : CILINDRO: Es una pila tridimensional de pistas verticales de los múltiples platos. El número de cilindros de un disco corresponde al número de posiciones diferentes en las cuales las cabezas de lectura / escritura pueden moverse. CLUSTER: Es un grupo de sectores que es la unidad más pequeña de almacenamiento reconocida por el sistema operativo Ms-Dos. Normalmente 4 sectores de 512 bytes constituyen un Cluster (racimo), y uno o más Cluster forman una pista. PISTA:
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.
SECTOR:
Es la unidad básica de almacenamiento de datos sobre discos duros. En la mayoría de los discos duros los sectores son de 512 Bytes cada uno, cuatro sectores constituyen un Cluster.
En la figura No. 1.10 se puede apreciar cual es la cabeza lectora / grabadora, una pista y un sector.
Figura No. 1.10 Estructura física de un Disco Duro.
Página :
11
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Estructura Lógica de los Disco Duros. En primer lugar, internamente los discos duros se pueden dividir en varios volúmenes homogéneos. Dentro de cada volumen se encuentran una estructura que bajo el sistema operativo del Ms-Dos, sería la siguiente: El Sector de Arranque : Al formatear un volumen, el sector de arranque se crea siempre como primer sector del volumen, para que sea fácil de localizar por el Ms-Dos. En él se encuentra información acerca del tamaño, de la estructura del volumen y sobre todo del BOOTSTRAP-LOADER, mediante el cual se puede arrancar la microcomputadora desde el Ms-Dos. A ésta parte se le llama sector de arranque (BOOT). La Tabla de Asignación de Ficheros (File Allocation Table) (FAT) : Si el Ms-Dos quiere crear nuevos archivos, o ampliar archivos existentes, ha de saber qué sectores del volumen correspondiente quedan libres. Esta información las toma la llamada FAT. Cada entrada a esta tabla se corresponde con un número determinado de sectores, que son adyacentes lógicamente en el volumen. Cada uno de estos grupos de sectores se llama Cluster. El tamaño de las diferentes entradas de esta tabla en las primeras versiones del Ms-Dos era de 12 bits con lo que se podían gestionar hasta 4096 Clusters, correspondiente a una capacidad aproximada de 8 Mbytes. En vista del problema que surgió al aparecer discos duros de capacidades más elevadas, se amplió el tamaño a 16 bits, permitiendo el direccionamiento de un máximo de 65535 Clusters. Actualmente se está manejando FAT’s de hasta 32 bits, para discos duros capaces de almacenar varios Gigas de información. Una o más copias de la FAT : El Ms-Dos permite a un programa de formateo crear no sólo una, sino varias copias idénticas de la FAT. Si el MsDos encuentra uno de estos medios, cuida todas las copias de la FAT simultáneamente, así que guarda allí los nuevos clusters ocupados o liberados al crear o borrar archivos. Esto ofrece la ventaja de que se puede sustituir la FAT primaria en caso de defecto por una de sus copias, para evitar la pérdida de datos. El directorio Raíz : La cantidad máxima de entradas en el directorio raíz se limita por su tamaño, que se fija en el sector de arranque. Ya que el directorio raíz representa una estructura de datos estática, que no crece si se guardan más y más archivos o subdirectorios.
Página :
12
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
De ahí que, dependiendo del tamaño, bien un disco duro o bien de volumen, se selecciona el tamaño del directorio raíz en relación al volumen. La Zona de Datos : Es la parte del disco duro en la que se almacena los datos de un archivo. Esta zona depende en casi su totalidad de las interrelaciones entre las estructuras de datos que forman el sistema de archivos del Ms-Dos, y del camino que se lleva desde la FAT hacia los diferentes sectores de un archivo.
Procesos de grabación GCR (Group Coding Recording - Codificación de grupo de grabación) Es un proceso de almacenamiento en el que los bits se empaquetan como grupos y son almacenados bajo un determinado código. Es utilizado por los discos que utilizan codificación RLL. ZBR (ZoneBit Recording) Es un proceso de almacenamiento que coloca más sectores sobre las pistas exteriores del disco que son más largas, pero mantienen un valor constante de rotación. Esta diseñado para colocar más datos sobre el disco, sólo puede usarse con interfaces inteligentes.
Proceso de Codificación •
FM: Es la codificación más sencilla, consiste en la grabación de un cambio de flujo para cada uno, y el omitir el cambio de flujo para cada cero. Este procedimiento se puede realizar con una electrónica de control relativamente simple, pero tiene el inconveniente de que cada bit de datos consume dos cambios de flujo, limitando mucho la capacidad del disco.
•
MFM (Modified Frequency Modulation - Modulación de frecuencia modificada) Método de codificación magnética de la información que crea una correspondencia 1 a 1 entre los bits de datos y transiciones de flujo (cambios magnéticos) sobre un disco. Emplea una menor densidad de almacenamiento y presenta una velocidad más baja de transferencia que el RLL. Esta tecnología es usada en los discos flexibles y en los primeros discos duros. Cada bit de datos es almacenado sobre una región física lo suficientemente grande para contener 2 posibles posiciones 00, 01 ó 10. Entre cada 2 bits de datos hay un bit que se llama de "reloj" y que se usa para validar las lecturas, así como para sincronizarlas. Este bit hace que sea uno cuando está situado entre 2 bits de datos a cero y se hace cero cuando está Página :
13
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
situado entre cualquier otra combinación de bits de datos. Así se hace imposible que se puedan leer más de 3 bits consecutivos con un valor de cero, o más de un bit seguido a uno. Esto es cierto para todas las informaciones almacenadas en el disco excepto para las áreas de control del mismo cuyas marcas de comienzo de pista, sector y datos tienen 4 bits consecutivos a cero en su "adress mark". Evidentemente, estos sistemas, aunque fiables, son unos grandes consumidores de espacio ya que emplean prácticamente la mitad del espacio en bits de reloj. •
RLL: (Run Length Limited - Longitud recorrido limitado) Método de codificar la información magnéticamente que usa GCR para almacenar bloques en vez de bits individuales de datos. Permite densidades mayores de almacenamiento y velocidades mas altas de transferencia que MFM. En la práctica, permite incrementar en un 50% la capacidad de un disco respecto al sistema de grabación MFM. Los métodos de grabación RLL utilizan un conjunto complejo de reglas para determinar el patrón de pulsos para cada bit basado en los valores de los bits precedentes. Este sistema se puede clasificar dependiendo de la distancia máxima y mínima de silencios entre dos pulsos, por ejemplo; el RLL 2,7 tiene una distancia mínima entre pulsos de 2 silencios y una máxima de 7.
COMO MANTENER UN DISCO DURO EN BUEN ESTADO. Existen varias cosas que usted puede realizar para prevenir que la computadora le devuelve mensajes de error molestos. A continuación se muestra una lista de programas diferentes disponibles para asegurarse de que la unidad de disco duro se mantenga saludable y funcionando a plena capacidad. 1.-Utilidad de Desfragmentación de Disco Al transcurrir el tiempo, es posible que los archivos se vuelvan fragmentados porque se almacenan en posiciones diferentes en el disco. Los archivos estarán completos cuando los abra, pero la computadora lleva más tiempo al leer y escribir en el disco. Desde Windows 98 y hasta el Windows Xp al instalar el sistema Operativo, se instala un programa de desfragmentación que corrige esto. Para obtener acceso al programa de desfragmentación de disco bajo Windows Millenium, haga doble click en el ícono de Mi Pc., en la caja de diálogo que aparece se ubica en el ícono de disco duro y haga clic derecho y baje la barra iluminada hasta la opción Propiedades; ahí dar clic izquierdo, luego aparece otra caja de dialogo, y ahí te colocas en la pestaña llamada herramientas y dar clic a la opción de Utilidad de desfragmentación de disco.
Página :
14
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
2.- Compresión de Datos Usted puede obtener espacio libre en la unidad de disco duro o en disquetes al comprimir los datos que están almacenados en éstos. En Windows 95, haga clic en Inicio. Ilumine Programas, Accesorios, luego en Herramientas de Sistema. Hacer clic izquierdo en DriveSpace. 3.- Detección de Daños Si experimenta problemas con los archivos, tal vez quiera averiguar si existen daños en el disco. ScanDisk de Windows Millenium verifica los archivos y las carpetas para encontrar errores de datos y también puede verificar la superficie física del disco. Para ejecutar ScanDisk, haga doble click en el ícono de Mi Pc., en la caja de diálogo que aparece se ubica en el ícono de disco duro y haga clic derecho y baje la barra iluminada hasta la opción Propiedades; ahí dar clic izquierdo, luego aparece otra caja de dialogo, y ahí te colocas en la pestaña llamada herramientas y dar clic a la opción de Utilidad de ScanDisk. Existen varios programas de detección y limpieza de virus que están disponibles para usted. Simplemente hay que pedirlos del distribuidor local de software para computadoras. 4.- Respaldos Si la unidad de disco duro se descompone o si los archivos se dañan o se sobrescriben accidentalmente, es una buena idea contar con una copia de respaldo de los datos de la unidad de disco duro. Están disponibles varios programas de respaldo de uso con cintas, diskettes y aun con los medios desmontables. A menudo, la computadora tendrá una utilidad de respaldo ya instalada.
Ventajas y limitaciones de los Discos Duros. VENTAJAS. •
Los registros en disco pueden almacenarse en forma secuencial y procesarse como los registros en cinta magnética o, pueden almacenarse para procesarlos en forma directa.
•
Puede tenerse acceso a cualquier registro de disco en línea y pueden actualizarse en unos cuantos milisegundos. No es necesario clasificar las transacciones.
•
Puede utilizarse una sola transacción de entrada de datos para actualizar los registros de disco en línea de varios archivos relacionados entre sí. Página :
15
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
DESVENTAJAS. •
Cuando se actualiza un archivo en cinta magnética, la cinta maestra anterior no suele sufrir alteraciones y sigue disponible durante cierto tiempo, en caso de que se presentaran fallas en el sistema. En cambio, cuando se actualizan los registros de un archivo en disco, es posible que se borren los registros anteriores cuando los registros nuevos se graban en el disco, quizá la información almacenada en un disco duro fijo quede inaccesible o se pierda si hay una falla de disco.
•
Ha habido gente que elude las medidas de seguridad y logra tener acceso a archivos importantes de disco en línea desde terminales remotas. Estos archivos han sido manipulados y hasta destruidos. Es más fácil mantener esta seguridad en cinta magnética.
Tema 1.3 Dispositivos de memoria intermedia. UNIDADES ZIP. Las unidades ZIP, por las capacidades de los diskette, por su fiabilidad, y por su velocidad de transferencia están a mitad de camino entre las unidades de diskette y las de disco duro, aunque más próximas a esta última. Así, su velocidad de giro es del orden de 3000 r.p.m, lo cual redunda en una mayor velocidad de transferencia. La unidad ZIP es externa al gabinete de la computadora. La conexión del ZIP generalmente se hace en el puerto paralelo que usa la impresora, debiéndose desconectar ésta de dicho puerto, y volverla a conectar a la unidad ZIP en un conector preparado. Los diskettes para ZIP son flexibles, y pueden almacenar en sus dos caras magnetizables 100/200 Mb, empleándose comúnmente para hacer copias de seguridad del disco duro. Las cabezas de escritura / lectura están en contacto con las superficies de ambas caras, siendo más pequeñas en tamaño que las usadas en las unidades de diskette, lo que permite grabar con densidades de grabación mayores. La Figura No. 1.11 muestra una unidad zip, así como el diskette que utiliza. Actualmente existen en el mercado unidades ZIP de hasta 250 MB de capacidad de almacenamiento. Normalmente, se conectan al puerto paralelo, aunque la empresa Iomega ya tiene en el mercado la nueva unidad que se conecta al puerto USB de la computadora personal.
Página :
16
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Figura No. 1.11 Unidad Zip de almacenamiento
UNIDADES SUPERDISK LS-120-120 MB (Imation/Panasonic). • •
Pros: reducido formato, precio global, compatibilidad con diskettes 3.5" Contras: capacidad algo reducida, menor aceptación que el Zip.
Estos discos son la respuesta a la cada vez más común desesperación del usuario que va a grabar su trabajo en un diskette y se encuentra con que supera los temidos 1.44 Mb. No importa, meta un SuperDisk, que aparenta ser un disquete de 3.5" algo más grueso, y ya tiene 120 MB a su disposición. Aparentemente, esta compatibilidad con los diskettes clásicos tradicionales de 3.5 pulgadas, puede traer consecuencias desastrosas. El problema está en que la velocidad de este dispositivo, unos 400 Kb/s, si bien es suficiente y supera con creces la de una unidad de diskettes de 3.5", es algo menos de la mitad de la de una unidad Zip.. La unidad se vende con conexión IDE para la versión interna o bien puerto paralelo (el de impresora) para la externa, que, aunque parece menos pensada para viajes accidentados que el Zip, permite conectarla a cualquier computadora sin mayores problemas. Además, acaba de ser presentada una versión USB que hace la instalación aún más sencilla. Si la BIOS de la tarjeta madre lo permite (lo cual sólo ocurre con todas las tarjetas madre desde Pentium III) puede configurar la versión IDE incluso como unidad de arranque, con lo que no necesitará para nada la unidad de diskette de 3.5 pulgadas. Su mayor "handicap" reside en haber dejado al Zip como única opción durante demasiado tiempo, pero la compatibilidad con los disquetes de 3,5" y sus 20 Mb extra parece que están cambiando esta situación. Si va a comprar una computadora nueva, le compensará pedir que le instalen un SuperDisk en vez de la unidad de diskette de 3,5". La decisión entre Zip y SuperDisk es muy difícil, incluso cuestan prácticamente lo mismo. La figura No. 1.12 muestra la unidad SuperdDisk y su disco para almacenar información.
Página :
17
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Figura No. 1.12 Unidad SuperdDisk y Disco para grabar.
Magneto-ópticos de 3,5" - 128 MB a 1,3 GB • •
Pros: alta seguridad de los datos, portabilidad, bajo precio de los discos, fácil manejo Contras: inversión inicial, poca implantación.
Se trata de dispositivos que reúne lo mejor de ambas tecnologías para ofrecer un producto con un bajo coste por Mb almacenado, bastante rápido, con un soporte absolutamente transportable y sobre todo perdurable: almacenan sus datos prácticamente para siempre, sin afectarles lo más mínimo los campos magnéticos (ni el polvo, calor, humedad, etc, hasta un límite razonable), a la vez que le permite rescribir sus datos tantas veces como quiera. Son capaces de almacenar hasta 1,3 GB en discos muy similares a los disquetes de 3,5" que tienen una cubierta de plástico para protegerlos de los golpes y el polvo, no como los CDs con su superficie expuesta a involuntarias huellas de dedos que los inutilicen. Una vez instalada la unidad, se maneja como si fuera un disco duro más (sin necesidad de ningún programa o accesorio). Existen discos y lectoresgrabadores de 128, 230, 540, 640 MB y 1,3 Gb, pero en la actualidad sólo son recomendables los de 640 Mb y 1,3 Gb, que además permiten leer y escribir en los discos de menor capacidad. No son compatibles con los diskettes de 1.44 Mb, su velocidad es muy elevada, comparable a la de los discos duros de hace pocos años, pero tiene el problema de que el proceso utilizado obliga a que la escritura se realice a la mitad de la velocidad de la lectura. Así, mientras que se pueden alcanzar casi los 2,5 MB/s en lectura, la escritura se queda en alrededor de 1 MB/s, con un tiempo de acceso cercano al de un disco duro (menos de 40 ms). Para subsanar este problema, Fujitsu (una de las empresas que más potencian este mercado) a sacado unos Página :
18
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
nuevos modelos con tecnología LIMDOW (también conocida simplemente como OW, por OverWrite) en los que se puede alcanzar más de 1,5 MB/s en escritura. Lo malo de la tecnología OW es que además de una unidad lectora-grabadora reciente necesita discos especiales, más caros que los normales. La Figura No. 1.13 muestra la unidad lectora/grabadora de Magneto-ópticos.
Figura No. 1.13 Unidad lectora / grabadora de Magneto-ópticos.
UNIDAD JAZZ La unidad jazz usa discos de 1Gb de capacidad con autentica tecnología de disco duro. El Jazz no solo toma en serio el espacio de almacenamiento, sino que mejora el aprovechamiento de las unidades internas en muchas computadoras personales. Las características son, por ello, impresionantes incluso superiores a la de algunos discos duros: velocidad de transferencia por ráfagas de 10 Mb /seg. , 12 ms de tiempo promedio de búsqueda, 17 ms de tiempo promedio de acceso y la capacidad de ser reconocida como disco duro por el sistema operativo de la computadora. Su precio es de $300 Dls. la unidad externa y $250 Dls. la unidad interna, pesa aproximadamente 2 libras y su capacidad formateada del cartucho es de 1020.9 Mb. El costo del cartucho de 1 GB es de $100 Dls. aproximadamente, la instalación de la unidad es sumamente sencilla y las utilerías del manejo son claras e intuitivas (e incluye protección de datos y catalogación). Puede dejar caer los cartuchos de una altura de 8 pies (2.43 mts.) sin causarles ningún daño. Los precios comentados en éste párrafo son al mes de noviembre del año 2003. Por otro lado, el Jazz tiene las mismas características portátiles que su hermano zip, pero a diferencia de este, tiene la rapidez y capacidad para cargar aplicaciones, permitir el desarrollo de multimedia, hacer el resguardo de la
Página :
19
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
computadora en 10 min., guarda hasta 8 hrs. de música con calidad de CD, 2 hrs. de película o 150 fotografías de color, etc. Estamos antes el concepto más moderno de versatilidad en materia de almacenamiento. No es de extrañar que los usos crezcan en todas las direcciones y que esta tecnología pase a ser un nuevo estándar en la industria. Muy pronto las computadoras vendrán ya equipadas con una unidad Iomega y con software que permita detectar la presencia de un zip o jazz y seleccionarla como ruta básica de almacenamiento. La figura No. 1.14 muestra una unidad lectora / grabadora del tipo JAZZ.
Figura No. 1.14 Unidad lectora / grabadora de JAZZ.
Página :
20
CAPITULO 2 Definiciones y Conceptos
DEFINICIONES Y CONCEPTOS
Capitulo II.- Definiciones y Conceptos. El procesamiento de la información es fundamental para planificar cualquier actividad del hombre de hoy, que va desde conocer el tiempo que puede hacer el fin de semana, las últimas cotizaciones en la bolsa o disponer en todo momento de una información actualizada de los datos de una empresa, entendiendo como “empresa” cualquier organización comercial, científica, técnica o de otra clase, con un nivel razonable de autosuficiencia. Una consecuencia de todo esto es la gran cantidad de datos que es necesario manejar en cualquier actividad de la vida, sobre todo en el mundo empresarial. Al aumentar el volumen de datos a manejar, también debe aumentar la rapidez con que se procesan dichos datos. Cualquier empresa mediana, en la actualidad, maneja miles de millones, o incluso billones de elementos individuales de datos. Las computadoras han venido a revolucionar la forma de almacenar y tratar dichos datos, los cuales deben estructurarse en forma adecuada para poder representarse dentro de la computadora y poder ser procesados en forma adecuada. Cuando hablamos de archivos, habitualmente se utilizan cuatro términos que debemos definir claramente: Campo, Registro, Archivo y Base de datos. Se puede decir que estos términos forman una estructura de datos agrupados y relacionados de alguna manera en particular donde uno contiene al otro y que nos facilitan la manera de almacenarlos y recuperarlos.
Tema II.1 Campo, campo secuencial, registro, llave, archivo, base de datos y transacción. Campo.- Un Campo es un espacio definido en la memoria de la computadora o en algún medio de almacenamiento dispuesto para contener un solo dato de un solo tipo. Como ejemplo: un campo individual contiene un valor único, como el apellido de un empleado, una fecha o un valor leído por un sensor. Lo más importante de un campo es su longitud (que puede ser fija o variable) y el tipo de datos que contenga (ya sea una cadena ASCII o un dígito decimal). Campo Secuencial.- Un campo secuencial es aquél que permite establecer una colección de continuidad entre los registros de un archivo. El campo secuencial se muestra en la figura No. 2.1, donde la clave del departamento de adscripción, se encadena con la descripción correspondiente que se encuentra en un registro en otro archivo.
Página :
22
DEFINICIONES Y CONCEPTOS
Figura No. 2.1 Ejemplo de campo secuencial.
Registro Un registro es un conjunto de campos relacionados entre si que pueden tratarse como una unidad por algunos programas de aplicación. Por ejemplo: un registro de nombre “empleado” contendría campos tales como: clave del empleado, nombre, Departamento de adscripción, sueldo diario, etc. Un registro puede ser de longitud variable en el caso de que el número de campos pueda variar, esto dependerá de su diseño. Llave
Es aquel campo que permite identificar en forma unívoca a un registro. Generalmente se designaran como campos llave, aquellos que no contienen datos repetidos. Si el sistema de archivos no posee campos con esas características, deberán utilizarse llaves intermedias o escalonadas. Y en el último de los casos, se unen dos o más campos para generar la llave. Este método presenta listas de objetos (o individuos) que se van reduciendo conforme se introducen los valores para cada una de las llaves escalonadas. El proceso se da por concluido al hacer contacto visual con el objeto buscado o hasta reducir la lista de tal forma que se determina la inexistencia del objeto. Al manejar algunos campos como llaves, éstos pueden ser de dos tipos : Llave primaria. Es el campo llave principal de un archivo multillave. En un archivo secuencial indexado con llaves alternas representa el campo por medio del cual el acceso directo y secuencial es manejado.
Página :
23
DEFINICIONES Y CONCEPTOS
Llave secundaria. Es, en un archivo multillave (de varios campos llave), cualquier llave exceptuando la primaria. Archivo.- Un Archivo es un conjunto de registros similares. Los usuarios y las aplicaciones se refieren a él por un nombre que es único y que puede crearse y borrarse. Las restricciones al control de acceso suelen aplicarse a los archivos. Es decir en un sistema compartido, el acceso de los usuarios y los programas se garantiza o deniega a archivos completos, en otros casos se aplica a los registros e incluso a ciertos campos. La figura No. 2.2 muestra en forma gráfica los conceptos de : Campo, Registro, Campo llave y archivo.
Figura No. 2.2 Ejemplo de campo llave, campo, registro y archivo.
Base de datos.- Una base de datos es un conjunto de varios archivos de datos independientes, que están ligados y relacionados de alguna forma, donde se elimina parcial o totalmente cualquier redundancia entre los mismos. Las bases de datos generalmente están mecanizadas en una computadora por un software llamado DBMS (Database Management System). La figura No. 2.3 nos muestra el esquema de una base de datos, en la cual se manejan varios archivos llamados tablas (Empleado, Depto_Ads y Tipos_emp) que se encuentran vinculados por campos llave (Cve_dep y Tipo_emp) y que entre todos forman la base de datos. Transacción.- Una transacción consiste en agregar, eliminar o modificar un registro de datos en algún archivo en específico. Las transacciones son la forma Página :
24
DEFINICIONES Y CONCEPTOS
más común de actualizar los datos de un archivo o de toda una base de datos.
Figura No. 2.3 Ejemplo de una base de datos trivial.
Tema II.2 Organización de registros y archivos. En los lenguajes de programación actuales, los dispositivos tradicionales como : terminales, unidades de disco, unidades de cinta, puertos de comunicación e impresora; todos ellos son tratados como archivos. Esto es posible, sea cual sea la naturaleza del dispositivo externo, el sistema de almacenamiento temporal de archivos los convierte en un dispositivo lógico denominado corriente (stream). Debido a que la corriente es casi independiente del dispositivo que la genera, las funciones de librería que escriben un archivo en disco pueden ser utilizadas, con las oportunas variaciones, para producir una salida por impresora o por el monitor. A estos efectos, la entrada estándar de datos (teclado) se asocia con un archivo de nombre <stdin> (Standard Input o entrada de datos estándar), y la salida por el monitor con <stdout> (Standard Output o salida de datos estándar). En forma general se manejan dos tipos de stream o corrientes, almacenar los datos en un archivo : • •
para
Corrientes de texto. Corrientes binarias.
Una corriente de texto es una sucesión indefinida de caracteres organizados en lineas de diversas longitudes o sea en registros de longitud indefinida.
Página :
25
DEFINICIONES Y CONCEPTOS
La organización de los registros en un archivo considerado como corriente de texto maneja un separador entre registros y al final del último registro una marca de fin de archivo, tal como se muestra en la figura No. 2.4.
Figura No. 2.4 Separadores entre registros y fin de archivo de una corriente de texto.
Al tratar los datos contenidos en un archivo como corriente de texto, se realizan ciertas transformaciones de los caracteres especiales leídos / escritos. Por ejemplo el carácter LF puede transformarse en un par (CR y LF) según las conveniencias del sistema. Por tanto existen ciertas diferencias entre los caracteres leídos de un archivo y los realmente almacenados en la memoria de la computadora y viceversa. Dichas conversiones se pueden apreciar en la figura No. 2.5.
Figura No. 2.5 Conversiones Caracteres a Binario y viceversa.
En los lenguajes de programación como Pascal, Fortran, Cobol, R.P.G. II, Basic, etc. los archivos de datos se manejaban como corrientes de texto y en algunos de los casos se trató de ahorrar espacio de almacenamiento y las variables del tipo numérico se manejaban como empacadas (o sea que en medio byte se representaba un digito y en el otro medio byte otro dígito). En la corriente binaria las transformaciones mencionadas no se realizan, y los datos presentes en la memoria y el del archivo coinciden unívocamente byte a byte. Además, al almacenar los datos en un registro no existen separadores entre registros tal como se puede apreciar en la figura No. 2.6.
Página :
26
DEFINICIONES Y CONCEPTOS
Figura No. 2.6 No existen separadores entre registros en la Corriente de Binaria.
Un ejemplo de corriente binaria es el caso de variables tipo int, que ocupan 2 bytes para su almacenamiento y que puede almacenar valores entre -32,768 y +32,767; es decir que los valores reales pueden tener entre 1 y 5 dígitos; pero como los datos con convertidos a binario nunca existen conversiones al leer, procesar o escribir los datos tal como se muestra en la figura No. 2.7.
Figura No. 2.7 Conversiones Caracteres a Binario.
Comparando las dos tipos de corrientes (de texto y binarias), el flujo de texto ya quedó obsoleto y los lenguajes de programación Orientados a Objetos, los Lenguajes Visuales y los Lenguajes Orientados a eventos utilizan el flujo binario porque optimiza el uso del espacio y además no utiliza mucho tiempo en conversiones Texto-Binario-Texto. Al momento de ejecutar una aplicación creada en los lenguajes de programación actuales tales como C++, Visual C++ o Java; se abren de forma simultanea cinco corrientes estándar las cuales son asociadas por default a los dispositivos enumerados a continuación : • • • • •
stdin stdout stderr stdaux stdprn
Entrada estándar de datos (Teclado). Salida estándar de datos (Monitor). Despliegue de errores estándar (Monitor). Auxiliar estándar (RS-232, puertos USB y sus variantes). Impresora estándar (Impresora).
Página :
27
DEFINICIONES Y CONCEPTOS
Para los ejemplos prácticos de administración de archivos de éste libro, se elaboraron en el Lenguaje C++ versión 3.1 y se utilizó la filosofía de Programación Orientada a Objetos; debido a que es la más utilizada en los lenguajes de programación actuales. Debido a lo anterior, se adoptó la biblioteca de flujos de entrada / salida de C++ para crear los objetos respectivos tipo archivo. La jerarquía de clases que se utilizan en la entrada / salida de datos se puede observar en la figura No. 2.8.
Figura No. 2.8 Jerarquía de clases de Entrada / salida de C++.
Para construir y manipular un archivo de datos, se debe conectar el archivo a un programa, un medio para leer el contenido de un archivo y un medio para crear y escribir en archivos. El paquete de clases de C++ manipula entradas y salidas de archivos de igual forma que si manejara entradas y salidas estándar. Los programadores que deseen conectar un archivo a un programa para realizar operaciones de entrada / salida deberán incluir el archivo de cabecera <fstream.h> (para crear y manipular objetos tipo archivo) y además el <iostream.h> (para las funciones de entrada / salida). En C++ un archivo se enlaza a un flujo, cuando se abre, se accede, se lee o se escribe en él y cuando se cierra. Después que un archivo se ha abierto, se debe conectar a un flujo. Un archivo se puede conectar a los siguientes flujos : • • •
Ifstream Ofstream Fstream
Para abrir un archivo como entrada (Lectura). Para abrir un archivo como salida (Escritura). Para abrir un archivo como entrada / salida (Lectura / escritura).
Los tres flujos anteriores son considerados como clases para la creación de objetos tipo archivo de datos.
Página :
28
DEFINICIONES Y CONCEPTOS
La clase tipo ifstream contiene varias funciones miembro. comunes tenemos las que se muestran en la figura No. 2.9.
Entre las más
Figura No. 2.9 Funciones miembro de la clase ifstream.
Las acciones que lleva a cabo cada una de las funciones miembro de la clase ifstream se enumeran a continuación : ♦ ♦ ♦ ♦ ♦ ♦
ifstream () ~ifstream () open () rdbuf () eof () read ()
♦ close () ♦ seekp () ♦ gcount ()
Es el constructor del archivo. Es el destructor del archivo. Sirve para abrir un archivo de tipo lectura. Sirve para devolver un puntero tipo streambuf a este stream. Sirve para verificar si llegamos al fin del archivo. Leer datos de un archivo y transferirlos al buffer de lectura que se encuentra en la memoria. Cierra un archivo previamente abierto como lectura. Coloca el apuntador de lectura a una posición específica en el archivo. Sirve para conocer los caracteres que se han leído.
La clase tipo ofstream contiene varias funciones miembro. utilizadas tenemos las que se muestran en la figura No. 2.10.
Entre las más
Figura No. 2.10 Funciones miembro de la clase ofstream. Página :
29
DEFINICIONES Y CONCEPTOS
Las acciones que lleva a cabo cada una de las funciones miembro de la clase ofstream se enumeran a continuación : ♦ ♦ ♦ ♦ ♦
ofstream () ~ofstream () open () rdbuf () write ()
♦ close () ♦ seekg ()
Es el constructor del archivo de escritura Es el destructor del archivo de escritura. Sirve para abrir un archivo de tipo escritura. Sirve para devolver un puntero tipo streambuf a este stream. Sirve para tomar datos del buffer de memoria y escribirlos en el archivo. Cierra un archivo previamente abierto como escritura. Coloca el apuntador de escritura a una posición específica en el archivo.
La clase ultima clase para manipulación de archivos es la fstream que también contiene varias funciones miembro. Entre las más comunes tenemos las que se muestran en la figura No. 2.11.
Figura No. 2.11 Funciones miembro de la clase fstream.
Las acciones que lleva a cabo cada una de las funciones miembro de la clase fstream se enumeran a continuación : ♦ ♦ ♦ ♦
fstream () ~ofstream () open () read ()
♦ write () ♦ close () ♦ eof ()
Es el constructor del archivo de lectura / escritura Es el destructor del archivo de lectura / escritura. Sirve para abrir un archivo lectura / escritura. Leer datos de un archivo y transferirlos al buffer de lectura que se encuentra en la memoria. Sirve para tomar datos del buffer de memoria y escribirlos en el archivo. Cierra un archivo previamente abierto como lectura / escritura. Sirve para verificar si llegamos al fin del archivo. Página :
30
DEFINICIONES Y CONCEPTOS
♦ seekg () ♦ seekp () ♦ tellg () ♦ tellp () ♦ rdbuf ()
Coloca el apuntador de escritura a una posición específica en el archivo. Coloca el apuntador de lectura a una posición específica en el archivo. Informa la posición actual del puntero de lectura. Informa la posición actual del puntero de escritura. Sirve para devolver un puntero tipo streambuf a este stream.
Un archivo de datos debe crearse en algún medio de almacenamiento, el medio más común es el disco duro, el cual es utilizado en un 95 % de las aplicaciones para almacenar sus datos. En el disco duro está organizado en varios fragmentos llamados carpetas o subdirectorios y la forma de ubicar el lugar donde se escribirá físicamente lo podemos apreciar en la figura No. 2.12.
Figura No. 2.12 Elementos a considerar para ubicar un archivo.
El acceso de datos a un archivo (lectura y escritura) requiere de mucha actividad que es transparente para el programador de la aplicación. Los lenguajes de programación permiten a los programadores definir técnicas de organización de archivos bastante complejas con instrucciones muy simples. Un sistema de archivos proporciona el apoyo que permite al programador accesar archivos sin preocuparse de los detalles sobre las características de almacenamiento y tiempos de acceso. El sistema de archivos convierte a las instrucciones de acceso muy sencillas para el programador sin que él se meta con instrucciones de bajo nivel. En forma general, el sistema de archivos (file system) del disco duro, es el encargado de permitir o negar el acceso a ciertos archivos de datos. Para ello los archivos cuentan con unos elementos propios para cuidar su acceso.
ELEMENTOS PROPIOS DEL ARCHIVO. •
Atributos.- Son marcas físicas que determinan el tipo de operaciones y características de un archivo, dichas marcas pueden ser : permitir solo lectura, permitir solo escritura, permitir lectura / escritura o bien permanecer oculto.
Página :
31
DEFINICIONES Y CONCEPTOS
•
Identificador de archivo.- Es un elemento lógico que se crea en un ambiente de programación para hacer referencia al archivo de datos y normalmente es el nombre del mismo.
•
Apuntador de registro.- Es una marca lógica que indica la posición donde se realizara la siguiente operación de lectura o escritura en el archivo.
•
Número de registro.- Son elementos lógicos que indican la posición relativa del registro en el archivo.
•
Marca de fin de archivo (EOF).- Es una marca física que determina la finalización del archivo.
•
Marca de fin de línea (EOL).- Es una marca física utilizada en los archivos de texto para indicar la finalización de una línea.
CLASIFICACIÓN DE ARCHIVOS DE DATOS Por su estructura Con tipo.- Son aquellos que presentan un formato basado en una estructura especifica, la cual puede ser incluso variable. Son los más utilizados en los sistemas de información. De texto.- Son documentos que se graban en formato ASCII y contienen información de manera legible para el usuario. Estos archivos tienen característica de que pueden ser actualizados exclusivamente en procesador de palabras con que fueron creados o bien haciendo conversión a otro procesador.
la la el la
Sin tipo.- Son archivos que son procesados por bloques de lectura y/o escritura. No tienen un formato determinado, y su representación puede ser o no binaria. El tamaño de los bloques es ajustable.
Por su función en un Sistema de Información. Archivo Maestro.- Este tipo de archivo representa una visión estática de ciertos datos de un sistema de información que no cambian o que sus cambios son muy esporádicos. Un ejemplo clásico es el Archivo maestro de nómina que contiene todos los datos del trabajador que casi no cambian, por ejemplo : Clave del empleado, Nombre, Dirección, Departamento de adscripción, Rfc, Curp, fecha de nacimiento, etc.
Página :
32
DEFINICIONES Y CONCEPTOS
Dichos archivos son utilizados comúnmente en el proceso de la nómina para obtener los datos del trabajador e imprimirlos en los cheques o en los reportes solicitados. Archivo de Transacciones.-Es aquel donde se registran las operaciones que se realizan en un periodo determinado. Una vez transcurrido éste se realizara la actualización del archivo maestro y se reinicializara el de transacciones. En algunos lugares también les llaman archivos de movimientos y son los que actualizan los movimientos dinámicos del sistema. Archivo de Reporte.-Es aquel que convierte los datos en información formateada dirigida al usuario final. Este tipo de archivo puede enviarse a la impresora para que pueda ser impreso en hojas de papel; o bien puede enviarse directamente al monitor para que pueda ser consultado directamente. Los archivos de reporte generalmente son el resultado de algún proceso, que además de actualizar algunos datos, los refleja para ser utilizados por los usuarios del sistema de información. Archivo de Trabajo .-Son aquellos archivos temporales imperceptibles para el usuario que son utilizados generalmente en etapas intermedias en el procesamiento de datos. Un ejemplo clásico es cuando el usuario desea un reporte ordenado por algún campo en especial (por nombre, por departamento, por número de empleado, etc), lo que se hace es ejecutar una utilería llamada sort tal como se muestra en la figura No. 2.13.
Figura No. 2.13 Ejemplo de archivo de trabajo o temporal.
En el proceso anterior, el archivo maestro se encuentra en un orden diferente a como se desea obtener un reporte, los que se hace es ejecutar el sort tomando como entrada el archivo maestro y como salida un archivo de trabajo, el cual será utilizado para obtener el reporte ordenado tal y como fue solicitado. Una vez que se obtiene el reporte requerido, el archivo de trabajo se elimina. Página :
33
DEFINICIONES Y CONCEPTOS
Archivo de Programa.- Son aquellos que contienen instrucciones las cuales serán procesadas por la computadora para realizar alguna operación específica. Dichas instrucciones pueden estar en algún lenguaje de programación (C++, java, visual Basic, visual fox, etc.) o bien pueden estar en código que puede ser ejecutado directamente por la computadora (.exe, .bat, .com, etc). Archivo de Texto.- Son aquellos que se encuentran en formato ASCII y contienen generalmente información referente a la ayuda y presentación del sistema, así como a la salida de datos con destino al medio de almacenamiento.
OPERACIONES CON ARCHIVOS DE DATOS. Creación.- Consiste en la asignación de un espacio en el medio de almacenamiento mediante la colocación del nombre del archivo en la tabla fat. Apertura.- Es el establecimiento de un canal de comunicación con un archivo determinado, con el fin de que puedan fluir los datos entre el archivo y la aplicación o viceversa. Cierre.- Es la cancelación de un canal de comunicación previamente establecido con un archivo. Incluye una verificación al buffer para realizar un vaciado automático de los datos contenidos en él a través del canal. Asignación.- Es la asociación de un nombre de archivo con un identificador valido en el lenguaje de programación en donde se esta manipulando, para de esa forma manipular un archivo en forma lógica desde el programa y las operaciones se reflejen en un archivo que existe físicamente en el medio de almacenamiento. Actualización.- Son los procesos u operaciones que modifican el contenido de un archivo de datos (altas, bajas o cambios). Consulta.- Es el acceso a los datos de un archivo con el fin de generar una salida por la impresora o por el monitor. El acceso puede ser especifico, grupal o global. Eliminación.- Es la eliminación física del archivo del medio de almacenamiento. Renombrar.- Es el cambio del nombre del archivo en el ámbito del sistema operativo. Página :
34
DEFINICIONES Y CONCEPTOS
Clasificación.- Consiste en la organización de los registros de acuerdo a un criterio determinado. Mezcla.- Es la combinación de dos o más archivos para dar como resultado un tercer archivo que contendrá los registros totales de los dos archivos. Partición.- Es la descomposición de un archivo en dos o más para ser utilizados en forma separada con algunos procesos. Importación.- Consiste en extender un archivo a partir de los datos contenidos en otro, ya sea que los registros añadidos se supriman o no de este ultimo. Exportación.- Es la generación de un nuevo archivo o la extensión de uno ya existente a partir de los datos contenidos en un archivo primario, ya sea que los datos exportados sean o no suprimidos de este.
Organización de Archivos. La técnica utilizada para representar y almacenar registros en archivo de datos es llamada organización de archivos. Existen cuatro técnicas fundamentales de organización de archivos las cuales serán tratadas en forma detallada en los próximos capítulos de éste libro. Las cuatro técnicas se enumeran a continuación : • • • •
Organización de archivos Secuencial. Organización de archivos Secuencial Indexada. Organización de archivos directa. Organización de archivos multi-llave (una variante de la segunda).
Existen dos aspectos básicos en que difieren las técnicas de organización de archivos. Primero, la organización determina la secuenciación de los registros del archivo, la cual es la ordenación física de los registros almacenados. La Segunda, la organización del archivo determina el conjunto de operaciones necesarias para encontrar cierto registro en particular. Los registros individuales son identificados normalmente mediante valores particulares en los campos de la llave de búsqueda. Este campo de datos puede o no tener valores duplicados en el archivo y el campo puede ser un elemento básico o de grupo. Algunas técnicas de organización de archivos proporcionan una rápida accesibilidad sobre una variedad de llaves de búsqueda; otras técnicas apoyan un acceso directo solamente sobre uno de los valores. Página :
35
DEFINICIONES Y CONCEPTOS
La organización mas apropiada para un archivo en particular está determinada por las características operacionales del medio de almacenamiento utilizado y por la naturaleza de las operaciones a ejecutar sobre los datos. La característica más importante de un dispositivo de almacenamiento que influye en la elección de la técnica de organización de archivos es, si el dispositivo permite el acceso directo a registros en particular sin tener que accesar todos los registros anteriores almacenados en el dispositivo, o si permite únicamente un acceso secuencial a los registros. La manera como se va a usar el archivo es un factor importante para determinar cómo se debe organizar el archivo. Dos aspectos importantes sobre el uso de archivos son su modo de utilización y la naturaleza de las operaciones sobre el archivo. Un archivo puede accesarse por un programa que se ejecuta por lotes (en modo batch) o por un programa que se ejecuta interactivamente. Y en función del acceso se elige la organización de archivos mas apropiada.
Página :
36
CAPITULO 3 Archivos Secuenciales
ARCHIVOS SECUENCIALES
Capitulo III.- Archivos Secuenciales. En los archivos de datos con organización secuencial los registros de datos se graban en el archivo uno detrás de otro, sin dejar huecos. La grabación de dichos registros se lleva a cabo exactamente en el mismo orden en que fueron introducidos por el capturista y tienen la característica que existe un campo en cada registro que es único (campo llave) y que se utiliza para identificar cada registro. Dicha forma de almacenar los registros en organización secuencial se puede apreciar en la figura No. 3.1.
Figura No. 3.1 Registros grabados en forma secuencial (Uno detrás de otro).
En estos archivos, la información sólo puede leerse desde el inicio del archivo y escribirse después del último registro que existe en el archivo. Los archivos secuenciales tienen algunas características que hay que tener en cuenta : 1. La escritura de nuevos registros siempre se hace al final del archivo. 2. Para leer una zona concreta del archivo hay que avanzar siempre, si la zona está antes de la zona actual de lectura, será necesario "rebobinar" o regresar el puntero de lectura del archivo. 3. Los archivos sólo se pueden abrir para lectura o para escritura, nunca de los dos modos a la vez. Esto es en teoría, por supuesto, en realidad el lenguaje C++ no distingue si los archivos que usamos son secuenciales o no, es el tratamiento que hagamos de ellos y que los clasifica como de uno u otro tipo. Pero hay archivos que se comportan siempre como secuenciales, por ejemplo los archivos de entrada y salida estándar: stdin, stdout, stderr, stdprn y stdaux. El caso de stdin, que suele ser el teclado. Un programa sólo podrá abrir ese archivo como de lectura, y sólo podrá leer los caracteres a medida que estén disponibles y en el mismo orden en que fueron tecleados. Lo mismo se aplica para stdout y stderr, que es el monitor, en estos casos sólo se pueden usar para escritura, y el orden en que se muestra la información es el mismo en que se envía.
Página :
38
ARCHIVOS SECUENCIALES
Un caso especial es stdaux, que suele ser el puerto serie. También es un archivo secuencial, con respecto al modo en que se leen y escriben los datos. Sin embargo es un archivo de entrada y salida, aunque no simultáneamente. Trabajar con archivos secuenciales tiene algunos inconvenientes. Por ejemplo, imagina que tienes un archivo de este tipo en una cinta magnética. Por las características físicas de este soporte, es evidente que sólo podemos tener un archivo abierto en cada unidad de cinta. Cada archivo puede ser leído y también sobrescrito, pero en general, los archivos que haya a continuación del que escribimos se perderán, o bien serán sobrescritos al crecer el archivo o quedará un espacio vacío entre el final del archivo y el principio del siguiente. En cuanto a las ventajas, los archivos secuenciales son más sencillos de manejar, ya que requieren menos funciones, además son más rápidos, ya que no permiten moverse a lo largo del archivo, el punto de lectura y escritura está siempre determinado. En ocasiones pueden ser útiles, por ejemplo, cuando sólo se quiere almacenar cierta información a medida que se recibe, y no interesa analizarla en el momento. Posteriormente, otro programa puede leer esa información desde el principio y analizarla. Este es el caso de archivos "log" o "diarios" por ejemplo, los servidores de las páginas WEB pueden generar una línea de texto cada vez que alguien accede a una de las páginas y las guardan en un archivo secuencial. A nivel físico, los bloques están almacenados "consecutivamente" ya sea: •
Almacenados de tal forma que ellos están físicamente adyacentes y por lo tanto residen en la misma sola extensión (archivo secuencial físico); o
•
Almacenados de tal forma que pertenezcan a grupos (clusters) diferentes y, por lo tanto, pertenezcan a más de una extensión, con su adyacencia lógica mantenida vía punteros de disco. (archivo secuencial enlazado físico).
Como desventaja se tiene que no existe una manera rápida de acceder a un registro de datos específico (en contraste, por ejemplo, con lo que sucede en los archivos relativos y en los archivos indexados, en dónde es posible acceder a un registro determinado en pocos accesos).
III.1 Estructura de un archivo secuencial. Normalmente cada registro tiene una estructura semejante, la cual está compuesta por una cantidad finita de campos y todos ellos están relacionados entre sí y hacen referencia a una unidad. La estructura de un registro tiene generalmente campos de distinto tipo y uno de ellos se denomina campo llave para identificar en forma única a cada registro. En la figura No. 3.2 se puede apreciar la estructura del Página :
39
ARCHIVOS SECUENCIALES
registro de datos que será utilizada a lo largo de éste capítulo para ejemplificar todas las operaciones en un archivo organizado en forma secuencial.
Figura No. 3.2 Estructura del registro de datos.
La manipulación de los archivos secuenciales puede darse en cualquiera de los tipos de programación (en espagueti, modular, estructurada, orientada a objetos, visual, orientada a eventos, etc). En éste documento, se va a utilizar la programación orientada a objetos por ser la más utilizada y que incluso es usada por la programación visual y la orientada a eventos. Con la filosofía de la programación Orientada a objetos se abstrae la realidad y se encapsulan en una sola entidad los datos miembro y las funciones miembro. Dicho encapsulamiento es con el fin de generar un modelo o plantilla la cual es llamada clase, en la que se describen todos los datos miembro a utilizar y se desarrolla el código que manipula a dichos datos. La mayoría de los lenguajes de programación orientada a objetos utilizan el término clase para describir a los objetos de un mismo tipo. Y consideran a la clase como un tipo de dato definido por el usuario y a partir de él se crean objetos o instancias que ya contienen internamente los datos miembro y las funciones miembro. La figura No. 3.3 muestra en forma gráfica el concepto de clase, donde los datos miembro y las funciones miembro son parte de una sola entidad.
Figura No. 3.3 Representación gráfica de una clase.
En el lenguaje C++ en cualquiera de sus versiones, la clase se codifica en un archivo que tenga extensión .hpp. La definición de la clase se puede apreciar en el programa No. 3.1.
Página :
40
ARCHIVOS SECUENCIALES
/* ========================================================== Clase para definir objetos tipo : Registro de Empleado. ===========================================================*/ class empleado { private: int clave; char nombre[30]; float sdia; int dias; public: empleado(); Desplegar(int iL); PedirDatos(); Modifica(); Consultas(); Datos_Constantes(); ~empleado() {}; }; empleado::empleado() { dias = clave = 0; strcpy(nombre," sdia = 0.0; }
// Datos Miembro : // // //
clave (llave) nombre sueldo diario dias trabajados
// FUNCIONES MIEMBRO
\0");
empleado::Desplegar( int iL) { gotoxy(3,iL); cout<<clave; gotoxy(10,iL); cout<<nombre; gotoxy(50,iL); cout<<dias; gotoxy(70,iL); cout<<setprecision(2)<<sdia; return 0; } empleado::PedirDatos() { clrscr(); gotoxy(10,5); cout<<"ALTAS DE UN REGISTRO A UN ARCHIVO SECUENCIAL."; Datos_Constantes(); gotoxy(46,10); cin>>clave; fflush(stdin); gotoxy(46,12); gets(nombre); fflush(stdin); gotoxy(46,14); cin>>sdia; fflush(stdin); gotoxy(46,16); cin>>dias; fflush(stdin); return 0; }
Pรกgina :
41
ARCHIVOS SECUENCIALES
empleado::Modifica() { clrscr(); char nomm[30], diass[3],sdiaa[10]; gotoxy(10,5); cout<<"MODIFICACION A UN REGISTRO A UN ARCHIVO SECUENCIAL."; Datos_Constantes(); gotoxy(48,12);gets(nomm); fflush(stdin); gotoxy(48,14);gets(diass); fflush(stdin); gotoxy(48,16);gets(sdiaa); fflush(stdin); if (diass[0] != '\x0') dias = atoi(diass); if (sdiaa[0] != '\x0') sdia = atof(sdiaa); if (nomm[0] != '\x0') { strcpy(nombre," "); strcpy(nombre,nomm); } return 0; } empleado::Consultas() { gotoxy(10,5); cout<<"CONSULTAS DE UN REGISTRO EN UN ARCHIVO SECUENCIAL."; Datos_Constantes(); gotoxy(46,10); cout<<clave; gotoxy(46,12); cout<<nombre; gotoxy(46,14); cout<<sdia; gotoxy(46,16); cout<<dias; gotoxy(50,22); cout<<"<Return> para continuar"; getchar(); return 0; } empleado::Datos_Constantes() { gotoxy(20,10); cout<<"Clave del empleado : " << clave; gotoxy(20,12); cout<<"Nombre del empleado : " << nombre; gotoxy(20,14); cout<<"Sueldo diario : " << sdia; gotoxy(20,16); cout<<"No. de Dias trabajados : " << dias; return 0; } Programa No. 3.1 Codificaciรณn de la clase registro_empleado.
Pรกgina :
42
ARCHIVOS SECUENCIALES
Una vez que se tiene la clase, se pueden crear instancias u objetos de la clase empleado. Cada objeto tendrá internamente y en forma ordenada los cuatro campos y las siete funciones miembro definidas en el programa No. 3.1. Se crea adicionalmente el código que será el responsable de crear todos los objetos de la aplicación y la manipulación de los mismos. Dicho código deberá almacenarse con el nombre apropiado, pero deberá tener extensión *.cpp conteniendo lo siguiente : • • •
Incluir archivos de cabecera (incluso el .hpp donde se definió la clase). Incluir la función main () como rectora de la aplicación. Dentro de la función main () deberán crearse, manipularse y destruirse los objetos requeridos por la aplicación.
Pueden existir varios archivos .hpp en una aplicación debido a que en cada archivo de cabecera se desarrolló posiblemente otras acciones complementarias del sistema de información. Pueden incluso existir varios .cpp, pero solo uno de ellos tendrá la función main () y será quien defina el orden de ejecución. La figura No. 3.2 muestra en forma esquemática la forma de unir varios archivos de cabecera y un solo .cpp para crear una aplicación. Al compilar la aplicación con los archivos .hpp incluidos, se genera un solo ejecutable que ya no requiere el compilador del lenguaje de programación para su ejecución.
Figura No. 3.4 Encadenar varios archivos de clases para crear una aplicación.
III.2 Operaciones a efectuar. La manera como se va a usar el archivo es un factor importante para determinar cómo se debe organizar un archivo. Dos aspectos importantes sobre el uso de archivos son su modo de utilización y la naturaleza de las operaciones sobre el archivo.
Página :
43
ARCHIVOS SECUENCIALES
Un archivo puede accesarse por un programa que se ejecuta por lotes (en modo batch) o por un programa que se ejecuta interactivamente. Con el modo de acceso por lotes, las transacciones generalmente pueden ordenarse para mejorar el acceso al archivo maestro, mientras que con accesos interactivos las transacciones se procesan a medida que llegan. Con el modo de acceso por lotes el desempeño es normalmente medido por el número de transacciones procesadas en el periodo. Con el acceso interactivo, el desempeño también es medido por el tiempo de respuesta a las transacciones individuales. Las operaciones básicas que se pueden ejecutar sobre un archivo organizado en forma secuencial son las siguientes :
CREACION. La creación incial de un archivo es conocida también como la carga del archivo y consiste en definir un espacio en algún medio de almacenamiento y en dicho espacio capturar uno a uno los registros de datos de alguna aplicación especifica que incluye además la validación de los datos que se van introduciendo. Generalmente la creación de un archivo ocurre en el preciso momento en que se ejecuta por primera vez el programa de altas. En ese preciso momento, al indicar que se abra un archivo que no existe, el sistema operativo busca el archivo en la unidad y path indicada; pero como no lo encuentra genera un registro de dicho archivo en la tabla Fat y mediante un puntero le asigna una dirección fisica de la unidad de almacenamiento para que a partir de ahí se graben en forma consecutiva todos los registros que formarán parte del archivo que se acaba de crear.
ACTUALIZACION. La actualización consiste en cambiar el contenido de un archivo de datos, esto con el fin de reflejar todos los cambios que se dan en cierto momento en el mundo real. Dichos cambios pueden incluir las siguientes acciones :
1.- Altas de nuevos registros al archivo de datos. Por ejemplo cuando entra a trabajar un nuevo empleado, también se tiene que dar de alta en el archivo maestro de nómina para que pueda generarse en la próxima quincena su recibo de pago. En la figura No. 3.5, se puede apreciar gráficamente el procedimiento para dar de alta nuevos registros a un archivo organizado en forma secuencial.
Página :
44
ARCHIVOS SECUENCIALES
Figura No. 3.5 Alta un registro a un archivo secuencial.
El procedimiento para realizar una alta de acuerdo a la figura No. 3.5, consiste en lo siguiente : 1.- Crear un objeto tipo ofstream (El del archivo donde se grabarán los nuevos registros). 2.- Crear un objeto tipo registro de datos (Que es el objeto que contendrá los datos que se van capturando y que se escribirán en el archivo). 3.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al objeto tipo ofstream. En el caso de la figura no. 3.5 se llama nomina.dat. 4.- Se hace una verificación para investigar si se abrió correctamente el archivo de datos. Si la apertura fue exitosa continuar en el paso 5; en caso contrario se envía un mensaje de error y dar por terminado el proceso. 5.- Desplegar en el monitor la pantalla de captura en blanco conteniendo : encabezados, etiquetas que indiquen todos los datos a capturar y los lugares donde se aceptaran cada uno de los datos. 6.- Teclear todos los datos solicitados en la pantalla de captura y en cada dato pulsar <return> para pasar al siguiente campo. 7.- Escribir el registro de datos (como objeto) en el archivo (otro objeto), el cual se adicionará al final del último registro contenido en el archivo. 8.- Deberá existir una pregunta para que el usuario indique si desea capturar otro registro o no. En caso de indicar que se va a capturar otro registro, se ejecutan los pasos 5, 6 y 7. En caso contrario se continua con el paso 9. 9.- Cerrar el archivo de datos y terminar el proceso. En el bloque case 1, del programa No. 3.2 que se muestra en el tema III.4 Ejemplo de una Aplicación, de éste mismo capítulo se codifican los pasos
Página :
45
ARCHIVOS SECUENCIALES
enumerados anteriormente donde se implementa la operación de altas a un archivo secuencial.
2.- La eliminación de registros; esto es borrar del archivo un registro de datos de información que ya no es útil a la compañía (por ejemplo un trabajador que acaba de renunciar). Esta operación de eliminación de un registro que se encuentra en un archivo organizado secuencialmente tiene la particularidad que no puede eliminarse directamente porque dicho registro puede estar al inicio del archivo, en medio del archivo o bien al final del mismo. Debido a lo anterior, es necesario utilizar un archivo de trabajo adicional para pasar a dicho archivo los registros que nos interesan y no grabar el registro que se va a eliminar tal como se muestra en la figura No. 3.6.
Figura No. 3.6 Eliminación de un registro en un archivo secuencial.
El procedimiento para eliminar un registro consiste en lo siguiente : 1.- Crear un objeto tipo ofstream que en el caso de la figura No. 3.6 sería el archivo llamado depaso.dat. y en el cual se grabarán en forma temporal todos los registros a excepción del que se va a eliminar. 2.- Crear un objeto tipo ifstream que sería el archivo llamado nomina.dat, del cual se leeran registro por registro desde el primero hasta el final del archivo para eliminar el registro deseado. 3.- Crear un objeto tipo registro de datos, que servirá para leer registro por registro del archivo tipo ifstream.
Página :
46
ARCHIVOS SECUENCIALES
4.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al objeto tipo ofstream (que para el ejemplo se llama depaso.dat). 5.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al objeto tipo ifstream (que para el ejemplo se llama nomina.dat). 6.- Se hace una verificación para investigar si se abrieron correctamente los dos archivos. Si la apertura fue exitosa continuar en el paso 7; en caso contrario enviar un mensaje de error y dar por terminado el proceso. 7.- En el monitor se pide la clave del empleado (que es la llave de búsqueda) para buscarla en el archivo de entrada. 8.- Dentro de una estructura de repetición (en el caso del ejemplo se maneja un while) leer un registro del archivo de entrada, comparar la clave del registro a eliminar con la del registro leído y si son diferentes; grabar dicho registro en el archivo depaso.dat. En el caso que ambas llaves coincidan, quiere decir que es el registro que debe eliminarse, por lo que dicho registro no se escribe en el archivo depaso.dat y se regresa a leer otro registro. Realizar el procedimiento de éste paso mientras no se llegue al fin del archivo. 9.- Cerrar los dos archivos abiertos al inicio del proceso de eliminación. 10.- Actualizar el archivo maestro; es decir, eliminar físicamente del medio de almacenamiento el archivo llamado nomina.dat y renombrar el archivo depaso.dat como nomina.dat.
3.- La modificación de datos a ciertos registros que ya existen en el archivo; por ejemplo cambiar al trabajador del departamento de adscripción, cambiar su sueldo, cambiar su dirección, etc. Esta operación de modificación a ciertos campos de un registro que se encuentra en un archivo organizado secuencialmente tiene la particularidad que tiene que buscarse registro por registro en todo el archivo y al momento de encontrarse deberán cambiarse los datos de los campos que tienen modificación. Posteriormente se debe grabar el registro modificado en su mismo lugar. El detalle es que el archivo está organizado en forma secuencial y si se encuentra en una cinta no se puede rescribir en su mismo lugar, por lo que se procesan todos los registros y se utiliza un archivo de trabajo tal como se muestra en la figura No. 3.7.
Página :
47
ARCHIVOS SECUENCIALES
Figura No. 3.7 Modificación de algunos datos de un registro.
El procedimiento para modificar algunos datos de un registro consiste en lo siguiente : 1.- Crear un objeto tipo ofstream que en el caso de la figura No. 3.6 sería el archivo llamado depaso.dat. y en el cual se grabarán en forma temporal todos los registros, incluso el modificado. 2.- Crear un objeto tipo ifstream que sería el archivo llamado nomina.dat, del cual se leeran registro por registro desde el primero hasta el final del archivo con el fin de encontrar el que se va a modificar. 3.- Crear un objeto tipo registro de datos, que servirá para leer registro por registro del archivo tipo ifstream. 4.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al objeto tipo ofstream (que para el ejemplo se llama depaso.dat). 5.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al objeto tipo ifstream (que para el ejemplo se llama nomina.dat). 6.- Se hace una verificación para investigar si se abrieron correctamente los dos archivos. Si la apertura fue exitosa continuar en el paso 7; en caso contrario enviar un mensaje de error y dar por terminado el proceso. 7.- En el monitor se pide la clave del empleado (que es la llave de búsqueda) para buscarla en el archivo de entrada. 8.- Dentro de una estructura de repetición (en el caso del ejemplo se maneja un while) leer un registro del archivo de entrada , comparar la clave del registro a modificar con la del registro leído y si son diferentes; grabar dicho registro en el archivo depaso.dat. En el caso que ambas llaves coincidan, quiere decir que es el registro que debe modificar por lo que se mostrará en el monitor.
Página :
48
ARCHIVOS SECUENCIALES
9.- Se cambia el contenido de los campos a modificar y también se graba en el archivo depaso.dat. Posteriormente se pasan íntegramente los registros restantes del archivo nomina.dat al archivo depaso.dat. 10.- Cerrar los dos archivos abiertos al inicio del proceso de modificación. 11.- Actualizar el archivo maestro; es decir, eliminar físicamente del medio de almacenamiento el archivo llamado nomina.dat y renombrar el archivo depaso.dat como nomina.dat.
RECUPERACIÓN. El acceso a un archivo con el propósito de extraer información significativa es llamado recuperación de la información. Existen básicamente dos clases de recuperación de información : consulta y generación de reportes. Estas dos clases se pueden distinguir de acuerdo al volumen de información que producen. Una consulta produce un volumen relativamente mínimo, mientras que un reporte puede crear muchas páginas de salida de información. Sin embargo, algunas empresas prefieren distinguir entre consulta y generación de reportes de acuerdo a su forma de procesar. Si una recuperación de información es procesada interactivamente, estas empresas llamarán la recuperación como consulta. Si la recuperación es procesada por lotes, la recuperación será llamada generación de reportes. Esta terminología tiende a hacer que la generación de reportes sea un proceso más planificado, más programado; y la consulta sea un proceso más espontáneo. La mayoría de los sistemas de información requieren de ambas clases de recuperación de información. Una consulta se formula por lo general mediante un lenguaje de consulta, el cual idealmente se estructura como un lenguaje natural, fácil de comprender y usar por cualquier persona que no sea experto en la programación. Los procesadores de consulta, son programas que traducen las preguntas del usuario en instrucciones que son usadas directamente para accesar al archivo de datos. Un software procesador de consultas muy común es el SQL (Structured Query Languaje).
III.3 Mantenimiento. El mantenimiento de un archivo organizado en forma secuencial consiste en readaptarlo a todos los cambios continuos del mundo real que es muy dinámico. Existen dos clases de operaciones de operaciones básicas, las cuales son :
Página :
49
ARCHIVOS SECUENCIALES
1.- Reestructuración de un archivo implica que es necesario aplicar cambios estructurales dentro del contexto de la misma organización de archivos. Por ejemplo, cambiar la longitud de los campos, agregar nuevos campos a los registros, eliminar algunos campos que ya no se utilicen, asignar más espacio para el archivo, ordenar por algún otro campo a los registros del archivo. Pero el método de organización sigue siendo el secuencial. 2.- Reorganización es la segunda forma de darle mantenimiento a un archivo organizado en forma secuencial y que consiste en cambiar de organización al archivo de datos. El cambio puede ser a organización de archivos secuencialindexada u organización de archivos directa.
III.4 Ejemplo de aplicación. Se desea realizar un programa que permita crear y manipular un archivo organizado en forma secuencial y que permita las operaciones de : Altas, Bajas, Modificaciones, Consultas y Reportes. Se definió un registro de datos que contiene 4 campos que son : Clave del empleado, su nombre, sueldo diario y días trabajados. La anterior estructura es con fines didácticos y es la que está establecida en la figura No. 3.1. Se consideró la clave del empleado como campo llave para poder realizar todas las operaciones mencionadas en el párrafo anterior. El programa se elaboró utilizando la programación Orientada a Objetos y la organización del código se muestra en un diagrama de niveles mostrado en la figura No. 3.8.
Figura No. 3.8 Estructura genérica del programa práctico.
La función principal del esquema anterior es la encargada de procesar cualquiera de las seis operaciones que se muestran en forma de bloque. Página :
50
ARCHIVOS SECUENCIALES
El módulo de desplegar menú, es el que muestra una pantalla principal la cual es la encargada de solicitar al usuario de la aplicación la operación que desea realizar en ese momento (Altas, bajas, Consultas, Modificaciones o reporte). El módulo de altas es el encargado de pedir datos al usuario y almacenar dichos datos al final del archivo. La ejecución dentro del programa corresponde al case 1 de la estructura de repetición while. El módulo de bajas es el que elimina un registro de datos que ya no es útil en el archivo. La ejecución dentro del programa corresponde al case 2 de la estructura de repetición while. El módulo de consultas permite visualizar todo el registro de un empleado en especial. La ejecución dentro del programa corresponde al case 3 de la estructura de repetición while. El módulo de modificaciones es el que permite cambiar el contenido de uno o varios campos de un registro, a excepción del campo llave. La ejecución dentro del programa corresponde al case 4 de la estructura de repetición while. El módulo de reporte es el que obtiene un reporte impreso de cada uno de los registros, realizando algunos cálculos con los campos de sueldo diario y días trabajados. La ejecución dentro del programa corresponde al case 5 de la estructura de repetición while. En el programa no. 3.2 se muestran las cinco operaciones en un archivo organizado en forma secuencial.
/* ==================================================== PROGRAMA QUE MANIPULA UN ARCHIVO ORGANIZADO EN FORMA SECUENCIAL. AUTOR : JOSE LUIS HERNANDEZ HERNANDEZ ======================================================*/ # include <conio.h> # include <dos.h> # include <ctype.h> # include <stdlib.h> # include <iostream.h> # include <fstream.h> # include <iomanip.h> # include <string.h> # include <stdio.h> # include "C:\NOMINA.HPP"
Página :
51
ARCHIVOS SECUENCIALES
main() { int lClave; int iOp, iJ; float fSueldo_quin, fDeduc, fSueldoNeto, fIssste; float fIspt, fTotalQuin, fTotalDeduc, fTotalnNeto; ifstream ifMaestro; ofstream ofMaestro; empleado EMP;
// Objeto tipo archivo de lectura. // Objeto tipo archivo de escritura. // Objeto tipo registro empleado.
do { clrscr(); gotoxy(17,5);cout<<"INSTITUTO TECNOLOGICO DE CHILPANCINGO"; gotoxy(17,6);cout<<"PROGRAMA DE EJEMPLO PARA LA CREACION Y"; gotoxy(18,8);cout<<"MANIPULACION DE ARCHIVOS ORGANIZADOS"; gotoxy(24,9);cout<<"EN FORMA SECUENCIAL."; gotoxy(26,11); cout<<"MENU PRINCIPAL"; gotoxy(25,14); cout<<"1] ALTAS."; gotoxy(25,15); cout<<"2] BAJAS."; gotoxy(25,16); cout<<"3] CONSULTAS."; gotoxy(25,17); cout<<"4] MODIFICACIONES."; gotoxy(25,18); cout<<"5] REPORTE. "; gotoxy(25,19); cout<<"6] SALIR."; gotoxy(25,21); cout<<"Elige una opcion: "; cin>>iOp; switch(iOp) {
case 1: // OPCION DE ALTAS clrscr(); char Op = 'n'; ofMaestro.open("c:\\nomina.dat", ios::app | ios::binary); do{ EMP.PedirDatos(); ofMaestro.write((char *) &EMP, sizeof(EMP)); gotoxy(24,20);cout<<"Desea otro registro: "; Op = getchar(); }while(toupper(Op)=='S'); ofMaestro.close(); break;
case 2: // OPCION DE BAJAS clrscr(); ifMaestro.open("c:\\nomina.dat",ios::in | ios::binary); ofMaestro.open("c:\\depaso.dat",ios::app| ios::binary); gotoxy(25,12);cout<<"introduce la clave del registro a eliminar : "; cin>>lClave; while(ifMaestro.read((char *) &EMP, sizeof(EMP))!=0){ if(EMP.clave!=lClave) Pรกgina :
52
ARCHIVOS SECUENCIALES
ofMaestro.write((char *) &EMP, sizeof(EMP)); } ifMaestro.close(); ofMaestro.close(); remove("c:\\nomina.dat"); rename("c:\\depaso.dat","c:\\nomina.dat"); break; case 3: // OPCION DE CONSULTAS. clrscr(); ifMaestro.open("c:\\nomina.dat",ios::in | ios::binary); gotoxy(25,12);cout<<"introduce la clave del registro a consultar : "; cin>>lClave; while(ifMaestro.read((char *) &EMP, sizeof(EMP))!=0){ if(EMP.clave==lClave) { clrscr(); EMP.Consultas(); } } ifMaestro.close(); break; case 4: // OPCION DE MODIFICACIONES clrscr(); int iL = 25; ifMaestro.open("c:\\nomina.dat",ios::in | ios::binary); ofMaestro.open("c:\\depaso.dat",ios::out| ios::binary); gotoxy(25,12);cout<<"introduce la clave del registro a modificar : "; cin>>lClave; while(ifMaestro.read((char *) &EMP, sizeof(EMP))!=0){ if(EMP.clave==lClave) { EMP.Modifica(); ofMaestro.write((char *) &EMP, sizeof(EMP)); } else ofMaestro.write((char *) &EMP, sizeof(EMP)); } ifMaestro.close(); ofMaestro.close(); remove("c:\\nomina.dat"); rename("c:\\depaso.dat","c:\\nomina.dat"); break;
case 5: int pagina=1, iLineas=62; clrscr();
// OPCION DE REPORTE
Pรกgina :
53
ARCHIVOS SECUENCIALES
ifstream entrada("c:\\nomina.dat",ios::in | ios::binary); ofstream impresora("PRN"); if (!entrada){ gotoxy(10,8); cout<<"no se puede abrir el archivo de datos. "; delay(2000); } else if(!impresora){ gotoxy(10,8); cout<<"no se puede abrir la impresora"; delay(2000); } else{ fTotalQuin = fTotalDeduc = fTotalnNeto =0.0; while(entrada.read((unsigned char *) &EMP,sizeof(empleado))!= 0){ fSueldo_quin=fDeduc=fSueldoNeto=fIssste=fIspt=0.0; fSueldo_quin=EMP.sdia*EMP.dias; fIssste=fSueldo_quin*0.0176; fIspt=fSueldo_quin*0.0143; fDeduc=fIssste+fIspt; fSueldoNeto=fSueldo_quin-fDeduc; fTotalQuin=fTotalQuin+fSueldo_quin; fTotalDeduc+=fDeduc; fTotalnNeto=fTotalnNeto+fSueldoNeto; if (iLineas>60){ impresora<<" INSTITUTO TECNOLOGICO DE”; impresora<<” CHILPANCINGO”; impresora<<” “<<”pagina: "<<pagina<<endl<<endl; impresora<<" REPORTE OBTENIDO DE UN ARCHIVO”; impresora<< ORGANIZADO EN FORMA SECUENCIAL“; impresora<<endl; impresora<<"=============================================”; impresora<<”========”<<endl; impresora<<" CLAVE NOMBRE SUELDO DEDUC.”; impresora<<” SUELDO "<<endl; impresora<<" DEL EMPLEADO QUINCENAL impresora<<” NETO”<<endl; impresora<<"=============================================”; impresora<<”========”<<endl; iLineas = 8; } impresora.fill(' '); impresora<<setw(8)<<EMP.clave<<" "; impresora<<resetiosflags(ios::right); impresora.setf(ios::left); impresora<<setw(25)<<EMP.nom; impresora<<resetiosflags(ios::left); impresora<<setiosflags(ios::showpoint | ios::fixed); impresora<<setprecision(2); impresora.setf(ios::right); impresora<<setw(12)<<setiosflags(ios::right)<<fSueldo_quin; impresora<<setw(12)<<fDeduc; impresora<<setw(10)<<fSueldoNeto<<endl;
Página :
54
ARCHIVOS SECUENCIALES
iLineas++; } impresora<<endl<<endl; impresora<<" totales.......... $ impresora<<setw(11)<<fTotalQuin; impresora<<setw(12)<<fTotalDeduc; impresora<<setw(10)<<fTotalnNeto; entrada.close(); impresora<<"\f"; impresora.close();
";
} break; } }while(iOp!=6); return 0; } Programa No. 3.2 Ejemplo de manipulaciรณn de un archivo secuencial.
Pรกgina :
55
CAPITULO 4 Archivos SecuencialIndexados
ARCHIVOS SECUENCIAL-INDEXADO
Capitulo IV.- Archivos Secuencial-Indexados. Una manera efectiva de organizar una colección de registros, cuando existe la necesidad de accesar los registros secuencialmente, por algún valor de llave, como de accesarlos individualmente, con esa misma llave, es la organización de archivos secuenciales-indexados. Un archivo secuencial-indexado proporciona la combinación de tipos de acceso que manejan un archivo secuencial y un archivo directo. Esta organización está diseñada para utilizar la combinación de la organización directa y la secuencial, obteniendo la ventaja de poder acceder a los registros en forma secuencial y relativamente de manera directa. Como se pude apreciar la organización de archivos secuenciales-indexados es efectiva para satisfacer la necesidad tanto de acceder a los archivos en forma secuencial como de forma directa mediante algún valor del campo llave.
IV.1 Estructura de un archivo secuencial-indexado. Para poder estructurar esta organización es necesario construir el área de índices a partir de un archivo organizado en forma secuencial y basándonos en la disposición física de los datos almacenados. Para construir el área del índice, se toma un archivo organizado en forma secuencial para considerarlo como área de datos. Por ejemplo imaginemos que se va a tomar el archivo que se muestra en la figura no. 4.1 y dicho archivo corresponderá al área de datos del archivo secuencial-indexado.
Figura No. 4.1 Área de datos de un archivo secuencial-indexado.
A partir del área de datos del ejemplo de la figura no. 4.1, se crea el área de índices en donde se manejará una estructura del registro que contenga exclusivamente dos campos : El campo llave (clave) y la dirección de inicio (ubicación) de cada registro. La estructura del registro del área de índices queda tal como se muestra en la figura No. 4.2.
Página :
57
ARCHIVOS SECUENCIAL-INDEXADO
Figura No. 4.2 Estructura del registro del área de datos.
Para cualquier proceso de altas, bajas, modificaciones, consultas o reporte es necesario utilizar el área de índice para la búsqueda del registro solicitado y el área de datos para tomar toda la información del registro. Es decir, que los dos archivos unidos son considerados para realizar los accesos en forma secuencial-indexado tal como se aprecia en la figura no. 4.3.
Figura No. 4.3 El área de datos y el área de índice permiten la organización Secuencial-indexado.
El área de índices siempre deberá conservarse ordenado por el campo llave, de forma que la búsqueda pueda ser lo más rápida posible. La función del área de índices es análoga a la del índice de éste libro : facilitar la búsqueda de una determinada palabra o tema. Considerando como área de datos la figura no 4.1, el área de índices queda tal y como se muestra en la figura no. 4.4.
Figura No. 4.3 El área de datos y el área de índice permiten la organización
Página :
58
ARCHIVOS SECUENCIAL-INDEXADO
El tipo de más simple de búsqueda en el archivo de índices es el lineal simple, que consiste en buscar en forma secuencial la llave solicitada y al encontrarla toma la ubicación del registro y se dirige en forma directa al área de datos para leer el registro en cuestión. De acuerdo a la forma en que se estén almacenados los registros y la forma en que se desea recuperar, se pueden presentar los siguientes dos casos : 1.- El archivo está almacenado en secuencia física por el campo llave y se desea el acceso directo por dicho campo.- Cuando el campo de búsqueda coincide con el campo de secuencia física se le denomina organización secuencial indexada. 2.- El archivo está almacenado en secuencia física por un campo y se desea la recuperación en secuencia por algún campo.- Si el campo llave por el que se desea acceder de forma secuencial es el mismo que el de la secuencia física, simplemente hay que leer los registros según la secuencia en que están almacenados. A la hora de construir el archivo de índices hay que tener en cuenta los puntos que se describen a continuación : •
Cualquier campo del archivo puede servir de base para construir el índice.
•
Una combinación de campos de un registro de datos puede servir de base para construir in índice. Por ejemplo, para obtener un listado ordenado alfabéticamente, el archivo índice estará formado por dos o más campos a la vez.
•
Cualquier índice puede emplearse tanto para el acceso directo, en función del campo indexado, como para el acceso secuencial, según la secuencia de dicho campo.
•
Un determinado archivo puede tener asociados varios archivos índices, bien por un campo llave o por una combinación de ellos. La figura No. 4.5 nos muestra el caso de un archivo de datos y dos archivos de índices.
•
Cuando se modifica el archivo de datos es necesario actualizar todos los archivos de índices asociados al archivo de datos. Es una tarea laboriosa porque en todo momento debe haber una correspondencia entre el archivo de datos y sus archivos de índices.
Página :
59
ARCHIVOS SECUENCIAL-INDEXADO
Figura No. 4.5 Una área de datos y dos áreas de índice.
Los índices que pueden crearse son de dos posibles tipos : •
Índice denso o exhaustivo.- Es aquel en el cual existe un registro índice por cada valor del campo llave en el archivo de datos. Este tipo de índice es el más utilizado hasta ahora.
•
Índice escaso o selectivo.- En este tipo de índices se crea solamente registros índice para algunos de los registros del campo llave en el archivo de datos. Estos índices son utilizados cuando se desea cierta información selectiva (Por ejemplo todos los trabajadores de confianza de cierta empresa).
Siguiendo con ejemplos en la programación Orientada a Objetos, se creó una clase en el lenguaje C++ para crear objetos tipo empleado y otra clase para crear objetos tipo índice. Las dos clases se crearon en un solo archivo .hpp y muestran en el programa no. 4.1
//========================================================= // DEFINICION DE LA CLASE TIPO : EMPLEADO. // PARA MANEJO DE ARCHIVOS ORGANIZADOS EN FORMA // SECUENCIAL-INDEXADOS. //========================================================= class empleado{ private: int clave; char nom[30]; float sdia; int dias; public: empleado(); Desplegar(int iL); PedirDatos(); Modifica(); Consultas();
// DATOS MIEMBRO
// FUNCIONES MIEMBRO
Página :
60
ARCHIVOS SECUENCIAL-INDEXADO
Bajas(); imprime(); Datos_Constantes(); ~empleado(){}; }; empleado::empleado() { dias = clave = 0; strcpy(nom," sdia = 0.0; }
\0");
//========================================================= // DEFINICION DE LA CLASE TIPO : INDICE. //========================================================= class Indice { private : int clave; unsigned int ubicacion; public : Indice(); ~Indice() {}; }; Indice::Indice() { clave = ubicacion = 0; }
// Campo llave. // Campo Ubicación. // Funciones miembro
Programa No. 4.1 Codificación de la clase empleado y la clase indice.
Una vez que se tiene la clase, se pueden crear instancias u objetos de la clase empleado y de la clase índice. Los objetos creados con la clase empleado contendrán los cuatro campos acomodados en el orden definido junto con sus funciones miembro; por otro lado los objetos creados a partir de la clase índice contendrán dos campos y sus funciones miembro respectivas. Se crea adicionalmente el código que será el responsable de crear todos los objetos de la aplicación y la manipulación de los mismos. Dicho código deberá almacenarse con el nombre apropiado, pero deberá tener extensión *.cpp conteniendo lo siguiente : • • •
Incluir archivos de cabecera (incluso el .hpp donde se definió la clase). Incluir la función main () como rectora de la aplicación. Dentro de la función main () deberán crearse, manipularse y destruirse los objetos requeridos por la aplicación. Página :
61
ARCHIVOS SECUENCIAL-INDEXADO
Al compilar la aplicación se incluye el archivo .hpp donde están definidas las dos clases y junto con él .cpp, se genera un solo ejecutable tal como se muestra en la figura No. 4.6.
Figura No. 4.6 Se incluye el archivo .hpp con sus clases para crear el ejecutable.
IV.2 Operaciones a efectuar. La manera como se va a usar el archivo es un factor importante para determinar que la organización secuencial-indexada es la adecuada para cierto sistema de información. Un archivo con la forma de organización secuencial-indexada puede accesarse por un programa que se ejecuta por lotes (en modo batch) o por un programa que se ejecuta interactivamente. Con el modo de acceso por lotes, las transacciones normalmente serían secuenciales, mientras que con accesos interactivos las transacciones aprovecharían esta forma de organización y las operaciones sería más rápidas que en un archivo organizado en forma secuencial. Las operaciones básicas que se pueden ejecutar sobre un archivo organizado en forma secuencial-indexada son las siguientes :
CREACION. La creación inicial de un archivo es conocida también como la carga del archivo y consiste en tomar un archivo que se encuentra organizado en forma
Página :
62
ARCHIVOS SECUENCIAL-INDEXADO
secuencial y generar el área de índices para poderle hacer todas las operaciones que se describen más delante de éste mismo documento. Se va a tomar el archivo creado y que está organizado en forma secuencial del capítulo III de éste documento y se hace la programación requerida, la cual se plasma en el programa no. 4.2 que se encuentra a continuación. //============================================================ // PROGRAMA DE EJEMPLO PARA CREAR EL ARCHIVO DE INDICES // DE UN ARCHIVO SECUENCIAL INDEXADO // Autor : José Luis Hernández Hernández. //============================================================ #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream.h> #include <fstream.h> #include "indice.hpp" int Reg = 0; ifstream ifEmpleado; ofstream ofIndice; empleado EMP; Indices IND[50];
// Contador de registros. // Objeto tipo archivo de lectura. // Objeto tipo archivo de escritura. // Objeto tipo registro de empleados. // Arreglo de Objetos tipo registro de indices.
Abrir_Archivos(); Leer_Archivo(); Ordenar_Indices(); Grabar_Indices(); Cierra_Archivo();
// Definición de prototipos de funciones utilizadas.
main() { Abrir_Archivos(); Leer_Archivo(); Ordenar_Indices(); Grabar_Indices(); Cierra_Archivo(); return 0;
// Abre Archivo Secuencial y de Indices. // Lee Archivo Secuencial y carga Matriz. // Ordena el Arreglo de Indices. // Graba los indices en el archivo. // Cierra los Archivos.
} Abrir_Archivos() { ifEmpleado.open("c:\\nomina.dat",ios::in | ios::binary); if (!ifEmpleado) { clrscr(); Página :
63
ARCHIVOS SECUENCIAL-INDEXADO
cout << "El Archivo <SECUENCIAL> no pudo abrirse"<<endl; cout << "Pulsar <Return> para Salir"<<endl; getchar(); exit (-1); } ofIndice.open("c:\indices.dat",ios::out | ios::binary); if (!ofIndice) { clrscr(); cout << "El Archivo de <INDICES> no pudo abrirse"<<endl; cout << "Pulsar <Return> para Salir"<<endl; getchar(); exit (-1); } return 0; } Leer_Archivo() { int Ubicacion = 0; Reg = 0; ifEmpleado.read((char *) &EMP, sizeof(EMP)); while(!ifEmpleado.eof()) { IND[Reg].clave = EMP.clave; IND[Reg].ubicacion = Ubicacion; ifEmpleado.read((char *) &EMP, sizeof(EMP)); Reg++; // Incrementa # Registro Ubicacion = Ubicacion + sizeof (EMP); // Incrementa Ubicaci¢n } Reg--; // Para Conocer No. de Registros return 0; } Ordenar_Indices() { int i,j; int Aux1,Aux2; for (i=0 ; i < Reg - 1; i++) { for (j = 0; j < Reg - 1; j++) { if ( (IND[j].clave) > (IND[j+1].clave)) { Aux1 = IND[j].clave; Aux2 = IND[j].ubicacion; IND[j].clave = IND[j+1].clave; IND[j].ubicacion = IND[j+1].ubicacion; IND[j+1].clave = Aux1;
// Indices para manipular matriz
Página :
64
ARCHIVOS SECUENCIAL-INDEXADO
IND[j+1].ubicacion = Aux2; } } } return 0; } Grabar_Indices() { int i; for(i=0; i<= Reg ; i++) { ofIndice.write((char *) &IND, sizeof(IND)); cout << IND[i].clave << " " << IND[i].ubicacion << endl; } return 0; } Cierra_Archivo() { ifEmpleado.close(); ofIndice.close(); return 0; } Programa No. 4.2 Programa para la creación del área de indices.
ACTUALIZACION. La actualización consiste en cambiar el contenido de un archivo de datos, esto con el fin de reflejar todos los cambios que se dan en cierto momento en el mundo real. Dichos cambios pueden incluir las siguientes acciones :
1.- Altas de nuevos registros al archivo de datos. En el caso de los archivos organizados en forma secuencial-indexada, el nuevo registro deberá grabarse al final del área de datos y deberá insertarse en el lugar adecuado del área de índices para que los índices siempre estén ordenados. Un ejemplo de altas de un nuevo registro, se puede observar en el programa No. 4.3 en el cual se graba el registro completo en el área de datos y el campo llave junto con la ubicación del registro se almacena en el área de índices.
2.- La eliminación de registros implica borrar físicamente el registro del área de datos y además el registro del área de índices. La forma de eliminación es semejante a la organización de archivos secuencial, porque se recorre todo el
Página :
65
ARCHIVOS SECUENCIAL-INDEXADO
archivo apoyándose en un archivo de trabajo y escribiendo en él todos los registros que tengan la llave diferente al registro que se va a eliminar. Caber hacer mención que dicha operación tiene que hacerse a los archivos donde se encuentra en área de datos y también al área de índice.
3.- La modificación es el cambio de contenido a uno o varios campos exclusivamente del registro del área de datos. El área de índice sirve únicamente para localizar el registro que se va a modificar. Cabe hacer mención que el área de datos es abierta como archivo de entrada / salida, debido a que se lee un registro de datos, se corrigen algunos campos y se vuelve a rescribir en el mismo lugar que ocupa físicamente.
RECUPERACIÓN. El acceso a un archivo con el propósito de extraer información significativa es llamado recuperación de la información. Existen básicamente dos clases de recuperación de información : consulta y generación de reportes. Estas dos clases se pueden distinguir de acuerdo al volumen de información que producen. Los archivos organizados en forma secuencial-indexados son muy apropiados para implementar las consultas; debido a que en comparación con la organización de archivos secuencial, el tiempo de acceso es muchisimo más rápido debido a que el área de índices es leída y nos manda directamente al registro en cuestión. En el caso de los reportes, no existe ninguna diferencia con la organización de archivos secuencial, porque se toma únicamente el área de datos para generar cualquier reporte.
III.3 Mantenimiento. 1.- Reestructuración de un archivo implica que es necesario aplicar cambios estructurales dentro del contexto de la misma organización de archivos. Dichos cambios pueden ser el cambio del campo llave, lo que implica tomar el área de datos y volver a generar el área de índices.
Página :
66
ARCHIVOS SECUENCIAL-INDEXADO
2.- Reorganización es la segunda forma de darle mantenimiento a un archivo organizado en forma secuencial-indexado y que consiste en cambiar de organización al archivo de datos. El único cambio que puede ser posible es a organización de archivos directa.
IV.4 Ejemplo de aplicación. Se desea realizar un programa que permita crear y manipular un archivo organizado en forma secuencial y que permita las operaciones de : Altas, Bajas, Modificaciones, Consultas y Reportes. Se definió un registro de datos que contiene 4 campos que son : Clave del empleado, su nombre, sueldo diario y días trabajados. La anterior estructura es con fines didácticos y es la que está establecida en la figura No. 3.1. Se consideró la clave del empleado como campo llave para poder realizar todas las operaciones mencionadas en el párrafo anterior. Debido a que un programa para aplicar todas las operaciones a un archivo secuencial-indexado se hacía muy extenso para poder explicarlo, se utilizó el código de la clase establecida en el programa no. 4.1 de éste capitulo y se decidió hacer un programa para cada operación. OPERACIÓN DE ALTAS. /* ============================================================== PROGRAMA QUE DA DE ALTAS REGISTROS A UN ARCHIVO INDEXADO CON LA FILOSOFIA DE LA PROGRAMACION ORIENTADA A OBJETOS. AUTOR: JOSE LUIS HERNANDEZ HERNANDEZ ===============================================================*/ # include <conio.h> # include <ctype.h> # include <stdlib.h> # include <iostream.h> # include <fstream.h> # include <string.h> # include <stdio.h> # include "INDICE.HPP"
// Se incluye el archivo donde se // encuentra la clase del registro // de datos y la clase del indice.
main()
Página :
67
ARCHIVOS SECUENCIAL-INDEXADO
{ clrscr(); char Op = 'n'; empleado EMP; Indices Ind; ofstream Arch_Datos; ofstream Arch_Indice;
// Crea un objeto Tipo Registro Empleado. // Objeto tipo indice.. // Se crean dos objetos tipo Archivo de salida.
Arch_Datos.open("c:\\nomina.dat", ios::app | ios::binary); Arch_Indice.open("c:\\nomina.idx", ios::app | ios::binary); if (!Arch_Datos) { cout << "No se abrio el archivo de datos" << endl; cout << "<RETURN> para terminar ..." << endl; getchar(); exit (-1); } if (!Arch_Indice) { cout << "No se abrio el archivo de indices" << endl; cout << "<RETURN> para terminar ..." << endl; getchar(); exit (-1); } do{ EMP.limpiar(); EMP.PedirDatos(); Ind.ubicacion = Arch_Datos.tellp(); Ind.clave = EMP.clave; Arch_Datos.write((char *) &EMP, sizeof(EMP)); Arch_Indice.write((char *) &Ind, sizeof(Ind)); gotoxy(24,20);cout<<"DESEA CAPTURAR OTRO REGISTRO : "; Op = getchar(); }while(toupper(Op)=='S'); Arch_Datos.close(); Arch_Indice.close(); } Programa No. 4.3 Programa dar de alta un registro en el area de datos y en el area de indice.
Pรกgina :
68
ARCHIVOS SECUENCIAL-INDEXADO
OPERACIร N DE MODIFICACION.
/* ================================================================ PROGRAMA QUE SIRVE PARA REALIZAR MODIFICACIONES A UN ARCHIVO ORGANIZADO EN FORMA SECUENCIAL-INDEXADA. SE UTILIZA LA FILOSOFIA DE LA PROGRAMACION ORIENTADA A OBJETOS AUTOR : JOSE LUIS HERNANDEZ HERNANDEZ ===============================================================*/ # include <conio.h> # include <ctype.h> # include <stdlib.h> # include <iostream.h> # include <fstream.h> # include <string.h> # include <stdio.h> # include "INDICE.HPP"
main() { int Clave; empleado EMP; Indices IND;
// Se incluye el archivo donde se // encuentra la clase (del registro // de datos).
// Clave para pedir por teclado. // Crea un objeto Tipo Registro Empleado // Crea un objeto Tipo Indice.
fstream Archivo_Datos; fstream Archivo_Indice; Archivo_Datos.open("c:\\nomina.dat", ios::in | ios::out | ios::binary); if (!Archivo_Datos) { cout << "No se abrio el archivo de lectura-escritura" << endl; cout << "<RETURN> para terminar ..." << endl; getchar(); exit(-1); } Archivo_Indice.open("a:\\nomina.idx", ios::in | ios::binary); if (!Archivo_Indice) { cout << "No se abrio el archivo de Indices " << endl; cout << "<RETURN> para terminar ..." << endl; getchar(); exit(-1); } Clave = EMP.Pedir_Clave();
// Pedir Clave del registro a modificar.
Archivo_Indice.read((char *) &IND, sizeof(IND)); while( !Archivo_Indice.eof() ) { if (Clave == IND.clave) Pรกgina :
69
ARCHIVOS SECUENCIAL-INDEXADO
{ Archivo_Datos.seekg(IND.ubicacion); Archivo_Datos.read((char *) &EMP, sizeof(EMP)); EMP.Desplegar_Registro(); EMP.PedirDatos(); Archivo_Datos.seekg(IND.ubicacion); Archivo_Datos.write((char *) &EMP, sizeof(EMP)); Archivo_Indice.close(); Archivo_Indice.close(); return 0; } Archivo_Indice.read((char *) &IND, sizeof(IND)); } gotoxy(40,22); cout << "NO SE ENCONTRO EL REGISTRO BUSCADO ......." << endl; Archivo_Indice.close(); Archivo_Indice.close(); return 0; } Programa No. 4.4 Modificaciones a un registro en el area de datos sin modificar el area de indice.
Pรกgina :
70
CAPITULO 5 Archivos Directos
ARCHIVOS DIRECTOS
Capitulo V.- Archivos Directos. Un archivo organizado en forma directa consiste en una colección de registros de longitud fija almacenados uno al lado del otro en un dispositivo de almacenamiento de acceso directo (direct - access storage device, DASD). El almacenamiento de este tipo de archivos se restringe a los DASD, tales como discos y tambores, por que el acceso a registros se hace generalmente en orden aleatorio. Cada registro en un archivo de organización en forma directa se puede referir por medio de un número -entero- de dirección, el cual indica su distancia o desplazamiento desde el origen del archivo. Al primer registro en un archivo relativo se le asigna el valor 1, 2 al siguiente y así sucesivamente. De este modo, la dirección relativa de un valor entero refleja su posición respecto al primer registro del archivo. El acceso aleatorio de un registro en un archivo de organización relativa se hace vía su número relativo de registro o bien su llave. Un archivo de organización directa puede crearse con un programa en un lenguaje de alto nivel si es que el método de acceso del sistema operativo central es capaz de manejar esta organización, y si el compilador del lenguaje de programación soporta dicho método de acceso. Para utilizar esta forma de organización, se debe crear el archivo apartando una cantidad específica de lugares para cada uno de los registros de datos, tal y como se muestra en la figura no. 5.1
Figura No. 5.1 Estructura de un archivo directo.
V.1 Estructura de un Archivo Directo. En un archivo directo existe una relación predecible entre la clave utilizada para identificar al registro en particular y la localización del registro dentro del archivo, siempre y cuando la el campo llave del mismo corresponda con la ubicación relativa del registro como se aprecia en la figura no. 5.1. Página :
72
ARCHIVOS DIRECTOS
Pero el mayor de los casos ocurre cuando el ordenamiento lógico de los registros no tiene ninguna relación con su secuencia física; para éste caso tiene que haber una transformación del campo llave para traducirlo a una ubicación dentro del registro tal como se muestra en la figura no. 5.2.
Figura no 5.2 Archivo directo donde debe transformarse la llave.
Cuando un archivo directo se establece debe definirse una relación que será utilizada para obtener una dirección física a través de un valor del campo llave. Esta relación es llamada función de mapeo (también conocida como transformación KTA -Key To Address-). Se utiliza la siguiente función de transformación :
Cuando se debe guardar un registro en un archivo directo, la función de mapeo R se utiliza para traducir el valor del campo llave del registro en una dirección que indica dónde deberá almacenarse el registro. Cuando se desea recuperar un registro, el valor del campo llave es entregado a la función R, la cual traduce el valor del campo en una dirección en la cual está el registro. En general, los archivos organizados en forma directa permiten acceder a registros en un número de accesos igual o cercano a uno. Los archivos directos deben de ser almacenados en medios de almacenamiento de acceso directo exclusivamente (como los diskettes, discos duros o cd’s). Existen varias técnicas de transformación de llaves (Hashing), cinco de las más utilizadas son las que se describen a continuación : 1.- Direccionamiento por Conversión a Octal.- Esta forma de direccionamiento es utilizada para llaves que son tipo alfabéticas y consiste en asignar a cada Página :
73
ARCHIVOS DIRECTOS
letra de la llave un valor numérico que corresponda con su orden alfabético. Así la A valdría 1n la B valdría 2, la C valdría, y así sucesivamente. Los valores de todas las letras que forman la llave se suman y el resultado se transforma en octal. El número obtenido es la dirección lógica buscada. Por ejemplo, si el campo llave contiene el nombre : LUIS. transformará de la forma siguiente :
Dicho dato se
El número 63 está dado en decimal, pero se convierte a octal dando : 77 que es el número de registro donde se almacenará el registro de dicha llave. Este método puede producir sinónimos, es decir que el valor octal sea el mismo. Así por ejemplo las claves : COSA, SACO, CASO y ASCO. Producen el mismo valor por lo que se debe considerar una área de desborde para éstos casos. 2.- Direccionamiento por Restas Sucesivas.- Esta forma de direccionamiento se aplica en campos llave que son del tipo numérico y es utilizada en archivos que pueden tener muchos huecos de valores conocidos previamente. Por ejemplo, si los campos llave se encuentran comprendidos entre los siguientes valores : Rangos de valores
Huecos de numeración
01500 a 03100 03700 a 03900 10001 a 12000
00001 a 01499 inclusive 03101 a 03699 inclusive 03901 a 10000 inclusive
Este método consiste en restar al campo llave el valor absoluto de estos límites de la forma siguiente : 1500 <= Llave <= 3100 Restar 1499 3700 <= Llave <= 3900 Restar (1499 + 599) 10001 <= Llave <= 12000 Restar (1499 + 599 + 6100). Este método de direccionamiento no produce sinónimos y es muy bueno. 3.- Direccionamiento Por División.- Esta forma de direccionamiento consiste en dividir el valor del campo llave entre el número de direcciones asignadas al
Página :
74
ARCHIVOS DIRECTOS
archivo más uno y tomar el resto de la división entera como dirección lógica del registro. Por ejemplo, el campo llave con el valor 97234 para un archivo de 1,200 posiciones físicas se transformará en la dirección lógica siguiente : 97234 / 1201 = 80.96,
De la cual se toma el valor entero y por lo tanto 80 corresponde a la dirección lógica calculada.
Esta forma de calcular direccionamiento, por lo que también deberá considerarse un área de desborde. 4.- Direccionamiento por el Centro del Cuadrado.- Consiste en eliminar del número obtenido, al elevar la clave al cuadrado, las cifras extremas (a izquierda y derecha del número) y considerar las cifras restantes como un valor decimal comprendido entre cero y uno, valor que se multiplica por el número de direcciones disponibles en el archivo para obtener la dirección lógica del registro. Por ejemplo, para obtener la dirección lógica correspondiente a la clave 75460 en un archivo de 2000 direcciones, se hace lo siguiente : 75460 * 75460 = 569 4211 600
0.4211
Dirección Lógica = Valor entero de (0.4211 * 2000)
=
842.
5.- Direccionamiento por desplazamiento.- En éste método, los dígitos exteriores en ambos extremos se corren hacia adentro, de modo que queden trasladados en la medida de la longitud de la dirección. Se suman a continuación los dígitos trasladados, y el resultado se multiplica por el factor de ajuste, que estará en función del número de direcciones disponibles en el archivo. Por ejemplo :
La llave que tiene el valor :
17207359
Se toman los primeros cuatro dígitos para formar un valor y los últimos cuatro dígitos para formar el otro valor; ambos se suman y se obtiene la dirección lógica donde se almacenará el registro. 1720 + 7359 ------------9 0 7 9 Que es la dirección lógica del registro.
Página :
75
ARCHIVOS DIRECTOS
Ventajas y desventajas de usar archivos directos. •
La ventaja principal de un archivo directo es la habilidad de accesar registros individuales directamente.
•
Su desventaja radica (dependiendo de la función de mapeo) en que se puede presentar una misma dirección para diferentes valores de llave, es decir, se presentan colisiones.
•
Otra desventaja es el desperdicio de espacio debido a la distribución al azar de los registros.
Siguiendo con ejemplos en la programación Orientada a Objetos, se creó una clase en el lenguaje C++ para crear objetos tipo empleado para que en base a dicha clase se pueda crear un archivo organizado en forma directa. La clase creada se muestra en el programa no. 5.1.
/* ============================================================ CLASE EMPLEADO, QUE SERA UTILIZADA PARA LA CREACION DE REGISTROS PARA SER UTILIZADOS EN UN ARCHIVO ORGANIZADO EN FORMA DIRECTA. AUTOR : JOSE LUIS HERNANDEZ HERNANDEZ ==============================================================*/ class empleado{ private : int clave; char nom[30]; float sdia; int dias; public : empleado(); Pedir_Datos(); int Pedir_Clave(); Modifica(); Consultas(); Datos_Constantes(); ~empleado() { }; }; empleado::empleado() { dias = clave = 0; strcpy(nom," sdia = 0.0; }
// DATOS MIEMBRO
// FUNCIONES MIEMBRO
\0");
Página :
76
ARCHIVOS DIRECTOS
int empleado::Pedir_Clave() { int Cve; clrscr(); gotoxy(20,10); cout<<"Clave del empleado cin >> Cve; fflush(stdin); return Cve;
: ";
} empleado::Pedir_Datos() { clrscr(); gotoxy(10,5); cout<<"ALTAS DE UN REGISTRO A UN ARCHIVO DIRECTO."; Datos_Constantes(); gotoxy(46,10); cout << clave; fflush(stdin); gotoxy(46,12); gets(nom); fflush(stdin); gotoxy(46,14); cin>>sdia; fflush(stdin); gotoxy(46,16); cin>>dias; fflush(stdin); return 0; } empleado::Modifica() { clrscr(); char nomm[30], diass[3],sdiaa[10]; gotoxy(10,5); cout<<"MODIFICACION A UN REGISTRO DE UN ARCHIVO DIRECTO."; Datos_Constantes(); gotoxy(46,10); cout<< clave; gotoxy(46,12); cout<< nom; gotoxy(46,14); cout<< sdia; gotoxy(46,16); cout<< dias; gotoxy(48,12); gets(nomm); fflush(stdin); gotoxy(48,14); gets(sdiaa); fflush(stdin); gotoxy(48,16); gets(diass); fflush(stdin); if (diass[0] != '\x0') dias = atoi(diass); if (sdiaa[0] != '\x0') sdia = atof(sdiaa); if (nomm[0] != '\x0') { strcpy(nom," "); strcpy(nom,nomm); } return 0; }
Pรกgina :
77
ARCHIVOS DIRECTOS
empleado::Consultas() { gotoxy(10,5); cout<<"CONSULTAS DE UN REGISTRO EN UN ARCHIVO DIRECTO."; Datos_Constantes(); gotoxy(46,10); cout<< clave; gotoxy(46,12); cout<< nom; gotoxy(46,14); cout<< sdia; gotoxy(46,16); cout<< dias; gotoxy(50,22); cout<<"<Return> para continuar"; getchar(); return 0; } empleado::Datos_Constantes() { gotoxy(20,10); cout<<"Clave del empleado : "; gotoxy(20,12); cout<<"Nombre del empleado : "; gotoxy(20,14); cout<<"Sueldo diario : "; gotoxy(20,16); cout<<"No. de Dias trabajados : "; return 0; } Programa no. 5.1 Codificación de la clase empleado para usarla en Archivos Directos.
V.2 Operaciones a efectuar. La forma como se va a usar un archivo es un factor importante para determinar cómo se debe organizar. Dos aspectos importantes sobre el uso de archivos son su modo de utilización y la naturaleza de las operaciones sobre el archivo. Los archivos organizados en forma directa son los ideales para utilizarlos en sistemas de información que tienen accesos interactivos o en tiempo real. Lo anterior es debido a que no importa la cantidad de registros que tenga el archivo de datos. Las altas, bajas, modificaciones o consultas serán rapidísimas porque el acceso lo hace en forma directa sin pasar por ningún registro previo. Para el uso de un archivo en procesos tipo batch, el acceso es semejante a un archivo organizado en forma secuencial, con la diferencia que tiene que ir verificando que el registro leído tenga datos para que sea procesado; en caso contrario, debe ser brincado si proceso alguno.
Página :
78
ARCHIVOS DIRECTOS
Las operaciones básicas que se pueden ejecutar sobre un archivo organizado en forma directa son las que se describen a continuación :
ACTUALIZACION. La actualización consiste en cambiar el contenido de un archivo de datos, esto con el fin de reflejar todos los cambios que se dan en cierto momento en el mundo real. Dichos cambios pueden incluir las siguientes acciones :
1.- Creación.- La creación inicial de un archivo organizado en forma directa consiste en crear un esqueleto con una cierta cantidad de registros, donde cada registro se encuentra vacío, pero que se encuentra disponible para almacenar en forma directa cualquier registro al que se haga referencia. Un ejemplo de la creación de un archivo organizado en forma directa, se puede observar en el programa no. 5.2 en el cual se crea la estructura vacia de un archivo que contendrá una cierta cantidad de registros de acuerdo a las necesidades del usuario.
2.- Altas.- Para insertar elementos en archivos directos se utilizan técnicas como son las técnicas de cálculo de direcciones, en éstas técnicas tienen lugar las llamadas "coalisiones" que no son mas que la repetición de una localidad al momento de almacenar un dato. Las colisiones no pueden ser eliminadas, lo mas que se puede hacer es tratar de minimizarlas y para ello existen distintos métodos que se describieron anteriormente. Si la llave de trabajo de los registros son números consecutivos, se puede hacer un simple enlace directo entre claves y direcciones. Sencillamente se asocia una llave primaria más pequeña con la dirección relativa 1, la siguiente clave primaria más pequeña con la dirección relativa 2, y así sucesivamente. Por cuestiones de didáctica se implementará esta forma para el ejemplo de altas a un archivo directo. Un ejemplo de altas a un archivo organizado en forma directa, se puede observar en el programa no. 5.3, el cual en base a la clave del empleado busca la ubicación en todo el archivo, a partir de donde se graba el registro.
3.- Eliminación.- La eliminación de un registro consiste en buscar en ubicar en el archivo directo el registro que se va a eliminar y una vez localizado los campos tipo cadena se llenan completamente con espacios y a los campos tipo numérico se les borra el valor que contengan.
Página :
79
ARCHIVOS DIRECTOS
Un ejemplo de eliminación de un registro a un archivo organizado en forma directa, se puede observar en el programa no. 5.4, el cual en base a la clave del empleado busca la ubicación en todo el archivo, a partir de donde se graba el registro completamente en blanco.
4.- La modificación significa que se van a cambiar los contenidos de algunos campos de cierto registro de datos, para esto se hacen los siguientes pasos : •
Usando el campo llave que es introducido por el usuario (registro a modificar), se calcula su ubicación dentro de archivo directo.
•
Comprobar si el registro está ocupado (o tiene datos) y además saber si realmente es el deseado.
•
Proporcionar las nuevas modificaciones utilizando una variables temporales.
•
Reemplazar la variable temporal a registro a modificar. Y grabar nuevamente el registro en la misma ubicación original. Un ejemplo de modificación de algunos campos de un registro a un archivo organizado en forma directa, se puede observar en el programa no. 5.5, el cual en base a la clave del empleado busca la ubicación en todo el archivo, se cambian los campos requeridos y se graba el registro en su mismo lugar original.
RECUPERACIÓN. El acceso a un archivo con el propósito de extraer información significativa es llamado recuperación de la información. Existen básicamente dos clases de recuperación de información : consulta y generación de reportes. Una consulta es la operación más rápida en un archivo directo, debido a que el usuario teclea el campo llave y con la conversión respectiva se ubica el puntero de lectura exactamente en el registro que se desea consultar. El tiempo de respuesta es exactamente el mismo, ya sea para el registro No. 1 o bien para el registro 20,000 o 1,000,000. Otra forma de recuperación de los datos es mediante un reporte, el cual es manejado exactamente como si fuera un archivo secuencial, con la diferencia que lee registro por registro. Si el registro contiene información lo procesa y lo envía al reporte; en caso contrario simplemente lo brinca y lee el siguiente hasta alcanzar el fin del archivo.
Página :
80
ARCHIVOS DIRECTOS
IV.3 Mantenimiento. El mantenimiento de un archivo organizado en forma directa consiste en readaptarlo a todos los cambios continuos del mundo real que es muy dinámico. Existen dos clases de operaciones de operaciones básicas, las cuales son : 1.- Reestructuración de un archivo implica que es necesario aplicar cambios estructurales dentro del contexto de la misma organización de archivos. Por ejemplo, cambiar la longitud de los campos, agregar nuevos campos a los registros, eliminar algunos campos que ya no se utilicen, asignar más espacio para el archivo, etc. 2.- Reorganización, la cual consiste básicamente en el cambio de mecanismo de acceso. Dicha reorganización se describe en los siguientes puntos : •
Reorganización por Cambio del Campo Llave.- En este caso, lo único que se va a cambiar es la manera de como se calculaban las direcciones para los nuevos elementos a introducir. Esto es cuando el cambio únicamente se refleja en la nueva dirección que ocupa únicamente.
•
Reorganización por Cambio del Campo llave y Aumento en el Tamaño. A hora el cambio tambíen se vera reflejado por el aumento de tamaño por nuevos elementos.
V.4 Ejemplo de aplicación. Se desea realizar un programa que permita crear y manipular un archivo organizado en forma directa y que permita las operaciones de : Altas, Bajas, y Modificaciones. Se definió un registro de datos que contiene 4 campos que son : Clave del empleado, su nombre, sueldo diario y días trabajados. La anterior estructura es con fines didácticos y es la que está establecida desde la figura No. 3.1 de éste documento. Debido a que un programa para aplicar todas las operaciones a un archivo directo se hacía muy extenso para poder explicarlo, se utilizó el código de la clase establecida en el programa no. 5.1 de éste capitulo y se decidió hacer un programa para cada operación.
Página :
81
ARCHIVOS DIRECTOS
OPERACIÓN DE LA CREACION DE UN ARCHIVO DIRECTO. //============================================================ // PROGRAMA DE EJEMPLO PARA CREAR EL ESQUELETO DE UN // ARCHIVO DIRECTO. //
// Autor : José Luis Hernández Hernández. //============================================================ #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream.h> #include <fstream.h> #include <dos.h> #include "emplea.hpp" ofstream ofDirecto; empleado EMP;
// Objeto tipo archivo de Directo. // Objeto tipo registro de empleados.
Abrir_Archivo(); Grabar_Registro(); Cierra_Archivo();
// Definición de prototipos de funciones utilizadas.
main() { Abrir_Archivo(); Grabar_Registro(); Cierra_Archivo(); return 0;
// Abre Archivo Secuencial y de Indices. // Graba Registros en blanco. // Cierra el Archivo.
} Abrir_Archivo() { ofDirecto.open("c:\\directo.dat",ios::out | ios::binary); if (!ofDirecto) { clrscr(); cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl; cout << "Pulsar <Return> para Salir"<<endl; getchar(); exit (-1); } return 0; }
Página :
82
ARCHIVOS DIRECTOS
Grabar_Registro() { int i, Reg; clrscr(); gotoxy(10,8); cout << "CREACION DE UN ARCHIVO DIRECTO"; gotoxy(10,12); cout << "CANTIDAD DE REGISTROS QUE TENDRA EL ARCHIVO DIRECTO : "; cin >> Reg; for(i=0; i<= Reg ; i++) { ofDirecto.write((char *) &EMP, sizeof(EMP)); gotoxy(20,18); cout << "Registro Creado : " << i; delay(100); } return 0; } Cierra_Archivo() { ofDirecto.close(); gotoxy(30,22); cout << "ARCHIVO DIRECTO CREADO EXITOSAMENTE."; return 0; } Programa No. 5.2 que ejemplifica la creación de un archivo directo.
OPERACIÓN DE ALTAS A UN ARCHIVO DIRECTO. //============================================================ // PROGRAMA DE EJEMPLO PARA DAR ALTAS DE REGISTROS // A UN ARCHIVO DIRECTO. // Autor : José Luis Hernández Hernández. //============================================================ #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream.h> #include <fstream.h> #include <dos.h> #include "emplea.hpp" fstream ofDirecto; empleado EMP;
// Objeto tipo archivo de Directo. // Objeto tipo registro de empleados.
Página :
83
ARCHIVOS DIRECTOS
Abrir_Archivo(); Alta_Registro(); Cierra_Archivo();
// Definiciรณn de prototipos // de funciones utilizadas.
main() { Abrir_Archivo(); Alta_Registro(); Cierra_Archivo(); return 0;
// Abre Archivo Directo. // Da de alta un registro en forma Directa. // Cierra el Archivo.
} Abrir_Archivo() { ofDirecto.open("c:\\directo.dat",ios::in | ios::out |ios::ate | ios::binary); if (!ofDirecto) { clrscr(); cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl; cout << "Pulsar <Return> para Salir"<<endl; getchar(); exit (-1); } return 0; } Alta_Registro() { int Cve, ubicacion; Cve = EMP.Pedir_Clave(); EMP.clave = Cve; int Ubi = Cve * sizeof(EMP); ubicacion = Ubi - sizeof(EMP); EMP.Pedir_Datos(); ofDirecto.seekp(ubicacion, ios::beg); ofDirecto.write((char *) &EMP, sizeof(EMP)); return 0; }
// Hace el cรกlculo para encontrar // la ubicaciรณn lรณgica en el archivo.
Cierra_Archivo() { ofDirecto.close(); gotoxy(30,22); cout << "REGISTRO GRABADO EXITOSAMENTE."; return 0; } Programa No. 5.3 Ejemplo de alta de un registro a un archivo Directo.
Pรกgina :
84
ARCHIVOS DIRECTOS
OPERACIÓN DE BAJAS A UN ARCHIVO DIRECTO. //============================================================ // PROGRAMA DE EJEMPLO PARA DAR BAJAS DE REGISTROS // A UN ARCHIVO DIRECTO. // Autor : José Luis Hernández Hernández. //============================================================ #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream.h> #include <fstream.h> #include <dos.h> #include "emplea.hpp" fstream ofDirecto; empleado EMP;
// Objeto tipo archivo de Directo. // Objeto tipo registro de empleados.
Abrir_Archivo(); Eliminar_Registro(); Cierra_Archivo();
// Definición de prototipos // de funciones utilizadas.
main() { Abrir_Archivo(); Eliminar_Registro(); Cierra_Archivo(); return 0;
// Abre Archivo Directo. // Eliminar un registro en forma Directa. // Cierra el Archivo.
} Abrir_Archivo() { ofDirecto.open("c:\\directo.dat",ios::in | ios::out |ios::ate | ios::binary); if (!ofDirecto) { clrscr(); cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl; cout << "Pulsar <Return> para Salir"<<endl; getchar(); exit (-1); } return 0; }
Página :
85
ARCHIVOS DIRECTOS
Eliminar_Registro() { int Cve, ubicacion; Cve = EMP.Pedir_Clave(); int Ubi = Cve * sizeof(EMP); ubicacion = Ubi - sizeof(EMP); EMP.clave = 0; strcpy(EMP.nom," EMP.dias = 0; EMP.sdia = 0.0;
// Se borran los datos. \0");
ofDirecto.seekp(ubicacion, ios::beg); ofDirecto.write((char *) &EMP, sizeof(EMP)); return 0; } Cierra_Archivo() { ofDirecto.close(); gotoxy(30,22); cout << "REGISTRO ELIMINADO EXITOSAMENTE."; return 0; } Programa No. 5.4 Ejemplo de eliminación de un registro a un archivo Directo.
OPERACIÓN DE MODIFICACION A UN ARCHIVO DIRECTO. //================================================================= // PROGRAMA DE EJEMPLO PARA HACER MODIFICACIONES A REGISTROS // A UN ARCHIVO DIRECTO. // Autor : José Luis Hernández Hernández. //================================================================= #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream.h> #include <fstream.h> #include <dos.h> #include "emplea.hpp" fstream ofDirecto; empleado EMP;
// Objeto tipo archivo de Directo. // Objeto tipo registro de empleados.
Abrir_Archivo();
// Definición de prototipos
Página :
86
ARCHIVOS DIRECTOS
Modificar_Registro(); Cierra_Archivo();
// de funciones utilizadas.
main() { Abrir_Archivo(); Modificar_Registro(); Cierra_Archivo(); return 0;
// Abre Archivo Directo. // Modificar un registro en forma Directa. // Cierra el Archivo.
} Abrir_Archivo() { ofDirecto.open("c:\\directo.dat",ios::in | ios::out |ios::ate | ios::binary); if (!ofDirecto) { clrscr(); cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl; cout << "Pulsar <Return> para Salir"<<endl; getchar(); exit (-1); } return 0; } Modificar_Registro() { int Cve, ubicacion; Cve = EMP.Pedir_Clave(); int Ubi = Cve * sizeof(EMP); ubicacion = Ubi - sizeof(EMP); ofDirecto.seekp(ubicacion, ios::beg); ofDirecto.read((char *) &EMP, sizeof(EMP)); EMP.Modifica(); ofDirecto.seekp(ubicacion, ios::beg); ofDirecto.write((char *) &EMP, sizeof(EMP)); return 0; }
// Coloca el puntero en la ubicaciรณn lรณgica // Lee el registro. // Cambia los campos. // Regresa el Puntero. // Reescribe en registro.
Cierra_Archivo() { ofDirecto.close(); gotoxy(30,22); cout << "REGISTRO MODIFICADO EXITOSAMENTE."; return 0; } Programa No. 5.5 Ejemplo de modificaciรณn de un registro en un archivo Directo.
Pรกgina :
87
CAPITULO 6 Correspondencia entre la llave y la dirección física
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Capitulo VI. Correspondencia entre la llave y la dirección física. Los registros donde se almacenan los datos de un sistema de información, normalmente contienen un campo especial que se le denomina campo llave y que es un dato que “identifica” a cada uno de los registros que se encuentran en un archivo. Normalmente la llave es una clave única, aunque no necesariamente única que se utiliza para hacer la búsqueda de algún registro en especial y poder accesar a todos los datos que lo componen. En las organizaciones de archivos secuencial-indexado y directos, se requiere establecer la correspondencia entre el campo llave y la dirección física en donde se encuentra un archivo de datos específico. Conociendo la relación que existe entre la llave y la dirección física se pueden establecer algunas técnicas de búsqueda de datos adecuadas, para minimizar el tiempo de búsqueda y optimizar los resultados en tiempo real. Para poder conocer la ubicación física de un registro específico, es necesario tener dos archivos encadenados : • •
El archivo con todos los datos. Un archivo de llaves con las referencias adecuadas para conocer la ubicación de todos y cada uno de los registros de datos.
Teniendo lo anterior, se implementa un direccionamiento el cual puede ser directo o indirecto.
VI.1 Direccionamiento Directo e Indirecto. El direccionamiento de dos registros puede darse en forma directa e indirecta. Se dice que es directa cuando es posible determinar la dirección mediante una relación natural con la llave. Es indirecta cuando la llave debe ser alterada o se le deben de aplicar operaciones para determinar la dirección del registro.
DIRECCIONAMIENTO DIRECTO. El archivo organizado en forma directa intenta explorar la capacidad, proporcionada por las unidades de disco y dispositivos similares, de lograr acceso a Página :
89
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
cualquier bloque de dirección conocida. Para lograr el direccionamiento directo se utiliza la llave del registro para localizarlo en el archivo. En la figura No. 6.1 se muestra una forma muy simple de realizar un direccionamiento.
Figura No. 6.1 Direccionamiento Directo.
Los más antiguos archivos almacenados en disco y con una organización de acceso directo fueron utilizados por las maquinas electrónicas de contabilidad que utilizaban un número perforado en una tarjeta, para determinar en dónde debería archivarse el resto del contenido de la tarjeta. Los métodos modernos de acceso directo transforman la llave mediante un algoritmo de computación antes de utilizarla como dirección. El método de acceso directo es rápido, ya que se evitan las operaciones intermedias de archivo, pero obliga a que los datos se localicen dé acuerdo con un solo atributo llave. Puede compararse el acceso directo con un archivo secuencial indexado en el que el acceso se proporciona de acuerdo con un solo atributo; sin embargo, los registros dentro de los archivos directos no están eslabonados con sus registros predecesores o sucesores. Los métodos de archivo directo utilizan un calculo para proporcionar la dirección de registro para una llave, mientras que las organizaciones de archivo indexado buscan en índices para determinar cual es el registro correspondiente a una llave. Los árboles B utilizan un espacio extra para reducir el esfuerzo de inversión. El archivo directo utilizará espacio extra en el archivo principal (m>n), conservando algunos espacios de registros vacíos, para reducir la probabilidad y el costo de conflictos al insertar mas registros al archivo.
Página :
90
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
DIRECCIONAMIENTO INDIRECTO. El direccionamiento indirecto es muy utilizado al organizar un archivo en forma secuencial-indexado, debido a que se requiere crear un archivo de índices o de direcciones que normalmente contiene únicamente dos datos : Llave del registro y dirección de la ubicación del registro en el área de datos. Al momento de diseñar la estructura de un archivo secuencial-indexado, deben considerarse los siguientes puntos : •
Formato de los campos del registro.
•
Definir el campo llave para identificar un registro.
•
Definir varios campos llave cuando un registro tiene varias ocurrencias con el primer campo llave.
•
Frecuencia esperada de inserción de nuevos registros.
•
Método utilizado en la aplicación, para implantar la construcción de los índices.
•
Definir el tamaño del registro para hacer los cálculos de la ubicación física de cada registro.
Los campos adecuados para formar la llave para un archivo secuencial indexado son determinados por la aplicación. La restricción significativa de la organización secuencial indexada es, que cualquier campo que constituya la llave para el acceso secuencial del archivo, también deberá ser la llave para el acceso indexado al archivo. Si no es el caso, y diferentes llaves parecen adecuadas para los accesos secuenciales e indexado, entonces otro tipo de organización de archivo resultaría mas adecuada que la organización secuencial indexada. La estructura del área donde se almacenarán los índices, queda de la forma que se muestra en la figura No. 6.2
Figura No. 6.2 Estructura de los índices
Página :
91
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
La cantidad esperada de registros que se van a insertar al archivo determina cuanto espacio libre debe asignarse en el archivo, cuando es cargado inicialmente y cuanto espacio queda disponible para insertar registros como se vaya requiriendo. Una buena sugerencia es considerar aproximadamente el 40% de espacio extra de la carga inicial. Dependiendo del método utilizado para implantar al archivo secuencialindexado, pueden tomarse algunas otras alternativas para el manejo y manipulación de los índices. Los manuales de manejo de datos locales, a menudo proporcionan una guía dependiente de la implantación para la determinación de parámetros tales como los que se enumeran a continuación : Método de árbol – B+ • • • •
Tamaño del bloque de datos. Tamaño del bloque de índice. Numero de niveles de índice inicialmente. Numero máximo de niveles de índice.
Método del esquema Físico de Índice. • • • • •
Tamaño del área de índice. Niveles de índice. Tamaño del área primaria. Tamaño del área de sobrecarga. Bloqueo de registros en el área primaria.
Estos parámetros descritos anteriormente, están determinados por : el tamaño de bloque natural del sistema, el numero actual de registros, el número esperado de registros de datos, y el uso del archivo. La necesidad de una rápida recuperación directa implica el uso un de índice espeso, además que la rápida recuperación secuencial implica bloques de datos más grandes o áreas primarias de datos y un factor de bloqueo más grande. Entre mayor sea la frecuencia de partición, los bloques de datos o de índices proporciona un mejor desempeño; tanto en la recuperación directa y secuencial como en la actualización.
VI.2 Clasificación de los tipos de correspondencia. Se trató anteriormente de los direccionamientos directos e indirectos que son utilizados en los archivos organizados en forma directa y en forma secuencialindexada para establecer un mecanismo de enlace con una llave específica y la ubicación física donde se encuentra un registro de datos.
Página :
92
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
El manejo de los direccionamientos directos e indirectos, están íntimamente relacionados con la búsqueda óptima de cierto registro. En el uso de los archivos organizados en forma directa se requieren de técnicas de calculo de direcciones. Éstas técnicas consisten en transformar una llave en una dirección por medio de alguna operación, esta operación depende del tipo de técnica usada. Las técnicas mas comunes de calculo de direcciones son : Direccionamiento directo (absoluto o relativo), direccionamiento por asociación, direccionamiento por circulo (técnicas aleatorias típicas, truncamiento, selección, análisis de frecuencias, división por número primo, cambio de base, multiplicación y cuadrado) y soluciones con claves no numéricas
VI.2.1 Directa. La técnica directa es la mas sencilla para traducir una llave de un registro de datos a una dirección de almacenamiento y consiste básicamente en utilizar el campo llave casi en forma directa. La llave es tomada y puede manejarse de dos posibles formas : a) Direccionamiento Absoluto.- Esta forma de direccionamiento consiste en tomar el valor de la llave suministrada por el usuario y que dicha llave sea la dirección real de registro. Cuando el registro es almacenado en al archivo, la localidad del registro (que es la llave) puede ser : •
El número de cilindro, número de superficie y número de registro (Si se utiliza el direccionamiento por cilindro).
Con éste método del cilindro, la dirección de su número de cilindro, número de superficies y número de registros, todas las pistas de un diámetro dado en el paquete de discos forman un cilindro tal como se aprecia en la figura No. 6.3. •
El número de sector y número de registro.
Con éste otro método, cada pista del paquete está dividida en sectores, como se ilustra en la figura No. 6.4. Cada sector es un área de almacenamiento para un número fijo de registros. Una dirección del registro es simplemente su número de sector. Dado un número de sector, el controlador del disco puede determinar
Página :
93
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
que pista deberá accesar y donde reside en registro direccionado sobre la pista.
Figura No. 6.3 Estructura de un cilindro.
Cuando el registro es recuperado posteriormente, se localiza en forma absoluta, ya que el usuario conoce exactamente donde se encuentra por lo que el acceso es directo.
Figura No. 6.4 Ejemplo de direccionamiento por sector.
Esta forma de direccionamiento directo absoluto tiene dos grandes ventajas : •
La función de mapeo R es muy sencilla.
•
Dado un valor de llave de un registro, no se requiere tiempo de procesamiento del CPU para determinar la localidad del registro en el almacenamiento secundario.
Página :
94
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Las desventajas de ésta forma de direccionamiento son mucho mayores que las ventajas y se enuncian a continuación : •
Las consideraciones lógicas y físicas no son independientes del direccionamiento absoluto; el usuario debe conocer exactamente cómo están almacenados físicamente los registros.
•
Los usuarios normalmente no suministran los tipos apropiados de valores de llave, por ejemplo en un banco no se producen direcciones físicas de almacenamiento con los números de cliente; ya que en el banco se necesitan rangos consecutivos y es muy difícil hacerlos adaptar la administración del banco con la forma de almacenamiento en un archivo de datos.
•
Las direcciones absolutas dependen de los dispositivos. Si fuera conveniente actualizar o cambiar el dispositivo en el que se almacenó un archivo de datos, los valores de las llaves también tienen que cambiar.
•
Las direcciones absolutas dependen del espacio direccionable. Si fuera conveniente reorganizar el archivo directo, pero conservarlo en el mismo dispositivo, los valores de las llaves deberían cambiarse. Esta reorganización puede ser necesaria debido al propósito de ampliar el espacio de dirección, compactar el espacio libre, recuperar el espacio desperdiciado, o reducir el espacio de direcciones.
b) Direccionamiento Relativo.- Este tipo de direccionamiento consiste en tomar el valor de la llave, el cual es el número ordinal del registro dentro del archivo de datos. Un archivo con espacio para contener N registros con direcciones que están dentro del conjunto {1,2,3,4,5,6,....., n-1,n}, o bien el conjunto {0,1,2,3,4,5,......, n-2,n-1}. El i-ésimo tiene la dirección relativa, la cual se calcula de la forma siguiente : Dirección = (N * CB) – CB.
Donde :
Dirección = Ubicación física del registro N = Número ordinario del registro CB = Cantidad en bytes de registro
Página :
95
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Las ventajas del esquema de direccionamiento directo relativo son las que se describen a continuación : •
La función de direccionamiento R es muy sencilla.
•
Dado el valor de una llave de registro, esencialmente no se requiere tiempo de proceso para determinar la localidad del registro en el almacenamiento secundario.
Las direcciones relativas directas, no dependen tanto del dispositivo como las direcciones absolutas, lo cual elimina una de las desventajas mencionadas para el direccionamiento absoluto. Sin embargo, como en el caso de las direcciones absolutas, las direcciones relativas dependen del espacio para las direcciones. Algunos tipos de valores naturales no son apropiados para usarse como direcciones relativas. Por ejemplo, aunque pudiesen convertirse a un equivalente numérico, los valores del número de control de los alumnos del Instituto Tecnológico de Chilpancingo no son buenos para usarse como dirección relativa. La razón es muy sencilla, el número de control están definido considerando tres datos diferentes y conjugados nos proporcionan el número de control de cada alumno que ingresa a la institución como puede apreciarse en la figura No. 6.5.
Figura No. 6.5 Formación del Número de control de un alumno del Tecnológico.
Si se crea un archivo utilizando el direccionamiento relativo, sería necesario que el archivo tuviera 99,999,999 de registros y con los alumnos registrados en 20 años que tiene de vida el Instituto tecnológico de Chilpancingo, a lo mucho tendremos unos 9,000 alumnos registrados lo que equivale aproximadamente al 9 % del archivo, teniendo un desperdicio de espacio del 91 %. Recordemos que el tamaño del archivo (es decir, el tamaño del espacio de direcciones del archivo) está determinado por el rango de valores posibles para las direcciones relativas, el cual, con un direccionamiento relativo es equivalente al rango de posibles
Página :
96
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
valores para la llave, y no por el número real de valores de llave utilizados. Un enfoque para este problema de espacio de llaves es identificar o inventar una llave cuyo rango de valores esté altamente poblado. Por ejemplo, en un archivo directo de datos de un inventario de partes, un número de parte de 4 dígitos puede ser una buena dirección relativa, si el inventario contiene por ejemplo 8,489 tipos de partes distintas. Pero las solicitudes para accesar los datos de alguna parte o artículo en particular tendrán que enunciarse en términos del número de parte de 4 dígitos, y no en términos de su nombre, o de su tipo, o por algún otro valor del campo.
VI.2.2 Asociación. La correspondencia entre la llave y la dirección física donde se encuentra un registro específico, puede ser por asociación la cual es muy utilizada en archivos del tipo secuencial indexados y consiste en utilizar una área de datos y una área de índice para asociar o ligar el registro de datos y su índice que tiene la ubicación exacta. El área de datos y el área de índice se muestra asociadas por la llave del registro en la figura No. 6.6 que se encuentra a continuación.
Figura No. 6.6 Área de datos y área de índice de un archivo secuencial-indexado.
Como se muestra en la figura No. 6.6, en el área de datos se encuentran todos los registros grabados en el mismo orden en que fueron introducidos por el capturista, que como puede apreciarse no están ordenados de ninguna forma.
Página :
97
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
En al área de índice de la misma figura No. 6.6, se encuentran únicamente dos campos: El primero que es la llave que identifica a cada uno de los registro del área de datos y el segundo campo es la ubicación física o apuntador donde inicia el registro en el área de datos. Entre el área de índice y el área de datos se realiza una asociación, debido a que la llave en ambos archivos es la misma y están encadenados por la ubicación o apuntador de cada uno de los registros. Cabe hacer mención que el área de índice normalmente se encuentra en forma ordenada, con el fin de implementar la búsqueda binaria y sea más rápido encontrar un registro en especial. Cuando un usuario desea hacer una búsqueda, normalmente teclea la clave que identifica al registro que desea accesar. En ese momento se hace una búsqueda binaria en el área de índice; al encontrar la clave del registro que se desea accesar, se toma únicamente la ubicación o apuntador donde se encuentra el registro en cuestión y dicho dato se envía como parámetro para que una función del lenguaje en uso posicione el puntero de lectura-escritura al inicio del registro. En ese momento todos los datos del registro encontrado pueden manipularse de la forma que se crea conveniente (Desplegarse en el monitor, imprimirse en papel e incluso modificar el contenido de algún campo del registro; desde luego considerando que la llave no puede alterarse). Esta forma de correspondencia entre la llave y la dirección física es lo que permite accesar los registros, incluso por dos o más llaves; para lo que es necesario crear dos áreas de índice tal como se puede apreciar en la figura No. 6.7.
Figura 6.7 Asociación cuando existen 2 áreas de índices y una área de datos.
Página :
98
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
De acuerdo a la figura No. 6.7, el área de datos está asociado con una área de índice por la clave de la persona y con otra área de índice por el nombre de la persona. Con cualquiera de los dos datos (clave y nombre) es posible accesar al registro respectivo que se encuentra en el área de datos.
VI.2.3 Por Circulo. Un método ampliamente utilizado para generar direcciones físicas de los registros es aquel llamado por circulo y que consiste en una descomposición de la llave la cual se aplica a todos los registros realizando una serie de operaciones que darán como resultado un numero relativamente grande (en proporción al tamaño total del archivo) y del cual será generado un numero en un intervalo determinado, el cual se utilizara como dirección en el esqueleto. Este método es mejor conocido como Hashing y en el presente documento se tratarán las siguientes técnicas para obtener la dirección física donde se almacena cada uno de los registros : Técnicas aleatorias típicas, truncamiento, selección, análisis de frecuencias, división por número primo, cambio de base, multiplicación y cuadrado. La creación del esqueleto para almacenar los registros de un archivo organizado en forma relativa o directa, debe considerar un porcentaje de registros para las colisiones, es decir para ubicaciones de registro que se obtengan exactamente igual para varios registros de datos. La forma del esqueleto que se crea puede apreciarse en la figura No. 6.8 y que considera un área del 10% para posibles colisiones.
Figura No. 6.8 Esqueleto de un archivo relativo que considera una área para colisiones.
Página :
99
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
TECNICAS ALEATORIAS TIPICAS. La técnica aleatoria típica consiste en utilizar una función o instrucción del lenguaje de programación que se esté utilizando que sea capáz de generar en forma aleatoria una secuencia de números a partir de una clave. La secuencia de números obtenidos generalmente obtendrá varios repetidos, lo que significa que existirán varias colisiones que deberán ser tratadas adecuadamente para que el acceso a los registros sea lo más óptimo posible. En algunas ocasiones puede crearse una rutina personal para crear los número aleatorios; aunque el resultado serán números pseudoaleatorios. Es muy común que como existen muchos valores repetidos, se aplique a dichos números alguna otra técnica de conversión con el fin de minimizar la cantidad de colisiones.
TRUNCAMIENTO. La técnica de truncamiento consiste en particionar en varias partes la llave del registro, cada una de las cuales (Excepto la última) tiene el mismo número de dígitos que tiene la dirección relativa objetiva. Las particiones obtenidas de la llave son colocadas una debajo de la otra y son sumadas. Una vez que se obtuvo un resultado, se toma la cantidad de dígitos que tendrá la dirección relativa objetiva empezando de derecha a izquierda y los dígitos de mayor valor son truncados para de esa forma obtener la dirección relativa. Por ejemplo, sonsiderese que tenemos el valor 68654321, y suponga que la dirección relativa objetiva tendrá 3 dígitos. Se sigue el siguiente procedimiento : •
Se toma la Llave y se divide en bloques de 3 valores, iniciando de derecha a izquierda de la forma siguiente : 68
•
654
321
A continuación se toman los tres valores obtenidos y se colocan uno abajo del otro, ajustandolos de izquierda a derecha y sumandose de la forma siguiente : 68 + 654 321 1655
Página : 100
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
•
Al realizar al suma anterior, se obtiene el valor 1655 y el dídito de mayor orden es eliminado para finalmente obtener la dirección relativa : 655.
SELECCIÓN. La técnica por selección consiste en seleccionar un patrón que en algunas circunstancias aparece en forma natural. Esto sucede con mucha probabilidad entre llaves del tipo numéricas. Un buen ejemplo puede ser definir la dirección relatica seleccionando la fecha de nacimiento de la persona, lo que dará como resultado incluso a no tener sinónimos y por lo tanto a no tener colisiones. Imagine usted que se desea encontrar la dirección relativa de los empleados del Instituto Tecnológico, por lo que se decidió seleccionar el patrón de su fecha de nacimiento con el formato MMDD, el cual fue tomado de los datos de su Curp y considerando la clave Curp como llave. Implementando ésta técnica para encontrar la dirección relativa, encontramos los valores que se muestran en la Figura No. 6.9.
Figura 6.9 Dirección relativa seleccionando la fecha de nacimiento.
ANÁLISIS DE FRECUENCIAS. El método de análisis de frecuencias consiste en obtener una gran muestra de llaves posibles y sus número hash correspondientes, se analiza la frecuencia de repetición para cada una de las columnas y se van descartando aquellos que presentan mayor repetición porque son colisiones al definir la ubicación física del registro. Finalmente, se toman las columnas con mayor variación y tantas como dígitos se requieren. Se aplica un factor de ajuste para reducir el porcentaje de colisiones.
Página : 101
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
DIVISIÓN POR NÚMERO PRIMO. Este método consiste en dividir una llave dada entre un numero primo seleccionado con anterioridad, y finalmente utilizar el resultado de la operación como una dirección relativa. Lo anterior se implementa con la formula siguiente : Ubicación = Llave mod Primo. Donde : Ubicación es la dirección relativa resultante de la operación. Llave es la clave del registro que se va a convertir. Mod es una función llamada división modulo que obtiene un valor entero. Primo es el número divisor que debe ser un número primo con el fin de minimizar la cantidad de valores repetidos. Como se menciono anteriormente, el valor del número primo debe ser escogido con anterioridad considerando los dos factores siguientes : •
Primero, el rango de valores que resultan de la operación "llave mod primo", va desde 0 hasta primo – 1. Luego, el valor del divisor determina el tamaño del espacio de dirección relativa. Si se sabe que nuestro archivo va a contener por lo menos n registros, entonces tendremos que hacer que primo > n, suponiendo que solamente un registro puede ser almacenado en una dirección relativa dada.
•
Segundo, el divisor deberá seleccionarse de tal forma que la probabilidad de colisión sea minimizada. De hecho, éste es un objetivo difícil de alcanzar. Se trata de seleccionar un divisor que mantenga la probabilidad de colisión relativamente baja, pero en general no nos vamos a esforzar en minimizar realmente las colisiones. Mediante investigaciones se ha demostrado que los divisores que son números pares tienden a comportarse pobremente, especialmente con los conjuntos de valores de llave que son predominantemente impares.
Algunas investigaciones sugieren que el divisor debe ser un numero primo, con lo cual se reducirían los resultados sesgados. Sin embargo, otro trabajo sugiere que los divisores no primos trabajan también como los divisores primos, siempre y cuando los divisores no primos no contengan números primos pequeños como factores. Se sugieren seleccionar un número que no contenga ningún factor primo menor de 20, lo que asegura un buen desempeño.
Página : 102
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
De esta forma si elegimos usar un número primo como divisor y tener un numero máximo de localidades de 5000, entonces nuestro divisor tendría el valor de 5003 que es el numero primo mayor inmediato a 5000. La figura No. 6.10 nos muestra como obtener la ubicación física utilizando la técnica de división por número primo, considerando el valor 5003 como número primo.
Figura No. 6.10 Ubicación fisica de un registro con la división por número primo.
CAMBIO DE BASE. Esta técnica de cambio de base o conversión de base consiste en convertir la llave a otra base numérica que no sea la decimal con la que se está trabajando, y tomar después el resultado del módulo con la máxima dirección como la dirección física donde se almacenará el registro de datos. Por ejemplo supongase que se desea generar las direcciones físicas entre 0 y 99 y se considera que se cambiará la base 10 a base 8, tal como se muestra en la figura No. 6.11.
Figura No. 6.11 Direcciones físicas utilizando el cambio de base 10 a base 8.
Página : 103
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
MULTIPLICACIÓN. Lá técnica de la múltiplicación es muy sencilla y consiste en tomar la llave (que se supone que está compuesta de una gran cantidad de dígitos y multiplicarla por algún valor fraccionario que fue previamente analizado en función de las posibles combinaciones y la dirección relativa objetiva. En función a dichas consideraciones, imaginemos que la llave de los registros tienen generalmente 9 dígitos y se espera que la dirección objetiva sea máximo de 4 dígitos. Tomando dichas consideraciones, se analiza y se llega a la conclusión de que se debe multiplicar por la fracción 0.0000072, de la cual se obtiene un número real con enteros y fracciones; de dicho resultado se toma exclusivamente el valor entero y dicho dato es la dirección relativa calculada tal como se muestra en la Figura No. 6.12.
Figura 6.12 Cálculo de la dirección relativa por medio de multiplicación.
CUADRADO. La técnica por medio del cuadrado consiste en tomar la llave del registro y elevarla al cuadrado, después se extraen algunos dígitos especificados de la mitad del resultado para constituir la dirección relativa. Si se desea una dirección relativa de N dígitos, entonces los dígitos se truncan en ambos extremos de la llave que fue elevada al cuadrado, tomando los N digitos intermedios. Las mismas posiciones de n-digitos deben extraerse para cada llave.
Página : 104
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
La figura No. 6.13 ilustra el uso de la técnica del cuadrado para llaves que tienen 9 digitos y que se extraen 4 digitos del centro para tomarlo como ubicación física del registro.
Figura No. 6.13 Uso del cuadrado para obtener la dirección física.
Como se puede observar en la figura No. 6.13, se genera una dirección relativa y en muchas ocasiones existen colisiones porque al hacer el cálculo del cuadrado y extraer la parte intermedia del resultado del cuadrado, coincide y se obtiene una dirección relativa que ya está ocupada, lo que implica enviar el registro al área de colisiones definida en el esqueleto del archivo.
A modo de conclusión con respecto a las 8 formas de establecer la correspondencia entre la llave y la dirección física, se debe considerar la elección de alguna de ellas que conduzca a una óptima búsqueda de los datos en un archivo. Para elegir alguna de las ocho formas, se deben de considerar dos puntos que son muy importantes : •
Tiempo.- Cualquiera de las ocho formas de calcular la ubicación de un registro de datos, requieren un tiempo de CPU, por lo que en función al tamaño del registro, al tipo de datos que contiene el registro y a la cantidad de registros totales que contendrá el esqueleto del archivo directo, se debe hacer un estudio detallado del tiempo real que requiere cada una de las ocho formas para establecer la más óptima para una cierta aplicación.
•
Espacio.- Por regla general, no se conoce la cantidad exacta de todos los registros que contendrá un archivo organizado en forma directa, por lo que se recomienda utilizar una aproximación lo más cercano a lo que realmente se va a utilizar, dejando un 20% adicional para las posibles colisiones.
•
Frecuencia de las supresiones.- Si hay muchas eliminaciones de registros de datos de un archivo debe buscarse la técnica de direccionamiento más conveniente considerando que sea la que menos colisiones presente, debido al alto índice de movimiento del archivo.
Página : 105
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
VI.2.4 Soluciones con Claves no Numéricas. En muchas ocasiones se tiene el problema de que las llaves de acceso son del tipo cadena, lo que implica hacer una conversión a valores enteros para poder hacer la transformación y encontrar la dirección relativa. Un procedimiento muy conveniente es hacer la conversión siguiendo los pasos siguientes : •
Tomar carácter por carácter de la clave no numérica y obtener su valor numérico de acuerdo con el código ascii de la forma siguiente : Clave = JOSE LUIS Valores del codigo ascii :
BYTES
J
VALOR (Código Ascii) 74
•
O
S
E
79
83
69
32
L
U
I
S
76
85
73
83
A continuación se suman todos los valores individuales del código ascii y se obtiene un valor entero largo de la forma siguiente : 74 + 79 + 83 + 69 + 32 + 76 + 85 + 73 + 83 = 654
•
Finalmente, la clave : JOSE LUIS, corresponde con la dirección relativa = 654.
Esta forma de conversión presenta un problema y es quer seguramente no utilizará todos los caracteres del código ascii. Por ejemplo, imaginemos el caso habitual en que las cadenas de caracteres representan nombres (de personas, de lugares, etc.); es evidente que algunos caracteres válidos del código de la máquina no aparecerán nunca (como por ejemplo : }, ö, §, |, ~, Ç, ç, î, ƒ,Í, , ¶, %, etc.), por lo que su codificación numérica no se usará. En casos prácticos, esta forma de conversión será mas o menos laboriosa según la distribución de los caracteres dentro del código usado por la computadora. En la figura No 6.14 se muestra un ejemplo de claves tipo cadena convertidas por el procedimiento comentado anteriormente.
Página : 106
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Figura No. 6.14 Llaves tipo cadenas convertidas a direcciones relativas.
Página : 107
CAPITULO 7 Otros métodos de organización de archivos y busquedas de economías.
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Capitulo VII. Otros métodos de organización de archivos y búsquedas de economías. Otro de los métodos de administración de archivos que es posible manejar, es utilizar la memoria RAM de la computadora como un medio de almacenamiento rápido, minimizando el tiempo de acceso a casi cualquier registro de datos y por lo tanto también maximizando el tiempo de respuesta en tiempo real. Al hacer uso de la memoria como almacenamiento de datos, se debe considerar al administrador de la memoria y que es parte del sistema operativo. Su labor consiste en llevar un registro de las partes de la memoria que se están utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos los necesiten y liberarlo cuando terminen, así como administrar el intercambio entre la memoria principal y el disco, en los casos en que la memoria principal no pueda albergar a todos los procesos. Cabe hacer mención que la memoria de la computadora es volátil y no debe considerarse como un medio de almacenamiento de datos real; por lo que deben implementarse mecanismos para que en ciertos intervalos de tiempo se graben a disco duro los archivos que se encuentran en memoria y desde luego también al momento de terminar de utilizar la aplicación. Los sistemas de administración de la memoria se pueden clasificar en dos tipos: los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución (intercambio y paginación) y aquellos que no.
VII.1 Memoria Virtual. La memoria virtual fue diseñada por Fotheringhan en el año de 1961. La idea de la memoria virtual es que el tamaño combinado del programa, los datos y la pila puede exceder la cantidad de memoria física disponible par él. El sistema operativo mantiene aquellas partes del programa que se utilicen en cada momento en la memoria principal y el resto permanece en el disco duro. La memoria virtual se encuentra en el disco duro (área de swap del disco duro). En esa zona se encuentran los programas (instrucciones y datos) que se están ejecutando y que están divididos en bloques. Todas las palabras de un programa (proceso) ubicadas en la memoria virtual tienen una dirección lógica (dirección virtual) distinta tal como puede mostrarse en la figura No. 7.1
Página : 109
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Figura No. 7.1 Memoria virtual de una computadora.
Los bloques de la memoria virtual son llevados a la memoria principal cuando son necesarios para la ejecución. Una dirección física es entonces asignada a cada dirección lógica y la correspondencia entre dirección física y lógica del comienzo del bloque es guardada en una tabla asociada al proceso de una forma semejante a como se muestra en la figura No. 7.2.
Figura No. 7.2 Correspondencia entre la dirección física y lógica de la memoria.
Página : 110
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
La ilusión de la memoria virtual está soportada por el mecanismo de traducción de memoria, junto con una gran cantidad de almacenamiento rápido en disco duro. En cualquier momento el espacio de direcciones virtual, está mapeado de tal forma que una pequeña parte de él, está en memoria real y el resto almacenado en el disco. El objeto de las técnicas de memoria virtual en los sistemas actuales de computación es el de hacer que la memoria principal de la maquina aparezca como mayor de lo que realmente es. Se logra dar esta ilusión dividiendo el contenido de la memoria en paginas (esta técnica es llamada paginación) y almacenando estas en una memoria auxiliar o de respaldo. Cuando un programa necesita datos que no se encuentran en la memoria principal, se suspende temporalmente la ejecución de aquél mientras se copia la pagina faltante con la mayor rapidez posible. Cuando el programa ha modificado los datos contenidos en la pagina, ésta vuelve inmediatamente al almacén de respaldo. El sistema operativo intenta satisfacer las necesidades del programa mediante una juiciosa permutación de las paginas entre la memoria principal y la memoria de respaldo (disco duro). Los sistemas de almacenamiento virtual permiten a los programas referenciar direcciones que no necesitan corresponder con las direcciones reales disponibles en el almacenamiento primario. Las direcciones virtuales desarrolladas por los programas en ejecución son traducidas dinámicamente (por ejemplo, en el momento de ejecución) por el hardware a las direcciones de instrucciones y datos de almacenamiento principal. Los sistemas de almacenamiento virtual permiten a los programas hacer referencia a espacios de direcciones mucho mayores que los espacios de direcciones disponibles en el almacenamiento primario. Permiten al usuario crear programas independientes (en su mayor parte) de los limites del almacenamiento primario, y facilitan la operación de los sistemas de información. Los sistemas de almacenamiento virtual utilizan técnicas de paginación de bloques de datos de tamaño fijo que van o vienen entre el almacenamiento primario y secundario, y la segmentación, la cual identifica las unidades lógicas de los programas y datos para facilitar el control de acceso a los datos.
VII.2 Sistema de paginación. La paginación pura en el manejo de memoria consiste en que el sistema operativo divide dinámicamente los programas o los archivos de datos en unidades de tamaño fijo (generalmente múltiplos de 1 kbyte) los cuales va a manipular de la memoria RAM a disco y viceversa. Al proceso de intercambiar páginas, segmentos o programas completos entre memoria RAM y disco se le conoce como `intercambio' o `swapping'. En la paginación, se debe cuidar el tamaño de las páginas, ya que si éstas son muy pequeñas el control por parte del sistema operativo para saber cuáles
Página : 111
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
están en memoria RAM y cuales en disco, sus direcciones reales, etc; crece y provoca mucha `sobrecarga' (overhead). Por otro lado, si las páginas son muy grandes, el overhead disminuye pero entonces puede ocurrir que se desperdicie memoria en procesos pequeños. El traspaso de datos entre los distintos niveles de almacenamiento se realiza eventualmente en paginas de longitud fija, tal y como ocurre en la actualidad en los sistemas de memoria virtual. El tamaño de la pagina es un parámetro del sistema y no esta determinado por las longitudes de registro elegidas por los programadores. Al usarse la paginación, los datos serán lógicamente independientes del tamaño de pagina, pero tendrán que ser físicamente “empaquetados” para que encajen en las paginas. Los registro de datos empaquetados, pueden quedar almacenados en una o en otra página de la memoria de la computadora e incluso algunas páginas de la memoria pueden ser compartidas por registros de datos de otros procesos tal como se muestra en la página No. 7.3.
Figura No. 7.3 Páginas de memoria compartidas por uno o más procesos.
Página : 112
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Uno de los aspectos más importantes de la paginación, así como de cualquier esquema de memoria virtual, es la forma de traducir una dirección virtual a dirección real. Para comprenderlo mejor, observar la figura No. 7.4 que se muestra a continuación.
Figura No. 7.4 Traducción de página virtual a página real.
Como se observa en la figura 7.4, una dirección virtual `v' = (b,d) está formada por un número de página virtual `b' y un desplazamiento `d'. Por ejemplo, si el sistema ofrece un espacio de direcciones virtuales de 64 kbytes, con páginas de 4 kbytes y la memoria RAM sólo es de 32 kbytes, entonces se tienen 16 páginas virtuales y 8 reales. La tabla de direcciones virtuales contiene 16 entradas, una por cada página virtual. En cada entrada, o registro de la tabla de direcciones virtuales se almacenan varios datos: si la página está en disco o en memoria, quién es el dueño de la página, si la página ha sido modificada o es de lectura nada mas, etc. Pero el dato que nos interesa ahora es el número de página real que le corresponde a la página virtual. Obviamente, de las 16 virtuales, sólo ocho tendrán un valor de control que dice que la página está cargada en memoria RAM, así como la dirección real de la página, denotada en la figura 7.4 como b' . Por ejemplo, supóngase que para la página virtual número 14 la tabla dice que, efectivamente está cargada y es la página real 2 (dirección de memoria 8192). Una vez encontrada la página real, se le suma el desplazamiento, que es la dirección que se desea dentro de la página buscada ( b' + d ). La tabla de direcciones virtuales a veces está ubicada en la misma memoria RAM, por lo cual se necesita saber en qué dirección comienza y en este caso, existe un registro con la dirección base denotada por la letra `a' en la figura 7.4. Cuando se está buscando una página cualquiera y ésta no está cargada, surge lo que se llama un `fallo de página' (page fault ). Esto es caro para el manejador de memoria, ya que tiene que realizar una serie de pasos extra para Página : 113
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
poder resolver la dirección deseada y darle su contenido a quien lo solicita. Primero, se detecta que la página no está presente y entonces se busca en la tabla la dirección de dicha página en el disco duro. Una vez localizada en disco se intenta cargar en alguna página libre de la memoria RAM. Si no hay páginas libres se tiene que escoger alguna para enviarla hacia el disco. Una vez escogida y enviada a disco, se marca su valor de control en la tabla de direcciones virtuales para indicar que ya no está en la memoria RAM, mientras que la página deseada se carga en RAM y se marca su valor para indicar que ahora ya está en RAM. Todo este procedimiento es caro, ya que se sabe que los accesos a disco duro son del orden de decenas de veces más lentos que en RAM. En el ejemplo anterior se mencionó que cuando se necesita descargar una página de RAM hacia disco se debe de hacer una elección. Para realizar la elección de la página deseada, se utilizan varios algoritmos, los cuales se describen a continuación : •
Algoritmo de reemplazo de páginas optimo.- Mejor algoritmo posible para reemplazo de páginas pero irrealizable en la práctica. Al momento de ocurrir una falla de página cierto conjunto de páginas se encuentran en la memoria, otras páginas no se utilizaran sino hasta mucho después, cada página puede ejecutarse con el número de instrucciones ejecutadas antes de la primera referencia a esa página, el algoritmo dice que se elimine la página con la mayor etiqueta; si una página no va a utilizase sino hasta mucho después que otra la eliminación de la primera retrasa el fallo de página lo más posible, el único problema de este algoritmo es que es irrealizable. Al momento del fallo de página el Sistema Operativo no tiene forma de saber a qué página se hace referencia.
•
Algoritmo de página de uso no muy reciente.- En un fallo de página, el sistema operativo inspecciona todas las páginas y las divide en cuatro categorías según los valores actuales de los bits R y M. Clase 0: No se ha hecho referencia ni ha sido modificada. Clase 1: No se ha hecho referencia pero ha sido modificada. Clase 2: Se ha hecho referencia pero no ha sido modificada. Clase 3: Se ha hecho referencia y ha sido modificada. El algoritmo de páginas de uso no muy reciente implica una hipótesis que indica que es mejor eliminar una página modificada sin referencias al menos por lo general un intervalo de reloj. Este algoritmo es fácil de comprender, de implantación eficiente y con un rendimiento que, aún sin ser el óptimo si es adecuado en muchos casos.
Página : 114
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
•
Algoritmo de reemplazo " primero en entrar, primero en salir FIFO" .- El sistema operativo tiene una lista de todas las páginas que se encuentran en memoria, siendo la primera página la más antigua y la última la más reciente, en un fallo de página, se elimina la primera página y se añade la nueva al final de la lista.
•
Algoritmo de reemplazo de páginas de la segunda oportunidad.- Una modificación simple del FIFO que evita deshacerse de una página de uso frecuente inspecciona el bit R de la página más antigua, busca una página antigua sin referencias durante el anterior intervalo de tiempo.
•
Algoritmo de reemplazo de páginas del reloj.- Aunque el anterior algoritmo es razonable un mejor enfoque es mantener las páginas en una lista circular con la forma de un reloj, una manecilla apunta hacia la más antigua. Al ocurrir un fallo de página se inspecciona la página a la que apunta la manecilla si su bit R=0 se retira de la memoria, se inserta la nueva página en su lugar en el reloj y la manecilla avanza una posición, si R=1 la manecilla avanza una posición y el bit se limpia, esto continua hasta encontrar una página con R=0.
Al ocurrir el fallo de página, el sistema operativo debe elegir una página para retirarla de la memoria y usar el espacio para la página que se necesita para desbloquear el sistema y que el hardware pueda seguir trabajando. Si la página por eliminar de la memoria fue modificada, se debe volver a escribir al disco para mantener la información actualizada; de lo contrario, si la página no fue modificada no es necesario rescribir la información a disco y la página que se carga simplemente se escribe sobre la página que se va a borrar de la memoria. La figura 7.5 muestra gráficamente un intercambio de páginas entre la memoria principal y el disco (memoria secundaria).
Figura No. 7.5 Eliminación de la memoria principal una página que no está en uso y se reemplaza por otra página que se requiere.
Página : 115
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Otro dato interesante de la paginación es que ya no se requiere que los programas estén ubicados en zonas de memoria adyacente, ya que las páginas pueden estar ubicadas en cualquier lugar de la memoria RAM.
VII.3 Concepto de segmentación y sistema. Cuando se usa paginación, el sistema divide la memoria para poder administrarla, no para facilitarle la vida al programador. Lo que ocurre es que la vista lógica que el programador tiene de la memoria no tiene nada que ver con la vista física que el sistema tiene de ella. El sistema ve un sólo gran arreglo dividido en páginas, pero cuando se está programando, uno piensa en términos de un conjunto de subrutinas y estructuras de datos, a las cuales nos referimos por su nombre: la función coseno, el stack, la tabla de símbolos, sin importarnos su ubicación en memoria, y si acaso una está antes o después que la otra. La segmentación es una forma de administrar la memoria que permite que el usuario vea la memoria de esa manera, es decir, como una colección de segmentos, cada uno de los cuales tiene un nombre y un tamaño (que, además, puede variar dinámicamente). La segmentación se aprovecha del hecho de que los programas se dividen en partes lógicas, como son las partes de datos, de código y de pila (stack). La segmentación asigna particiones de memoria a cada segmento de un programa y busca como objetivos el hacer fácil el compartir segmentos (por ejemplo librerías compartidas) y el intercambio entre memoria y los medios de almacenamiento secundario. Esta forma de organización de la memoria para el manejo de archivos, tiene ciertas ventajas para el programador frente a un espacio de direcciones no segmentado. Dichas ventajas se enumeran a continuación : •
Simplifica la gestión de las estructuras corrientes de datos. Si el programador no conoce a priori el tamaño que puede llegar a tener una estructura de datos particular, no es necesario que lo presuponga. A la estructura de datos se le asigna su propio segmento y el Sistema Operativo lo expandirá o reducirá según sea necesario.
•
Permite modificar los programas y recompilarlos independientemente, sin que sea necesario volver a enlazar y cargar el conjunto entero de programas. Nuevamente, esto se logra utilizando varios segmentos.
Página : 116
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
•
Permite que varios procesos compartan segmentos. Un programador puede situar un programa correspondiente a una utilidad o una tabla de datos de interés en un segmento que puede ser direccionado por otros procesos.
•
Se facilita la protección. Puesto que un segmento se construye para contener un conjunto de programas o datos bien definido, el programador o el administrador del sistema puede asignar privilegios de acceso en forma adecuada.
Las ventajas anteriormente descritas, no se tienen con la paginación, que es invisible para el programador. Por otra parte se ha visto que la paginación proporciona una forma eficiente de gestionar la memoria. Para combinar las ventajas de ambas, algunos sistemas están equipados con el HW y el SW del Sistema Operativo que permite las dos. En teoría, cada programa debe tener un número muy grande de segmentos (por Ej. 232), de los cuales cada uno conste, a su vez, de un número grande de bytes (por Ej., 232 también). Los primeros segmentos de 64 Kbyte podrían reservarse para procedimientos, datos, pilas y grupos que pertenezcan al programa en ejecución. Los segmentos restantes podrán contener cada uno un archivo por segmento, de modo que los procesos pudieran direccionar en forma directa todos sus archivos, sin tener que abrirlos y utilizar primitivas especiales de E/S para leerlos y escribirlos. Cada archivo podría crecer y contraerse en forma completamente independiente de los demás. La memoria administrada mediante segmentos, estará dividida en cuatro partes tal como se muestran en al figura No. 7.6.
Figura No. 7.6 Segmentos que puede tener la memoria.
La idea de memoria segmentada ha sobrevivido hasta la fecha. En una forma muy moderada en muchas microcomputadoras basada los procesadores 68000 de motorola y en los Pentium de Intel. Una implementación común proporciona soporte de hardware hasta para 16 procesos, cada uno con 1.024 páginas de 2 K o 4 K. Tomaremos para nuestro ejemplo, las páginas de 4 K. Cada proceso tiene un espacio de dirección virtual de 4 Mega bites (1024 páginas de 4 Kbyte / página = 4096 Kbyte = 4 Megabytes).
Página : 117
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Este esquema se implementa de la siguiente manera: el HW de la MMU contiene una tabla con 16 secciones, una para cada uno de los 16 procesos. Cada sección consta de 64 descriptores de segmentos (de modo que el espacio de dirección de cada proceso de 4 Megabytes se divide hasta en 64 segmentos, donde cada uno contiene 16 páginas. Cada uno de los descriptores del segmento contiene la longitud del segmento (de 0 a 16 páginas), bits de protección que indican si el segmento se puede leer o escribir y un apuntador a la tabla de páginas. Cuando el Sistema Operativo da inicio a un proceso carga el número de proceso de 4 bits y los 6 bits de alto orden (posic. Más significativas) de la dirección virtual de 22 bits y los combina en un número de 10 bits que se usa como índice en la tabla de segmentos y para localizar el descriptor del segmento relevante. Luego verifica los bits de protección en el descriptor. Si el acceso está permitido la MMU verifica el número de página que se extrajo de la dirección virtual respecto al campo de longitud del segmento para ver si el segmento es suficientemente grande. Si lo es el número de página se utiliza como índice en la tabla de páginas, cuya dirección se proporciona en el descriptor del segmento. Una vez que se halla el número del frame, éste se combina con el desplazamiento para acceder a la memoria física. Una característica importante de este diseño es que cuando el Sistema Operativo debe realizar un cambio de proceso, todo lo que tiene que hacer es cambiar el registro del Número de proceso de 4 bits. tiene que volver a cargar todas las tablas de segmentos o páginas. Dos o más procesos pueden compartir un segmento sin más que hacer que sus descriptores de segmentos apunten a la misma tabla de páginas. Cualquier variación hecha a las páginas de este segmento por algún proceso se hace automáticamente visible para los otros.
La tabla de segmentos del procesador. Para traducir las direcciones virtuales a direcciones reales, el procesador posee una tabla de segmentos con 4 filas. Cada una de estas filas describe uno de los 4 segmentos del programa en ejecución. Para cada segmento se indica: • • •
Base: Dirección virtual en donde comienza (incluyendo esta dirección). Límite: Dirección virtual en donde finaliza (excluyendo esta dirección). Desplazamiento: Desplazamiento que hay que sumar a una dirección virtual para obtener su dirección real. Se calcula como la dirección de comienzo del segmento en la memoria real menos la dirección virtual de inicio del segmento.
Página : 118
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
•
Atributos del segmento: lectura/escritura, solo lectura e invisible (accesible solo por el núcleo).
Problemas de la segmentación A pesar de que un sistema segmentado aporta soluciones y optimizaciones, persisten algunos problemas que solo se resuelven con paginación. Estos problemas son: •
La implementación de fork es ineficiente, pues copia completamente los segmentos. Con paginación, frecuentemente no es necesario copiar completamente datos y pila.
•
La compactación introduce una pausa generalizada del sistema que es difícil distinguir de una caída del sistema. Con paginación no es necesario efectuar compactación.
•
El tamaño de un proceso no puede exceder el tamaño de la memoria real, puesto que un proceso necesita estar completamente residente para poder correr. Con paginación en demanda, un proceso no necesita estar completamente residente en memoria para poder correr.
Ventajas: •
Al usuario se le simplifica el manejo de estructuras de datos de tamaño dinámico.
•
Se facilita el que los procesos compartan memoria.
•
Los segmentos pueden estar protegidos según la semántica de su contenido. Por ejemplo, un segmento que contiene código, puede especificarse como sólo para ejecución (y nadie puede copiarlo ni sobrescribirlo); un arreglo puede especificarse como read/write but not execute. Esto facilita enormemente la detección de errores en el código.
•
Librerías compartidas de enlace dinámico (DLLs).
Sistemas de Archivos La mayoría de aplicaciones necesitan almacenar y recuperar información. Un proceso puede almacenar una cantidad limitada de esta en su propio espacio de direcciones, sin embargo este es de un tamaño muy limitado. Además cuando el Página : 119
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
proceso termina, la información se pierde. Por otro lado en algunas ocasiones se hace necesario que varios procesos accesen la misma información simultáneamente. La solución a estos tres problemas está en el almacenamiento de la información en medios externos, en unidades denominadas archivos. La información almacenada en los archivos debe ser persistente, es decir, no debe depender de la creación y terminación de un proceso. Un archivo, en teoría, solo debe desaparecer por su eliminación explícita. Los archivos son administrados por el sistema operativo. Su estructura, nombre, forma de acceso, uso, protección e implantación son responsabilidad de él. La parte del sistema operativo que se encarga de esta labor se conoce con el nombre de sistema de archivos o File System.
VII.4 Archivos Vsam (virtual storage access method). Un archivo secuencial indizado, normalmente es un archivo ordenado por la clave con un índice no denso ordenado, donde el archivo y el índice están organizados bajo la forma de un árbol_B. Esta estructura surge como una mejora a un método de acceso a archivos llamado ISAM (Indexed Sequential Access Method), siendo un producto de la IBM. Así, el VSAM hace que el almacenamiento de los archivos sea más independiente de las unidades de almacenamiento. El archivo se divide en áreas que son un conjunto de pistas de un cilindro o de cilindros contiguos. Cada área se divide en intervalos, los cuales se componen de una parte de una pista o de varias pistas consecutivas accedidas en una E/S. Hay fisionamiento de intervalos y áreas para producir el crecimiento del archivo, por lo que no hay áreas de desborde pues las políticas de fisión las absorben. El método de acceso de almacenamiento virtual, utiliza una Zona de datos que es la que contiene todos los registros de un archivo de datos. Dicha zona de datos está dividida en intervalos y áreas. Los registros son almacenados por orden ascendente de la clave principal o llave. Las actualizaciones son previstas dejando intervalos vacíos por áreas y registros vacíos por intervalos. Si se tiene, por ejemplo, un archivo cuyos registros tienen claves numéricas con una secuencia inicial de carga como: 0, 1, 3, 5, 6, 7, 10, 12, 14, 15, 18, 20, 25, 30, 38, 40 y 50, almacenados bajo el método VSAM en dos áreas que contienen cuatro intervalos cada una, con capacidad para cuatro registros por intervalo, el estado del archivo al final de la carga inicial es el mostrado en la figura No. 7.7.
Página : 120
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Figura No. 7.7 Archivo VSAM luego de la carga inicial.
La inserción de un nuevo registro con clave 26 se realiza buscando en el índice de áreas, el área adecuada para dicho registro, así el 26 no es menor que 14 pero si es menor que el valor más grande (HV) por debajo del cual estará una clave. Por ello, el área adecuada es el área 1. Luego se busca dentro de la zona de índice de esa área el intervalo adecuado, como 26 no es menor que 20 pero si menor que 38, se identifica el intervalo adecuado que deberá contener el registro y luego se decide cuál es el caso de inserción.
CASOS DE INSERCIÓN : Primero: inserción sobre un intervalo no lleno. Como el registro de datos de clave 26 va en el segundo intervalo, este último es leído y el registro es insertado dentro de él siguiendo el orden creciente de sus claves. El nuevo estado del archivo una vez que el registro de clave 26 ha sido insertado, se muestra en la figura No. 7.8.
Figura No. 7.8 Archivo VSAM luego de una inserción en un intervalo no lleno.
Página : 121
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Segundo: inserción sobre un intervalo lleno. Como el intervalo está lleno y la inserción debe hacerse allí, se dice que dicho intervalo desbordó por lo cual debe ser dividido en dos intervalos semi-llenos. Esta fisión puede presentar dos casos suplementarios, ellos son: 1. Existe un intervalo vacío en el área hacia el cual se dirigirán los registros en desborde: Este caso se muestra en la Figura No. 7.9, con la inserción del registro con clave 29. Siguiendo los mismos pasos que en el primer caso, el intervalo donde este registro debe ser insertado es el mismo intervalo anterior.
Figura No 7.9 Inserción en intervalo lleno con intervalo vacío en el área.
2. No existe un intervalo vacío en el área : Al no haber un intervalo libre en el área, el intervalo que desborde tendrá que ser dividido y dicha fisión hará que el área desborde a su vez, teniéndose que fisionar el área también. La fisión de un área se realiza de igual manera que la de los intervalos. La inserción de los registros de claves 27 y 28 consecutivamente hacen que el área 1 desborde, creándose una nueva área que es la número 2 y se puede apreciar en la figura No. 7.10.
Figura No. 7.10 Inserción con fisión de intervalo y de área.
Página : 122
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
El método de acceso de almacenamiento virtual, utiliza además una Zona de índice, de la cual pueden existir dos o más niveles de índices. El primer nivel se llama índice de intervalos y hay uno por cada área. Cada entrada contiene la clave mayor del intervalo y su dirección. El segundo nivel es el índice de áreas y hay uno por archivo. Cada entrada de éste contiene la clave mayor del área y su dirección. En caso que el índice de área sea muy grande y desborde se tiene un tercer nivel denominado índice maestro. La principal cualidad de VSAM es su transportabilidad, el inconveniente es la cantidad de accesos a disco que se requieren para obtener el dato deseado. Según la cantidad de memoria disponible se diseñara la cantidad de memoria de los bloques. A mayor cantidad de memoria, mayor tamaño de bloques y en consecuencia menor cantidad de niveles y por lo tanto menos accesos a disco.
Ventajas: • •
El archivo está siempre ordenado y agrupado según la clave El tiempo de acceso en lectura es siempre pequeñísimo.
Desventajas: •
El tiempo de acceso en escritura puede ser grande si hay fisión de intervalo y de área.
VII.5 Compactación de datos. La compresión no es más que una técnica que consiste en aplicar un algoritmo, es decir, una serie de transformaciones que reducen el tamaño inicial de un conjunto de datos informáticos, ya sean textos, archivos, gráficos, video o audio. La compresión de datos parte de una máxima: "el espacio es dinero", y trata de realizarla de la mejor manera posible. Puesto que cualquier información procesada por una computadora ocupa un determinado espacio a la hora de almacenarla, hay que encontrar la manera de reducir ese espacio, sin perder información. Esta es la base sobre la que se asientan todos los sistemas de compresión de datos. Los avances experimentados nos permiten disponer de una computadora con el doble de memoria que la memoria física; el doble de espacio en el disco duro; diversos formatos que reducen el tamaño de un archivo gráfico o sonoro a la décima parte de su tamaño real; módems funcionando al doble o al triple de su capacidad, Página : 123
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
así como secuencias de vídeo reproducidas con una calidad muy superior a la ofrecida por una tarjeta gráfica que no utilice ningún sistema de compresión. Los logros obtenidos por la compresión de datos son espectaculares. Sin la existencia de compresores, es posible que el hardware de las computadoras hubiese evolucionado de forma muy distinta. Los disquetes, tal como hoy los conocemos, habrían dejado de existir hace muchos años, pues no son capaces de almacenar archivos de más de 2.8 Megabytes. La compresión de datos es un tema complejo, pero a la vez apasionante, pues no en vano abarca prácticamente todos los campos en los que se produce una manipulación de datos. La pregunta clave de todo esto es: ¿cómo funcionan los compresores de archivos?. La teoría es muy sencilla. La idea consiste en partir de un determinado conjunto de archivos con un determinado tamaño, y conseguir almacenarlos en un espacio mucho menor, sin perder información. Todos los compresores se aprovechan de la repetición de los datos dentro de un archivo, puesto que todos los archivos se traducen en combinaciones de bits, según el código ASCII, de tal forma que podemos apreciar que en la práctica existen secuencias de bytes repetidas, que pueden almacenarse de forma más corta. Por ejemplo, si un archivo contiene 300 bytes con el número 46, el cual corresponde al color de una determinada porción de un dibujo, estos 200 bytes pueden reducirse a 2 bytes, que contendrán el número 46 y el 200, para indicar que el primero está repetido 200 veces. Este método también se aplica a conjuntos de datos repetidos que no están seguidos, de manera que, dependiendo del sistema que se utilice para controlar los bloques repetidos, se obtienen los distintos algoritmos para la compresión de archivos. Los Métodos de compactación de datos entran en dos categorías: 1.- La primera es la de los métodos dependientes de la estructura de registros o del contenido de los datos, por lo general deben ser escritos para cada aplicación en especial. 2.- La segunda es la de los métodos de uso más general, por los que se les puede incluir en paquetes de software de uso general, en el hardware o en microprogramas. Muchas firmas especializadas ofrecen comercialmente paquetes de software para reducir el tamaño de los archivos. Los métodos de compresión más utilizados son los siguientes: 1.- Eliminación de los ítems de datos redundantes.- Es uno de los más importantes para reducir el espacio de almacenamiento de una base
Página : 124
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
de datos es el que se basa en la eliminación de la redundancia inherencia al almacenamiento múltiple de ítems de datos idénticos en distintos archivos. Es éste uno de los objetivos principales de los sistemas de administración de bases de datos. 2.- Conversión de la notación humana en notación compacta.- Cuando se almacenan datos en la forma que los humanos prefieren para leerlos, ellos contienen a menudo más caracteres que los necesarios. Las fechas, por ejemplo, pueden escribirse como 12 Nov 1976, o de las manera más compacta 12.11.76, de modo que ellas se almacenan a menudo con seis bytes en los archivos (hasta antes del Año 2000, ya que actualmente se utilizan cuatro bytes para almacenar la fecha, en lugar de dos como se hacia anteriormente). Este tipo de compactación es también aplicable a muchos otros ítems, por ejemplo, los números de pieza y las direcciones postales. 3.- Supresión de caracteres repetidos.- Los campos numéricos de algunos archivos contienen a menudo muchos ceros a la izquierda o a la derecha. Cuando hay más de dos ceros, la codificación requiere en rigor solo dos caracteres (decimales compactados): uno para indicar la repetición y el otro para indicar las veces que se repite el cero. En algunos archivos se encuentran espacios en blanco u otros caracteres repetitivos, los que pueden codificarse de manera similar. 4. Evitar los espacios vacíos en el archivo.- En algunos archivos, los registros y los ítems de datos son de longitud muy variable. Son muy variables, por ejemplo, los ítems de datos que representan la dirección postal de un individuo o los que representan comentarios. La organización de un archivo para ítems variables es más compleja que la de un archivo para ítems de longitud fija. 5. Sustitución de los ítems de datos de uso habitual.- Cuando existe solo un conjunto limitado de valores de atributo, no es necesario escribir el ítem de forma completa. Con ciertos tipos de ítems de datos, por ejemplo, “clase de licencia”, se utilizaría normalmente un código; los “nombres” en cambio, se deletrean de forma completa a menudo. 6. Sustitución de texto idiomático.- Es frecuente el almacenamiento de textos escritos en los archivos de la computadora. Cuando el texto escrito constituye una porción considerable de un archivo, es una buena idea la de sustituir palabras y aun frases completas con caracteres de código. Supongamos que un archivo almacena bytes de 8 bits. Cada byte permite combinaciones suficientes para representar más o menos 200 palabras de uso común. Supongamos, además, que Página : 125
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
se reservan 32 de las 256 posibles combinaciones para indicar que ese carácter solo no da por si mismo la palabra completa sino que hay que leer el siguiente carácter. Se tiene así la posibilidad de codificar 32*256 = 8192 palabras adicionales. Otra combinación de bits en el primer carácter podría indicar que la palabra está deletreada según el código EBCDIC o el código ASCII. La maquina que recibe esta sucesión de datos la convertirá en texto escrito mediante una operación de lectura de tabla.
Página : 126
CAPITULO 8 Acceso Multillaves
ACCESO MULTI-LLAVES
Capitulo VIII. Acceso Multi-llaves. Muchas aplicaciones que existen en las áreas administrativas de nuestra vida cotidiana, exigen que los registros de datos tengan más de una llave de búsqueda, lo que viene a complicar la forma de organización de los archivos. Para cierto tipo de consultas es ventajoso el uso de múltiples índices. Los registros de clave múltiple aparecen, en algunos sistemas de operaciones, pero se los encuentra más comúnmente en los sistemas de información, en los que han de admitirse muchos tipos de averiguaciones sobre diferentes aspectos de la información contenida en los archivos. En los últimos años ha existido mucho interés en los sistemas de archivos que guardan múltiples tipos de datos tales como multimedia, imágenes, sonido y vídeo. En dichas aplicaciones es muy conveniente implementar un sistema de archivos que pueda manejar múltiples llaves de acceso. Cuando el número de objetos multimedia es relativamente reducido, las prestaciones proporcionadas por los sistemas de archivos con múltiples llaves, no suelen ser importantes. La funcionalidad de los archivos que se accesan utilizando varias llaves, se vuelve más importante cuando el número de objetos multimedia guardado es grande. Los aspectos como las actualizaciones de las transacciones, las posibilidades de consulta y la creación de índices se vuelve un punto importantísimo al establecer los sistemas de archivos. Las consultas intentan encontrar los registros de datos, especificando, por ejemplo, conjuntos de palabras clave. La consulta que el usuario tiene en mente no suele poderse formular con precisión; por tanto, los sistemas de recuperación de registros intentan dar las respuestas imaginando todas las posibles forma de búsqueda que se le puedan ocurrir al usuario. Existen dos métodos para proporcionar trayectorias de acceso adicional hacia los archivos de registros de datos. Dichos métodos son : • •
La organización multilista. La inversión.
Muchos compiladores de los lenguajes de programación no proporcionan capacidades preconstruidas para manejar archivos organizados en forma de multillave. Más bien, una agrupación de procesamiento de datos normalmente adquiere un paquete de manejo de datos que manipula a los archivos multillave, o bien su propio sistema de manejo de datos. Entonces, los compiladores del
Página : 128
ACCESO MULTI-LLAVES
lenguaje pueden establecer una interfase directa con este manejo de archivos, o pueden generar llamadas a estas rutinas de manejo. Un ejemplo donde se requiere manejar un archivo organizado en forma de multillave, es en los sistemas bancarios, en el que hay varios usuarios de la misma información : Cajeros, jefes de crédito, administradores de sucursal, gerentes, cuenta habientes, y muchos más. Todos ellos tienen la necesidad de accesar los mismos datos, para éste caso se utiliza un registro que es mostrado en la Figura No. 8.1.
Clave de Nombre Código de grupo Num. De Balance Límite de Cliente Apell. Pat. Apell. Mat Nombre Sucursal Tipo Socio Crédito
Figura No. 8.1 Ejemplo de un registro de una sucursal bancaria.
De los usuarios mencionados en el párrafo anterior, todos ellos tienen la necesidad de accesar la información de diferente manera. El cajero podría identificar un registro de cuenta por el valor de su Clave de Cliente. Un Jefe de crédito podría necesitar accesar todos los registros de cuenta con un valor dado para el Límite de crédito, o todos los registros con base en el valor de Num. De socio. Un administrador de sucursal podría accesar los registros mediante los códigos de Grupo Sucursal y Tipo. Un gerente podría necesitar reportes periódicos de todos totales de cuentas, ordenados por Clave de Cliente. Debido a todo lo anterior, muchas de las aplicaciones que se utilizan en la industria y en las dependencias requieren el uso de los archivos organizados en forma de multillave.
VIII.1 Organización multilista. Otro enfoque básico para suministrar la conexión entre un índice y el archivo de registros de datos, se llama organización multilista. El enfoque de multilista para instrumentar acceso multillave ha sido la base para estructuras físicas en muchos sistemas de administración de base de datos jerárquicos y de redes disponibles comercialmente incluyendo la familia de sistemas CODASYL, TOTAL de Cincom, y el IMS de la IBM. Los archivos multilista mantienen un índice para cada llave secundaria. Existe una entrada en el índice de llave secundaria para cada valor que, la llave
Página : 129
ACCESO MULTI-LLAVES
secundaria, tiene en este momento en el archivo de datos. La organización de archivos multilista difiere de la inversión en que, mientras que la entrada en el índice de inversión para un valor de llave tiene un apuntador a cada registro de datos con ese valor de llave, la entrada en el índice de multilista para un valor de llave tiene sólo un apuntador al primer registro de datos con ese valor de llave. Este registro de datos contiene un apuntador al siguiente registro de datos con ese valor de llave, y así sucesivamente. Posteriormente hay una lista ligada de registros de datos para cada valor de la llave secundaria. Los encadenamientos en Multilistas normalmente son bidireccionales y ocasionalmente son circulares, para mejorar la eficiencia de actualización. Esta forma de organización de un archivo, permite accesar la información de manera ordenada a través de campos llaves. Las multilistas permiten llegar a un registro por diferentes caminos. El camino lo determina el campo clave sobre el cual se hace la búsqueda. Supóngase que se tiene un archivo en el cual cada registro almacena la siguiente información : Nombre
Profesión
Categoría
En un archivo organizado en forma de multilista, se tienen almacenados seis registros que contienen los datos definidos en la tabla No. 8.1.
Nombre Alejo Andrés Miguel Tomás Darío Esperanza
Profesión Matemático Físico Matemático Ingeniero Ingeniero Abogado
Categoría 1 2 2 3 1 2
Tabla 8.1 Datos para crear un archivo multilista.
Una vez creando la estructura del archivo organizado en forma de multilista, se crean dos áreas de índices : La lista del índice profesión y la lista del índice por la categoría. Dicha estructura se puede apreciar en la figura No. 8.2. Una característica interesante de los archivos organizados en forma de multilista, es que las entradas del índice pueden ser de longitud fija. Cada Valor está asociado a un solo apuntador.
Página : 130
ACCESO MULTI-LLAVES
Figura No. 8.2 Organización multilista por profesión y categoría
En el caso de la Figura No. 8.2, la información de cada persona puede accesarse por medio de su profesión y por medio de su categoría, que son los atributos que permiten realizar búsqueda directa en el archivo. Como puede observarse en la Figura No. 8.2, se tiene una lista por profesión y una por categoría. La organización de archivos multilista como puede apreciarse, implementa unas listas ligadas entre los campos llave que se hayan definido y encadenando a todos los registros con un cierto valor. Todos los registros están ligados entre sí por medio de apuntadores que hacen virtualmente varias listas ligadas en un solo archivo. Como se mostró en la Tabla No. 8.1, los registros están almacenados en forma aleatoria y dispersos en una unidad de almacenamiento; ya que el sistema de archivos almacena registros en cualquier espacio libre, su secuencia lógica se mantiene por medio de apuntadores. Esto contrasta con lo que sucede en archivos organizados en forma secuencial, en el cual la secuencia lineal lógica coincide con la contigüidad física de los registros. Cada registro en una estructura de listas ligadas incluye un campo señalador dirigido al siguiente registro en la lista ligada y el apuntador consiste en una dirección relativa, un valor principal o una dirección física real. La lista ligada es una estructura práctica para el mantenimiento de la secuencia lógica de un archivo en el que se efectúan frecuentes operaciones de actualización. La inserción y la eliminación se llevan a cabo sin tener que reorganizar nuevamente el archivo de datos. Página : 131
ACCESO MULTI-LLAVES
VIII.2 Lista Invertida. Un método fundamental para proporcionar el encadenamiento entre un índice y los registros del archivo es llamado inversión. Un índice de inversión de llaves contiene todos los valores que la llave tiene presente en los registros del archivo. Cada uno de los valores de la llave en el índice de inversión apunta a todos los registros que tienen el valor correspondiente. El archivo de datos se dice que está invertido sobre esa llave. La inversión como enfoque para proporcionar acceso multillave ha sido utilizado como base para las estructuras físicas de bases de datos en sistemas comerciales disponibles para la administración de bases de datos, incluyendo varios sistemas relacionales (el DB2 de IBM el Ingres Relational Technology y Oracle), sistema 2000 de Intel y el Adabas de Software AG. Estos sistemas fueron diseñados para proporcionar un rápido acceso a los registros, vía tantas llaves de inversión como el diseñador quiere identificar. Están orientados al usuario con lenguajes de consulta de tipo natural para asistir al usuario en la formulación de consultas. Si un campo de llave se usa para determinar la estructura de almacenamiento de los datos del archivo, éste es llamado llave primaria o principal del archivo. Todas las demás llaves de acceso son llamadas llaves secundarias. Desde el punto de vista común, el uso del término inversión implica que los valores de los datos indexados han sido sacados del registro de datos y residen solamente en el correspondiente índice de inversión. En los archivos de listas múltiples con listas de longitud controlada, ésta puede ir desde un eslabón por lista hasta una longitud suficiente para incluir todos los ítems. En el primer caso hablamos de una lista invertida, en ésta hay una entrada de índice de cada clave, para cada registro. De esta manera, se requiere un único acceso a los datos para cada registro que es la respuesta a una consulta. Suponiendo que es posible examinar rápidamente los índices secundarios, la organización de lista invertida da la respuesta más rápida a las consultas en tiempo real, porque no hay lista que seguir. En cambio, los índices pueden resultar tan extensos (habrá que almacenarlos en dispositivos secundarios) que su propia organización llega a constituir un problema. En las listas invertidas, se indizan todos los valores de atributo de la clave secundaria, de modo que no hay cadenas. Debe observarse que el archivo de listas invertida no es sino un caso particular de los archivos de listas múltiples, es decir, se trata de listas múltiples cuando k=1, en el índice se incluyen todos los registros o valores de la clave.
Página : 132
ACCESO MULTI-LLAVES
Se emplean en los sistemas de gestión de bases de datos (SGBD) Documentales llamados SRI (Sistemas de Recuperación de Información). Los archivos de datos equivalen a una función del estilo: Archivo (# registro )
(atributo : valor) , (atributo : valor) ...
El archivo de índice representa la función inversa (de ahí el nombre de archivos invertidos). Archivo ( atributo : valor )
# reg. # reg ...
En la Figura No. 8.3 se observa un archivo donde se almacenaron 6 registros en el área de datos en forma desordenada con respecto a las llaves clave e índice. Se crearon dos índices, uno por clave y el otro por teléfono. Los dos índices se encuentran totalmente ordenados por lo que la búsqueda en ellos puede implementarse como binaria para encontrar rápidamente el registro completo en el área de datos.
Figura No. 8.3 Organización de datos de lista invertida (dos índices).
Al momento de realizar una búsqueda en el archivo organizado como lista invertida, se puede implementar por dos campos : Proporcionando la clave, o bien el número telefónico de la persona.
Página : 133
ACCESO MULTI-LLAVES
Si la búsqueda se realiza por clave, se accesa en primer término el área de índices. Se ejecuta un procedimiento de búsqueda en el que se implementó previamente la búsqueda binaria debido a que están ordenadas todas las claves; Una vez que se encontró la clave buscada, se toma el apuntador. Una vez que se tiene el apuntador, se hace uso el área de datos y se coloca el puntero de lecturaescritura en el registro que indica el apuntador. En ese preciso momento se tiene acceso completo al registro que se estaba buscando. Por el otro lado, si la búsqueda se realiza por número telefónico, se accesa el área de índices y se ejecutan exactamente todos los pasos descritos anteriormente hasta llegar al registro que se está buscando.
VIII.3 Multilista restringida y estructurada. Una variante de la organización multilista básica es la multilista restringida y estructurada que consiste en un archivo multilista de longitud controlada en la cual una longitud máxima es impuesta a las listas ligadas de los registros de datos. Si el valor de la llave secundaria lo poseen más registros de datos de lo que permite la longitud, entonces el valor de la llave aparecerá más de una vez en el índice y podrá haber más de una lista ligada de registros de datos con ese valor. Por cada campo llave, puede haber una o varias listas ligadas dependiendo la restricción que se le haya impuesto a cada una de las listas ligadas de los índices. Suponga usted que se tiene un registro de datos con la estructura siguiente : Grupo
Nombre
Categoría
En el área de datos se almacenarán los cinco registros que se muestran en la Tabla No. 8.2.
Tabla No. 8.2 Registros que se almacenan en una multilista restringida.
Una vez creando la estructura del archivo organizado en forma de multilista restringida, se crean dos áreas de índices : La lista del índice grupo y la lista del índice por la categoría. Dicha estructura se puede apreciar en la figura No. 8.4. Página : 134
ACCESO MULTI-LLAVES
Figura No. 8.4 Organización multilista restringida por grupo y categoría
En la figura No. 8.4, se restringió la cantidad de elementos a 3 de la lista ligada de grupo, de tal forma que existen dos listas ligadas de la llave grupo. Al momento de realizar una búsqueda por la llave grupo, se verifica la cantidad de listas ligadas del grupo del que se hace la búsqueda y si existen varios grupos de la misma llave, todos esos grupos serán considerados para realizar la búsqueda de o de los registros la cual se realizará en forma secuencial en los índices. La organización de archivos multilista restringida no es muy eficiente, debido a que en ocasiones existen varias listas ligadas y las búsquedas utilizan mucho tiempo del procesador, por lo que las respuestas en tiempo real son un poco lentas.
VIII.4 Particionada celular. Por regla general, al manipular archivos multillaves se está buscando reducir el tiempo de búsqueda en las listas ligadas, sobre todo cuando hay una gran cantidad de elementos en el archivo, lo que se hace es dividir en segmentos, dando lugar a las multilistas celulares o particionada celular. De ésta forma, cada uno de estos segmentos no se extiende fuera de una frontera física determinada, como puede ser un cilindro, e incluso, si es posible, una pista, así, cada segmento se halla prácticamente al alcance inmediato del dispositivo de acceso cuando se recorra la lista ligada.
Página : 135
ACCESO MULTI-LLAVES
En la figura No. 8.5 se muestra un esquema donde el archivo está organizado en forma de multilista celular o particionada celular. Se supone que se almacenan 6 registros por sector y existen dos listas ligadas una por articulo (Muñeca en el ejemplo) y otra por color del producto (negro en el ejemplo), y las dos listas encadenan a los registros en cierto sector y en cierta pista.
Figura No. 8.5 Estructura de un archivo organizado en forma particionada celular.
Imaginemos que en el archivo de la Figura No. 8.5, se desea obtener un listado de un pedido de muñecas Negras, se examinara lo siguiente :
Página : 136
ACCESO MULTI-LLAVES
1. Los índices para ver qué zonas del hardware contienen el atributo “Negro” y el atributo “muñeca”. Si observamos la Figura No. 8.5 nos damos cuenta que la zona 4 no contiene el atributo muñeca, y las zonas 1,3,5 no tienen el atributo “negro”. Por lo tanto, solo hay que explorar la zona 2, pero sólo tiene dos registros con el atributo “negro”. 2. Por lo tanto solo se examinará los registros que contienen el atributo negro para ver si hay muñecas negras. La relación entre un archivo organizado en lista invertida y un archivo organizado en forma de multilista; es una multilista celular o particionada celular. Para el caso de que cada sublista contenga un único registro, el índice de la multilista celular es semejante al índice del archivo inverso, con la diferencia de que este último no requiere la presencia del campo contador. En las consultas sobre claves múltiples se puede accesar directamente a la zona física con los registros deseados por medio del índice llave. En los dos componentes de la organización multilista y lista invertida, se puntualizó como las longitudes de las listas se limitaban de manera que no se extendiesen más allá de ciertas fronteras o zonas del hardware. Evitando así las largas búsquedas en que se incurre al seguir una lista de una zona a otra. Esta variante de multilista puede ser útil en la reducción de movimientos de los brazos lectores del disco duro y de accesos de entrada/salida del buffer de datos. Existe una variante llamada multilista celular en paralelo. Esta técnica es un caso particular de Multilista celular que consiste en desparramar los registros de datos en módulos que pueden ser leídos simultáneamente, diseñando la distribución de manera de maximizar el número de pedazos de lista que se recorren en paralelo. Esta forma de operación se encontrará seguramente con mayor frecuencia en los sistemas del futuro que deban permitir la rápida exploración de grandes bases de datos. Otra versión de las multilistas celulares o particionada celular, son las listas invertidas celulares en paralelo en las cuales las posiciones de las celdas podrán seleccionarse de forma que dos o más de ellas puedan explorarse en paralelo, con el fin de reducir los tiempos de respuesta del sistema. El archivo de claves múltiples puede distribuirse, por ejemplo, entre varios paquetes de discos, ocupando sólo unos pocos cilindros en cada paquete y con datos diferentemente organizados en los demás cilindros.
Página : 137
ACCESO MULTI-LLAVES
Las celdas a que se refieren los índices son cilindros, varios de los cuales pueden ser explorados en paralelo. Cada cilindro posee un índice propio para acelerar la búsqueda dentro de ese cilindro y para que no sea necesario leer todas las pistas de éste. Para muchos archivos el cilindro sería una celda demasiado grande y se usarían entonces como celdas grupos menores de pistas dentro del mismo cilindro.
VIII.5 Mantenimiento (De cada una de las anteriores). El mantenimiento a un archivo son todos los cambios hechos para mejorar la eficiencia de los programas que los accesan y manipulan. Existen tres formas de mantenimiento que se les puede aplicar a un archivo organizado en forma de multillave : reestructuración, reorganización y actualización de los datos. La reestructuración consiste en aplicar cambios estructurales, por ejemplo cambiar la longitud de algún campo, incluir un campo que se requiere, eliminar algún campo que ya no es necesario, etc. La reorganización consiste en cambiar de una organización multilista a una lista invertida, a una particionada celular o multilista restringida. Cualquier cambio entre ellas por cuestión de optimización, también se le llama reorganización. Finalmente tenemos la actualización que es, que consiste en mantener los datos de los archivos exactamente igual a como ocurren en la vide de una organización. Dicho mantenimiento puede ser : Altas, Bajas y Modificaciones.
MANTENIMIENTO A UN ARCHIVO ORGANIZADO EN FORMA DE MULTILISTA. El mantenimiento de un archivo multilista consiste en cambiar el contenido del archivo, de tal forma que refleje todos los momentos transitorios del mundo actual. Estos cambios incluyen : A) La inserción de nuevos registros.- Esta acción consiste en adicionar un nuevo registro, modificando los índices y los apuntadores que sean necesarios.
Página : 138
ACCESO MULTI-LLAVES
Cuando se va a insertar un registro en una lista ligada, puede insertarse en cualquier espacio libre del archivo. Sin embargo, los apuntadores de los nodos (registros) afectados, deben ajustarse para que reflejen la secuencia lógica deseada. Por ejemplo, imagine usted que se inserta un registro al archivo utilizado en la tabla No. 8.1. El archivo quedaría de la forma en que se muestra en la Tabla No. 8.3.
Tabla No. 8.3 Insertar un registro a un archivo multilista.
En los índices y apuntadores, se adicionaría el registro de la forma como se muestra en la Figura No. 8.6. B) La modificación de datos.- Esta acción consiste en buscar un registro especifico y cambiar el contenido de uno o varios de los campos del registro; a excepción del campo llave. En el caso de las modificaciones, se hace el recorrido por los índices, hasta llegar al registro que se desea modificar. Una vez que se encontró el registro se podrá cambiar el contenido de todos los campos e excepción de los campos llave. C) La eliminación de registros.- Esta acción consiste en eliminar físicamente un registro en específico, eliminándolo tanto del área de datos como del área de los índices.
Página : 139
ACCESO MULTI-LLAVES
Figura No. 8.6 Adición de un registro en las listas ligadas de profesión y categoría.
MANTENIMIENTO A UN ARCHIVO ORGANIZADO EN FORMA DE LISTA INVERTIDA. El mantenimiento de un archivo multilista consiste en cambiar el contenido del archivo de datos y de los índices, de tal forma que refleje todos los momentos transitorios del mundo actual. Estos cambios se llevan a cabo por las siguientes tres acciones : A) La inserción de nuevos registros.- Esta acción consiste en adicionar un nuevo registro, modificando tanto al área de datos como el área de índices. En el caso de éste tipo de organización de archivos, primeramente se graba el registro al final del área de datos y se toma la dirección física donde se graba el registro y la llave del registro. A continuación, se graba la llave y la dirección física del registro en el área de índices y se reorganiza dicha área, con el fin de que los índices estén siempre ordenados.
Página : 140
ACCESO MULTI-LLAVES
B) La modificación de datos.- Esta acción consiste en tomar del usuario la clave llave del registro que se desea modificar. Con dicha llave, se hace una búsqueda binaria en el área de índices para encontrar la ubicación física del registro de datos. Una vez que se ha obtenido la ubicación física del registro, se ejecuta una función para posicionar el puntero de lectura/escritura del archivo de datos. Una vez que se localizó el registro en cuestión, podrán modificarse todos los datos que se deseen, a excepción del campo llave. Una vez que ya se actualizó el registro de datos, se re-escribe el registro de datos en el mismo lugar donde estaba originalmente. C) La eliminación de registros.- Esta acción consiste en eliminar físicamente un registro en específico, eliminándolo tanto del área de datos como del área de los índices. Para éste tipo de organización, se busca primero en el área de índices utilizando la búsqueda binaria, tomando la ubicación física y marcando el registro como baja. A continuación se posiciona directamente en el registro a eliminar del área de datos y también se marca como registro dado de baja. Por último, se ejecuta un proceso de actualización, el cual consiste en eliminar físicamente todos los registros del área de datos y del área de índices que estén marcados como bajas. Dicho proceso se ejecuta al final del todo un proceso de actualización o bien al final del día.
MANTENIMIENTO A UN ARCHIVO ORGANIZADO EN FORMA DE MULTILISTA RESTRINGIDA Y ESTRUCTURADA Y PARTICIONADA CELULAR. La actualización a los archivos organizados en forma de multilista restringida y estructurada y la particionada celular, siguen exactamente el mismo procedimiento que la organización multilista; esto por ser éstas últimas una versión de la primera.
Página : 141
CAPITULO 9 Evaluaciรณn General de Sistemas de Archivos
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Capitulo IX. Evaluación General del Sistema de Archivos. Actualmente, las empresas se enfrentan a un entorno comercial que progresivamente se hace más complejo y difícil. El mercado requiere respuestas cada vez más rápidas en un mundo donde los cambios resultan impredecibles, las situaciones evolucionan con mucha velocidad, los problemas requieren un conocimiento mayor de una cantidad elevada de factores que se interrelacionan entre sí de forma compleja, etc. Ante esto, la compañía debe adaptarse creando organizaciones más eficaces. Los directivos de las empresas buscan el tipo de organización que resulte más apropiada para los objetivos que se quieren lograr. La eficacia de una empresa depende de su capacidad para que todos sus elementos funcionen de manera coordinada para la consecución de los objetivos fijados. En un mercado como el actual en el que la competitividad y la rapidez de maniobra es esencial para el éxito, hay que contar con la información adecuada para actuar y tomar las mejores decisiones. Por ello, las organizaciones crean sistemas de información que ayuden a lograr los objetivos de la compañía. Los sistemas de información es todo el conjunto de componentes que interaccionan entre sí para lograr un objetivo común. Los sistemas de información, a través de su papel central en la economía de la información, están llevando a cabo los cambios en cuatro aspectos fundamentales: •
Las personas trabajan de manera más inteligente.
•
Un cambio global en el concepto de la industria.
•
Tanto las ideas como la información están tomando mayor importancia que el dinero.
•
Las personas que trabajan con la información dominan la fuerza del trabajo.
Todo sistema organizacional depende, en mayo o menor medida, de una entidad abstracta denominada sistema de información. Este sistema es el medio por el cual fluyen los datos de una persona o departamento hacia otros y puede ser cualquier cosa, desde la comunicación interna entre los diferentes componentes de la organización y líneas telefónicas hasta sistemas de cómputo que generan reportes periódicos para varios usuarios. La idea general, es puntualizar que en todo sistema organizacional se requieren sistemas de información tales como : Nomina, inventarios, contabilidad, cuentas por cobrar, etc. Dichos sistemas de información operaban en forma tradicional registrando todas las operaciones y movimientos en papel. Con el uso de los equipos de cómputo como herramienta para su operación se minimizó el tiempo de proceso trayendo grandes ventajas.
Página : 143
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Los sistemas de información vía computadora, requieren que la computadora cuente con un buen medio de almacenamiento de datos y dentro de dicho medio crear un buen sistema de archivos (también llamado file system), para almacenar todos los datos del sistema. El file system es aquel sistema que provee servicios a los usuarios y aplicaciones en el uso de archivos. El único camino que tiene el usuario o la aplicación para acceder a los archivos es a través de un sistema de gestión de archivos. Esto revela para el usuario o programador la necesidad de desarrollar software de propósito especial para cada aplicación y provee al sistema un medio de controlar su ventaja más importante. Los objetivos de un sistema de gestión de archivos se enumeran a continuación : •
Cumplir con las necesidades de gestión de datos y con los requisitos del usuario, que incluye el almacenamiento de datos y la capacidad de ejecutar las operaciones cotidianas.
•
Garantizar, en la medida de lo posible, que los datos en el archivo sean válidos.
•
Optimizar el rendimiento, ambos desde el punto de vista del sistema en términos de productividad global, y como punto de vista del usuario en tiempos de respuesta.
•
Para proveer soporte de E/S para una variedad de tipos de dispositivos de almacenamiento.
•
Para minimizar o eliminar la posibilidad de perdida o destrucción de datos.
•
Para proveer un conjunto estándar de rutinas de E/S.
•
Para proveer soporte de E/S para múltiples usuarios, en caso de sistemas multiusuarios.
Diferentes sistemas van a tener diferente organizaciones pero estas organizaciones son razonablemente representativas. A un nivel mas bajo los manejadores de dispositivos se comunican directamente con los dispositivos de periféricos o con sus canales o controladores. Un controlador de dispositivos es responsable de iniciar las operaciones de E/S en un dispositivo y procesar la terminación de una petición de E/S. Para operaciones de archivos, el controlador típico de dispositivos son discos y unidades de cinta. Los manejadores de los dispositivos son usualmente considerados como parte del sistema operativo. El próximo nivel esta referido con el nombre de sistema de archivos básicos, o nivel de E/S física. Esta es la interfase primaria con el ambiente fuera del sistema de la computadora. Este nivel trata con bloques de datos que son intercambiados con sistemas de disco o cinta. De este modo se preocupa de ubicar dichos bloques en el dispositivo de almacenamiento secundario y del almacenamiento intermedio de los mismos en memoria principal. Este nivel no comprenderá el contenido de los Página : 144
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
datos o la estructura de los archivos implicados. El sistema de archivos básicos es usualmente considerado como parte del sistema operativo. La E/S lógica habilita a los usuarios y aplicaciones de acceder a registros. Así, mientras el sistema de archivos básico trabaja con bloques de datos. El modulo lógico de E/S trabaja con el archivo de registros. La E/S lógica provee una capacidad de E/S de registro de propósito general y mantiene los datos básicos acerca de los archivos. Este capítulo tiene como fin evaluar en forma general un sistema de archivos; pero como para ello se requiere contar con un sistema de archivos real y no se cuenta, lo que se hizo fue tomar datos ficticios. A dichos datos ficticios se les aplicaron ciertas operaciones aritméticas y ciertas consideraciones; para finalmente obtener estimaciones del uso de un sistema de archivos tales como : análisis de los beneficios del sistema, necesidades de almacenamiento y una comparación entre costo-beneficio.
IX.1 Estimación del uso del sistema. Como Ingeniero en Sistemas Computacionales, probablemente tendrá que producir varias estimaciones para un sistema de información y sobre todo para el sistema de archivos del sistema. De hecho, tal vez sea el único responsable de producir las estimaciones de los costos. ¿Qué tipo de cosas necesitan estimarse en un proyecto de desarrollo de sistemas?. Esto varía de un proyecto a otro pero típicamente lo principal que se requiere estimar es lo siguiente : •
Recursos humanos. ¿Cuántos programadores, ingenieros, diseñadores de bases de datos, expertos en telecomunicaciones, representantes de los usuarios y otros tipos de personas se necesitan para el proyecto?
•
Tiempo. ¿Cuánto tardará el proyecto? ¿Cuánto tiempo se puede esperar invertir en cada fase típica del proyecto (por ejemplo, la tasa de análisis, la de diseño, la de programación, la de prueba, etc.)?
•
Programación de personal. Además de saber cuantas personas requiere e! proyecto, se necesita saber cuando se requerirán. Si el proyecto requiere diez programadores. ¿Se necesitarán todos al mismo tiempo?
•
Presupuesto. ¿Cuánto costará desarrollar el sistema?. El costo principal será probablemente el de los sueldos del personal de desarrollo, y esto
Página : 145
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
usualmente se puede calcular directamente una vez que se conocen los recursos humanos y la programación del personal. Hay que tener en mente que generalmente habrá que hacer las estimaciones más de una vez. Suele hacerse un conjunto de estimaciones en las primeras etapas de un proyecto, pero pueden requerirse muchas veces, a medida que los usuarios y la administración exploran las diferentes posibilidades de combinaciones. Un ejemplo obvio de esto es el posible sacrificio de funcionalidad a cambio de tiempo y viceversa (por ejemplo, el administrador del proyecto puede decir al usuario: "Estoy prácticamente seguro de que podemos entregarle el sistema para el 1 de enero si no metemos las funciones X, Y y Z"; otro ejemplo es el de la relación inversa entre personas y tiempo (por ejemplo, el usuario puede decirle al administrador del proyecto, "Si tuviera tres programadores más, podría terminar el proyecto a tiempo". Podría tomar varias iteraciones que el equipo del proyecto, la administración y la comunidad usuaria lleguen a un acuerdo aceptable. Dependiendo de su puesto dentro del proyecto y de su influencia con la administración y los usuarios, puede tener la posibilidad de prevenir que algunos de estos problemas se vuelvan más serios. Pero incluso si es un ingeniero muy abajo en el escalafón, debe estar consciente de los problemas de estimación, pues a fin de cuentas pueden determinar el éxito o fracaso de un proyecto. A menudo existe una buena cantidad de negociación al principio de un proyecto. Esto es normal, pues la comunidad usuaria entiende poco acerca de la cantidad de trabajo que un sistema de información complejo involucra, y por ello pedirán "que les bajen la luna", es decir, funcionalidad enorme en una cantidad absurdamente pequeña de tiempo, y a cambio de muy poco dinero. Mientras tanto, el administrador se enfrenta al problema de personal y presupuesto limitado; por tanto, necesita trabajar con los usuarios para ayudarles a ver las posibles combinaciones. Desafortunadamente es muy difícil hacer una estimación real del uso del sistema de archivos y lo que se propone hacer es la aplicación de programas sintéticos para emular el trabajo real de procesamiento de un sistema de cómputo. Los programas de prueba permiten someterse a una mezcla de trabajos que sean representativos de la carga proyectada de trabajo del usuario. También demuestran las técnicas de almacenamiento de datos por part6e del equipo y dan la oportunidad de probar funciones específicas realizadas por el sistema. Por medio de ésta técnica, las limitaciones del equipo se hacen evidentes en el proceso de adquisición. Las pruebas más comunes para comprobar el sistema de archivos son la velocidad del procesador central, con instrucciones típicas de lectura/ecritura en archivos de datos organizados en cualquier tipo de organización. La misma prueba se realizará en otras computadoras para mostrar la diferencia entre velocidad y desempeño atribuible al procesador de la computadora. Página : 146
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
IX.2 Análisis de los beneficios del sistema. Es mucho más difícil calcular los beneficios de un nuevo sistema de información que calcular su costo. En algunos casos puede ser imposible; debido tal vez a que el sistema es obligatorio, o porque el usuario decidió que quiere el sistema sin importar si se pueden identificar beneficios tangibles o no. El intento de calcular beneficios tangibles es el que ocasiona tantos problemas. Los usuarios probablemente hablarán entusiastamente acerca de "mejor control" o "información más oportuna" o "mejores marcos para toma de decisiones", pero si les pregunta cuanto dinero va a ahorrar o cuántas ganancias reportará, es probable que contesten: "Pues... mucho ... sencillamente, sé que será magnífico...". De hecho, probablemente lo será, pero términos como "magnífico'“ no tienen mucha cabida en hojas de cálculo que muestran comparaciones numéricas de costo/beneficio. Por ello, su más grande labor al Ilevar a cabo un cálculo de costo-beneficio será acorralar a los usuarios y hacer que identifiquen beneficios tangibles que puedan medirse y calcularse de manera cuantitativa. Si no lo puede lograr hay que tratar de lograr que comparen su nuevo sistema con algún otro con beneficios conocidos. Así, puede decir al usuario: "Suponga que tuviera que elegir entre el sistema nuevo del que estamos hablando y el sistema X. ¿Cuál consideraría más importante? Si solo se pudiera implantar uno de ellos, ¿cuál escogería?" Suponiendo que el sistema X tiene algunos beneficios tangibles asociados, esto debiera darle por lo menos una manera burda de determinar el valor aproximado del nuevo sistema. Un beneficio táctico es aquel que permite que la organización continúe realizando la misma actividad de negocios, pero a menor costo (o mayor ganancia); un beneficio estratégico es el que permite comenzar a realizar un tipo de negocio totalmente nuevo, o a hacerlo en un área totalmente nueva o con clientes nuevos.
Beneficios tácticos Los beneficios tácticos suelen asociarse con reducciones en el personal administrativo o de oficina. Aunque esto no es música para los oídos de los oficinistas, es una realidad. Un nuevo sistema de información puede permitir que se realice la misma función con la mitad o menos del número de usuarios que se ocupaban antes. Esto generalmente se debe a que los usuarios actualmente están realizando cálculos o actividades de registro de datos a mano, cuando podrían computarizarse; o se ven forzados a realizar las mismas actividades múltiples veces, cuando puede hacerse una vez con una computadora; o les toma una gran cantidad de tiempo recuperar los datos, siendo que puede hacerse rápidamente por computadora.
Página : 147
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
En algunos casos, habrá menos ahorro de lo que puede haber estimado; los reglamentos del sindicato y la bondad de algunos administradores intermedios de la organización usuaria pueden evitar el despido de algunos de esos usuarios oficinistas (cuyas indemnizaciones deben contemplarse como costo del nuevo sistema). Además, es igualmente importante darse cuenta que los niveles superiores de la administración se impresionan cada vez menos con el ahorro de uno o dos oficinistas; buscan beneficios mayores y mejores con la introducción de un nuevo sistema. Un tipo de beneficio táctico mucho más interesante es el ahorro que resulta de poder procesar transacciones de negocios más rápidamente. Poder manejar mas transacciones por segundo no solo permite reducir costos de oficina, sino que puede llevar a un mejor flujo de efectivo para la organización. Nuevamente el secreto radica en cuantificar esto y expresarlo como una cantidad en dinero. Un nuevo sistema también puede reportar ahorros en equipo de cómputo; el sistema anterior puede estar funcionando en una computadora principal cara. mientras que el nuevo funciona en una pequeña PC colocada en el escritorio del usuario. Un cambio así no sólo ahorra costos de hardware, sino también representa un ahorro en el área de costos de local, de operadores, etc. Y si el nuevo sistema reduce la cantidad de papel y de formularios impresos también ahí debe reflejarse un ahorro. Asegúrese de que sus cálculos en cuanto a esto están completos; tenga en cuenta que pueden requerirse menos archiveros, menos espacio de oficina, menos máquinas de escribir, y posiblemente menos Ilamadas telefónicas entre su organización y los clientes, etc. Los costos de mantenimiento del nuevo sistema también deben proporcionar un beneficio. Los costos de mantenimiento de hardware deben reducirse, y los costos de mantenimiento de software es de suponerse que serán interiores a los del sistema actual.
Beneficios estratégicos del nuevo sistema En cada vez más casos, los beneficios realmente interesantes e importantes de un nuevo sistema son beneficios estratégicos. No solo se trata de la oportunidad de ahorrarse unos cuantos oficinistas o unas cuantas hojas de papel, sino de la posibilidad de permitirle a la organización hacer cosas que le serian imposibles con el sistema actual. Existen varios ejemplos de beneficios estratégicos potenciales entre las que tenemos : •
Identificar o atraer nuevos clientes que de otra manera no podría identificar la organización.
•
Entrar a nuevos mercados o proporcionar nuevos productos que previamente no estaban disponibles
Página : 148
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
•
Capturar, reproducir o distribuir conocimientos y experiencia a los que previamente solo tenían acceso una o dos personas dentro de la organización.
En una economía tan competitiva como parece ser la actual, un sistema de información que puede atraer nuevos clientes o evitar la pérdida de los actuales por la competencia es realmente muy valioso. En algunos casos, esto es posible gracias a la funcionalidad que ofrece el nuevo sistema, que anteriormente no estaba disponible en otros, puede resultar de la capacidad del sistema para identificar clientes potenciales nuevos que anteriormente ignoraba la organización. Una forma más difícil de beneficio estratégico es la capacidad del sistema para proporcionar información que anteriormente no se tenia. El ejemplo típico es la capacidad de identificar tendencias y patrones. Esto es posible en casi cualquier sistema automatizado que reemplace a uno manual y usualmente cualquier sistema en línea o de tiempo real presenta tales tendencias de una manera más oportuna que la lograda con un sistema por lotes. De manera similar, un sistema con capacidades gráficas puede proporcionar información de una manera más efectiva que uno actual que produzca información en forma de tablas y salidas numéricas.
IX.3 Necesidades de almacenamiento. Debido a que el fin es hacer la estimación del uso del sistema de archivos en un sistema de información, se tiene que investigar los datos que se van a almacenar en los archivos, por lo que se hace necesario hacer las preguntas siguientes : •
Cuando se crea un archivo nuevo. ¿Se asigna de una sola vez el máximo espacio que necesite?
•
El espacio se asigna a un archivo en forma de una o más unidades contiguas que se llaman secciones. Un tamaño de una sección puede variar desde un único bloque a un archivo entero. ¿Que tamaño de sección debería usarse para asignar archivos?
•
¿Qué tipos de estructura de datos o tabla se usaran para guardar constancia de las secciones asignadas a un archivo?.
Respondiendo a las preguntas anteriores, se crea un diagrama de bloques para conocer a ciencia cierta la cantidad de archivos que se van a utilizar en el sistema de información. De cada archivo se analiza y se encuentran los datos siguientes : Cantidad total de registros, tamaño del registro, medio de almacenamiento y organización de cada archivo. Se hace un concentrado semejante al de la Tabla No. 9.1.
Página : 149
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Nombre Cantidad de Tamaño del Medio de Organización Tamaño en Del Archivo Registros. Registro Almacenamiento del Archivo Bytes Empleados Deptos Incidencias Extra Issste Hacienda Sindicato Base
500 28 250 400 500 500 500 500
270 120 170 220 245 224 212 165
Disco Duro Disco Duro Disco Duro Disco Duro Disco Duro Disco Duro Disco Duro Disco Duro
Multi - llave Directo Secuencial Indexado Secuencial Secuencial Indexado Directo
TOTAL EN BYTES ----------------->
135,000 3,360 42,500 88,000 122,500 112,000 106,000 82,500 691,860
Tabla No. 9.1 Concentrado para conocer la cantidad de espacio de almacenamiento secundario requerido.
Cabe hacer mención que los nombres de los archivos y los datos que se manejan en la Tabla No. 9.1, son ficticios y únicamente se utilizan para ejemplificar y obtener las necesidades de almacenamiento de un sistema de información. Una vez que se conoce la cantidad de bytes que ocuparán los archivos de datos, se hace un cálculo del 10 % adicional para los índices de los archivos Indexados y multillave, obteniéndose los datos que se muestran en la tabla No. 9.2. Nombre Cantidad de Tamaño del Medio de Organización Tamaño en Del Archivo Registros. Registro Almacenamiento del Archivo Bytes Empleados Extra Sindicato
500 400 500
270 220 212
Disco Duro Disco Duro Disco Duro
Indexado Indexado Indexado
135,000 88,000 106,000
Total en bytes p/área de datos --->
329,000
Total en bytes para Índices --------->
32,900
Tabla No. 9.2 Cantidad en Bytes para los índices.
Una vez que se obtienen los datos, se hace una estimación de un 50 % para contener los programas de la aplicación, se consideran 900 megabytes para el Sistema Operativo y dos megabytes para un software antivirus que será actualizado mensualmente o antes si es necesario, obteniéndose el total que se muestra en la Tabla No. 9.3.
Página : 150
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Total de bytes Total de bytes Total de bytes Total de bytes Total de bytes
para el área de datos para el área de índices para los programas de la aplicación para el Sistema Operativo para un antivirus
691,860 32,900 362,380 900,000 2,000
Gran total en bytes ------------------------>
1,989,140
Tabla No. 9.3 Estimación General para el Sistema de Archivos.
Se debe considerar en forma global un incremento del 12 % mensual, por concepto de actualización de los datos y crecimiento en forma general del sistema de archivos. Dicho incremento se plasma en la tabla No. 9.4. Mes Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre
Inicial 1,989,140 2,227,837 2,495,177 2,794,598 3,129,950 3,505,544 3,926,210 4,397,355 4,925,037 5,516,042 6,177,967 6,919,323
Incremento 238,697 267,340 299,421 335,352 375,594 420,665 471,145 527,683 591,004 661,925 741,356 830,319
Total 2,227,837 2,495,177 2,794,598 3,129,950 3,505,544 3,926,210 4,397,355 4,925,037 5,516,042 6,177,967 6,919,323 7,749,642
Tabla No. 9.4 Incremento global mensual.
De los datos plasmados en las Tablas No. 9.1 al 9.4 se deduce que el disco duro como medio de almacenamiento requerido para éste pequeño caso de estudio, debe considerarse de al menos 3 Gigabytes al iniciar operaciones y al año debe tener una capacidad para almacenar 8 gigabytes y de esa forma se hace el cálculo para los años posteriores. Una buena práctica es adquirir un disco duro con una capacidad suficiente para que funcione correctamente en al menos 3 años y posteriormente se verá la posibilidad de crecimiento o escalamiento de la computadora según sea el caso. Cabe hacer mención que debe considerarse la adquisición de algún medio de almacenamiento secundario para hacer respaldos mensualmente, pero dichos respaldos deben quedar fuera de la computadora por si sufre daños el disco duro o la
Página : 151
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
propia computadora. Se sugiere pensar en la compra de cintas o cartuchos para hacer el proceso de respaldo. Los respaldos deben contener únicamente lo siguiente : Todos los archivos de datos del sistema, los archivos de índices y los programas de la aplicación. Todos ellos porque son actualizados dinámicamente en tiempo real. En esta estimación se consideró exclusivamente el medio de almacenamiento (disco duro) de la computadora, sin considerarse la configuración propia de la computadora, debido a que dicha evaluación es realizada en otra etapa del análisis y diseño de sistemas de información.
IX.4 Comparación entre costo y beneficio. Este tema se dedica a las técnicas de cálculos de costo/beneficio que es parte importante de toda evaluación de un sistema de archivos. El propósito desde luego, es mostrar a los usuarios del nuevo sistema, al igual que a otros grupos de administradores de la organización, que los beneficios que se esperan obtener con el nuevo sistema superan a los costos esperados. Como ingeniero en sistemas computacionales, se le podría dar la tarea de desarrollar un modelo de costo/beneficio para el sistema de archivos de una aplicación. Incluso como ingeniero en jefe a cargo de todo el proyecto, podría ser que no esté involucrado en los cálculos de costo/beneficio porque podrían estar a cargo, por ejemplo, de un grupo de finanzas separado. A continuación se examinan los aspectos de los cálculos de costo/beneficio:
ANÁLISIS DE COSTOS El propósito de esta actividad, es calcular todos los costos anticipados asociados con el sistema de archivos; no solo el costo de construirlo, sino también el costo de instalarlo, de operario y de mantenerlo, además de los costos extras.
El costo de construir el sistema En la mayoría de los casos, de la administración puede obtener el salario promedio de las distintas categorías de personas incluidas en su proyecto; esto se puede expresar en términos de costos por hora, por mes, o anuales.
Página : 152
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
En muchos proyectos deberá incluir también el costo de preparar al personal de desarrollo. Puede ser que los miembros del equipo necesiten prepararse en el área de las nuevas metodologías de desarrollo, los nuevos lenguajes de programación o las diversas habilidades sobre el software y hardware asociados con el equipo comercial que se esté usando. Otro costo que hay que tener en cuenta es el de tiempo de computadora, terminales o estaciones de trabajo y herramientas de desarrollo (editores, paquetes de prueba, etc.) que se ocupan para el desarrollo del sistema. En algunos casos, las terminales y las herramientas pueden existir ya y por tanto el proyecto no incurrirá en gastos adicionales; en casi todos los casos, sin embargo, el proyecto tendrá que incluir los costos del tiempo de computadora.
El costo de instalar el sistema En un proyecto sencillo, pudiera ser suficiente Ilamar por teléfono al usuario y decirle que se terminó de desarrollar el sistema; puede entregarse en un disco flexible y dejar que él mismo lo instale en su computadora personal. Pero en un proyecto grande y complejo, el proceso de instalación es más difícil e incluye muchos gastos. Entre ellos tenemos los siguientes: • • • •
Gastos de capacitación de usuarios Gastos de conversión de sistemas de archivos Gastos de ejecuciones paralelas Gastos del equipo de desarrollo durante la instalación
Típicamente, toda la comunidad usuaria necesitará de cierta capacitación para familiarizarse con el uso del sistema.
Costos operacionales Una vez instalado el sistema, al usuario le costará dinero continuar operándolo. Sin embargo, esto también debe representar un área en la que el nuevo sistema ahorrará dinero, dado que es de suponerse que será más económico que el que actualmente tiene él. Algunos ejemplos típicos de costos operacionales son: • • • •
Costos de hardware y materiales y equipo relacionados Costo de software Costos de personas Costos de mantenimiento
Un costo final que debe estimarse cuando se calcula el costo operacional del nuevo sistema es el de la planta física. Si el nuevo sistema va a operar en una Página : 153
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
computadora principal centralizada que ya está instalada estos costos pueden estar incluidos en el costo global del hardware. Sin embargo, si se está desarrollando un sistema completamente nuevo que tendrá su propio local de operaciones, éste podría ser un gasto importante. Si se incurriera de manera instantánea en todos los costos del sistema, y todos los beneficios se observaran de manera instantánea, sería relativamente sencillo representar el valor del sistema como la diferencia entre costos y beneficios. Pero, como los gastos usualmente se hacen en el transcurso de algunos años y si el gasto se llegara a hacer en un momento (por ejemplo, una compra de hardware), las políticas de contabilidad de la organización pudiera dictaminar que se reparta a lo largo de un periodo de varios años. Así, probablemente tendrá que demostrar los costos y beneficios que del sistema a lo largo de cierto periodo de tiempo. Existen cuatro métodos comunes para hacer comparar los costos contra los beneficios. Dichos métodos se enumeran a continuación : • • • •
Flujo de efectivo. Rendimientos de inversiones (en ingles, ROI). Tasa interna de rendimiento (IRR). Valor neto actual (VNA).
. Aplicando los cuatro métodos comunes, se podrá hacer la comparación de los costos con los beneficios y en ese momento se podrá evaluar si el sistema de archivos vino a resolver un problema a bajo costo o si su utilización salió mas cara que como venía operando.
Página : 154
BIBLIOGRAFIA
[t1] Análisis y Diseño Orientado a Objetos. James Martín y James J. Odell. Prentice Hall. [t2] Base de Datos. Serie Informática de Gestión. Miguel A. Rodríguez Almeida. Mc. Graw Hill. [t3] C++ a su alcance. Un enfoque Orientado a Objetos. Luis Joyanes Aguilar. Mc. Graw Hill. [t4] Computación y Programación Moderna. Perspectiva integral de la Informática. Guillermo Levine Gutierrez. Addison-Wesley. [t5] Estructura de datos y Organización de Archivos. Mary E. S. Loomis. Prentice Hall. [t6] Estructura de Datos. Algoritmos, abstracción y objetos. Luis Joyanes Aguilar e Ignacio Zahonero Martínez. Mc. Graw Hill. [t7] Estructura de la Información. Juan F. García de Sola. Mc. Graw Hill. [t8] Estructuras de Archivos. Un conjunto de herramientas conceptuales. Michael J. Folk y Bill Zoellick Addison – Wesley Iberoamericana. [t9] Estructuras de Datos. Especificación, diseño e implementación. Xavier Franch Gutiérrez. Alfaomega. [t10] Estructuras de Datos. Referencia práctica con Orientación a Objetos. Román Martínez y Elda Quiroga. Instituto Tecnológico y de estudios Superiores de Monterrey. Thomson Learning.
Página :
155
[t11] Fundamentos de Programación. Luis Joyanes Aguilar, Luis Rodríguez Bahena y Matilde Fernández Azuela. Mc. Graw Hill. [t12] Introducción a la Programación con ejemplos en Visual Basic, C, C++ y Java. Ramón A. Mata-Toledo y Pauline K. Cushman. Mc. Graw Hill. [t13] Introducción a los Sistemas de Bases de Datos. Jeffrey D. Ullman y Jennifer Widom. Prentice Hall. [t14] Lenguaje C y Estructura de Datos. Aplicaciones generales y de gestión. Juan F. García de Sola y Vicente Garcerán Hernández. Mc. Graw Hill.
[t15] Modelado y Diseño Orientado a Objetos. Metodología OMT. James Rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy y William Loresen. Prentice Hall.
PAGINAS DE INTERNET CONSULTADAS. [i-1] http://www.lafacu.com/apuntes/informatica/organizacion_de_computadoras/default.htm [i-2] http://www.itlp.edu.mx/publica/tutoriales/admonarch/index.htm [i-3] http://www.info-ab.uclm.es/labelec/solar/Discos/33cdrom.htm [i-4] http://www.domotica.net/ir'www.monografias.com/trabajos/perifericos/perifericos.shtml [i-5] http://www.inf.udec.cl/~sistcomp/c5.html [i-6] http://www.lafacu.com/apuntes/informatica/Los_archivos_II/default.htm [i-7] http://www.uap.edu.pe/Fac/02/trabajos/02119/archivos.htm [i-8] http://www.intel.com
Página :
156
GLOSARIO DE TERMINOS.
Acceso Directo.- Es la facilidad para accesar cualquier registro, de un conjunto sin necesidad de accesar los registros precedentes físicamente. 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 procesos de E/S que transmiten información entre los almacenamientos primario y secundario. Almacenamiento temporal o buffer.- Es un área de almacenamiento reservada para la ejecución de operaciones de entrada/salida, en el cual los datos son leídos y de la cual los datos son escritos. Archivo multilista celular.- Es un archivo multilista en el cual ninguna lista ligada sobrepasa el límite entre las áreas de celdas físicas. Archivo multilista de longitud controlada.- es un archivo multilista donde ninguna lista ligada excede una longitud especificada. Bloque.- Es una colección de registros contiguos registrados como una sola unidad; algunas veces es llamado registro físico. Búsqueda.- Es el proceso de tratar de encontrar el o los registros que satisfacen un criterio dado. Cilindro.- Conjunto de pistas en un disco que se encuentran directamente una sobre la otra. Se puede accesar a todas las pistas de un cilindro sin tener que mover el brazo de acceso, lo que significa que se puede tener acceso a ellas sin gasto de tiempo de desplazamiento. Coercitividad.- es una propiedad física que se define como la resistencia de los materiales magnetizados. Un material con alto nivel de coercitividad, necesitará un campo magnético más intenso para alterar la orientación de sus partículas. Colisión.- Situación que ocurre cuando dos valores de llaves diferentes se mapean a la misma dirección física. Controlador.- Dispositivo que controla directamente la operación de uno o más dispositivos de almacenamiento secundario, como unidades de disco, unidades de cd-rom, etc.
Página :
157
Direccionamiento por Cilindro.- Es una técnica para el direccionamiento de los registros de datos sobre un disco duro, donde una dirección de registro es su número de cilindro, numero de superficie y número de registro. Estructura de datos.- Es una clase de datos que se caracteríza por su organización lógica y operaciones que se definen sobre ella. También es conocida como tipo de datos. Indice de inversión.- Es un índice que contiene todos los valores que la llave primaria o secundaria tiene en el archivo de datos y apuntadores a todos los registros de datos que tienen los valores correspondientes. Llave.- Es el campo que identifica a un registro de datos. Mb.- Megabyte (millones de bytes que realmente equivale a : 1024,000,000 bytes). Ms.- milisegundos. Ordenamiento.- Es el proceso para ordenar una colección de llaves en un orden específico. Pista.- Es un área sobre la superficie de un disco duro, puede ser leída sin el reposicionamiento de la cabeza de lectura/escritura. R.p.m.- Significa revoluciones por minuto que gira un disco duro. Sector.- Es la parte de una pista sobre el disco duro que puede ser accesada por las cabezas de lectura/escritura durante el desplazamiento rotacional predeterminado del dispositivo.
Página :
158