sábado, 24 de noviembre de 2007

Tipos de Datos

TIPOS DE DATOS

Es un concepto propio de la informática, más específicamente de los lenguajes de programación, aunque también se encuentra relacionado con nociones similares de las matemáticas y la lógica.

En programación, un tipo de dato es una restricción impuesta para la interpretación, manipulación y representación de datos. Podemos definir un tipo de dato a partir de los valores permitidos y las operaciones que se puedan llevar a cabo sobre estos valores. A menudo, un mismo tipo de dato se implementará de formas diversa.

Tipos de datos comunes en lenguajes de programación son los tipos primitivos (enteros, caracteres, etc.), las tuplas, los conjuntos, tipos abstractos de datos, tipos de funciones y clases, etc. Un tipo de dato describe representación, interpretación y estructura de los valores manipulados por los algoritmos u objetos almacenados en la memoria de la computadora u otro dispositivo de almacenamiento.





TIPOS DE DATOS

Tipos simples
___Tipo Ordinal
______Tipos predefinidos
_________Tipo de dato entero
_________Tipo de dato carácter
_________Tipo de dato lógico
______Tipos definidos por el usuario
_________Tipo de dato enumerado
_________Tipo de dato subrango
___Tipo No Ordinal
______Tipo de dato real
______Tipo de dato cronológico
______Tipo de dato puntero
Tipos compuestos o complejos
___Cadena de caracteres
___Estructura de datos
Tipo de dato abstracto
Tipos numéricos y tipos no numéricos

TIPOS SIMPLES

Los tipos simples, que incluyen tipos ordinales y tipos reales de datos, son tipos de datos que definen conjuntos ordenados de valores.

TIPO ORDINAL

En el conjunto de los tipos ordinales se incluyen:

Un tipo ordinal define un conjunto ordenado de valores en los cuales cada valor, excepto el primero, tienen un único predecesor y cada valor, excepto el último, tienen un único sucesor. Más aún, cada valor tiene una ordinalidad, la cual determina el orden del tipo.

Para los tipos entero la ordinalidad de un valor es el valor por sí mismo; para todo el resto de los tipos ordinales, excepto los subrangos, el primer valor tiene ordinalidad 0 (cero), el siguiente valor tiene ordinalidad 1 (uno) y así sucesivamente. Si un valor tiene ordinalidad n, su predecesor tiene ordinalidad n-1 y su sucesor tiene ordinalidad n+1.

TIPO DE DATO ENTERO

Un tipo de dato entero en computación es un tipo de dato que puede representar un subconjunto finito de los números enteros. El número mayor que puede representar depende del tamaño del espacio usado por el dato y la posibilidad (o no) de representar números negativos. Los tipos de dato entero disponibles y su tamaño dependen del lenguaje de programación usado así como la arquitectura en cuestión. Por ejemplo, si para almacenar un número entero disponemos de 4 bytes de memoria tememos que:

4 Bytes = 4x8 = 32 bits
Con 32 bits se pueden representar 232=4294967296 valores:
> Sólo positivos: del 0 al 4294967295
> Positivos y negativos: del -2147483648 al 2147483647

Operaciones con enteros

Las típicas operaciones aritméticas: suma, resta, multiplicación y división se pueden realizar con datos de tipo entero. En el caso de la división, el resultado podría ser un valor real, en ese caso, si el resultado se ha de almacenar como entero la parte decimal del resultado deberá ser eliminada, en principio hay dos métodos para hacerlo:

  • El redondeo: Aproximar el valor real al entero más cercano (Ej: 3,8-->4 / 3,2-->3)
  • El truncamiento: Eliminar del valor real la parte decimal (Ej: 3,8-->3 / 3,2-->3)

Otra operación importante que se puede realizar con número enteros es la operación de módulo o resto de la división entera, es decir:

184 dividido 3 = 61 (resto 1) --> 184 módulo 3 = 1

En general la operación módulo cumple que:

a mod b = c

  • c ≥ 0
  • c <>
  • si c es igual a 0 --> a es múltiplo de b
  • si c es igual a 0 y b es igual a 2 --> a es pa

El desbordamiento (overflow)

Cuando operando con número enteros en un programa de ordenador ocurre que se intenta asignar a un valor entero un valor que está fuera del rango de los valores que se pueden representar se produce un fallo que se conoce con el nombre de desbordamiento (overflow en inglés). Cuando esto ocurre lo habitual es que el programa siga funcionando como si nada hubiera pasado, pero el valor desbordado se habrá convertido en un valor indeterminado con lo que las operaciones posteriores en las que este valor intervenga producirán resultados incorrectos.

TIPO DE DATO CARACTER

Cualquier signo tipográfico. Puede ser una letra, un número, un signo de puntuación o un espacio. Este término se usa mucho en computación.

Un valor de tipo carácter es cualquier carácter que se encuentre dentro del conjunto ASCII ampliado, el cual está formado por los 128 caracteres del ASCII más los 128 caracteres especiales que presenta, en este caso, IBM. Los valores ordinales del código ASCII ampliado se encuentran en el rango de 0 a 255. Dichos valores pueden representarse escribiendo el carácter correspondiente encerrado entre comillas simples (apóstrofos).

Así, podemos escribir: 'A' < 'a' Que significa: "El valor ordinal de A es menor que el de a" o "A está antes que a"

Un valor de tipo carácter (char en inglés) se guarda en un byte de memoria.
La única operación (además de las relacionales) que podemos hacer con caracteres es la concatenación concatenando dos caracteres, por ejemplo 'a' y 'X' obtendríamos la cadena "aX".

TIPO DE DATO LÓGICO

El tipo de dato lógico o booleano es en computación aquel que puede representar valores de lógica binaria, esto es, valores que representen falso o verdadero.

Para generar un dato o valor lógico a partir de otros tipos de datos, típicamente, se emplean los operadores relacionales (u operadores de relación), por ejemplo:
  • 3>2 --> verdadero
  • 7>9 --> falso
Una vez se dispone de uno o varios datos de tipo booleano, estos se pueden combinar en expresiones lógicas mediante los operadores lógicos (AND, OR, NOT, ...). Un ejemplo de este tipo de expresiones serían:
  • verdadero AND falso --> falso
  • falso OR verdadero --> verdadero

TIPO DE DATO ENUMERADO

Un tipo enumerado define un conjunto ordenado de valores con el simple hecho de listar los identificadores que denotan tales valores. Los valores no tienen un significado/valor inherente al nombre del identificador y su ordinalidad sigue la secuencia en la cual los identificadores se listan.

Aplicaciones

La lista de valores que definen un tipo enumerado de datos se puede asociar con un identificador en la sección de tipos. Este identificador se puede usar después para especificar el tipo de variables, parámetros formales y valores de funciones.

TIPO DE DATO SUBRANGO

Un dato de un tipo subrango es aquel que puede tomar por valor uno de los pertenecientes a un subrango definido por el programador. Por ejemplo, suponiendo que el ordenador (utilizando dieciséis bits) puede representar el siguiente conjunto de valores enteros:

{ -32768, -32767, ..., -1, 0, 1, ..., 32766, 32767 }

Los valores mínimo y máximo de ese rango son los números -32768 y 32767, respectivamente. Pues bien, un subrango es un subconjunto de valores de un rango.

Una variable de un tipo subrango representa a un espacio de memoria en donde se puede almacenar un dato de un tipo subrango.

En algunos lenguajes como C no existen datos de tipos subrangos, ya que, el programador no puede definir tipos de datos subrango en este lenguaje. No obstante, otros lenguajes de programación sí permiten definirlos.


TIPO NO ORDINAL

TIPO DE DATO REAL

El tipo de dato real define un conjunto de números que pueden ser representados con la notación de coma flotante.

Al igual que los números enteros, el tipo real está limitado superior e inferiormente según la cantidad de memoria que haya disponible para almacenarlo. Otro elemento importante a tener en cuenta en este tipo de datos es la precisión con que pueden representar número con decimales (cuantos decimales se pueden representar), esta característica también esta directamente relacionada con la cantidad de memoria disponible para almacenar un valor real.

Operaciones con reales

Las típicas operaciones aritméticas:

TIPO DE DATO PUNTERO

Un puntero (o apuntador) es una variable manipulable que referencia una región de memoria; en otras palabras es una variable cuyo valor es una dirección de memoria. Si se tiene una variable ' p ' de tipo puntero que contiene una dirección de memoria en la que se encuentra almacenado un valor ' v ' se dice que p apunta a v.

Trabajar con punteros implica la no manipulación de las variables en sí, sino manejar direcciones de memoria en la cuales residen los datos.

Los punteros son de amplia utilización en programación y casi todos los lenguajes permiten la manipulación de los mismos. La razón de ser principal de los punteros reside en manejar datos alojados en la zona de memoria dinámica o heap (aunque también se pueden manipular objetos en la zona estática), bien sean datos elementales, estructuras (struct en C) u objetos pertenecientes a una clase (en lenguajes Orientados a Objetos). Gracias a esta propiedad, los punteros permiten modelar un grafo, en donde los elementos de éste son los datos residentes en memoria y las relaciones entre los elementos son los propios apuntadores. Sin embargo, los punteros son un gran dolor de cabeza para los programadores novatos y para cualquier programador que deba depurar una aplicación.

En nuevos lenguajes de alto nivel, los punteros se han tratado de abstraer. De tal forma que en el lenguaje C# sólo pueden ser usados en zonas de código delimitadas como "inseguras", o llegando a su total desaparición en lenguajes como Java o Eiffel.

Ejemplos sencillos del uso de punteros en lenguaje C

Ejemplo 1 (fragmento de programa)

struct Elemento // Ejemplo de un nodo de lista doble enlazada
{
__int dato;
__struct Elemento *siguiente;
__struct Elemento *anterior;
};

Ejemplo 2 (código completo)

#include
int main()
{
___/* declaramos las variables a, b y los punteros p y q */
___int a = 10, b, *p, *q;
___q = &a; /* asignamos la dirección de a a la variable q */
___b = *q; /* asignamos a b el contenido de la dirección q */
___
___printf("En la dirección %X está el dato %d\n", q, b);
___getch();

}


TIPOS COMPUESTOS O COMPLEJOS

CADENA DE CARACTERES

En matemáticas o en programación, una cadena de caracteres, palabra o frase (String en inglés) es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto alfabeto. En general, una cadena de caracteres es una sucesión de caracteres (letras, números u otros signos o símbolos).

En matemáticas es habitual usar las letras w, x, y,... para referirnos a las cadenas. Por ejemplo, si tenemos un alfabeto Σ = {a, b, c}, una cadena podría ser: x = aacbbcba.

Desde un punto de vista de la programación, si no se ponen restricciones al alfabeto, una cadena podrá estar formada por cualquier combinación finita de todo el juego caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los números del '0' al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etc). En este mismo ámbito (el de la programación), se utilizan normalmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de una sola fila (array en inglés). Las cadenas se pueden almacenar físicamente:

  • Seguidas.
  • Enlazados letra a letra.

Generalmente son guardados un carácter a continuación de otro por una cuestión de eficiencia de acceso. Un caso especial de cadena es la que contiene cero caracteres, a esta cadena se la llama cadena vacía.












Operaciones con cadenas

Siguiendo en el ámbito de la informática, al considerar las cadenas como un tipo de datos, hay que definir (o conocer) cuales son las operaciones que podemos hacer con ellas, en principio estas podrían ser muchas y llegar a ser muy sofisticadas, pero las que podríamos considerar básicas son:

  • Concatenación: Consiste en unir dos cadenas o más (o una cadena con un carácter) para formar una cadena de mayor tamaño.
  • Búsqueda: Consiste en localizar dentro de una cadena una subcadena más pequeña o un carácter.
  • Extracción: Se trata de sacar fuera de una cadena una porción de la misma según su posición dentro de ella.
Representación

Una cadena suele ser representada entre comillas dobles superiores ("palabra"), mientras que un carácter de esa cadena (un char en inglés) suele ser representado entre comillas simples ('p'). Por ejemplo, en C:

char c = 'a';
char str[5] = "hola";

Generalmente para acceder a un carácter en una posición determinada se suele usar la forma variable[posición] como cuando se accede a un vector.

Para poder mostrar una comilla (") dentro de la cadena y no tener problemas con las comillas que la delimitan, se usan secuencias de escape. Esto se aplica a otros caracteres reservados o no imprimibles como el retorno de carro. No obstante, las expresiones para producir estas secuencias de escape dependen del lenguaje de programación que se esté usando. Una forma común, en muchos lenguajes, de escapar un carácter es anteponiéndole un «\» (sin comillas), p. e.: «\"» (sin comillas).

Cadenas dinámicas y estáticas

Las cadenas pueden ser de naturaleza dinámica (pueden alterar su longitud durante el tiempo de ejecución), o de naturaleza estática (su longitud es fija a lo largo del tiempo de ejecución). En este segundo caso el programador debe prever que al recorrer la cadena los indíces no se vayan de los límites previstos (C no permite que las cadenas crezcan automáticamente de forma explíta, mientras que C# sí).

El final de la cadena se delimita de diferente manera en uno u otro caso:

  • Mediante un carácter de fin de cadena ("\0" en C) para las cadenas de tipo dinámico.
  • Mediante una propiedad de la cadena que delimite su longitud (Count en C#) para las de tipo estático.

ESTRUCTURA DE DATOS

En programación, una estructura de datos es una forma de organizar un conjunto de datos elementales (un dato elemental es la mínima información que se tiene en el sistema) con el objetivo de facilitar la manipulación de estos datos como un todo o individualmente. Una estructura de datos define la organización e interrelacionamiento de estos, y un conjunto de operaciones que se pueden realizar sobre él. Las operaciones básicas son:

  • Alta, adicionar un nuevo valor a la estructura.
  • Baja, borrar un valor de la estructura.
  • Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estén ordenados)...

Otras operaciones que se pueden realizar son:

  • Ordenamiento, de los elementos pertenecientes a la estructura.
  • Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.
Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. De esta forma, la elección de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre los datos.


Tipos de datos elementales

Binarios
___Bit
___Byte
Numéricos
___Entero
___Real
______Coma fija
______Coma flotante
Alfanuméricos
___Carácter
___Cadena

Estructuras de datos

Vectores (matriz o array)
Registro (estructura de datos)
Tipo de datos algebraico
Listas Enlazadas
___Listas Simples
___Listas Dobles
___Listas Circulares
___Listas por saltos (Skip lists)
Pilas (stack)
Colas (queue)
___Colas de Prioridad
Árboles
___Árboles Binarios
______Árbol binario de búsqueda
_________Árbol binario de búsqueda equilibrado
____________Árboles Rojo-Negro
____________Árboles AVL
_________Árboles Biselados (Árboles Splay)
___Árboles Multicamino (Multirrama)
______Árboles B
______Árboles B+
______Árboles B*
Conjuntos (set)
Grafos
Tablas Hash
Montículos (o heaps)
Montículo binario
___Montículo binómico
___Montículo de Fibonacci
___Montículo suave
___Montículo 2-3

























TIPO DE DATO ABSTRACTO

Un tipo de dato abstracto (TDA) o Tipo abstracto de datos (TAD) es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo.

Un TDA está caracterizado por un conjunto de operaciones (funciones) al cual se le denomina usualmente como su interfaz pública y representan el comportamiento del TDA; mientras que la implementación como la parte privada del TDA está oculta al programa cliente que lo usa. Todos los lenguajes de alto nivel tienen predefinidos TDA; que son los tipos denominados simples y las estructuras predefinidas, y estos tienen sus interfaces públicas que incluyen las operaciones como la +, -, *, etc.

En un TDA no se necesita conocer como actúan tales operadores sobre la representación interna de los tipos definidos, que además, suele ser una implementación bastante dependiente de la máquina sobre la que trabaje el compilador. Lo interesante es que los lenguajes actuales nos van a permitir ampliar los TDA predefinidos con otros que serán definidos por el propio programador para adecuar así los tipos de datos a las necesidades de los programas.

Los TDA que nos interesan son aquellos que reflejen cierto comportamiento organizando bajo cierta variedad de datos estructuradamente. Ésta forma estructurada de almacenar los datos será la caracterizarística de cada TDA.

Los TDA que tienen informaciones simples pero dependientes de un comportamiento estructural son llamados polilíticos y aquellos TDA simples, como son los tipos predefinidos donde la información no es relacionada mediante ninguna estructura y no admiten más que un valor en cada momento son denominados TDA monolíticos.

Caractericemos entonces los TDA. Un TDA tiene una parte que será invisible al usuario la cual hay que proteger y que se puede decir que es irrelevante para el uso del usuario y está constituida tanto por la maquinaria algorítmica que implemente la semántica de las operaciones como por los datos que sirvan de enlace entre los elementos del TDA, es decir, información interna necesaria para la implementación que se esté haciendo para ese comportamiento del TDA. Resumiendo podemos decir, que tanto la implementación de las operaciones como los elementos internos del TDA serán privados al acceso externo y ocultos a cualquier otro nivel.

Un TDA representa una abstracción:

  • Se destacan los detalles (normalmente pocos) de la especificación (el qué).
  • Se ocultan los detalles (casi siempre numerosos) de la implementación (el cómo).

Ejemplos de utilización de TDAs

  • Algunos ejemplos de utilización de TDAs en programación son:
  • Conjuntos: Implementación de conjuntos con sus operaciones básicas (unión, intersección y diferencia), operaciones de inserción, borrado, búsqueda...
  • Árboles Binarios de Busqueda: Implementación de árboles de elementos, utilizados para la representación interna de datos complejos.
    Pilas y Colas: Implementación de los algoritmos FIFO y LIFO.

Tópicos en Representación De Datos:

Sistema de numeración
___Sistema binario
___Sistema hexadecimal
Códigos alfanuméricos
___Código ASCII
___Código EBCDIC
Representación de enteros
___Código binario decimal
Representación de reales
___Números reales
___Coma fija
___Coma flotante

Gestión de Almacenamiento

Para poder retener datos informáticos durante algún intervalo de tiempo necesitamos de la memoria que se refiere a los componentes de una computadora, dispositivos y medios de grabación capaces de almacenar datos. Las memorias de computadora proporcionan una de las principales funciones de la computación moderna, la retención de información. Es uno de los componentes fundamentales de todas las computadoras modernas que, acoplados a una Unidad Central de Proceso (CPU por su acrónimo en inglés), implementa lo fundamental del modelo de computadora de Von Neumann, usado desde los años 1940.

En la actualidad, memoria suele referirse a una forma de almacenamiento de estado sólido conocido como Memoria RAM (memoria de acceso aleatorio, RAM por sus siglas en inglés Random Access Memory) y otras veces se refiere a otras formas de almacenamiento rápido pero temporal. De forma similar, almacenamiento se refiere a formas de almacenamiento masivo como Discos ópticos y tipos de almacenamiento magnético como discos duros y otros tipos de almacenamiento más lentos que las memorias RAM, pero de naturaleza más permanente. Estas distinciones contemporáneas son de ayuda porque son fundamentales para la arquitectura de computadores en general.

Además, se refleja una diferencia técnica importante y significativa entre memoria y dispositivos de almacenamiento masivo que se ha ido difuminando por el uso histórico de los términos "almacenamiento primario" (a veces "almacenamiento principal"), para memorias de acceso aleatorio, y "almacenamiento secundario" para dispositivos de almacenamiento masivo. Esto se explica en las siguientes secciones, en las que el término tradicional "almacenamiento" se usan como subtítulo por conveniencia.

Unidad de Manejo de Memoria

La unidad de manejo de memoria o unidad de gestión de memoria (de sus siglas en inglés: Memory Management Unit) es un dispositivo de Hardware formado por un grupo de circuitos integrados, responsable del manejo de los accesos a la memoria por parte de la Unidad de Procesamiento Central (CPU).

Entre las funciones de este dispositivo se encuentran la traducción de las direcciones lógicas (o virtuales) a direcciones físicas (o reales), la protección de la memoria, el control de caché y, en arquitecturas de computadoras más simples (especialmente en sistemas de 8 bits), Bank switching.

Cuando la CPU intenta acceder a una dirección de memoria lógica, la MMU realiza una búsqueda en una memoria caché especial llamada Buffer de Traducción Adelantada (TLB, Translation Lookaside Buffer), que mantiene la parte de la tabla de páginas usada hace menos tiempo. En esta memoria se mantienen entradas de la tabla de páginas (llamadas PTE por sus siglas en inglés, Page Table Entry), donde se pueden rescatar las direcciones físicas correspondientes a algunas direcciones lógicas, de forma directa. Cuando la dirección requerida por la CPU se encuentra en el TLB, su traducción a dirección real o física es entregada, en lo que se conoce como 'acierto en el TLB'. En otro caso, cuando la dirección buscada no se encuentra en el TLB (fallo en el TLB), el procesador busca en la tabla de páginas del proceso utilizando el número de página como entrada a la misma. En la entrada de la tabla de páginas del proceso se encuentra un bit de presencia, que indica si la página buscada está en memoria principal. Si el bit de presencia está activado, se carga esta PTE en el TLB y se devuelve la dirección física. En caso contrario, se informa al sistema operativo de la situación, mediante un fallo de página. Es el sistema operativo el encargado de realizar los ajustes necesarios (esto es, cargar la página en memoria física) usando uno de los Algoritmos de reemplazo de páginas, para continuar con la ejecución desde la instrucción que causó el fallo.

Un beneficio fundamental de la MMU es la posibilidad de implementar protección de memoria, evitando que los programas accedan a porciones de memoria prohibidos. Por ejemplo se puede evitar que un programa acceda o modifique sectores de memoria de otros programas (si se supone que no debe hacerlo).

Almacenamiento primario

La memoria primaria está directamente conectada a la unidad central de proceso de la computadora. Debe estar presente para que la CPU funcione correctamente. El almacenamiento primario consiste en tres tipos de almacenamiento:

  • Los registros del procesador son internos de la unidad central de proceso. Contienen información que las unidades aritmético-lógicas necesitan llevar a la instrucción en ejecución. Técnicamente, son los más rápidos de los almacenamientos de la computadora, siendo transistores de conmutación integrados en el chip de silicio de la CPU que funcionan como "flip-flop" electrónicos.
  • La memoria caché es un tipo especial de memoria interna usada en muchas unidades centrales de proceso para mejorar su eficiencia o rendimiento. Parte de la información de la memoria principal se duplica en la memoria caché. Comparada con los registros, la caché es ligeramente más lenta pero de mayor capacidad. Sin embargo, es más rápida pero de mucha menor capacidad que la memoria principal. También es de uso común la memoria caché multi-nivel - la "caché primaria" es más pequeña, rápida y cercana al dispositivo de procesamiento; la "caché secundaria" es más grande y lenta, pero más rápida y mucho más pequeña que la memoria principal.
  • La memoria principal contiene los programas en ejecución y los datos con que operan. La unidad aritmético-lógica puede transferir información muy rápidamente entre un registro del procesador y localizaciones del almacenamiento principal, también conocidas como "direcciones de memoria". En las computadoras modernas se usan memorias de acceso aleatorio basadas en electrónica del estado sólido, que está directamente conectada a la CPU a través de un "bus de memoria" y de un "bus de datos". Al bus de memoria también se le llama bus de dirección o bus frontal, (Front Side Bus) y ambos buses son "superautopistas" digitales de alta velocidad. Los métodos de acceso y la velocidad son dos de las diferencias técnicas fundamentales entre memoria y dispositivos de almacenamiento masivo.

Almacenamiento secundario, terciario y fuera de línea

La memoria secundaria requiere que la computadora use sus canales de entrada/salida para acceder a la información y es usada para almacenamiento a largo plazo de información persistente. Sin embargo, la mayoría de los sistemas operativos usan los dispositivos de almacenamiento secundario como area de intercambio para incrementar artificialmente la cantidad aparente de memoria principal en la computadora. A la memoria secundaria también se le llama "almacenamiento masivo".

Habitualmente, la memoria secundaria o de almacenamiento masivo es de mucha mayor capacidad que la memoria primaria, pero también es mucho más lenta. En las computadoras modernas, los discos duros suelen usarse como dispositivos de almacenamiento masivo. El tiempo necesario para acceder a un byte de información dado almacenado en un disco duro es de alrededor de unos pocas milésimas de segundo (milisegundos). En cambio, el tiempo que lleva acceder lo mismo en una memoria de acceso aleatorio se mide en mil-millonésimas de segundo (nanosegundos). Esto ilustra cuan significativa es la diferencia de velocidad que distingue las memorias de estado sólido de los dispositivos rotantes de almacenamiento magnético: Los discos duros son del orden de un millón de veces más lentos que la memoria. Los dispositivos rotantes de almacenamiento óptico (unidades de CD y DVD) son incluso más lentos que los discos duros, aunque es probable que sus velocidades de acceso mejoren a la par que los avances tecnológicos. Por lo tanto, el uso de la memoria virtual, que es cerca de millón de veces más lenta que memoria “verdadera”, enlentece apreciablemente el funcionamiento de cualquier computadora. Muchos sistemas operativos implementan la memoria virtual usando términos como memoria virtual o "fichero de caché". La principal ventaja histórica de la memoria virtual era que era mucho más barata que la memoria real. Esa ventaja es menos relevante hoy en día. Aun así, muchos sistemas operativos siguen implementándola, a pesar de provocar un funcionamiento significativamente peor.

La memoria terciaria es un sistema donde un brazo robótico montará (conectará) o desmontará (desconectará) un medio de almacenamiento masivo fuera de línea (ver siguiente punto) según lo pida el sistema operativo de la computadora. La memoria terciaria se usa en el área del almacenamiento industrial, la computación científica en grandes sistemas informáticos y redes empresariales. Este tipo de memoria es algo que los usuarios de computadoras personales normales nunca ven de primera mano.

El almacenamiento fuera de línea es un sistema donde el medio de almacenamiento puede ser extraído fácilmente del dispositivo de almacenamiento. Estos medios de almacenamiento suelen usarse para transporte y archivo de datos. En computadoras modernas son de uso habitual para este propósito los disketes, discos ópticos y las memorias flash, incluyendo las unidades USB. También hay discos duros USB que se pueden conectar en caliente. Los dispositivos de almacenamiento fuera de línea usados en el pasado son cintas magnéticas en muchos tamaños y formatos diferentes, y las baterías extraíbles de discos Winchester.

Almacenamiento de red

El almacenamiento de red es cualquier tipo de almacenamiento de computadora que incluye el hecho de acceder a una información a través de una red informática. Discutiblemente, el almacenamiento de red permite centralizar el control de información en una organización y reducir la duplicidad de la información. El almacenamiento en red incluye:

martes, 6 de noviembre de 2007

Bienvenidos

Hola!

Somos el equipo de Tipos de Datos del grupo 04 de Lenguajes de Programación de la Facultad de Ingeniería, UNAM.



Integrantes:

  • Nakamura Orozco Roberto Yasuhiro
  • Ortega Tapia Edgar
  • Sarabia Bautista Juan Alberto
  • Villaseñor Gallegos Carlos Alberto

El blog se encuenta en construcción...