Antes de iniciar este tema en el blog, voy a responder una pregunta frecuente que hacen los usuarios con respecto a los procesadores.
Cual es la diferencia de un procesador X86 y uno X64 ??
Es sencillo, a nivel de usuario vamos a decir que el procesador es el encargado de obtener datos de entrada provenientes de la memoria, transformarlos en datos de salida. entonces el procesador utiliza BIT que es la unidad de medida de entrada al procesador todo esos datos por cada pulsacion del reloj (ciclo), quiere decir que determinado numero de bits(32 o 64) es la cantidad de informacion que entra al procesador.
Entonces la respuesta es, el procesador X64 trabaja con 64bit de entrada al procesador mientras que el X86 trabaja con 32bit de entrada, por consecuencia el procesador X64 procesa mas informacion que un procesador X86.
Basados en la respuesta anterior surge una nueva pregunta la cual es:
Si el X64(64bit) procesa mas informacion en un ciclo de reloj que un X86(32bit) porque el nombre ?
La respuesta es que el X64 su nombre se origina naturalmente porque procesa 64 bit pero el procesador X86 su nombre se origina gracias a que pertenece a la familia de procesadores 8080, en los cuales tenemos el 8082, 8085, 8086, 8088 entre otros.
Algunos de los procesadores anteriores trabajan con 16bit por ejemplo 8080, 8082, 8085 y fue a partir del 8086 que se trabaja con 32bit por eso el nombre de esta familia de procesadores.
Arquitectura de procesadores 80x86
1. Arquitectura en pipeline
En el procesamiento de datos tenemos historicamente una evolucion del sistema, inicialmente el procesador era el encargado de ir a la memoria a traer los datos y luego procesar los datos, de esta forma el procesador gastaba tiempo ejecutando tareas que ne eran las de procesamiento puramente (ir a traer a memoria). Para solucionar esta situacion se dividieron en dos funciones, la primera de ellas se llama BUI Basic Unit Interface y es la encargada del manejo de los registros y de los datos en memoria mientras que la segunda funcion el EU Excecute Unit la cual se encarga de ejecutar las instrucciones. De esta manera se ha logrado mayor rendimiento y velocidad por parte del procesador debido a que su funcion ahora es exclusivamente procesar informacion.
2. Bus de datos de 16bit
El bus de datos es el medio por el cual se comunica el procesador y la memoria, por esa razon a mayor bus de datos mayor cantidad de bits por pulsacion del reloj pueden fluir de la memoria al procesador. Cuando hablamos de un bus de datos de 8bit nos referimos a que existen 8 hilos de alambre entre la memoria y el procesador y que cuando el reloj del sistema da un pulso simultaneamente pasan los 8 pulsos. Sin embargo, ahora hablamos de bus de datos de 16bit lo que significa que la comunicacion fluye mas rapido debido a que existe mas bus de datos.
3. Bus de direccion de 20bit
El bus de direccion es el encargado de INDEXAR los datos dentro de la memoria, por lo cual a mayor tamaño de bus de direccion mayor podra ser el tamaño de la memoria debido a que puede indexarse completamente, anteriormente se hablaba de un bus de direccion de 16bit, lo cual permitia indexar memoria de hasta 64kb, cantidad que fue insuficiente por lo cual nacio el bus de direccion de 20bit el cual podia indexar hasta 1MB de memoria cantidad que en aquel entonces era suficiente.
4. BUI, Basic Interface Unit
El BUI es el encargado del FETCH, en otras palabras, el BUI se encarga de estar accediendo periodicamente segun la demanda del procesador hacia la memoria para traer la informacion que le va a servir al procesador para realizar los calculos asociados.
4.1 Registros de segmento
Son cuatro registros que se han asignado a diferente area de la memoria para seleccionar la region de memoria sobre la cual se esta trabajando.
4.1.1 DS, Data Segment: Segmento de datos, aqui se almacenan las variables de una aplicacion.
4.1.2 CS, Code Segment: Segmento de codigo, aqui se almacena el codigo de la aplicacion que se esta ejecutando.
4.1.3 SS, Stack Segment: Segmento de pila, utilizada por el procesador para almacenar las aplicaciones y las sub rutinas utilizadas, su forma de acceso es como una pila (el primero en entrar es el ultimo en salir).
4.1.4 ES, Extra Segment: Segmento extra, utilizado para que el progrmador expanda la memoria de datos o como memoria destinada a video o variables del BIOS.
4.2 Cola de prefectch
Es una estructura de comunicacion y sincronizacion entre el BUI y el EU, sucede que el BUI se encarga de buscar los datos en la memoria y el EU se encarga de ejecutarlos, pero para que ambos procesos se sincronizen es necesaria una cola de espera de tal manera que el BUI busca los datos y los coloca en la cola prefetch de donde el EU los va tomando a medida que se va desocupando. De esta manera se logra que el trabajo continue y ninguno se detenga de trabajar esperando a que el otro proceso se desocupe.
4.3 Generador de direcciones fisicas
Debido a que el bus de direcciones es de 20bit y los registros que almacenan la direccion son de 16bit es necesario dos registros para lograr almacenar la direccion del bus de direcciones para lo cual existe le circuiteria que genera las direcciones fisicas utilizando la siguiente fomrula:
Direccion Fisica = Segmento * 0010h + Desplazamiento
4.4 Bus C
Este bus es exclusivo para la comunicacion entre el proceso BIU, es decir comunica a la memoria, los registros, el generador de direcciones y la cola del prefetch. Notose que este bus solo comunica dentro del BIU para que no se intercepten los datos con el EU.
5. EU, Execution Unit
Es la unidad encargada de la ejecucion de las instrucciones utilizando los datos que se encuentran en la memoria. Estos datos que estan en la memoria son traidos por el BIU (conformado por registros) y almacenados en la cola de prefetch para ser utilizados por la EU quien es la encargada de realizar calculos aritmeticos.
5.1 Unidad de Control
Es la unidad que controla el prefetch de la memoria y las actividades necesarias para que el procesador funcione, es en otras palabras el que coordina las microoperaciones del procesador para que este lleve a cabo su tarea.
5.2 Registro de Proposito General
Son 4 registros de 16bit cada uno, dividisos en dos partes, H es la parte alga de 0 a 7bit y L es la parte baja de 8 a 15bit. Son utilizados por los programadores para almacenar informacion de variables, funciones con las cuales se pueden realizar operaciones.
5.2.1 AX, Registro de Acumulador: Registro de proposito general, es el mas usado de todos los registros.
5.2.2 BX, Regostro Base: Especializado en el acceso a memoria conjuntamente con los registros de indice.
5.2.3 CX, Registro Contador: Especializado para ser contador, debido a que funciona de forma ciclica.
5.2.4 DX, Registro Datos: conjuntamente con el AX, forman registros de 32bit para almacenar datos de mayor longitud.
5.3 Registro de Indice
Son registros de 16bit, al igual que los registros de proposito general con la unica diferencia que no cuentan con las mismas capacidades en cuanto a funcionamiento que los registros de proposito general.
5.3.1 SI, Source Index:: Registro que apunta hacia la localidad de memoria que se va a leer.
5.3.2 DI, Destination Index:Registro que apunta hacia la localidad de memoria que se va a escribir.
5.3.3 BP, Base Pointer: Registro utilizado para acceder a la pila, indicando cuando queremos sacar mas datos de los que la pila tiene "underflow"
5.3.4 SP, Stack Pointer: Registro para acceder a la pila al igual que el BP(Base Pointer) con la diferencia que este indica cuando la pila esta llena "overflow"
5.4 ALU, Aritmetic Logic Unit: Circuito electronico capaz de realizar operaciones aritmeticas necesarias para el procesamiento de datos provenientes del bus A, el ALU esta conectado con las vanderas las cuales en dependencia de el resultado del ALU se activan o se desactivan.
5.5 Registro de Banderas: Este es un registro de 16bits que almacena informacion de estados del procesador en donde 0 significa que el evento no ocurrio y 1 significa que el evento ocurrio.
5.5.1 ZF, Bandera de Resultado 0: Se activa cuando el resultado de la operacion en el alu es cero.
5.5.2 CF, Bandera de Carry: Se activa cuando el resutlado del alu (suma o resta) genero un acarreo.
5.5.3 OF, Bandera de Overflow: Cuando la operacion en el alu excedio el tamaño del registro.
5.5.4 SF, Bandera de Signo: Se activa cuando la operacion devuelve un valor negativo, es decir, menor que cero.
5.5.5 AF, Bandera de Carary Auxiliar: Es el auxiliar del carry cuando se generan acarreos en sumas o restas de operaciones realizadas por el alu, por ejemplo si sumamos dos numeros de 16bit cada uno, cuando sumamos los primeros 8bits se general el carry auxiliar que es el que corresponde a la primer mitad.
5.5.6 DF, Bandera de Direccion: Esta bandera no se enciende como las anteriores banderas, esta es utilizada por el programador para indicar la direccion de acceso.
5.5.7 IF, Bandera de Interrupcion: Esta bandera se activa cuando el procesador esta en una interrupcion de tal modo se evita que una interrupcion sea atendida mientras se encuentra en otra interrupcion.
5.6 Bus A
Es el camino por el que viajan los datos dentro de la unidad de ejecucion, principalmente entre los registros y el alu.
De forma global podemos ilustrar el procesamiento de datos de la siguiente forma: