miércoles, 22 de enero de 2014

Cuestion A: Arquitecturas ARM y x86


Arquitectura ARM

El objetivo de diseñar máquinas con esta arquitectura es posibilitar la segmentación y el paralelismo en la ejecución de instrucciones y reducir los accesos a memoria

Características heredadas del RISC

La arquitectura ARM incorporo algunas características del diseño RISC aunque no todas, las que se mantuvieron son:


  • Arquitectura de carga y almacenamiento: Las instrucciones que acceden a memoria están separadas de las instrucciones que procesan los datos, ya que los datos están en registro. ARM no soporta operaciones de memoria a memoria, por lo que todas las instrucciones ARM se distingen en tres etapas:

               1.- Instrucciones que procesan datos: Solamente usan y modifican                       valores en los registros.

               2.- Instrucciones de transferencia de datos: Copian los datos de                         memoria en registros o de los registros a memoria.
               3.- Instrucciones de control de flujo: Ejecutan instrucciones                               ubicadas en direcciones de memorias consecutivas.

               

  • Instrucciones de longitud fija de 32 bits: Campos de instrucciones uniforme y de longitud fija, para simplificar la decodificación de las instrucciones.
  • Formatos de instrucción de 3 direcciones: "f" bits para el código de operación, "n" bits para especificar la dirección del primer operando, "n" bits para especificar la dirección del segundo operando y "n" bits para especificar la dirección del resultado.
                 


El formato de 3 direcciones de ARM se especifican por registros que se han cargado previamente con el contenido de las direcciones de memoria correspondientes.

Esta arquitectura no destructiva ya que el resultado de la operación no se escribe sobre alguno de los operandos, permite a los compiladores organizar las instrucciones de manera de optimizar el pipeline.


Características incorporadas por ARM

Características que luego agrego ARM:

  • Todas las instrucciones se ejecutan en un ciclo de reloj.
  • Modos de direccionamiento simples: El procesamiento de datos solo opera con contenidos de registros, no directamente en memoria.
  • Control sobre la ALU y el shifter en cada instrucción de procesamiento de datos para maximizar el uso de la ALU y del shifter.
  • Modo de direccionamiento con incremento y decremento automático de punteros 
  • Carga y almacenamiento de múltiples instrucciones: Para maximizar el rendimiento de datos.
  • Ejecución condicional de todas las instrucciones: Para maximizar el rendimiento de la ejecución.
  • Set de instrucciones ortogonal, regular o simétrico: No hay restricciones en los registros usados en las instrucciones
  • Pipeline: La próxima instrucción comienza antes de que la actual haya finalizado para economizar el tiempo.
  • Excepciones vectorizadas: son condiciones inusuales de una istrucción en particular.
  • Arquitectura Thumb: Consiste en usar un set de instrucciones de 16 bits que es una forma comprimida del set de instrucciones de ARM de 32 bits para mejorar la densidad de código.
Todas estas mejorar permite a los procesadores ARM adquirir un buen equilibrio entre alto rendimiento, escaso tamaño de código, bajo consumo y poca área de silicio.


Ventajas del RISC

  1. Menor desperdicio de área de silicio: Mas area libre para realizar mejoras de rendimiento como memoria cache, funciones de manejo de memoria, punto flotante, etc.
  2. Menor tiempo de desarrollo: Al ser un procesador simple tiene menor costo y menos esfuerzo de diseño.
  3. Mayor rendimiento: Al diseñar un procesador simple y luego se le agregan instrucciones complejas hará mas eficientes varias funciones de alto nivel pero también decaerá un poco el reloj.
Inconvenientes RISC

  1. No ejecuta códigos x86
  2. Tienen una pobre densidad de código comparada con CICS: En ausencia de memoria cache, la búsqueda de la instrucción necesita un aumento del ancho de banda de la memoria principal dando un mayor consumo.

Características del set de instrucciones ARM

Las instrucciones de ARM son de 32 bits y se alinean en bandas de 4 bytes en memoria, las características mas importantes son:

  • La arquitectura carga-almacenamiento
  • Instrucciones de procesamiento de datos de 3 direcciones
  • La ejecución condicional para cada instrucción
  • La inclusión de instrucciones muy potentes de carga y almacenamiento de múltiples registros
  • La habilidad de ejecutar una operación de desplazamiento y otra general ALU en una instrucción única que se ejecuta en un único ciclo de reloj
  • Extensiones abiertas del set de instrucciones a través del set de instrucciones del coprocesador
  • Arquitectura Thumb de 16 bits del set de instrucciones comprimida y compacta

Ejecución de instrucciones ARM

  • Una instrucción necesita dos operandos, uno siempre sera un registro y el otro un registro o un valor inmediato. 
  • El segundo operando pasa a través del registro de desplazamiento "barrel shifter" donde sufre un desplazamiento y luego se combina con el primer operando de la ALU.
  • Por ultimo el resultado de la ALU se escribe en el registro destino.
  • Todas las instrucciones tienen lugar en un ciclo de reloj
  • El valor del contador de programa PC se incrementa y se copia de nuevo en el registro de direcciones.
  • La próxima instrucción se carga al final del pipeline.
                     


El sistema de memoria

  • ARM tiene un estado de la memoria. La memoria se comprende de bytes numerados desde cero hasta 2^21-1. 
  • Los datos pueden ser bytes (8 bits), media palabra (16 bits) o palabras (32 bits)
  • Las palabras están siempre alineadas en bandas de 4 bytes, es decir, los 2 bits de direcciones menos significativos son cero porque son múltiplos de 4)
  • Las medias palabras están alineadas en bandas de bytes pares ya que son múltiplos de 2.


Existen dos organizaciones:

  • Little endian
               - La posición de cada byte tiene un único número.

               - Un byte puede ocupar cualquiera de estas posiciones de memoria

               - El tamaño de una palabra debe ocupar un grupo de posiciones de                  cuatro bytes que comienzan en una dirección que es múltiplo de                    cuatro y tiene los cuatro bits menos significativos en 0.

                            



  • Big-endian

               - Es la configuración utilizada por Motorola y por los protocolos                        TCP, en donde los bytes se escriben en el orden natural en el que                  se leen.

               - Al tener primero el byte de mayor peso se puede saber si el                          número es positivo o negativo comprobando el estado del bit mas                  significativo del primer byte.

               - Las rutinas de conversión entre sistemas de numeración son mas                  eficientes que little endian ya que la representación coincide con                    el orden en el que se escriben los números.

                         


Arquitectura x86

Características

La arquitectura x86 esta diseñada bajo la arquitectura de Von Neumann, que utiliza el mismo dispositivo de almacenamiento para las instrucciones y para los datos.


Algunas características importantes son:

  • Las instrucciones de x86 son de longitud variable de tipo registro de memoria y diseño CISC.
  • El espacio de direcciones lineal es de 4GB con acceso desalineado y almacenamiento little-endian
  • Dispone de 8 registros de propósito general de 32 bits
  • 6 Registros de segmento de 16 bits
  • Un registro de estado EFLAGS y un puntero de instrucción EIP de 32 bits ambos
  • Dispone de 8 registros de coma flotante de 80 bits
  • 8 registros MMX y XMM de 64 y 128 bits respectivamente para realizar operaciones SIMD.
  • Un conjunto de recursos para el manejo de la pila y subrutinas
  • El SO dispone de puertos E/S, registros de control de manejo de memoria, de depuración, monitorización, etc


Registros de la CPU

Almacenan posiciones de memoria debido a que el acceso a los registros es mucho mas rapido que los acceso a memoria. Hay 14 registros, segun su funcionalidad se dividen en:

Registros de propósito general:

  • AX (Registro acumulador): usado en operaciones aritméticas y como registro de propósito general.
  • BX (Registro base): Se usa para indicar las posiciones de memoria
  • CX (Registro contador): Contiene el valor para controlar el numero de veces que un ciclo se repite.
  • DX (Registro dato): Se usa como registro auxiliar en operaciones aritméticas y como contenedor de datos.


Todos los registros son de 16 bits, pero para realizar operaciones de tipo byte cada uno de estos cuatro registros se divide en dos subregistros de 8 bits a los que se puede acceder de forma independiente, obteniendo así instrucciones ensamblador que pueden operar con datos de 8 y 16 bits


Registros de segmento 

  • CS (Code Segment): Usado por el procesador con el registro IP para saber la ubicacion actual de la instrucción que esta siendo ejecutada.
  • DS (Data Segment): Indica donde están los datos del programa que esta siendo ejecutado.
  • SS (Stack Segment): Indica al procesador sonde esta la zona de memoria que se utilizara para el almacenamiento temporal de datos y direcciones
  • ES (Extra Segment): Apuntador de memoria auxiliar en operaciones complejas en las que se necesitan dos punteros de datos a la vez.
Los cuatro registros son de 16 bits


Registros de pila

  • SP(Stack Pointer): proporciona el valor de desplazamiento de la palabra actual que esta siendo procesada en la pila
  • BP (Base Pointer): Registro auxiliar que facilita la referencia de parámetros 
Ambos registros son de 16 bits


Registros Indice

  • SI (Source Index): Usado como puntero origen en operaciones de desplazamiento entre dos zonas de memoria
  • DI (Destination Index): Usado como puntero destino en operaciones de desplazamiento entre dos zonas de memoria



Registro Instrucción

  • IP (Instruction Pointer): Utilizado por la CPU para saber la posición a CS donde se encuentra la instrucción que se esta ejecutando.


Arquitectura x86-64


Es una arquitectura basada en el conjunto de instrucciones x86 pero para manejar direcciones de 64 bits, las caracteristicas mas importantes que introdujo fueron:

  • Nuevos registros: El numero de registros de proposito general aumenta de 8 a 16 y tambien el tamaño de estos registros de 32 a 64 bits. Por otro lado el numero de registros de 128 bits han aumentado de 8 a 16.
  • Espacio de direcciones mayor: Se pueden direccionar hasta 16 exabytes de memoria
  • Las instrucciones pueden hacer referencias relativas al puntero de instrucciones (registro RIP)
  • Llamadas al sistema mas rápidas ya que la segmentación no esta soportada en el modo de 64 bits.
  • El bit NX: Permite al SO prohibir la ejecucion del codigo en area de datos mejorando la seguridad.
  • Soportan otros juegos de instrucciones: SSE, SSE2, SSE3, y SSE4, además de x86 y MMX.

En resumen

La diferencia principal que presentan es que cada uno utiliza un conjunto de instrucciones distinto. Por lo que el primer gran inconveniente, y es que un software creado para un procesador x86 no es compatible con otro ARM, ya que el otro procesador no es capaz de traducir el lenguaje usado a lenguaje máquina.

Los procesadores x86 están basado en la arquitectura CISC, una arquitectura que permite ejecutar instrucciones complejas y paralelas, permitiendo un mayor rendimiento (procesadores más potentes) y con una consumición superior (lo que los hace menos viables para dispositivos móviles) y de ejecución más lenta.

Por otro lado, los procesadores ARM estan basados en la arquitectura RISC, un modelo de arquitectura donde las instrucciones se empaquetan en funciones de menor tamaño, por lo que resuelven con mayor facilidad y rapidez acciones más sencillas en paralelo, con menor gasto  y menos capacidad de máximo rendimiento en acciones complejas. Se preocupan en la simplificación de esas instrucciones, con la intención de alcanzar la máxima eficiencia por ciclo pudiendo realizar tareas menores con procesos más cortos y una mayor organización de las operaciones dentro del núcleo de procesamiento.

Conclusión

Ventajas:

1. Más batería: ARM está diseñado para consumir la mejor energía  posible. X86 no está diseñado para ello

2.  Precios bajos: Gracias a tantas licencias vendidas, la competencia es  mayor. Fabricarlos y diseñarlos es más barato que optar por  productos x86 de solo dos o tres fabricantes

3. Más seguridad: Existe poco malware para la plataforma ARM, a  diferencia de la que existe en x86 y Windows

Desventajas

1. Menos rendimiento: En aplicaciones comunes, x86 sigue siendo la mejor.

2. Pocos juegos: la arquitectura SoX mete todo lo necesario en la GPU, este último es poco complejo.

3. No hay 64 bit: no hay ningún diseño que permita usar un espacio de memoria mayor a 4GB, sin embargo la próxima versión de ARM tendría un controlador de memoria de 40 bit que permitirá acceder a 1TB


























No hay comentarios:

Publicar un comentario