Tamaño: 3119
Comentario:
|
Tamaño: 3687
Comentario:
|
Los textos eliminados se marcan así. | Los textos añadidos se marcan así. |
Línea 40: | Línea 40: |
Simplificando algunos conceptos, podríamos decir que los dos números resultantes son los que | Simplificando algunos conceptos, y suponiendo un ejemplo mas extenso, estos dos números resultantes son los que colocará el microprocesador en el bus de direcciones cada vez que necesite acceder a una de estas variables en el resto del programa. Sin embargo, en la memoria donde se encuentran guardadas estas variables, esto no se desarrolla de la misma forma, aquí un bus de dato de 32 bits implica que cada localidad de memoria o casillero mide 32 bits, siguiendo el ejemplo ahora las direcciones de memoria donde se encuentran guardados los dos valores, son contiguos. {{attachment:mapaeo32.png | "mapaeo32.png" | width="40%" }} * Figura 1 |
Una característica de la arquitectura de cualquier microprocesador, es la cantidad de bits que puede operar en forma simultanea, es común entonces referirse a arquitectura de 8,16 32 o 64 bits indicando de esta forma la capacidad de la Unidad Aritmética Lógica (ALU por sus siglas en ingles) en procesar datos.
Era común en los primeros microprocesadores, que este tamaño definiera además el bus de datos, como se vio en el capitulo anterior los 8 bits de datos o 1 byte, permite conectarse perfectamente con cualquier dispositivo de ese tamaño de bus, permitiendo una relación directa entre la dirección de memoria que pretende direccionar el micro y casillero a acceder en la misma.
Con el advenimiento de arquitecturas de mayor tamaño, aparecieron microprocesadores que no respetaban esta relación entre cantidad de bits de ALU y bus de datos.
En principio condicionados por la tecnología del momento, se debió restringir el bus de datos, así por ejemplo el microprocesador de Intel 8088 utilizado en la primera PC, a pesar de disponer de una ALU que permitía operar con números de 16 bits, su bus de dato era de tan solo 8 bits.
Esto supone un cuello de botella importante, debido a que un numero de 16 bits que era procesado en forma simultanea en la memoria exigía 2 acceso individuales a la memoria.
La evolución de los microprocesadores y el problema cada vez mayor de poder acceder a la memoria en forma rápida, fue aumentando el tamaño del bus de dato, en principio equiparándolo a la ALU, y a partir del Pentium II duplicando al tamaño de esta.
Acceso a Memoria
La principal ventaja de un bus de dato grande, es que cuando el micro debe leer o escribir a memoria un dato mayor a 1 byte, este lo puede hacer en menos pasos, debido a que se puede operar con 2, 4 u 8 bytes por cada en cada transferencia desde o hacia la memoria.
Permitiendo con la misma tecnología y misma velocidad de reloj multiplicar por 2, 4 u 8 la velocidad de transferencia.
Pero esta ventaja viene acompañada de una mayor complejidad, y es el echo que a pesar de contar con un micro de 32 bits de ALU, probablemente se quiera operar algunas veces con dato que son de 16 u 8 bits, se debe de alguna forma instrumentar un método adecuado para poder operar con estos tamaños de datos.
Dirección de Memoria
Algo importante a tener en cuenta, es que a pesar de disponer de un microprocesador de 32 bits de ALU, las direcciones de memoria siguen siendo de bytes por ser la menor unidad de datos de almacenamiento direccionable, esto es independiente del tamaño de la ALU.
Como ejemplo se puede hacer.
int a,b; std::cout << "posición de a " << &a << std::endl; std::cout << "posición de b " << &b << std::endl;
dará como resultado algo parecido a
posición de a 0xbffff064 posición de b 0xbffff068
la diferencia entre ambas posiciones es 4, resultado lógico para dos variables de tipo int (4 bytes), posicionadas en forma contigua
Simplificando algunos conceptos, y suponiendo un ejemplo mas extenso, estos dos números resultantes son los que colocará el microprocesador en el bus de direcciones cada vez que necesite acceder a una de estas variables en el resto del programa.
Sin embargo, en la memoria donde se encuentran guardadas estas variables, esto no se desarrolla de la misma forma, aquí un bus de dato de 32 bits implica que cada localidad de memoria o casillero mide 32 bits, siguiendo el ejemplo ahora las direcciones de memoria donde se encuentran guardados los dos valores, son contiguos.
- Figura 1