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:
No hay comentarios:
Publicar un comentario