top of page

una dirección de memoria es un identificador para una localización de memoria con la cual un programa informático o un dispositivo de hardware pueden 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  = 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.

 

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 DOS que trabaja en modo real, se puede acceder a toda la memoria disponible con un simple programa de usuario.



Rango de direcciones. El rango de direcciones está relacionado con el número de bits de direccionamiento. En direccionamiento con desplazamiento, el rango se amplía al definido por la longitud del registro de direcciones. Es aun conveniente permitir desplazamientos bastante más largos que los del registro de direcciones, y esto requiere de un número relativamente grande de bits de direcciones en la instrucción.


Granularidad de las direcciones. En un sistema con palabras de 16 o 32 bits, una dirección puede referenciar una palabra o un byte, según elija el diseñador. El direccionamiento por bytes es conveniente para manipular caracteres pero requiere, para un tamaño de memoria dado, de más bits de direcciones.

 

2.6.3 DIRECCIONES

bottom of page