jueves, 16 de enero de 2014

Arquitecturas ARM/x86.

Arquitecturas ARM y x86

A día de hoy, estas dos arquitecturas están muy presentes en nuestra vida cotidiana, aunque voy a hablar sobre sus diferencias principales.

La arquitectura ARM, anteriormente las siglas significaban Acorn RISC Machine, para luego pasar a llamarse Advanced RISC Machine, está desarrollada por ARM Holdings, es de tipo registro-registro y si bien la versión más común es de 32 bits, existe actualmente versiones de 64 bits que fueron introducidas hace relativamente poco.

Por otro lado, la arquitectura x86, proviene de las dos últimas cifras que Intel adoptó en sus modelos de microprocesadores 8086, es una arquitectura iniciada por Intel para su microprocesador y luego adoptada también por la competencia directa, AMD. A diferencia de ARM, x86 es de tipo memoria-memoria. Si bien en los inicios su versión fue de 16 bits, en la actualidad, podemos encontrar versiones tanto de 32 bits como de 64 bits.

Cabe destacar que ARM Holding no produce, si no que venden las licencias a los productores que se encargan de la fabricación de los microprocesadores. La arquitectura x86 es en parte libre, aunque para algunos aspectos finales se necesita una licencia de Intel o AMD.

Los orígenes de ambas arquitecturas nos llevan a los años 70/80, no me extenderé demasiado. La arquitectura x86 vino de la mano de Intel cuando quiso crear su primer microprocesador para uso comercial, siendo los modelos previos a 8085 los antecesores del x86 que hoy conocemos, hasta llegar al mercado de los microprocesadores avanzados para ordenadores actualmente. ARM por su parte se introdujo en el mundo mediante Acorn Computers, querían lanzar un procesador avanzado pero con una arquitectura parecida a la computadora MOS 6502. De esos diseños preliminares nació ARM1, el padre de los microprocesadores ARM actuales. A día de hoy, tanto el enfoque como la producción han cambiado drásticamente hacia el terreno de dispositivos portátiles, x86 está introduciéndose lentamente en dispositivos portátiles, mientras que ARM tuvo su mayor “explosión” en este aspecto debido a su bajo consumo energético.

Llegados a este punto, ¿cuál es realmente la diferencia entre estas dos arquitecturas de microprocesadores?

La diferencia principal, y sobre la que basaré mi trabajo de aquí en adelante, es que cada uno utiliza un conjunto de instrucciones distinto, ISA (Instruction Set Architecture) en sus siglas en inglés.

Entonces, ¿qué es el llamado ISA?

ISA es el traductor que se encarga de convertir las líneas de código de los programas en lenguaje máquina para que pueda funcionar. Como la arquitectura x86 y ARM son diferentes, los programas que funciona en una arquitectura, no funcionan en la otra. Por lo tanto, sus instrucciones y modo de ejecución son diferentes.

Veamos cuales son las dos arquitecturas.

La arquitectura x86 se basa a su vez en la arquitectura CISC (Complex Instruction Set Computer). Esto significa que tiene un amplio conjunto de instrucciones y permite hacer operaciones complejas entre operandos situados en la memoria o en los registros internos. Debido a la arquitectura CISC, la arquitectura x86 dificulta el paralelismo entre instrucciones por lo que está destinada a realizar instrucciones simultáneas y lentas.

Por otro lado, la arquitectura ARM se basa en la arquitectura RISC (Reduced Instruction Set Computer), lo cual significa que, tiene un conjunto más pequeño de instrucciones, de tamaño fijo y que las operaciones solo pueden hacerse en los registros. Únicamente las instrucciones de almacenamiento y carga son las que acceden a la memoria de datos. Sin embargo, la arquitectura ARM, a causa de la arquitectura RISC, favorece el paralelismo y segmentación de instrucciones, con ello se consigue pequeñas instrucciones que se realizan de forma rápida. RISC está más enfocado al software mientras que CISC a la parte de hardware.

La arquitectura CISC, al tener una base de instrucciones más grande y compleja, facilita la labor de realizar programas y, por ende, para máquinas con arquitectura x86. Por contrapartida, la arquitectura RISC tiene un conjunto de instrucciones o hábitos más limitado, lo que podría suponer una dificultad al desarrollador a la hora de realizar un programa en una máquina con esta arquitectura.

Un ejemplo de un programa en ambas arquitecturas: programa “freír un huevo”. En ARM el programa tendría una instrucción por cada paso:
·Instrucción 1: encender el fuego.
·Instrucción 2: poner la sartén en el fuego.
·Instrucción 3: verter el aceite en la sartén.
·Instrucción 4: poner el huevo en la sartén.
·Instrucción 5: freír el huevo.

En x86 este mismo programa tendría la siguiente forma:
·Instrucción 1: encender el fuego y poner la sartén en el fuego.
·Instrucción 2: verter el aceite y el huevo en la sartén.
·Instrucción 3: freír el huevo.

Las instrucciones en x86 son de diferente tamaño y puede realizar varias acciones al mismo tiempo. Esto repercute en que, normalmente, un programa en ARM tendrá más instrucciones pero a su vez serán más cortas. En x86, se encontrarán menos instrucciones pero serán más largas.

En ARM encontramos una codificación de las instrucciones de manera uniforme, no siendo así en x86, donde podemos encontrar instrucciones de diferentes tamaños.

Para conseguir en máquinas x86 que se realice la ejecución de instrucciones simultáneamente se necesitan una cantidad mayor de transistores que en máquinas ARM, donde favorece la capacidad de paralelismo y segmentación de las instrucciones. Esto se traduce en un mayor tamaño y consumo energético para las máquinas con la arquitectura x86 que en las basadas en ARM. Esto ha permito que la arquitectura ARM sea factible en dispositivos portátiles como: teléfonos móviles, tabletas, videoconsolas, etc.

Por así decirlo, el rendimiento de las máquinas x86 es mayor que el de las máquinas ARM pero con la condición de utilizar más energía.

Además, en la arquitectura ARM se puede implementar de manera más satisfactoria el modelo de memoria de Harvard, en donde la memoria de las instrucciones y los datos están separados. Se podría mejorar bastante el rendimiento, ya que la CPU puede acceder a los datos para completar la ejecución de la instrucción y al mismo tiempo leer la siguiente instrucción.

Si hablamos de modelos de ARM y x86 podemos encontrar una gran extensión de ellos, en ARM se clasifican por familia y versión de arquitectura, mientras que en x86 sigue una evolución temporal, sin crearse grandes familias como en ARM.

Los procesadores ARM tienen algunas características que son raras de ver en una arquitectura RISC, como son el direccionamiento relativo y el pre y post incremento en el modo de direccionamiento.

Además, tiene dos modos de funcionamiento: ARMI con instrucciones que ocupan 4 bytes, rápidas y potentes, con la contra de que consumen mayor energía y memoria; y THUMB con instrucciones que ocupan 2 bytes, más limitadas y con menor consumo de energía.

x86 por su parte tiene varios modo de operación: modo real, está caracterizado por tener 20 bits de espacio de direccionamiento segmentado, tener acceso al software de las rutinas de la BIOS y el hardware periférico y no tiene conceptos de protección de memoria o multitarea a nivel de hardware; modo protegido, mejora la multitarea y estabilidad del sistema como la protección de memoria y soporte de hardware para la memoria virtual además de la conmutación de tareas; modo 8086 virtual, permite la ejecución de aplicaciones de modo real que violan las reglas bajo control de un sistema operativo de modo protegido; y el modo largo, el cual es donde una aplicación o sistema operativo de 64 bits pueden acceder a las instrucciones y los registros de 64 bits del procesador.

Por último, voy a hablar del pipeline de estas arquitecturas.

En x86 debido a que tiene muchas instrucciones y de diferentes tamaños, es difícil implementar un pipeline. Para poder implementar bien un pipeline, se necesita dividir en etapas, etapas que a su vez no deben de interferir una en la otra, si en x86 encontramos que las instrucciones son complejas y de longitud variable, pues su implementación es muy difícil. En cambio, en ARM al tener un conjunto de instrucciones más pequeño, y lo que es muy determinante, y con un tamaño fijo, se puede implementar muy bien el pipeline en ARM.

Como conclusión, las ventajas e inconvenientes de la arquitectura ARM frente a x86 y viceversa son diversas como hemos citado, aunque lo que determina (en mi opinión, claro) la diferencia es la ISA de cada arquitectura. No se puede decir que ARM o x86 sea mejor una que otra, ya que ambos, al tener una arquitectura diferente, tienen una utilidad diferente. Si bien es cierto que ambos nacieron para la creación de microprocesadores, hoy la utilidad se ha expandido a otros dispositivos.


Bibliografía utilizada:

http://infocenter.arm.com/help/index.jsp

formato pdf.
https://db.tt/UpY3ij9r

No hay comentarios:

Publicar un comentario