ESTUDIO SOBRE LAS ARQUITECTURAS ARM y x86
Introducción
Podemos definir ARM y x86 como conjuntos de instrucciones para la arquitectura de procesadores (en inglés, ISA – Instruction Set Arquitecture). Estas instrucciones lo que hacen muy básicamente es convertir las líneas de código de los lenguajes de alto nivel en instrucciones máquina que el procesador pueda entender y ejecutar. Esta diferencia se convierte en un factor clave, ya que nos puede restringir el entorno de ejecución de las aplicaciones software. Pues al ser las instrucciones máquina distintas, no podríamos ejecutar un programa de alto nivel que haga uso específico de uno de dichos tipos (para optimizar recursos) en otro ordenador que fuese distinto. Un ejemplo de esto último pueden ser tanto un videojuego como el sistema operativo Windows 7. De hecho, este último no se puede ejecutar bajo ARM.
Podríamos decir que hay dos alternativas de mercado: por un lado están los ordenadores clásicos de sobremesa o PC's y los servidores; por otro, la reciente aparición de los smartphones y de las tablets.En los ordenadores y portátiles predomina más el juego x86, mientras que el menor consumo energético de ARM le hace idóneo para los móviles y tablets.
El conflicto entre las arquitecturas ARM y x86 viene de la década de 1980, cuando solo estaban los ordenadores clásicos (PC's y servidores) y la complejidad del diseño de los procesadores era un elemento crítico debido a su disponibilidad.
Actualmente, energía y potencia representan los focos principales para un programador de computadoras y el panorama de la informática es muy diferente. Esto es debido al auge de las tablets y de los teléfonos inteligentes (o smartphones), los cuales funcionan con ARM. Este último punto hace que la cota de mercado de ARM esté superando a la de los PC's y portátiles, los cuales operan en x86.
En realidad, ARM es solo un juego de instrucciones para un tipo de diseño de procesadores conocido como RISC (Reduced Instruction Set Computer – “Computador con Conjunto de Instrucciones Reducidas”). Este tipo de diseño tiene como principios: que las instrucciones sean de tamaño fijo y presentadas en un número reducido de formatos; que solo las instrucciones de carga y almacenamiento puedan acceder a memoria.
A su vez, x86 se guía por el diseño CISC (Complex Instruction Set Computing -- "Computador con Conjunto de Instrucciones Complejas"). Este diseño intenta facilitarle la vida al programador dotándole de más instrucciones para elegir. De manera que éstas son más específicas y variadas a la vez.
Características principales de ARM
· Modelo de instrucciones del tipo carga – almacenamiento
Solamente las instrucciones de carga – almacenamiento pueden acceder a memoria. Esto implica que para poder trabajar con los datos, estos deben estar almacenados en registros del procesador.
Esto hace a los ciclos del procesador más cortos, además de facilitar la segmentación o pipeline.
· Arquitectura no destructiva de tres dimensiones de memoria
Con una dimensión de memoria queremos decir simplemente que, al tener ARM tres referencias de variables en sus instrucciones, podemos trabajar con todas ellas sin tener que sobrescribir ninguna, sea el ejemplo de dos datos fuente y otro destino.
· Instrucciones simples
Las instrucciones están fuertemente especificadas de manera que tienen que ser lo más simples posibles (favoreciendo su segmentación y decodificación). Además deben ocupar una palabra.
· Liberación del microcódigo
Se trata de crear instrucciones directas y más veloces que las microinstrucciones de x86.
· Facilitar el pipeline
Ya que las instrucciones pueden ser ejecutadas con una duración de un único ciclo de la CPU.
· Incremento en el número de registros disponibles (al tener menor carga lógica):
Banco de 16 registros de 1 palabra
· Mayor velocidad en la ejecución de instrucciones
Como ya se ha dicho antes, el incremento de la velocidad de los accesos a memoria se ha agrandado exponencialmente. Por otra parte reducir la complejidad de las instrucciones tiene varias ventajas como la liberación de tener que descomponer las instrucciones para la CPU.
En este punto se puede apreciar el contraste entre ARM y x86, ya que el objetivo fundamental de ARM no es ahorrarle esfuerzos al programador (que probablemente no haga uso de su ventaja) sino hacer que las instrucciones sean lo más rápidas posible.
El resultado de lo anterior se traduce en la simplificación del tipo de instrucciones que el procesador ejecuta; a la vez que exige más a memoria y compiladores.
Características principales de x86
· Responde a un tipo de diseño de procesadores CISC
· No todas las instrucciones tienen el mismo tamaño
· Permite trabajar directamente con la memoria (modo registro-memoria)
· Usa el tipo de ordenación "little-endian"
"Little Endian" significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.
· Un programa normal dispone de:
◦ 8 registros de propósito general de 1 palabra
◦ 6 registros de segmento de palabra
◦ 1 registro de estado EFLAGS y un puntero de instrucción EIP, ambos de 1 palabra.
◦ 8 registros en coma flotante
◦ Soporte para operaciones SIMD
· Un conjunto de recursos para manejar la pila y las llamadas a subrutinas.
· El SO dispone además de puertos E/S, registros de control, de manejo de memoria, de depuración, de monitorización, etc.
· Ofrece un conjunto amplio de instrucciones
Con lo cual tiene instrucciones más específicas para cada caso que queramos implementar, con la idea de hacer las cosas más fáciles para el programador.
Diferencias entre ambas
A nivel hardware ambas son en esencia conjuntos de instrucciones diferentes, esto implica que los procesadores que las implementan son distintos y que, por tanto, no podríamos compartir (en un principio) un fichero binario porque son incompatibles.
Aunque como se ha dicho anteriormente, ARM sea más eficiente con los recursos, x86 ofrece más bien lo contrario. Es decir, tiene un rendimiento mayor, factor que se vuelve más importante cuando los recursos son más grandes y no importan tanto recursos como la batería, por ejemplo.
Como se ha mencionado, ARM está más enfocada hacia los smartphones y tablets, mientras que x86 tiene como cota de mercado a los ordenadores clásicos y a los servidores.
ARM tiene un conjunto de instrucciones fijo, mientras que en x86 las instrucciones pueden tener distintos tamaños.
ARM se basa en el diseño RISC, mientras que x86 hace lo propio con CISC.
La arquitectura ARM se dice que es de carga-almacenamiento, como se ha explicado, mientras que x86 es de registro-memoria, accediendo a la memoria con menos restricciones.



No hay comentarios:
Publicar un comentario