Sistemas mixtos con CPUs x86 y ARM, ¿hasta que punto son posibles?

Los dispositivos PostPC tenían que reemplazar a los PCs, eso se decía hace ya unos años. ¿Al final? Nos encontramos trabajando con dispositivos que hablan diferentes idiomas y en algunos casos nos obligan a estar cambiando entre diferentes dispositivos en cada momento. Pero ante la futura llegada de los PCs basado en ARM nos preguntamos si veremos procesadores mixtos con x86.

Por un lado tenemos los PCs cuyos programas están compilados para el set de registros e instrucciones x86, por el otro lado tenemos a los llamados dispositivos PostPC, cuyas aplicaciones hablan en ARM. Pero, en los últimos tiempos los diseñadores de procesadores para sistemas PostPC han demostrado que quieren dar el salto al PC, no a x86, sino que hayan PCs basados en ARM.

Esto ha acabado haciendo que al final hayan dos mercados diferentes, cada uno hablando su idioma y un sinfín de aplicaciones incompatibles con otro sistema. ¿El escenario ideal? Tener un PC con la capacidad de ejecutar los programas y sistemas de ambos lados, tanto para ARM como para x86.

Pero, ¿es esto posible? Os intentaremos explicar los problemas a los que se enfrentarían los arquitectos para diseñar tanto un sistema hibrido como un SoC hibrido, así como el motivo por el cual Intel y AMD no han sacado su procesador mixto.

AMD e Intel no están interesadas en una CPU mixta entre ARM y x86

Intel-AMD-ARM

El primer problema es que la licencia x86 solo la tienen Intel y AMD, por lo que estas dos empresas son las únicas capaces de fabricar una CPU compatible con los binarios x86. Por lo que en primer lugar debemos pensar un poco en que pasaría si estas empresas hicieran una CPU capaz de ejecutar los programas pensados para ARM.

Hemos de tener en cuenta que sería imposible ejecutar el entorno en x86 y en ARM al mismo tiempo, por lo que la mayoría de desarrolladores sabiendo que los PCs con x86 podrían ejecutar también código ARM no se van a molestar, poco a poco, el código x86 iría cayendo en desuso y ARM crecería en porcentaje de utilización.

Un mundo en el que la gente no utilice programas para x86 es un mundo que no merece la pena para Intel y AMD, por lo que un procesador por parte de ellos que pueda ejecutar ambos entornos no sería su ideal

Implementando x86 y ARM en un solo sistema

render procesador

¿Tenemos algún ejemplo de ello? Si, tenemos uno que esta en decenas de millones de hogares que se llama PlayStation 4, una consola cuyo principal procesador es en un SoC de AMD basado en x86 pero que luego tiene un segundo procesador con un procesador ARM. Dicho procesador solo se activa cuando la consola esta en modo stand-by, ejecuta un sistema operativo en paralelo y tiene su propia memoria RAM.

La idea más simple para unificar ambos mundos es crear un ordenador que dependiendo del nivel de consumo necesario en cada momento active un SoC u otro, el sistema se active en un modo u otro, pero esto supone hacer que dos sistemas estén presentes en un mismo ordenador y diseñar todo el sistema de distribución de la energía para los dos sistemas, lo cual no es una tarea titánica.

El otro problema vendría en el uso de los dispositivos de E/S del sistema, todos ellos deberían estar disponibles para los procesadores de ambas ISA, por lo que o bien se duplica el hardware que accede a los periféricos o se crear un elemento en común, el cual entra en conflicto con las diferentes formas en las que cada tipo de procesador habla con ellos.

Dos ISA funcionando al mismo tiempo en un SoC, ¿es posible?

ARM x86

Si hay algo que caracteriza a los SoC no es solo que todos los componentes están en el mismo chip, sino que todos ellos comparten el mismo acceso a memoria, ¿pero que ocurre cuando dos procesadores no entienden el mismo lenguaje? Pues eso no es un problema ya que los SoCs tienen en sus GPUs una forma dispar a la CPU de leer los binarios, lo único que se necesita es marcar en el direccionamiento de memoria que parte es para ARM y que parte es para x86.

¿Parece fácil no? Pues no, el motivo es que x86 es Little Endian, lo que significa que recorre la memoria desde la dirección de memoria más baja hacía la más alta, ARM es Bi-Endian por lo que los programas pueden empezar en ambos extremos y subir o bajar según el caso. En principio sería fácil con asociar un extremo a cada ISA, pero existen sistemas operativas para ARM que funcionan en Little Endian.

PCB-Routing

El otro problema es el hecho que la memoria RAM esta diseñada para servir un procesador al mismo tiempo, por lo que si tenemos dos procesadores accediendo al mismo tiempo uno haría contención sobre otra en el acceso a la memoria, por lo que las aplicaciones pensadas para ambas ISA no se ejecutarían con la misma soltura, por no hablar de que los recursos compartidos entre ambas dentro del SoC también lo harían.

Entonces. ¿cómo es que una GPU puede compartir espacio con una CPU sin problemas? Pues por el simple hecho que las GPUs aunque manipulan datos y ejecutan programas no están diseñadas para ejecutar un sistema operativo, y es imposible la existencia de un sistema operativo completamente esquizofrénico que se entienda con dos arquitecturas al mismo tiempo. Donde cada una tiene su propia forma de direccionar la memoria y acceder a los periféricos.

1 Comentario