Dirección de memoria

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

En informática, una dirección de memoria es un transmisor para una localización de memoria con la cual un programa informático o un dispositivo de hardware deben almacenar un dato para su posterior reutilización.

Una forma común de describir la memoria principal de un ordenador es como una colección de celdas que almacenan datos e instrucciones. Cada celda está identificada unívocamente por un número o dirección de memoria.

Para poder acceder a una ubicación específica de la memoria, la CPU genera señales en el bus de dirección, que habitualmente tiene un tamaño de 32 bits en la mayoría de máquinas actuales. Un bus de dirección de 32 bits permite especificar a la CPU 2^{32} = 4.294.967.296 direcciones de memoria distintas.

Debido a la estructura de 32 bits de un procesador común como los de Intel, las direcciones de memoria se expresan a menudo en hexadecimal. Por ejemplo, para no tener que escribir 111111010100000000000010101100 podemos escribir 3F5000AC en hexadecimal.

Aplicación informática[editar]

En aplicaciones informáticas las direcciones son asignadas por el sistema operativo a cada programa en ejecución, asegurándose éste, comúnmente por medio de un daemon, que las direcciones utilizadas por un ejecutable u otro proceso no se solapen o se escriba en posiciones protegidas de memoria, por ejemplo, en el sector de arranque.

Los sistemas operativos actuales son comúnmente diferenciados según el ancho de palabra soportado por sus registros, es decir 32 y 64 bits. Estas cifras se refieren a la máxima capacidad que dichos sistemas operativos pueden direccionar, así un sistema de 32 bits podría acceder y direccionar, sin utilizar memoria virtual, un máximo de 232 posiciones de memoria, usualmente designadas por un código hexadecimal. Debido a esto, el rango de valores naturales que pueden ser almacenados en 32 bits es de 0 hasta 4.294.967.295 (0h - FFFFFFFFh), que vienen a ser los famosos 4 gigabytes de capacidad límite de los sistemas operativos de 32 bits.

Para los sistemas de 64 bits, siguiendo el razonamiento anterior, obtendríamos 264 posibilidades, lo que se traduce en un rango de valores desde 0 hasta 18.446.744.073.709.551.615 (0h- FFFFFFFFFFFFFFFFh), 18,4 exabytes o 18.400.000.000.000 de gigabytes direccionables.

En los lenguajes de programación, se puede acceder a las direcciones de memoria utilizando punteros. Si bien algunos sistemas operativos y lenguajes actuales no permiten acceder a determinadas direcciones de memoria (o incluso, lenguajes como Java que no implementan punteros), esto no significa que dichas direcciones no existan o no sean correctas, por ejemplo, la posición de memoria 0h es una posición válida y correcta y es normal que se trabaje sobre ella por ejemplo cuando se modifica la tabla descriptora de interrupciones. Pero cuando se trabaja en modo protegido, los programas ejecutándose como aplicaciones de usuario no tienen acceso a algunas posiciones (entre ellas la 0h), pero en el sistema operativo TRES que trabaja en modo real, se puede acceder a toda la memoria disponible con un simple programa de usuario.

Aplicación electrónica[editar]

En aplicaciones electrónicas una dirección es el identificador único de cada dispositivo conectado a un bus de datos, así el dispositivo maestro dispondrá de un código para seleccionar uno, y solo uno, de los dispositivos esclavos conectados a él.

Véase también[editar]

Enlaces externos[editar]