sábado, 18 de enero de 2014

Cuestion A

Estudio detallado que contraste las arquitecturas ARM/x86. 


Dado que vamos a tratar una comparativa entre ARM/x86 lo primero es tener claro que caracterizan a ambas arquitecturas.


ARM


ARM es una arquitectura RISC de 32 bits desarrollada por ARM Holdings (pero licenciable). Se llamó Advanced RISC Machine, y anteriormente Acorn RISC Machine.

La arquitectura ARM es el conjunto de instrucciones de 32 bits más ampliamente utilizado.

La relativa simplicidad de los procesadores ARM los hace ideales para aplicaciones de baja potencia. Como resultado, se han convertido en dominante en el mercado de la electrónica móvil e integrada, encarnados en microprocesadores y microcontroladores pequeños, de bajo consumo y relativamente bajo coste.

En 2005, alrededor del 98% de los más de mil millones de teléfonos móviles vendidos utilizaban al menos un procesador ARM.

Desde 2009, los procesadores ARM son aproximadamente el 90% de todos los procesadores RISC de 32 bits integrados.


Diseño


El juego de instrucciones del ARM es similar al del MOS 6502 (microprocesador de 8 bits), pero este incluye características adicionales que permiten conseguir un mejor rendimiento en su ejecución. 

Otra característica única del juego de instrucciones es la posibilidad de añadir shifts y rotar en el procesamiento de datos (aritmético-lógicos y movimiento de registros).

El procesador ARM también tiene algunas características que son raras en otras arquitecturas también consideradas RISC, como son el direccionamiento relativo, y el pre/post incremento en el modo de direccionamiento.


Tecnologías


Thumb: Los procesadores más recientes traen un conjunto de instrucciones adicional de 16 bits (2 bytes) de longitud por instrucción, en lugar de 32 bits (4 bytes) como el juego de instrucciones estándar de ARM.

Thumb es un subconjunto formado por las instrucciones que se usan con más frecuencia.

El primer procesador con la tecnología Thumb fue el ARM7TDMI. Toda la familia posterior al ARM9, incluyendo el procesador Intel XScale, traen incorporada esta tecnología en su núcleo.

El modo Thumb es más limitado que el modo ARMI (en el cual sus instrucciones ocupan 4 bytes), pero como en el modo Thumb las instrucciones solo ocupan 2 bytes, esto conlleva un menor consumo de corriente y de memoria, lo que lo convierte a la tecnologia Thumb en ideal para cualquier tipo de dispositivo móvil.

Jazelle: ARM tiene implementada una tecnología que permite a ciertos tipos de arquitecturas ejecuten Java bytecode nativamente en el hardware. 

El primer procesador en usar Jazelle fue el ARM926EJ-S, utilizando una J en el nombre de todos los procesadores que soportaran esta tecnología.



x86


x86 es una arquitectura CISC de 32 bits desarrollada por Intel (pero licenciable al igual que ARM). Esta arquitectura define el conjunto de instrucciones para la familia de microprocesadores instalados en la gran mayoría de ordenadores en el mundo.

Esta arquitectura es notablemente no limpia, por mantener compatibilidad con la línea de procesadores de 16 bits de Intel, que a su vez también eran compatibles con una familia de procesadores de 8 bits. A pesar de ello, la popularidad comercial de esta arquitectura hizo que muchos fabricantes empezaran a fabricar en masa microprocesadores compatibles (AMD, Cyrix, etc).

Existen dos sucesores de 64 bits para esta arquitectura:
  • IA64, empleada en los procesadores Itanium de Intel y no compatible con X86, excepto bajo emulación.
  • AMD64 o x86-64, de AMD, que es básicamente una extensión de 64 bits de la familia x86.



Registros


Después del juego de instrucciones, lo más reseñable de esta arquitectura es que incluye 8 registros de propósitos generales también accesibles en 8 y 16 bits.
















 EAX (acumulador)
  • Donde ocurren la mayoría de cálculos
  • Optimizado para la mayoría de instrucciones aritmeticos-logicas
  • La arquitectura posee operaciones especiales para la entrada/salida de datos de este registro


EBX (base)
  • En 16 bits, es el registros usado como puntero. Junto a ESI, EDI y EBP, era el único que podía aparecer entre corchetes ("operador de indirección")
  • Actualmente no tiene función específica, así que se considera almacenamiento extra


ECX (contador)
  • Todas las instrucciones de x86 que precisan de un contador usan este registro
  • Es un contador descendente, al contrario de lo que suele ocurrir en alto nivel


EDX (datos)
  • Es el registro más ligado al acumulador (EAX)
  • Operaciones que trabajan con datos grandes los 32 bits más significativos en EDX
  • Suele usarse para almacenar datos relacionados con el acumulador


ESI (índice fuente)
  • Tiene las mismas propiedades que EDI. Sin embargo, se usa como puntero a la dirección donde se encuentra el dato fuente (con el que vamos a operar)


EDI (índice de destino)
  • Cada vez que necesitamos acceder a memoria para almacenar datos, necesitamos de una dirección (puntero). Este registro se encarga de ello
  • Instrucciones que se encarguen de almacenar datos en la memoria usan este registro para  direccionarla


ESP y EBP (punteros de manejo de la pila)
  • Son los únicos que mantienen su función original
  • ESP es especifico para el manejo de la pila
  • EBP se puede reutilizar en programas que no precisen de ella





En definitiva, grosso modo:

ARM - Es un conjunto de instrucciones de 32 bits de arquitectura RISC (Reduced Instruction Set Computer = Computador con Conjunto de Instrucciones Reducidas).



x86 - Es un conjunto de instrucciones de 32 bits de arquitectura CISC (Complex Instruction Set Computer = Computador con Conjunto de Instrucciones Complejas).


Vistas las 2 definiciones, la primera cuestión se reduce a comparar las arquitecturas RISC y CISC.

Pero, ¿por que surge esta comparativa?

La respuesta parece simple, pero saber que terminara ocurriendo en un futuro no esta tan claro.

Hoy en día, los programas cada vez son más grandes y complejos, por lo que estos demandan mayor velocidad en el procesamiento de información, lo que implica buscar microprocesadores más rápidos y eficientes.

Los avances y progresos en las tecnología de semiconductores, han reducido las diferencias en las velocidades de procesamiento de los microprocesadores con las velocidades de las memorias, lo que ha repercutido en nuevas tecnologías en el desarrollo de microprocesadores.


¿Que significa esto?

Que con tecnologías de semiconductores comparables y bajo la misma frecuencia de reloj, un procesadores RISC tiene una capacidad de procesamiento de 2 a 4 veces mayor que la de un CISC, pero su estructura hardware es tan simple, que se puede realizar en una fracción de la superficie ocupada por el circuito integrado de un procesador CISC.


Por este hecho, se supone que la arquitectura RISC reemplazará a la CISC, pero la respuesta como dijimos antes, no es tan simple, porque hay que tener en cuenta más factores:
  • Costes (tanto hardware, como en el desarrollo del software)
  • Compatibilidades (dado que ambas arquitecturas generan binarios que otras arquitecturas son incapaces de interpretar)


Aun así, todo esto lleva a pensar que dentro de muy poco los usuarios dejaran de hacerse la pregunta ¿RISC o CISC?, puesto que la tendencia futura, nos lleva a pensar a que no existirán los CISC 100% puros.

La meta principal es incrementar el rendimiento del procesador, ya sea optimizando alguno que ya exista o si se desee crear uno. Para esto se deben considerar tres áreas principales a cubrir en el diseño del procesador y estas son:
  • La arquitectura
  • La tecnologia de proceso
  • El encapsulado
La tecnología de proceso hace referencia a los materiales y técnicas utilizadas en la fabricación del circuito integrado.
El encapsulado se refiere a cómo se integra un procesador con lo que lo rodea un sistema funcional, que de alguna manera determina la velocidad total del sistema.

Aunque la tecnología de proceso y de encapsulado son vitales en la elaboración de procesadores más rápidos, es en la arquitectura del procesador donde podemos encontrar diferencia entre el rendimiento de una CPU y otra. 

Dependiendo de cómo el procesador almacena los operandos de las instrucciones de la CPU, existen tres tipos de juegos de instrucciones:
  1. Juego de instrucciones para arquitecturas basadas en pilas
  2. Juego de instrucciones para arquitecturas basadas en acumulador
  3. Juego de instrucciones para arquitecturas basadas en registros

Las arquitecturas RISC y CISC son ejemplos de CPU con un conjunto de instrucciones para arquitecturas basadas en registros.



Arquitectura CISC


Los microprocesadores CISC tienen un conjunto de instrucciones caracterizado por ser muy amplio y por permitir operaciones complejas entre operandos situados en la memoria o en los registros internos, en contraposición a la arquitectura RISC.

Este tipo de arquitectura dificulta el paralelismo entre instrucciones, por lo que, en la actualidad, la mayoría de los sistemas CISC de alto rendimiento implementan un sistema que convierte a estas instrucciones complejas en varias instrucciones simples del tipo RISC, llamadas microinstrucciones.


Ventajas de las arquitecturas CISC:
  • Reduce la dificultad de crear compiladores
  • Permite reducir el costo total del sistema
  • Reduce los costos de creación de software
  • Mejora la compactación de código
  • Facilita la depuración de errores


Desventajas de las arquitecturas CISC:
  • La velocidad de procesamiento con el paso del tiempo se fue quedando corta, se necesitaba más velocidad. (Accesos a memoria disminuyen la velocidad de ejecución)
  • Las instrucciones requieren varios ciclos de reloj (para realizar una sola instrucción un chip CISC requiere de 4 a 10 ciclos) para ejecutarse
  • Los desarrolladores de software creaban sus propias instrucciones más simples
  • Se solían utilizar siempre las mismas instrucciones, por lo que un gran número de instrucciones prácticamente no se utilizaban casi nunca o nunca
  • Direccionamientos complejos
  • Poco aprovechamiento de parte de los compiladores: no es fácil encontrar la mejor instrucción para ejecutar una tarea

Ejemplos de arquitecturas CISC:

Familia x86


Motorola 68000, 68010, 68020, 68030, 68040



Arquitectura RISC


En las arquitecturas RISC la filosofía que persigue es la de diseñar CPU's a favor de un conjunto de instrucciones pequeñas y simples que toman menor tiempo para ejecutarse, cuyas características fundamentales son:
  • Instrucciones de tamaño fijo y presentadas en un reducido número de formatos
  • Sólo las instrucciones de carga y almacenamiento acceden a la memoria de datos
  • Disponen de muchos registros de propósito general
El objetivo de diseñar maquinas con esta arquitectura es la de dar soporte a la segmentación y al paralelismo a nivel de instrucción, y reducir los acceso a memoria. Todo esto se traduce en una mayor velocidad de procesamiento.
En pocas palabras, un chip RISC tendrá menos transistores dedicados a la lógica principal. Esto permite a los diseñadores una flexibilidad considerable; así pueden, por ejemplo:
  • Incrementar el tamaño del conjunto de registros
  • Mayor velocidad en la ejecución de instrucciones
  • Implementar medidas para aumentar el paralelismo interno
  • Añadir cachés enormes
  • Añadir otras funcionalidades, como E/S y relojes para minicontroladores
  • Construir los chips en líneas de producción antiguas que de otra manera no serían utilizables
  • No ampliar las funcionalidades, y por lo tanto ofrecer el chip para aplicaciones de bajo consumo de energía o de tamaño limitado

Las características que generalmente encontramos en los diseños RISC son:
  • Codificación uniforme de instrucciones (ejemplo: el codigo de operacion se encuentra siempre en la misma posición en cada instrucción, la cual es siempre una palabra), lo que permite una decodificación más rápida
  • Un conjunto de registros homogéneo, permitiendo que cualquier registro sea utilizado en cualquier contexto y así simplificar el diseño del compilador (aunque existen muchas formas de separar los ficheros de registro de entero y coma flotante)
  • Modos de direccionamiento simple con modos más complejos reemplazados por secuencias de instrucciones aritméticas simples
  • Los tipos de datos soportados por el hardware (por ejemplo, algunas máquinas CISC tiene instrucciones para tratar con tipos byte, cadena) no se encuentran en una máquina RISC

Ventajas de las arquitecturas RISC:
  • Microarquitectura más simples
  • Instrucciones más cortas, menos tiempo de acceso a memoria
  • Compiladores más sencillos y eficientes

RISC ofrece soluciones donde se requiere una elevada capacidad de procesamiento y donde se presente una orientación hacia los lenguajes de alto nivel.o


Desventajas de las arquitecturas RISC:
  • Mayor numero de lineas de código para una función
  • Compatibilidad con arquitecturas antiguas es más difícil de mantener


Ejemplos de arquitecturas RISC:

MIPS (Microprocessor without Interlocked Pipeline Stages)


PA-RISC (Hewlett Packard - HP)


SPARC (Scalable Processor Architecture - Sun Microsystems)


POWER PC (Apple, Motorola e IBM)


Pero, a la hora de ejecutarse una instrucción RISC y otra CISC actual, ¿donde está la diferencia?


Se podría decir a groso modo, la arquitectura CISC actúa como si tuviera en su interior una arquitectura RISC, en el cual la instrucción CISC cuando se ejecuta, se "convierte" en varias microinstrucciones más simples (instrucciones RISC) y estas microinstrucciones son las que se ejecutan.

Esto quiere decir, que en la actualidad los CISC de los que disponemos aprovechan el gran numero de instrucciones que poseen la arquitectura CISC, mas la segmentación (pipelining) que ofrece la arquitectura RISC.




En conclusión, aunque las diferencias entre las arquitecturas RISC y CISC son cada vez mas borrosas...  las principales diferencias se pueden apreciar en el siguiente cuadro:


CISC
RISC
Instrucciones de varios ciclos

Instrucciones de un único ciclo
Carga/Almacenamiento incorporadas en otras instrucciones
Carga/Almacenamiento son instrucciones separadas
Arquitectura memoria-registro

Arquitectura registro-registro
Instrucciones de tamaño variable

Instrucciones de tamaño fijo
Buffer intermedio para las microinstrucciones
Instrucciones implementadas directamente

Se enfatiza la versatilidad del repertorio de instrucciones
Se añaden instrucciones nuevas solo si son de uso frecuente y no reducen el rendimiento de las más importantes
Facilita la implementación de compiladores
Compiladores más difíciles de implementar


Elimina microcódigo y la decodificación de instrucciones complejas


A nivel de rendimiento, el objetivo primordial del uso de ARM es el bajo consumo de energía frente a otras arquitecturas como puede ser x86.

Por este hecho, ARM se ha convertido en la arquitectura dominante en innumerables dispositivos electrónicos que son de baja potencia como pueden ser smartphones, tablets, Raspberries Pi,  algunas consolas portátiles e incluso algunos periféricos del ordenador.


Además, ARM no necesita refrigeración, pero ya empezamos a ver SoC ARM con disipadores. Todo parece indicar que ARM terminara sustituyendo a los procesadores x86 de bajo consumo.

Los últimos procesadores ARM alcanzan rendimientos cercanos e incluso superiores a los de la gama móvil de Intel (x86), con consumos menores.


El estado actual del uso de ambas arquitecturas queda muy bien resumido en la siguiente gráfica:



No hay comentarios:

Publicar un comentario