ARM
Introducción
ARM es una arquitectura RISC (ordenador con conjunto reducido de instrucciones).
La arquitectura ARM es de 32 bits aunque, con la llegada del V8-A, ahora también es de 64 bits. La arquitectura ARM es el conjunto de instrucciones de 32 y 64 bits más utilizado en unidades producidas.
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 costo.
Evolución de la arquitectura
Se va a explicar brevemente la evolución que ha tenido esta arquitectura a lo largo de su etapa. Una curiosidad puede ser que el primer chip -llamado ARM1- se hizo en 1985 y, sin embargo, no salió al mercado.
El primero en salir fue el ARM2 cuya principal característica es que contenía un bus de datos de 32 bits y que contaba con 30.000 transistores.
El ARM3 fue una mejora del anterior ya que introdujo una pequeña memoria caché de 4K, lo que mejora los accesos a memoria repetitivos.
Después de varios años de trabajo, Apple y Acorn presentaron el ARM6, que contenía 35.000 transistores.
El mayor uso de la tecnología ARM se alcanzó con el procesador ARM7TDMI, con millones de unidades en teléfonos móviles y sistemas de videojuegos portátiles.
DEC licenció el diseño y creó el StrongARM. Con una velocidad de reloj de 233 MHz, este procesador consumía sólo 1 W de potencia. Esta tecnología pasó posteriormente a manos de Intel, que la integró en su línea de procesadores Intel i960 e hizo más ardua la competencia.
El ARM8 empezó a usarse con calculadoras, GPS y dispositivos móviles.
Tras algunas arquitecturas como ARM9 o ARM11, en la actualidad nos encontramos que la mayoría de los dispositivos usan la familia Cortex de ARM. El diseño de ARM, hoy en día, se ha convertido en uno de los más usados alrededor del mundo y se encuentra presente en discos duros, juguetes, móviles y tabletas.
Muchos de los primeros diseños han quedado obsoletos, en el siguiente grafo mostraremos la evolución de los más actuales.
Una característica interesante de ARM es que da licencias de uso y modificación de su juego de instrucciones a quien las compre, y son estas empresas las que producen los procesadores finales, basados en la licencia original y optimizada para la aplicación que requiera el productor.
Características
Diseño
El juego de instrucciones del ARM es similar al del MOS 6502 (bits MOS Technology 1975), pero incluye características adicionales que le permiten conseguir un mejor rendimiento en su ejecución. Para mantener el concepto tradicional de RISC, se estableció la ejecución de una orden en un tiempo, por lo general, de un ciclo. La característica más interesante es el uso de los cuatro bits superiores como código de condición, haciendo que cualquier instrucción pudiese ser condicional. Este corte reduce el espacio para algunos desplazamientos en el acceso a la memoria, pero permite evitar perder ciclos de reloj en el pipeline (la arquitectura en pipeline consiste en ir transformando un flujo de datos en un proceso comprendido por varias fases secuenciales) al ejecutar pequeños trozos de código con ejecución condicional.
Otra característica única del juego de instrucciones es la posibilidad de añadir shifts y rotar en el procesamiento de datos. Todo esto ocasiona que se necesiten menos operaciones de carga y almacenamiento, mejorando el rendimiento. El procesador ARM también tiene algunas características que son raras en otras arquitecturas también consideradas RISC, como el direccionamiento relativo, y el pre y post incremento en el modo de direccionamiento. Tiene dos modos de funcionamiento:
- ARMI, con instrucciones que ocupan 4 bytes, más rápidas y potentes. Existen instrucciones que sólo están en este modo. El consumo de memoria y electricidad es mayor.
- THUMB, con instrucciones de 16 bits pretende disminuir la cantidad de código escrito, así como mejorar la densidad del código. El rendimiento puede ser superior a un de 32 bits en donde el puerto de memoria o ancho del bus de comunicaciones son menores a 32 bits. Por lo general, en aplicaciones, inserta un pequeño rango de direcciones de memoria con un datapath de 32 bits, por ejemplo: Game Boy Advance y el resto son 16 bits en modo wide o narrower. El primer procesador fue el ARM7TDMI. Toda la familia posterior al ARM9, incluyendo el Intel XScale, tienen incorporada la tecnología en su núcleo.
Modo de operación
La familia introduce la novedad de disponer de siete modos distintos de operación:
- User: Modo no privilegiado para la mayoría de las aplicaciones.
- FIQ: Se ingresa con una interrupción de alta prioridad (fast).
- IRQ: Se ingresa con una interrupción de baja prioridad (normal).
- Supervisor: Se ingresa en reset y cuando se ejecuta una interrupción por software que permitirá subir en nivel de jerarquías (SWI).
- Abort: Se emplea para gerenciar violaciones en el acceso a memoria.
- Undef: Se emplea para gerenciar instrucciones indefinidas.
- System: Modo privilegiado que emplea los mismos registros que el modo usuario.
Registros
La familia ARM7 dispone de 16 registros de 32 bits cada uno de ellos que se designan desde R0 a R15. En principio son todos idénticos y sólo dos tienen funciones específicas que son el R15 (se emplea como contador de programa o PC), y el R14 (utilizado para almacenar la dirección de retorno cuando se llama a una subrutina o se genera una excepción). Cabe destacar que es responsabilidad del programador resguardar las direcciones de retorno en el caso de pretender implementar subrutinas anidadas.
Pipeline
El proceso de ejecución de una instrucción se divide en tres etapas:
- Búsqueda de código de operación
- Decodificación
- Ejecución
ARM postuló realizar las tres sub-operaciones de forma simultánea pero para distintas instrucciones. Es decir, buscar el código de operación de la instrucción 3, mientras se decodifica el código de operación leída anteriormente de la instrucción 2, y se ejecuta la instrucción 1, leída y decodificada previamente.
Ventajas y desventajas de ARM
Nos encontramos con los procesadores que lideran con mano firme el mercado móvil, ARM. En este caso estamos ante el uso de un set de instrucciones de tipo RISC, es decir, nos centramos en la simplificación de instrucciones, buscando siempre la máxima eficiencia por ciclo y organizar mejor las operaciones dentro del núcleo de procesamiento.
Ventajas
- Amplio abanico de fabricantes. Como se ha comentado antes, ARM permite la compra a terceros de su licencia, dando lugar a un gran número de marcas productoras de esta arquitectura, cada cual ofreciendo nuevas mejoras, avances, y, en general, un mayor abanico de opciones para el consumidor.
- Simpleza de instrucciones. Nos encontramos con un set de instrucciones mucho más pequeño, pero mucho más atómico; esto quiere decir que las instrucciones se pueden cambiar prácticamente por instrucciones de tipo máquina, ahorrando tanto tiempo como energía en su traducción.
- Bajo uso energético. Nos encontramos con RISC, y su "simpleza". Estos buscan la mayor eficiencia por ciclo; además, dan lugar a chips más pequeños y más simples y, por tanto, a una mejora considerable en cuanto a eficiencia energética.
- Rendimiento aceptable y en mejora. Como se ha dicho anteriormente, la compra de terceros ofrecen nuevas mejoras y avances en el rendimiento, entre otras cosas.
Desventajas
Las principales desventajas de ARM, con respecto a otras arquitecturas, son pocas, y, afortunadamente, para la arquitectura ARM se están solucionando esas pequeñas contras que tenían.
- Menos rendimiento. En aplicaciones comunes, x86 sigue teniendo la batuta. Cada vez aparecen modelos ARM más rápidos en frecuencia y con más núcleos.
- Pocos juegos. La arquitectura SoC incluye todo lo necesario en un pedazo de silicio, incluido el GPU. Este último es poco complejo; por ende, de bajo rendimiento comparado con los de escritorio.
Otra desventaja con la que contaba la arquitectura ARM era la ausencia de un diseño en 64 bits. Afortunadamente, desde la llegada del V8-A, también es de 64 bits.
Tendencias
En el actual panorama de crisis económica y con un cuidado por la naturaleza cada vez mayor, ARM es una opción que se está estudiando para su uso en grandes centros de datos como sustituto de las actuales arquitecturas. Su principal finalidad es la de abaratar los costes relacionados con el enorme consumo energético, no sólo por los propios computadores, sino también por los ingentes sistemas de ventilación y seguridad asociados. ARM no sólo consume menos energía, sino que también genera menos calor. Ya existen varios ejemplos a lo largo de todo el mundo que han creado sistemas de unos cuantos cientos de procesadores, y si bien no son los más potentes (no hay ningún ARM en el Top500 de supercomputadores), sí ofrecen un rendimiento más que digno para muchas de las tareas más profesionales de la actualidad. Es cuestión de tiempo que ARM entre en esa prestigiosa y conocida lista.
A día de hoy podemos asegurar que el futuro de ARM es muy prometedor. Van ganando rendimiento en cada nueva generación de procesadores, van manteniendo o incluso reduciendo el consumo energético, y, por si fuera poco, la innovación tiene muy en cuenta a esta arquitectura. El concepto de casa inteligente se basará en procesadores ARM, los coches están empezando a utilizarlos – y en no mucho tiempo será algo común en nuestros vehículos – además de, por supuesto, nuevos conceptos de gadgets que aparecerán en los próximos años de la misma forma que, hace no mucho, aterrizaron los teléfonos avanzados, las tabletas o los libros electrónicos.
X86
Introducción
Conocer la arquitectura x86 es conocer la base de los procesadores. Se cuentan por millones los procesadores vendidos a lo largo de la historia que la implementan, y, además, ha sido una arquitectura que dio pie al éxito de compañías como Microsoft e Intel así como al concepto de ordenador personal.
El tipo de procesador más utilizado en ordenadores personales es el x86; está basado en la arquitectura CISC (Complex Instruction set Computing) con soporte para instrucciones complejas.
Se trataba de procesadores independientes que proporcionaban un extra de rendimiento en cierto software, pero que a la vez suponían un coste adicional respecto del equipo original, que tampoco era considerado muy barato.
X86
Introducción


Este tipo de arquitectura es la denominación genérica dada a ciertos microprocesadores de la familia Intel, sus compatibles y la arquitectura básica a la que estos procesadores pertenecen, por la terminación de sus nombres numéricos: 8086, 80286, 80386, 80486, etc. Son comúnmente conocidos por versiones abreviadas de sus nombres, como 286 o i286, 386 o i386, 486 o i486, e incluso 086, por i8086 o i8088.
Evolución
En el largo tiempo de la compañía ha repercutido en múltiples y notables cambios en muchos aspectos, que van desde la mejora en el tamaño de los buses de datos (16, 32 y, ahora, 64 bits) a múltiples nuevas instrucciones complejas, añadidas que han ido adaptándose a los nuevos usos de la tecnología.
Por ejemplo, el 8086 no disponía de operaciones en coma flotante, para lo cual Intel creó un coprocesador matemático, que realizase estas operaciones: fue una pequeña extensión sobre x86 denominada x87 y lanzada al mercado bajo los nombres 8087, 80187, 80287, 80387, 80487 y la última 80587, ya a mediados de los 90.

Desde hace un par de décadas, todos los procesadores x86 comerciales incluyen instrucciones para cálculo en coma flotante, por lo que no es necesario un coprocesador adicional exceptuando ciertos casos, como requiere la de una gran potencia de cálculo; por ejemplo, con sistemas como NVidia Tesla.
Características
La arquitectura x86 es de longitud de instrucción variable (cada instrucción va a tener por diferencia los bits de longitud), de tipo registro memoria y diseño CISC.
Arquitectura CISC
En la arquitectura computacional, CISC es un modelo de arquitectura de computadora.
Los microprocesadores CISC tienen un conjunto de instrucciones que se caracteriza por ser muy amplio y cada una de ellas muy complejas, permitiendo operaciones complejas entre operandos situados en la memoria o en los registros internos, ya que podemos llevar el dato a memoria o a registro a diferencia de MIPS, en contraposición a la arquitectura RISC.
Este tipo de arquitectura dificulta el paralelismo entre instrucciones, por lo que la mayoría de los sistemas CISC de alto rendimiento implementan un sistema que convierte dichas instrucciones complejas en varias instrucciones simples del tipo RISC, llamadas generalmente microinstrucciones, lo que ayuda a programar con más facilidad, sin tener que estudiarse todo el conjunto de instrucciones, ya que es más complejo que MIPS.
Los CISC pertenecen a la primera corriente de construcción de procesadores, antes del desarrollo de los RISC.
Ejemplos de x86
Ejemplos de ellos son: Motorola 68000, Zilog Z80 y toda la familia Intel x86 usada en la mayoría de las computadoras personales actuales.
Ventajas de CISC
Ventajas de 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.
![]() |
Familia de Intel x86 |
El espacio de direcciones lineal es de 4GB, aunque la memoria física puede llegar hasta los 64GB en algunos modelos, con acceso desalineado y almacenamiento Little-endian.
Formato Little-Endian
En este formato, los bits menos significativos se almacenan en la posición más baja de memoria, mientras que los más significativos se guardan en las posiciones altas consecutivas.
Un programa normal 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, ambos de 32 bits.
A dichos registros se puede acceder desde las operaciones de propósito general, compuestas por las instrucciones de aritmética entera, las instrucciones de control de flujo, y las instrucciones de control de salto tipo j, beq..., las de operaciones con bits y con cadenas de bytes, y las instrucciones de acceso a memoria o instrucciones de acceso a registro.
El registro EFLAGS
El registro EFLAGS contiene el estado del procesador en un momento dado, incluyendo los bits de condición, para efectuar el salto a una etiqueta que pueda contener un conjunto de instrucciones a ejecutar, o bien para realizar un bucle, ejecutando varias veces algunas instrucciones concretas.
Uno de los bits más importantes desde el punto de vista del sistema operativo es el bit de "interrupciones habilitadas" (IF). Controla si el procesador debe responder a las peticiones de interrupción enmascarables. Activo (1) indica que sí se atiende a las interrupciones; estas interrupciones sirven para ejecutar distintas instrucciones a las que se ejecutan.
El registro EIP
El registro EIP apunta a la siguiente instrucción a ejecutar del segmento de código. Su valor se ve modificado con la ejecución de cada instrucción o como resultado de ejecutar una instrucción de control de flujo (Jxx, CALL, RET, etc.). Al registro EIP se le conoce como el puntero a instrucción o contador de programa; apunta a la siguiente instrucción cuando se haya terminado la primera fase de la primera instrucción.
Registros de propósito general
- EAX Registro acumulador. Fuente y destino en algunas operaciones.
- EBX Puntero a los datos en el segmento DS.
- ECX Contador en las operaciones de cadena y bucles.
- EDX Puntero a los puertos de E/S.
- ESI Puntero fuente en las operaciones de cadena y puntero a datos en el segmento DS.
- EDI Puntero destino en las operaciones de cadena y puntero a datos en el segmento ES.
- ESP Puntero de pila.
- EBP Puntero a los datos alojados en la pila.
Un conjunto de 8 registros de coma flotante de 80 bits, un conjunto de 8 registros MMX y XMM, de 64 y 128 bits respectivamente, para realizar operaciones SIMD.
Evolución de operaciones SIMD
El trabajo realizado por Intel para introducir extensiones SIMD en sus juegos de instrucciones no es tan limpio como el de AltiVec. De hecho, nos podemos encontrar procesadores que soportan:
- MMX – Introducido con el Pentium (1997), usado en el Pentium II.
- SSE – Introducido con el Pentium III (1999).
- SSE2 – Introducido con el P4 (2000).
- SSE3 – Introducido con el P4 (Presscott, 2004).
- SSE4 – Introducido en la arquitectura Core (2006).
El soporte de un juego de instrucciones supone el soporte de los anteriores (por ejemplo, SSE incluye a MMX, y SSE3 incluye a todos los demás). Los procesadores de AMD incluyen estas extensiones, y, a veces, algunas otras.
Evolución de MMX
MMX agregó ocho nuevos registros a la arquitectura, conocidos como MM0 al MM7 (en adelante llamados MMn). En realidad, estos nuevos registros son meros alias de los registros de la pila de la FPU x87. Por ello cualquier cosa que se haga con la pila de la FPU afecta a los registros MMX. A diferencia de la pila de coma flotante, los registros MMn son fijos en vez de relativos, por lo que se puede acceder a ellos aleatoriamente.
Cada uno de los registros MMn es un número entero de 64 bits. Sin embargo, uno de los conceptos principales del juego de instrucciones MMX es el concepto del tipo de datos compactados (packed data types), que significa que, en lugar de usar el registro completo para un solo número entero de 64 bits (palabra cuádruple o quadword), se puede usar para almacenar dos enteros de 32 bits (palabra doble o doubleword), cuatro enteros de 16 bits (palabra o word) u ocho enteros de 8 bits (byte u octeto).
Un conjunto de recursos para el manejo de la pila y la invocación de subrutinas. El SO dispone , además, de puertos E/S, registros de control, de manejo de memoria, de depuración, de monitorización, etc.
Definición de pila en x86
La pila es una zona de memoria que se utiliza para almacenar información de manera temporal. La pila también se utiliza habitualmente para pasar parámetros a las subrutinas y para guardar los registros que son modificados dentro de una subrutina, de manera que se pueda restaurar el valor antes de finalizar la ejecución.
¿De qué se trata la pila?
Se trata de una estructura de datos de tipo LIFO (last in first out); el último elemento introducido, que habitualmente se denomina cima de la pila, es el primer elemento que se saca y es el único directamente accesible.
En los procesadores x86-64, la pila se implementa en memoria principal a partir de una dirección base. Se utiliza el registro RSP como apuntador a la cima de la pila.
La pila crece hacia direcciones más pequeñas; es decir, cada vez que se introduce un valor en la pila, este ocupa una dirección de memoria más pequeña, por lo tanto, el registro RSP se decrementa para apuntar al nuevo valor introducido y se incrementa cuando lo sacamos.
Registros para utilización de la pila y funcionamiento
Los elementos se introducen y se sacan de la pila utilizando instrucciones especificas: PUSH para introducir elementos y POP para sacar elementos.
En el modo de 64 bits los elementos que se pueden introducir en la pila y sacar de ella han de ser valores de 16 o 64 bits; por lo tanto, el registro RSP se decrementa o incrementa en 2 u 8 unidades respectivamente.
Al ejecutar la instrucción PUSH, se actualiza el valor de RSP decrementándose en 2 u 8 unidades y se traslada el dato especificado por el operando hacia la cima de la pila. Al ejecutar la instrucción POP, se traslada el valor que está en la cima de la pila hacia el operando de la instrucción y se actualiza el valor de RSP incrementándose en 2 u 8 unidades.
Ventajas y desventajas
Ventajas
Esta es una cuestión clave, ya que la asignación de memoria es uno de los métodos más eficientes para transportar datos del disco a la memoria, cuando es correctamente implementado por el sistema operativo, si se implementa correctamente podemos tener una máquina muy potente funcionando, siendo ésta una ventaja muy relevante.
En la actualidad, muchos programas comerciales están construidos como código de 32 bits, no de 64 bits, así que no pueden obtener ventajas de los grandes espacios de direcciones de 64 bits o de registros de 64 bits más anchos y las rutas de datos en procesadores de 64 bits o, en procesadores x86, de los registros adicionales en el modo de 64 bits.
Esto incrementa los requisitos de memoria en un proceso dado y puede tener implicaciones para el uso eficiente de la caché del procesador. Mantener un modelo parcial de 32 bits es una manera de manejar esto y es, en general, razonablemente efectivo. Para esto lo que se hace es que el código de programa resida en varios espacios de direcciones de 32 bits mientras que los objetos de datos pueden (opcionalmente) residir en regiones de 64 bits (implementado por el sistema operativo de altas prestaciones Z/OS), siendo más eficiente para la memoria del ordenador, siendo ésto una ventaja.
Desventajas
La principal desventaja de las arquitecturas de 64 bits es que, con respecto a las de 32 bits, los mismos datos ocupan ligeramente más espacio en memoria debido al crecimiento de los punteros y , posiblemente, otros tipos y al relleno para alineamiento (dependiendo del tipo de programa, algunos pueden multiplicar su tamaño).
Algunos sistemas operativos reservan porciones de espacio de direcciones de procesos para uso del sistema operativo, reduciendo el espacio total de direcciones disponibles para asignar memoria para programas de usuario. Esta restricción solo esta presente en las versiones de Windows de 32 bits, que no tiene habilitado el PAE, por lo que no lo podemos tener en otro sistema operativo, siendo ésto un inconveniente.
La asignación en memoria de archivos es menos útil con arquitecturas de 32 bits, especialmente con la introducción de tecnología de grabación de DVD relativamente económica. Un archivo de 4GB ya no es inusual y tales archivos grandes no pueden ser asignados fácilmente con arquitectura de 32 bits; sólo se puede asignar una región del archivo en el espacio de direcciones y, para acceder al archivo usando asignación de memoria, estas regiones deben ser localizadas dentro y fuera del espacio de direcciones según sea necesario, luego la capacidad del mismo está limitada, siendo éste otro inconveniente.
Ventajas y desventajas para programadores
También podemos hacer referencia, al flujo de instrucciones que tiene x86, siendo más amplio que, por ejemplo, el que tiene ARM, por lo que podemos sacar inconvenientes y ventajas:
Para un programador, es más fácil y legible utilizar ARM, ya que x86 tiene demasiadas instrucciones con diferentes longitudes y tiene mucho trabajo, siendo un inconveniente.
En cambio, x86 tiene un flujo de instrucciones más amplio y se puede acceder a memoria, a diferencia de ARM, donde hay que acceder a registro, para luego llevar el dato a memoria, siendo una ventaja.
Tenemos que x86 tiene una arquitectura CISC, la cual ayuda a programar programas más complejos, no como en ARM, que tiene una arquitectura RISC, siendo una ventaja.
Prestaciones
Algunos móviles
Tras el acuerdo de Motorola con Intel hace algún tiempo para traer los procesadores de ésta última firma a los dispositivos de Motorola, vemos como el “noviazgo” parece haber fraguado rápidamente.
Se acaban de filtrar unas imágenes de lo que parece ser que será el nuevo terminal con Android 4.0 Ice Cream Sandwich de Motorola, aún con nombre desconocido. Será el primer Motorola con arquitectura x86 de Intel y sistema Android.
Plataformas domóticas con hipervisor con Android-x86
El presente artículo describe el análisis y diseño de una plataforma domótica que consta de la integración del hipervisor XtratuM, con un sistema operativo basado en el kernel de GNU/Linux. El hipervisor nos proporciona múltiples niveles independientes de seguridad (MILS por sus siglas en inglés) que permite la ejecución del sistema junto con otras aplicaciones sin que se afecten entre sí por errores. El sistema operativo basado en Linux seleccionado para la integración con el hipervisor por su interfaz gráfica es Android, terminada la unión del Sistema Operativo Móvil con el hipervisor, al mismo tiempo se desarrolla una interfaz de usuario para el control y la automatización correspondiente al sistema domótico de una manera fácil e intuitiva para el usuario.