Está en la página 1de 31

1.1 Conceptos bsicos de almacenamiento 1.1.1 Bit 1.1.2 Byte 1.1.3 Campo Elemental 1.1.

4 Campo Grupal o Agregado de Datos 1.1.5 Registro 1.1.6 Archivo 1.1.7 Base de Datos 1.2 Clasificacin de los archivos 1.2.1 Por su organizacin. Caractersticas 1.2.1.1 Secuencial 1.2.1.2 Directo o relativo 1.2.1.3 Secuencial/indexado 1.2.2 Por su contenido. Caractersticas 1.2.2.1 Maestro 1.2.2.2 De transacciones 1.2.2.3 Histrico

Almacn de datos
En el contexto de la informtica, un almacn de datos (del ingls data warehouse) es una coleccin de datos orientada a un determinado mbito (empresa, organizacin, etc.), integrado, no voltil y variable en el tiempo, que ayuda a la toma de decisiones en la entidad en la que se utiliza. Se trata, sobre todo, de un expediente completo de una organizacin, ms all de la informacin transaccional y operacional, almacenado en una base de datos diseada para favorecer el anlisis y la divulgacin eficiente de datos (especialmente OLAP, procesamiento analtico en lnea). El almacenamiento de los datos no debe usarse con datos de uso actual. Los almacenes de datos contienen a menudo grandes cantidades de informacin que se subdividen a veces en unidades lgicas ms pequeas dependiendo del subsistema de la entidad del que procedan o para el que sean necesario. En un almacn de datos lo que se quiere es contener datos que son necesarios o tiles para una organizacin, es decir, que se utiliza como un repositorio de datos para posteriormente transformarlos en informacin til para el usuario. Un almacn de datos debe entregar la informacin correcta a la gente indicada en el momento adecuado y en el formato correcto.

Metadato Uno de los componentes ms importantes de la arquitectura de un almacn de datos son los metadatos. Se define comnmente como "datos acerca de los

datos", en el sentido de que se trata de datos que describen cul es la estructura de los datos que se van a almacenar y cmo se relacionan. El metadato documenta, entre otras cosas, qu tablas existen en una base de datos, qu columnas posee cada una de las tablas y qu tipo de datos se pueden almacenar. Los datos son de inters para el usuario final, el metadato es de inters para los programas que tienen que manejar estos datos. Sin embargo, el rol que cumple el metadato en un entorno de almacn de datos es muy diferente al rol que cumple en los ambientes operacionales. En el mbito de los data warehouse el metadato juega un papel fundamental, su funcin consiste en recoger todas las definiciones de la organizacin y el concepto de los datos en el almacn de datos, debe contener toda la informacin concerniente a: Tablas Columnas de tablas Relaciones entre tablas Jerarquas y Dimensiones de datos Entidades y Relaciones

Cmo se almacena la informacin


Bit. Elemento ms pequeo de la clave binaria. Los circuitos electrnicos digitales se caracterizan por manipular todas sus seales en dos estados posibles: cero y uno. La informacin que procesan estos circuitos, por tanto, debe ser representada por tantas unidades de informacin como sean necesarias, pero siempre y cuando tengan uno de los dos estados posibles. Estas unidades binarias de informacin se llaman bits. Los circuitos digitales, por tanto, estn diseados para operar internamente con bits. Un procesador es un circuito digital capaz de ejecutar un conjunto previamente definido de instrucciones sencillas que se denomina su lenguaje mquina. Byte (KB, MB. GB, TB, PB, EB, ZB, YB) Representa una palabra. Es la unidad de informacin del computador digital. Campo elemental, Aquel que no tiene subdivisin o no necesita subdividirse. Campo Grupal, Aquel que tiene una o mas subdivisiones Registro, grupo de campos

Archivo, grupo de registros Base de Datos, Grupo de archivos

La memoria RAM
Los circuitos digitales nicamente pueden procesar datos representados con ceros y unos, pero para ello deben estar almacenados en otro circuito que permita a su vez su modificacin. En el contexto de un ordenador este dispositivo suele ser la memoria RAM (random access memory), un circuito que contiene en su interior una tabla que almacena informacin en cada uno de sus compartimentos. Como toda tabla, es preciso saber dos de sus dimensiones: el tamao de cada uno de sus elementos, y el nmero de elementos de los que dispone. Actualmente, las memorias convencionales almacenan la informacin en elementos de tamao 1 byte. Por lo tanto una memoria se puede ver como una tabla que contiene un determinado nmero de bytes. Los elementos de esta tabla estn numerados con nmeros naturales comenzando por el cero. El nmero correspondiente a cada una de los elementos se denomina direccin de memoria y se suele representar de forma abreviada por el smbolo @. Al conjunto de nmeros que representan las direcciones de una me moria se le denomina su espacio de direcciones. La figura 3.1 ilustra la estructura, contenido y direcciones de una memoria RAM.
Figura 3.1. Estructura de la memoria RAM

El acceso a los datos internos de la memoria viene determinado por el tamao de sus celdas o elementos. Tal y como est estructurada, la memoria no ofrece acceso directo a cualquiera de sus bits, sino que es preciso primero obtener un byte y posteriormente acceder al bit pertinente. Los procesadores incluyen en su lenguaje mquina las instrucciones necesarias para poder manipular los bits de un byte. Si se quiere, por tanto cambiar un bit de un byte de memoria se debe leer el byte entero, utilizar instrucciones para cambiar su valor, y escribirlo de nuevo en memoria. Internamente la memoria est implementada por un conjunto de transistores diseados de tal forma que pueden almacenar la informacin dada. La unidad responsable de almacenar un bit de informacin se denomina celda. Un chip de memoria no es ms que un circuito que contiene un determinado nmero de celdas en cuyo interior se almacena un bit. Existen dos tcnicas para el diseo de memoria: esttica y dinmica. La memoria RAM esttica o SRAM es un circuito que una vez que se escribe un dato en una de sus celdas lo mantiene intacto mientras el circuito reciba voltaje. En cuanto el voltaje desaparece, tambin lo hace la informacin. La celda de dicha memoria est compuesta por alrededor de seis transistores conectados de forma similar a un registro. El tiempo de lectura de una posicin de memoria compuesta por ocho celdas suele ser del orden de decenas de nanosegundos (1 nanosegundo son 10 -9 segundos).

La memoria RAM dinmica o DRAM es similar a la anterior pues tambin almacena informacin, pero su estructura interna es radicalmente diferente. La celda de memoria dinmica consta nicamente de un transistor y un condensador. Este ltimo es el que almacena una carga, mientras que el transistor se utilizar para su carga y descarga. La celda de memoria dinmica almacena el valor 1 cuando el condensador est cargado, y cero cuando est descargado. El problema que presenta esta celda es que, a pesar de estar conectada continuamente a su alimentacin, si el condensador almacena el valor 1 y no se realiza ninguna operacin, su carga se degrada hasta alcanzar el valor 0. Es decir, la celda de esta memoria no es capaz de mantener el valor uno durante un tiempo arbitrario, sino que acaba perdindose. Pero, tal y como est diseada la lgica de lectura, al leer una celda se refresca totalmente su valor, y por tanto se recupera la prdida de carga que pudiera haberse producido. El tiempo que tarda una celda en perder su informacin es del orden de milisegundos (1 milisegundo son 10 -3 segundos). Este comportamiento de las celdas puede parecer intil para almacenar informacin, pero si el contenido se lee de forma peridica, la memoria dinmica se comporta de forma idntica a la esttica. Los circuitos de memoria dinmica incluyen la lgica necesaria para que sus celdas sean continuamente ledas independientemente de las operaciones de lectura y escritura realizadas por el procesador, de esta forma se garantiza que su contenido no se pierde. A esta operacin se le conoce con el nombre de refresco. La mayora de ordenadores utilizan memoria dinmica en su memoria principal y las principales razones para ello son el coste y el espacio. La celda de memoria dinmica con un nico transistor y un condensador es aproximadamente la cuarta parte del tamao de la celda de SRAM que consta de alrededor de seis transistores. Pero, adems de ser ms pequea, el proceso de diseo de una celda DRAM tiene un coste mucho menor por lo que los chips de memoria de gran capacidad de almacenamiento se disean con memoria dinmica. La memoria esttica tiene una clara ventaja frente a la dinmica y es que su tiempo de acceso es menor. En la realidad, en un ordenador se utilizan ambos tipos de memoria. Para aquellos componentes en los que se necesite mayor capacidad de almacenamiento la memoria dinmica es la idnea. En aquellos en los que se quiera un tiempo de acceso ms reducido se utiliza la memoria esttica. El diseo de un circuito de memoria es significativamente ms simple que el de un procesador. La mayor parte del circuito son rplicas de la celda que almacena un bit.

Adems de estas celdas, las memorias incluyen la lgica necesaria para el refresco (si son DRAM) y para realizar las operaciones de lectura y escritura.
Operaciones sobre memoria

Las dos operaciones que permite una memoria son lectura y escritura. En la operacin de lectura, la memoria recibe una direccin y devuelve el byte contenido en el elemento con dicho nmero. En la operacin de escritura la memoria recibe una direccin y un byte y sin devolver resultado alguno sobreescribe el byte en el elemento correspondiente. Otra forma posible de especificar estas operaciones es mediante la notacin tpica de un lenguaje de programacin.

byte Lectura(direccin d): Dada una direccin de memoria devuelve el byte almacenado en dicho elemento. void Escritura(direccin d, byte b): Almacena el byte b en el elemento de direccin d.

El contenido de los datos almacenados inicialmente en la memoria es indefinido. Si al encender el ordenador, la primera operacin que se realiza es de lectura sobre memoria RAM, el resultado es indefinido. De esta propiedad se deduce que toda operacin de lectura se debe ejecutar sobre una posicin de memoria que haya sido previamente escrita. La figura 3.2 muestra el efecto de un conjunto de operaciones sobre memoria.
Figura 3.2. Operaciones sobre memoria

Al ser la memoria un circuito digital, todos sus datos deben ser codificados igualmente con ceros y unos y esto incluye a los parmetros que reciben las operaciones de lectura y escritura. El dato a leer o escribir es un byte y por tanto ya est codificado en binario. Las direcciones tambin deben estar codificadas en binario, y como son nmeros naturales (son positivos y comienzan por cero) la codificacin utilizada es base dos. La lectura de un dato consiste en enviar a la memoria los bits que codifican una direccin, y la memoria devuelve ocho bits. La operacin de escritura consisten en enviar a la memoria los bits que codifican una direccin y ocho bits de datos, y stos ltimos se almacenan en la posicin especificada. La codificacin de las direcciones tiene una relacin directa con el tamao de la memoria. Todo byte en memoria tiene una direccin, y el nmero de bytes corresponde con el nmero mximo de direccin que se puede codificar. Al utilizar la codificacin en base 2 se deduce que una memoria cuyas direcciones se codifican con n bits puede tener como mximo un tamao de 2n bytes con direcciones desde 0 hasta 2n-1. En

consecuencia, el tamao T de memoria y el nmero n de bits que se utilizan para codificar las direcciones estn relacionadas por la ecuacin

Debido a esta relacin entre los bits que codifican una direccin y el nmero de elementos, las memorias suelen tener un tamao potencia de 2. El coste de incluir un nmero determinado de bits hace que se aprovechen todas sus combinaciones. El tamao de la memoria se mide en mltiplos que no siguen las reglas convencionales de multiplicacin por potencias de 10 sino por potencias de 2. As, un kilobyte son 2 10 bytes o 1024 bytes. Las unidades de medida del tamao de memoria as como sus exponentes y los prefijos de su nomenclatura se muestran en la tabla 3.1.
Tabla 3.1. Unidades de almacenamiento de informacin en bytes Prefijo Smbolo Potencia kilo mega giga tera peta exa zetta yotta K M G T P E Z Y 2 2 2 2 2 2 2 2
10

20

30

40

50

60

70

80

Conexin entre memoria y procesador

La conexin entre la memoria y el procesador debe permitir que se realicen las operaciones de lectura y escritura de la forma descrita en la seccin 3.2. Para ello son necesarios dos buses. El primero para que la memoria reciba la direccin del

procesador, y el segundo para que el procesador enve a la memoria el dato a escribir o que la memoria enve al procesador el dato a leer. Adems de estos dos buses el procesador debe notificar a la memoria el tipo de operacin. La figura 3.3 muestra de forma esquemtica cmo estn conectadas estas seales.
Figura 3.3. Seales que conectan el procesador y la memoria

Almacenamiento de datos

La nica estructura que ofrece la memoria es la organizacin de sus elementos en bytes. Por tanto, para almacenar los datos que manipula un procesador es imprescindible saber de antemano su tamao. El tamao de algunos datos bsicos viene definido por la arquitectura del propio procesador. Por ejemplo, el lenguaje mquina de la arquitectura IA-32 contiene instrucciones mquina para operar enteros de 32 bits. Esto no quiere decir que el procesador no pueda manejar enteros de otros tamaos, sino que el procesador manipula estos de forma mucho ms rpida y eficiente. Nmeros de otros tamaos pueden ser manipulados igualmente pero con un coste mayor en tiempo de ejecucin. Los lenguajes de programacin de alto nivel como Java definen un conjunto de datos denominados bsicos y un conjunto de mecanismos para definir datos complejos en base a ellos. Como los programas escritos en estos lenguajes deben ejecutar en diferentes equipos con diferentes procesadores, es difcil definir el tamao de los datos tal que se ajuste a todos ellos. El compilador se encarga de transformar las operaciones escritas en lenguaje de alto nivel en las instrucciones ms adecuadas para

manipular los datos en el procesador pertinente. La tabla 3.2 muestra los tipos de datos bsicos definidos en Java as como su tamao.
Tabla 3.2. Tipos de datos bsicos en el lenguaje Java Tipo Contiene Tamao 1 bit 8 bits 16 bits 16 bits 32 bits [-128, 127] [0, 65535] [-32768, 32767] [-2147483648, 2147483647] [-9223372036854775808, long Entero 64 bits 9223372036854775807] float IEEE-754 Coma Flotante 32 bits [1.4012985E-45, 3.4028235E+38] [4.94065645841246544E-324, double IEEE-754 Coma Flotante 64 bits 1.7976931348623157E+308] Rango

boolean true, false byte char short int Entero Caracter Unicode Entero Entero

La regla para almacenar datos en memoria es utilizar tantos bytes como sean necesarios a partir de una direccin de memoria. En adelante, la posicin de memoria a partir de la cual est almacenado un dato se denominar su direccin de memoria. De forma anloga, cuando se dice que un dato est en una posicin de memoria lo que significa es que est almacenado en esa posicin y las siguientes que se precisen.

Almacenamiento de booleanos
Los valores booleanos, a pesar de ser los ms sencillos, no son los ms fciles de almacenar. La memoria permite el acceso a grupos de 8 bits (1 byte) por lo que almacenar un nico bit significa utilizar una parte que no es directamente accesible sino que requiere procesado adicional. Por este motivo se intenta almacenar varios booleanos juntos y de esta forma maximizar la informacin contenida en un byte. Esta estrategia se utiliza cuando es fcil saber la posicin de un booleano dentro del byte. En el caso de que esto no sea posible, se utiliza un byte para almacenar un nico bit, con lo que los 7 bits restantes se desperdician. La figura 3.5 muestra estas dos posibles situaciones. Figura 3.5. Almacenamiento de booleanos

Si un conjunto de 8 booleanos se agrupan para ocupar un byte por entero, para acceder a un valor concreto se precisan instrucciones especiales contenidas en prcticamente todos los lenguajes mquina de los procesadores y suelen estar basadas en instrucciones lgicas tales como la conjuncin o la disyuncin. En el caso de la arquitectura IA-32, mediante operaciones como and u or, la utilizacin de mscaras y la consulta de los bits de estado se pueden manipular los booleanos en un byte.

Almacenamiento de caracteres
La codificacin ASCII utiliza 8 bits para representar caracteres. La forma de almacenar estos datos en memoria es simplemente utilizando un elemento o byte para cada letra. La figura 3.6 muestra cmo se almacenan en memoria un conjunto de letras representadas por su valor en ASCII. Figura 3.6. Almacenamiento de un string

Todo smbolo tiene su correspondiente cdigo, incluido el espacio en blanco (0x20). Si la codificacin utilizada fuese Unicode UTF-16, cada smbolo ocupa dos posiciones consecutivas de memoria en lugar de una.

Almacenamiento de enteros y naturales


Para almacenar un nmero entero o natural en memoria es imprescindible saber su tamao en bytes. Las representaciones ms utilizadas incluyen tamaos de 2, 4, 8 o hasta 16 bytes. Siguiendo la regla genrica de almacenamiento, se utilizan tantos bytes consecutivos a partir de una posicin dada como sean precisos. El tamao de esta representacin no slo influye en el lugar que ocupan en memoria sino tambin en el diseo de las partes del procesador que realizan las operaciones. Por ejemplo, si los enteros se representan con 32 bits, el procesador suele incluir una unidad aritmtico lgica con operandos de 32 bits. Pero en esta representacin es esencial saber en qu orden se almacenan estos bytes. Dado un entero que ocupa n bytes a partir de la posicin p de memoria, se pueden almacenar estos bytes comenzando por el byte menos significativo del nmero o por el ms significativo. Estas dos posibilidades son

igualmente factibles. Considrese el ejemplo de un procesador que manipula nmeros enteros de 32 bits. La representacin del entero 70960543 en complemento a 2 es 0x043AC59F y se almacena a partir de la posicin de memoria 0x00001000. La figura 3.7 muestra las dos posibles formas de almacenamiento dependiendo de si se seleccionan los bytes de menor a mayor significacin o al contrario. Figura 3.7. Almacenamiento de enteros en memoria

A estas dos formas de almacenar nmeros enteros o naturales de ms de un byte en tamao se les conoce con el nombre de little

endian y big endian. El primero almacena los bytes de menor a

mayor significacin, mientras el segundo almacena primero el byte de mayor significacin. Cada procesador utiliza un nico mtodo de almacenamiento para todos sus enteros o naturales, y en la actualidad coexisten procesadores que utilizan

little endian con otros que utilizan big endian.

El problema de la existencia de ambas polticas de almacenamiento surge cuando dos procesadores intercambian nmeros. Como una secuencia de bytes es interpretada de forma diferente por los dos procesadores, se debe realizar un proceso de traduccin por el que se garantiza que ambos manipulan los mismos datos. La figura 3.8 muestra cmo la interpretacin de un nmero de 4 bytes con ambas formas ofrece resultados diferentes. Figura 3.8. Interpretacin de bytes en little

endian y big endian

Existen numerosos argumentos a favor y en contra de ambas notaciones pero ninguno de ellos es concluyente. Quizs el ms intuitivo a favor de la notacin

little endian es que si un nmero se big endian, la

almacena siguiendo este esquema y su representacin se extiende en tamao, nicamente es necesario utilizar ms posiciones de memoria sin reorganizar los bytes. En cambio, en el caso de misma operacin requiere almacenar los bytes en diferentes posiciones de memoria.

Almacenamiento de instrucciones
El almacenamiento de instrucciones consiste simplemente en utilizar posiciones consecutivas de memoria para almacenar los bytes de la codificacin de cada una de ellas. Una secuencia de instrucciones, por tanto, requiere tantas posiciones de memoria como la suma de los tamaos de cada una de las codificaciones. Existen dos tipos de lenguajes mquina. Los procesadores con formato fijo de instruccin almacenan las instrucciones en memoria en porciones idnticas. En este caso, dada una porcin de memoria que contiene una secuencia de instrucciones es muy fcil acceder a una de ellas de forma arbitraria, pues todas ocupan lo mismo. El caso de instrucciones de formato variable es ligeramente ms complejo. Dada una porcin de memoria, para saber qu posiciones ocupa cada instruccin es preciso interpretar la informacin que stas codifican. Esto es precisamente lo que hace el procesador al comienzo de la ejecucin de cada instruccin, solicita de memoria tantos bytes como sean necesarios para obtener toda la informacin referente a la instruccin. Una vez concluida esta fase, la siguiente instruccin comienza en la posicin contigua de memoria. La figura 3.9 muestra un ejemplo de cmo se almacenan los dos posibles formatos de instruccin.

Figura 3.9. Almacenamiento de instrucciones en formato fijo y variable

En el almacenamiento de instrucciones no es preciso distinguir entre los estilos

big endian o little

endian pues en la codificacin no existen bytes ms significativos que otros. El convenio que se utiliza
es que se escriben los bytes de la instruccin en el mismo orden en el que estn almacenados en memoria.

Tamao de datos en operaciones de lectura y escritura


La memoria almacena un byte en cada una de sus posiciones que a su vez tiene una direccin nica. El funcionamiento de la memoria est totalmente definido mediante esta estructura. Sin embargo, cuando la memoria forma parte del conjunto de un ordenador, el tiempo que tarda en realizar una operacin es mucho mayor comparado con el que tarda el procesador en ejecutar una instruccin. En otras palabras, los accesos a memoria requieren tanto tiempo que retrasan la ejecucin de las instrucciones del procesador.

Existen mltiples decisiones de diseo en la arquitectura de un procesador que se utilizan para paliar este retraso. De entre ellas, una de las ms efectivas es realizar las operaciones en memoria en paquetes de informacin mayores de un byte. Es decir, cuando el procesador lee y escribe en memoria, en lugar de trabajar con un nico byte, los datos estn compuestos por ms de un byte en posiciones consecutivas. Esta tcnica tiene la ventaja de que un nico acceso a memoria para, por ejemplo, lectura, proporciona ms de un byte en posiciones consecutivas. El inconveniente es que es posible que en ciertas ocasiones, se obtenga de memoria ms informacin de la estrictamente necesaria. Generalmente, todo procesador ofrece la posibilidad de escribir un cierto tamao de datos en bytes (mayor que uno) en una nica operacin de memoria. La forma en que se implementa este mecanismo es utilizando mltiples mdulos de memoria. Por ejemplo, supngase que se quiere manipular la memoria tal que las operaciones se hagan en grupos de cuatro bytes simultneamente. El ejemplo que se describe a continuacin se puede realizar con cualquier agrupamiento de informacin que sea potencia de dos. La primera decisin es almacenar los datos en cuatro mdulos o circuitos independientes de memoria de tal forma que la posicin 0 de memoria se almacena en el primer mdulo, la posicin 1 en el segundo, y as sucesivamente. La quinta posicin de memoria se almacena de nuevo en el primer mdulo. Con este esquema, el mdulo en el que est almacenado el dato de la posicin p se obtiene mediante la expresin p % 4. La consecuencia de este patrn de almacenamiento es que se puede acceder a cuatro bytes de memoria en el tiempo en el que se lee un byte. Dada una direccin de memoria, cada mdulo devuelve un byte y se obtienen los cuatro en el tiempo de retardo de un nico mdulo pues todos trabajan en paralelo. Por tanto, dada una direccin de memoria d, con esta tcnica, la memoria es capaz de devolver los datos desde la posicin d / 4 (donde esta divisin es divisin entera) a la posicin d / 4 + 3 en el tiempo de retardo de un nico mdulo. Otra interpretacin de esta organizacin es que la memoria contiene grupos de 4 bytes y cada uno de ellos est almacenado en la posicin d / 4. Pero, dada la direccin d, cmo se obtiene el nmero d / 4?. La direccin de memoria est codificada en base 2, y como esta operacin es una divisin por una potencia de la base, equivale a tomar la direccin ignorando los dos bits de menos peso, pues 4 = 2 . En realidad, dada la direccin del cociente de la divisin entera entre cuatro es el nmero de grupo mientras que el resto de esta divisin representa el byte del grupo de 4 al que se refiere d. La figura 3.10 muestra cmo implementar este esquema de acceso en una memoria con direcciones de 32 bits. Figura 3.10. Acceso a memoria en grupos de 4 bytes
2

Cada mdulo de memoria recibe 30 de los 32 bits de la direccin. Esto es as porque la memoria consta de exactamente 2
30

grupos de cuatro bytes y cada mdulo de memoria provee un byte de cada grupo.

Con esta configuracin se obtienen cuatro bytes en el tiempo en el que un mdulo lee uno de sus bytes, pues los cuatro acceden a su dato respectivo de forma paralela. Adems de los componentes que se muestran en la figura 3.10, la nueva memoria contiene la lgica necesaria para igualmente permitir la lectura y escritura de un nico byte en lugar de cuatro. Los accesos a esta memoria a direcciones que son mltiplos de 4 se denominan

accesos alineados.

Pero, qu sucede si el procesador quiere acceder a 4 bytes consecutivos de esta memoria pero que no comienzan en una posicin mltiplo de 4? El paralelismo se obtiene porque si cada mdulo lee la misma direccin de memoria y ofrece su correspondiente byte, pero si el procesador requiere cuatro bytes que no estn en el mismo grupo, este esquema no funciona puesto que no todos los mdulos deben leer de la misma direccin. A este tipo de accesos se le denominan

accesos no alineados. En tal caso, la

memoria se ocupa internamente de realizar cuantos accesos sean necesarios para devolver los cuatro bytes que requiere el procesador. No se precisan ms de dos accesos a memoria para servir cualquier

peticin de cuatro bytes consecutivos del procesador. Por ejemplo, si el procesador requiere los datos en las posiciones 4 * d + 3 a 4 * d + 6, el procesador selecciona el ltimo byte del grupo con direccin 4 * d y los tres primeros del grupo con direccin 4 * (d + 1). La figura 3.11 muestra los dos accesos a memoria para obtener los datos requeridos. Figura 3.11. Acceso doble para obtener 4 bytes consecutivos

En el caso concreto de la arquitectura IA-32, se define un bus de direcciones y un bus de datos ambos de tamao 32 bits. El procesador puede leer o escribir 4 bytes de datos en memoria de forma simultnea.

Almacenamiento de tablas Los programas manipulan estructuras de datos ms complejas compuestas a su vez por datos bsicos. Un ejemplo de estas estructuras son las tablas o

arrays. Una tabla es un conjunto de datos agrupados

de forma que cada uno de ellos puede ser accedido a travs de un ndice que se corresponde con un nmero natural. El primer elemento est en la posicin con ndice cero y el ltimo en la posicin con ndice igual al nmero de elementos de la tabla menos uno. En los lenguajes de programacin tales como C o Java, si una tabla de elementos se denomina tabla, el elemento en la posicin i se accede mediante la expresin tabla[i]. Cmo se almacenan estos datos en memoria de forma que puedan ser accedidos por el procesador? Al igual que en el caso de los datos bsicos, la estrategia consiste en utilizar posiciones consecutivas de memoria para almacenar los elementos. Si una tabla contiene n elementos y cada uno de ellos se codifica con m bytes, el espacio total ocupado por la tabla es de n * m bytes. Dada la direccin de memoria d a partir de la cual se almacena la tabla y el tamao m en bytes de cada elemento la direccin

donde est almacenado el elemento en la posicin p se obtiene sumando a d los bytes que ocupan los elementos anteriores, o lo que es lo mismo d + (p * m). La figura 3.12 ilustra cmo se realiza este clculo. Figura 3.12. Direccin de un elemento de una tabla

Considrese, por ejemplo, una tabla de 4 enteros almacenada en la memoria de un procesador con arquitectura IA-32 a partir de la posicin 0x100 y con los nmeros 0x34AF89C4, 0x583B7AF1,

0x97FA7C7E, 0x14C8B9A0 almacenados en ese mismo orden. La figura 3.13 muestra su disposicin
en memoria. Figura 3.13. Ejemplo de almacenamiento de una tabla de enteros de 32 bits en memoria

Pero para manipular tablas de datos no slo basta con almacenar los elementos en posiciones consecutivas. Considrese el siguiente ejemplo. Se dispone de una tabla de enteros y se debe calcular la suma total de sus elementos. Para ello se comienza sumando el primer elemento, a l se le suma el segundo, a este resultado el tercero, y as sucesivamente. Pero cmo se sabe que se ha llegado al

ltimo elemento? Para cualquier tabla, adems de la direccin de comienzo y el tamao de sus elementos, es preciso saber el nmero de elementos que contiene. Existen dos mecanismos para saber cuntos elementos contiene una tabla. El primero de ellos consiste en depositar como ltimo elemento, un valor que denote el final. Por ejemplo, considrese una tabla de letras que almacena una frase. Cada letra se almacena con su codificacin en ASCII (ver seccin 2.8.1), por lo que cada letra ocupa un byte. Al final de la tabla se incluye un byte con valor 0 que est reservado especficamente en ASCII para codificar el final de una secuencia de letras. Para recorrer todos los elementos de esta tabla basta con escribir un bucle que se detenga cuando encuentre el valor cero. Pero la tcnica de depositar un valor concreto como ltimo elemento no funciona para todos los tipos de datos. Qu sucede en el caso de una tabla de nmeros enteros? Cada elemento se codifica con su representacin en complemento a 2 que utiliza la totalidad de posibles combinaciones de bits. Por tanto, no es posible utilizar un valor especfico para denotar el final de la tabla pues se confundira con la representacin de su nmero entero correspondiente. Para saber el tamao, simplemente hay que almacenar este valor en una posicin adicional de memoria. De esta forma, si se desea acceder a todos los elementos de la tabla de forma secuencial basta con escribir un bucle que compare la posicin del elemento con el tamao. Tanto esta tcnica como la anterior se utilizan de forma frecuente en los lenguajes de programacin de alto nivel. Almacenamiento de direcciones de memoria Supongamos que la memoria utilizada tiene un tamao de 4 Gigabytes y por tanto sus direcciones se representan con 32 bits. Las direcciones de memoria son nmeros naturales en el rango [0, 2
32

- 1]. Pero

este nmero natural es susceptible de ser almacenado l mismo en memoria. Es decir, se puede almacenar la representacin binaria de una direccin de memoria en la propia memoria. Al tener un tamao de 32 bits o 4 bytes, se utilizan para ello cuatro posiciones de memoria consecutivas. Una direccin de memoria, por tanto, se puede considerar de dos formas posibles: o como una direccin de una celda de memoria, o como un nmero natural susceptible de ser manipulado como tal. Supngase que en la posicin de memoria 0x00000100 se encuentra almacenado el nmero entero de 32 bits 0x0153F2AB y que en la posicin 0x00000200 se debe almacenar la direccin de dicho nmero. Para ello se almacena, a partir de la posicin 0x00000200 el nmero 0x00000100 utilizando los cuatro bytes a partir de esa posicin y se hace en orden creciente de significacin al utilizar el esquema little endian. El resultado se ilustra en la figura 3.15. Figura 3.15. Direccin de memoria almacenada como nmero natural

Tras almacenar la direccin de memoria de un dato en la posicin 0x00000200, es posible obtener de nuevo el nmero 0x0153F2AB? La respuesta es afirmativa, pero no de forma inmediata, se debe obtener de memoria primero los cuatro bytes almacenados en la posicin 0x00000200 y utilizarlos como una direccin de memoria de donde obtener los cuatro bytes contenidos en la posicin

0x00000100. El acceso a este ltimo dato se ha realizado de forma indirecta, es decir, mediante un
acceso previo a memoria para obtener la direccin del dato final. Utilizando la notacin funcional de operaciones sobre memoria, el acceso al dato se logra ejecutando

Lectura(Lectura(0x00000200)).
A este mecanismo de acceso a un dato en memoria a travs de su direccin a su vez almacenada en otra posicin se le conoce con el nombre de indireccin. En el ejemplo anterior se dice que el dato almacenado en la posicin 0x00000200 apunta al dato 0x0153F2AB. La figura 3.16 ilustra esta situacin. Figura 3.16. Una posicin de memoria apunta

a otra

El mecanismo de indireccin se puede encadenar de manera arbitrariamente larga. La direccin que contiene la direccin de un dato, a su vez se puede almacenar de nuevo en memoria. En tal caso, para acceder al dato final se requieren dos accesos a memoria en lugar de uno. Por tanto, es posible almacenar las direcciones tal que haya que seguir una cadena de indirecciones para en ltima instancia acceder al dato. La figura 3.17 muestra una distribucin de datos tal que la posicin 0x00000100 contiene la

direccin de memoria de la direccin de memoria de la direccin de memoria

del dato.
Figura 3.17. Indireccin mltiple para acceder a un dato

De la tcnica de indireccin se deriva que en memoria no slo se almacenan datos (naturales, enteros, coma flotante, letras, etc.) sino tambin direcciones de memoria. Todos estos datos, a efectos de almacenamiento y su manipulacin por el procesador, no son ms que una secuencia de bytes en diferentes celdas. El que una secuencia de bits determinada se interprete como un nmero o como una direccin queda totalmente bajo el control del programador. En los programas escritos en ensamblador es preciso saber qu dato est almacenado en qu posicin de memoria pero el propio lenguaje no aporta mecanismo alguno que compruebe que se el acceso se hace de forma correcta. Si por error en un programa se obtiene un dato de 32 bits de memoria y se interpreta como una direccin cuando en realidad es un dato numrico o viceversa, lo ms probable es que el programa termine de forma brusca o con resultados incorrectos. La tcnica de indireccin se utiliza con frecuencia en la ejecucin de programas. Almacenamiento de una tabla de strings Supngase que se dispone de un conjunto de n strings almacenados en otras tantas posiciones de memoria. Aunque las letras de cada strings estn almacenadas en posiciones consecutivas, los strings no estn uno a continuacin de otro sino en zonas de memoria dispersas. Se quiere imprimir estos strings en orden alfabtico. El primer paso es ordenar los strings para a continuacin imprimir cada uno de ellos por orden. Para ordenar los strings hay dos opciones, o se manipulan todos los caracteres de cada uno de ellos, o se manipulan sus direcciones de comienzo. Es decir, en lugar de tener los strings ordenados

alfabticamente y almacenados en posiciones consecutivas de memoria, se almacenan por orden las direcciones de memoria de comienzo de cada string y se ordenan en base a las letras que contienen. Esta estructura se ilustra en la figura 3.18. Figura 3.18. Tabla con direcciones de comienzo de strings

La ordenacin los strings se puede realizar sin mover ninguna de las letras en memoria. La tabla resultante contiene en cada uno de sus elementos una indireccin a un string, es decir, la direccin en la que se encuentra el string pertinente. Para imprimir los strings en orden alfabtico se itera sobre los elementos de la tabla y mediante doble indireccin se accede a las letras de cada string.

Ejemplo. Referencias en el lenguaje Java El lenguaje de programacin Java utiliza el mecanismo de indireccin para acceder a los datos almacenados en un objeto. Supngase que se ha definido una clase con nombre Dato que a su vez contiene un campo de acceso pblico, entero y con nombre valor. Se ejecuta la siguiente porcin de cdigo. Lnea Cdigo

Lnea 1 2 3 4 5 6

Cdigo Dato obj1, obj2; obj1 = new Dato(); obj1.valor = 3; obj2 = obj1; obj2.valor = 4; System.out.println(obj1.valor)

Qu valor imprime por pantalla la ltima lnea? El cdigo asigna al campo valor de obj1 el valor 3, a continuacin se produce la asignacin obj2 = obj1, luego se asigna el valor 4 al campo valor de

obj2 y se imprime el mismo campo pero de obj1. Al ejecutar este fragmento de cdigo se imprime el
valor 4 por pantalla. La lnea que explica este comportamiento es la asignacin obj2 = obj1. En Java, todo objeto se manipula a travs de una referencia. Las variables obj1 y obj2 son referencias y la asignacin obj1 = obj2 no transfiere el contenido entero de un objeto a otro, sino que se transfiere el valor de la referencia. Por tanto, al ejecutar esta asignacin, obj2 se refiere al mismo objeto que obj1 y por eso la ltima lnea imprime el valor 4. El mecanismo interno que se utiliza a nivel de lenguaje mquina para representar las referencias est basado en el concepto de indireccin. Cuando se crea un objeto se almacenan sus datos en memoria. Cuando un objeto se asigna a una referencia esta pasa a contener la direccin de memoria a partir de la cual est almacenado. La asignacin obj2 = obj1 transfiere la direccin de memoria contenida en

obj1 al contenido de obj2. Cualquier modificacin que se haga a travs de la referencia obj1 afecta
por tanto al objeto al que apunta obj2 pues ambas referencias apuntan al mismo objeto. La figura 3.19 ilustra cmo se asignan los valores en memoria para este ejemplo. Figura 3.19. Dos referencias en Java que apuntan al mismo objeto

El objeto est ubicado en una posicin arbitraria de memoria (en la figura 3.19 es la posicin

0x00000100). En dos posiciones de memoria adicionales se almacenan las referencias obj1 y obj2.
La primera de ellas recibe su valor al ejecutarse el constructor de la clase. La segunda recibe el mismo valor cuando se ejecuta la asignacin. A partir de este momento, cualquier modificacin realizada en el objeto a travs de obj1 ser visible si se consulta a travs de obj2.

Ejemplo. Doble indireccin con referencias en el lenguaje Java Las referencias en Java se utilizan, por tanto, como indirecciones a memoria. Pero las clases definidas en Java pueden contener en su interior campos que sean referencias a otros objetos. Por ejemplo, si se define una segunda clase Dato2 en cuyo interior existe un campo con nombre c1 de la clase Dato, este campo es una referencia a un objeto. Supngase que se ejecuta la siguiente porcin de cdigo. Lnea 1 2 3 4 Cdigo Dato2 obj2; obj2 = new Dato2(); obj2.c1 = new Dato(); obj2.c1.valor = 4;

En este caso la referencia obj2 apunta a un objeto de la clase Dato2 que a su vez contiene en su interior una referencia a un objeto de la clase Dato. Para ejecutar la ltima lnea en la que se asigna el valor 4 al campo valor es preciso realizar una doble indireccin. La referencia obj2 contiene la direccin del objeto de la clase Dato2, y este a su vez contiene en su interior una referencia que contiene la direccin del objeto de la clase Dato. Tras esta doble indireccin se asigna el valor 4 a dicho dato. La figura 3.20 muestra el acceso a este dato a travs de la doble indireccin. Figura 3.20. Acceso a un dato mediante doble indireccin

Campos elementales y agrupados.


Campo es cada uno de los diferentes datos que constituye un registro lgico. Los campos elementales no tienen otros campos subordinados o dependientes. Y los agrupados agrupan a otros de menor jerarqua. Ej.: Elemental. Fecha 99/99/9999 Agrupado. Fecha Da 99 Mes 99 Ao 9999

REGISTRO: Grupo o conjunto de campos que guardan relacin. Registro de Estudiantes, de universidades, etc. Registro lgico, Es el conjunto de datos referentes a una misma entidad o cosa, que constituye una unidad para un determinado proceso (programa o parte del programa) ejecutable por el computador. Clave, Es el campo del registro lgico que sirve para identificar al registro al que pertenece. Se utiliza para localizar al registro dentro de un archivo y para ordenar el mismo. Puede ser cualquier campo dentro del registro. Registro fsico, La creacin de un archivo se realiza mediante una secuencia de operaciones de escritura. Al conjunto de datos transferidos en cada operacin de escritura/lectura se le llama registro fsico. Por tanto se define como el conjunto de bytes que se transfieren entre la memoria interna o principal y el dispositivo de almacenamiento en una sola operacin de entrada/salida. Los registros fsicos estn individualizados en el dispositivo fsico de almacenamiento por espacios no utilizados que los separan entre s. Bloqueo de registros, Un registro fsico puede constar de un nmero variable de registros lgicos, o lo que es igual, se pueden transferir varios registros lgicos de la memoria al disco o del disco a la memoria empleando una sola operacin de escritura/lectura. Este fenmeno recibe el nombre de bloqueo, y los registros fsicos as formados se llaman bloques. El nmero de registros lgicos contenidos en un bloque recibe el nombre de factor de bloqueo. Ventajas del bloqueo de registros Mayor velocidad en los procesos de entrada/salida. Mayor aprovechamiento de la capacidad del soporte de almacenamiento.

Registros expandidos, En algn caso es necesario que un registro lgico, excepcionalmente largo, se extienda sobre varios registros fsicos. Estos registros, opuestos en cierta forma al concepto de registros bloqueados, reciben el nombre de registros expandidos.

ARCHIVO: Grupo de registros lgicos referentes a entidades u objetos del mismo tipo. Tipos de archivos segn su funcin. Archivos permanentes, Son aquellos cuyos registros sufren poca o ninguna variacin a lo largo del tiempo. Se dividen en:

Constantes: estn formados por registros que contienen campos fijos y campos de baja

frecuencia de variacin en el tiempo. De situacin: son los que en cada momento contienen informacin actualizada. Histricos: contienen informacin acumulada a lo largo del tiempo de archivos que han sufrido

procesos de actualizacin, o bien acumulan datos de variacin peridica en el tiempo.

Archivos de movimiento o transacciones Son aquellos que se utilizan conjuntamente con los maestros (constantes), y contienen algn campo comn en sus registros con aquellos, para el procesamiento de las modificaciones experimentadas por los mismos. El perodo de conservacin es breve, ya que suelen destruirse una vez efectuados los cambios sobre el maestro.

Archivos de maniobra o transitorios Son los archivos auxiliares creados durante la ejecucin del programa y borrados habitualmente al terminar el mismo. Pertenecen tambin a este tipo los utilizados para comprobacin de los resultados intermedios en un determinado proceso.

MEDIDAS DE UTILIZACION DE LOS ARCHIVOS

Indice de volatilidad, Es el porcentaje de registros que se adicionan o suprimen en un archivo respecto al nmero medio total de registros del archivo, en un perodo de tiempo fijo, o en cada actualizacin. As, un archivo es voltil, cuando tiene un alto porcentaje de adiciones y supresiones, y es esttico en caso contrario. Indice de actividad, Es el porcentaje de registros utilizados respecto al nmero medio total de registros del archivo, en un perodo de tiempo fijo, o en cada actualizacin o consulta. Suele emplearse para determinar si un archivo debe de explotarse con una organizacin secuencial o relativa, comparando los tiempos empleados en acceder a los registros en modo secuencial o directo. Como gua de la organizacin a emplear en un archivo, se efectan los siguientes clculos:

A = ndice de actividad = NRU / NRT

B = LR / TA * VLS

NRU = Nmero medio de registros utilizados en un perodo de tiempo fijo.

NRT = Nmero medio total de registros del archivo.

LR = Longitud en bytes del registro.

TA = Tiempo de acceso medio a un registro en un soporte de acceso directo en seg.

VLS = Velocidad de lectura secuencial en bytes/seg.

Si como resultado de la aplicacin de estas frmulas, A es menor que B, es conveniente utilizar la organizacin relativa o directa, y en caso contrario la secuencial.

OPERACIONES SOBRE ARCHIVOS

La creacin, Es el almacenamiento (grabacin) sobre un soporte de los registros que lo forman, utilizando una organizacin determinada.

La consulta, Consiste en localizar uno o varios registros y acceder a la informacin que contienen.

La clasificacin, Es la ordenacin de los registros de un archivo con respecto a uno o varios de sus campos. Puesto que los registros estn divididos en varios campos, si ordenamos o clasificamos el archivo respecto a uno de ellos, queda desordenado respecto a otros. El campo con respecto al cual se clasifica el archivo recibe el nombre de campo criterio de clasificacin. Existen dos posibilidades de clasificacin:

Ascendente: el orden se establece de menor a mayor.

Descendente: el orden se establece de mayor a menor.

La actualizacin, Para que la consulta sobre un archivo sea realmente til, el archivo deber estar actualizado, es decir, puesto al da. Para ello, debern incluirse nuevos registros, suprimirse otros y modificarse algunos de los existentes. Estas operaciones pueden afectar a un registro completo o a

alguno de sus campos solamente.

SOPORTES SECUENCIALES Y DIRECCIONABLES

Soportes secuenciales, Los datos se graban unos a continuacin de otros, del tal forma que el acceso a un dato se hace pasando sobre todos los datos que le preceden en el soporte.

Soportes direccionables, El espacio de almacenamiento se divide en espacios parciales direccionables individualmente, pudiendo accederse a un dato por la direccin en que est almacenado, sin que sea necesario pasar por los datos almacenados en direcciones fsicas anteriores.

ESTRUCTURA DE LOS REGISTROS

Registros de longitud constante, Cuando se crea un archivo formado por registros de longitud constante, debe especificarse la longitud de los registros que lo integran y/o la longitud de sus campos. Un archivo abierto para acceso directo debe obligatoriamente estar constituido por registros de este tipo, a fin de que el computador pueda efectuar correctamente los clculos necesarios para acceder a ellos. La longitud de los registros puede obtenerse:

Utilizando el mismo nmero de campos en cada registro, con iguales longitudes de los campos

componentes dentro de cada registro.

Con igual nmero de campos componentes, con distinta longitud de cada campo dentro de cada

registro.

Con distinto nmero de campos en cada registro.

Registros de longitud indefinida, Es un simple registro lgico formado por varios campos (segmentos) de longitud variable. La longitud de cada registro es arbitraria, por lo que el computador no podr acceder directamente a un registro del archivo grabado con esta estructura, al no poder efectuar los clculos en bytes necesarios para determinar su posicin. Es por tanto necesario, para acceder a la informacin de un registro, leer todos los anteriores que le preceden. Cada registro contiene informacin de control sobre:

El primer campo del registro.

El ltimo campo del registro.

Un slo campo del registro.

Registros de longitud variable, Pueden contener cualquier nmero de bytes, hasta un determinado valor mximo, que ha de fijarse previamente. Para definir la longitud de los registros, a fin de que puedan ser ledos y escritos correctamente, se utilizan los siguientes mtodos:

Separadores de campos o banderas: consiste en colocar al final o al principio de cada campo del

registro un carcter especial auxiliar, que debe ser uno de los no utilizados como componentes de los campos. Indicadores de longitud: consiste en indicar longitud de cada campo o del registro mediante la

utilizacin de campos auxiliares al principio o al final de cada campo del registro. Mscaras: la ausencia o presencia de campos se indica en el primer campo del registro, utilizando

subcampos conteniendo cero o uno segn exista o no, el segundo, tercero, etc. campo del registro.

MODOS DE ACCESO

Hay que distinguir entre organizacin de archivos y modo de acceso a los registros. El primero se aplica a la forma en que los registros se colocan, almacenan o graban en el dispositivo fsico durante su creacin. El segundo se refiere al mtodo utilizado para acceder a los registros de un archivo prescindiendo de su organizacin. Existen distintas formas de acceder a los datos:

Secuencial: los registros se leen desde el principio hasta el final del archivo, de tal forma que para

leer un registro se leen todos los que le preceden.

Directo: cada registro puede leerse/escribirse directamente sin necesidad de leer/escribir los que

le preceden. Basta con expresar su direccin relativa en el fichero por el nmero relativo del registro o por transformacin de la clave de registro en el nmero relativo del registro a acceder.

Por ndice: se accede indirectamente a los registros por su clave, mediante consulta secuencial a

una tabla que contiene la clave y la direccin relativa de cada registro, y posterior acceso directo al registro.

Dinmico: tiene lugar cuando, a un archivo construido con una determinada organizacin, es

posible acceder en cualquiera de los modos anteriormente citados. La eleccin del mtodo de acceso

est directamente relacionado con la estructura de los registros del archivo y del soporte utilizado.

ORGANIZACIN DE ARCHIVOS Organizacin secuencial, En la creacin del archivo, los registros que lo forman se han escrito o grabado en el soporte de almacenamiento en posiciones fsicas contiguas, en la misma secuencia en que se introdujeron los datos, sin huecos entre ellos y ordenados o no, por un determinado campo o clave del registro.

Ventajas: consiste en la rapidez de acceso a tablas o archivos con un alto porcentaje de registros

consultados o modificados, y a su ocupacin mnima del soporte cuando se usan registros de longitud indefinida.

Desventajas: si el nmero de registros consultados o modificados es relativamente bajo respecto

al total, y la necesidad de copiar el archivo, creando uno nuevo, cuando se desea insertar un nuevo registro intermedio.

Organizacin relativa o directa, Consiste en una serie de posiciones de memoria numeradas llamadas celdas. Estas celdas son de igual capacidad, y estn numeradas consecutivamente de 1 a N, donde 1 es la primera y N la ltima celda utilizable del archivo. Los registros se sitan en el archivo de acuerdo a su nmero de celda. Estas celdas se convierten en registros numerados, siendo su nmero la posicin que ocupan respecto al principio del archivo. La direccin relativa puede obtenerse por transformacin matemtica o algoritmo. Como consecuencia, dos o ms claves pueden dar la misma direccin fsica. Este hecho se conoce como produccin de sinnimos. Al no generarse todas las direcciones entre 1 y N quedan celdas intermedias vacas, que el computador considera como ocupadas, llamadas huecos.

Ventajas: permite la consulta directa, sin lectura de los registros anteriores, de uno o varios

registros en funcin de su clave.

Desventajas: hace necesario el predimensionamiento en exceso de los registros, lo que hace

aumentar innecesariamente el espacio ocupado, al rellenarse la longitud de los campos sobrantes con blancos. Nos obliga a elegir un segundo criterio de ordenacin, para intentar evitar un desborde al producirse los sinnimos.

También podría gustarte