x86 en ARM: kunnen ze tegelijkertijd op een pc werken?

PostPC-apparaten moesten pc's vervangen, dat werd een paar jaar geleden gezegd. Aan het einde? We werken met apparaten die verschillende talen spreken en in sommige gevallen dwingen ze ons om altijd tussen verschillende apparaten te schakelen. Maar met de toekomstige komst van ARM-gebaseerde pc's vragen we ons af of we gemengde processors met x86 zullen zien.

Aan de ene kant hebben we de pc's waarvan de programma's zijn gecompileerd voor de x86-set registers en instructies, aan de andere kant hebben we de zogenaamde PostPC-apparaten, waarvan de applicaties in ARM spreken. Maar de laatste tijd hebben de ontwerpers van processors voor PostPC-systemen laten zien dat ze de sprong willen maken naar de pc, niet naar x86, maar naar pc's die op ARM zijn gebaseerd.

x86 en ARM

Dit heeft ertoe geleid dat er uiteindelijk twee verschillende markten zijn, die elk hun eigen taal spreken en een eindeloos aantal applicaties die niet compatibel zijn met een ander systeem. Het ideale scenario? Een pc hebben met de mogelijkheid om de programma's en systemen aan beide kanten te draaien, voor zowel ARM als x86.

Maar is dit mogelijk? We zullen proberen de problemen uit te leggen waarmee architecten te maken zouden krijgen bij het ontwerpen van zowel een hybride systeem als een hybride SoC, evenals de reden waarom Intel en AMD hebben hun gemengde processor niet uitgebracht.

AMD en Intel zijn niet geïnteresseerd in een gemengde CPU tussen ARM en x86

Intel-AMD-ARM

Het eerste probleem is dat de x86-licentie alleen is gelicentieerd door Intel en AMD, dus deze twee bedrijven zijn de enigen die in staat zijn om een CPU compatibel met x86 binaries. Dus allereerst moeten we een beetje nadenken over wat er zou gebeuren als deze bedrijven een CPU zouden maken die in staat is om de programma's uit te voeren die zijn ontworpen voor ARM.

We moeten in gedachten houden dat het onmogelijk zou zijn om de omgeving tegelijkertijd op x86 en op ARM te draaien, dus de meeste ontwikkelaars die weten dat pc's met x86 ook ARM-code kunnen draaien, zullen de code beetje bij beetje niet storen. x86 zou verouderd raken en ARM zou in percentage van gebruik toenemen.

Een wereld waarin mensen geen x86-programma's gebruiken, is een wereld die het niet waard is voor Intel en AMD, dus een processor van hun kant die beide omgevingen kan draaien, zou niet hun ideaal zijn

X86 en ARM implementeren op één systeem

render processor

Hebben we hier een voorbeeld van? Ja, we hebben er een die in tientallen miljoenen huizen wordt gebeld PlayStation 4, een console waarvan de hoofdprocessor een AMD SoC is op basis van x86 maar dan een tweede processor met een ARM-processor heeft. Deze processor wordt alleen geactiveerd als de console in stand-by staat, een besturingssysteem parallel draait en een eigen systeem heeft RAM geheugen.

Het eenvoudigste idee om beide werelden te verenigen is om een ​​computer te creëren die, afhankelijk van het te allen tijde vereiste verbruik, de ene of de andere SoC activeert, het systeem wordt op de een of andere manier geactiveerd, maar dit betekent dat er twee systemen aanwezig zijn in dezelfde computer en het ontwerpen van het volledige stroomdistributiesysteem voor de twee systemen, wat geen ontmoedigende taak is.

Het andere probleem zou komen in het gebruik van de I / O-apparaten van het systeem, ze zouden allemaal beschikbaar moeten zijn voor de processors van beide ISA's, dus ofwel wordt de hardware die toegang heeft tot de randapparatuur gedupliceerd of wordt er een gemeenschappelijk element gecreëerd. , wat in strijd is met de verschillende manieren waarop elk type processor met hen praat.

Twee ISA's die tegelijkertijd op één SoC draaien, is dat mogelijk?

ARMx86

Als er iets is dat SoC's kenmerkt, is het niet alleen dat alle componenten zich op dezelfde chip bevinden, maar dat ze allemaal dezelfde geheugentoegang hebben, maar wat gebeurt er als twee processors niet dezelfde taal begrijpen? Nou, dat is geen probleem, aangezien de SoC's in hun GPU's een andere manier hebben dan de CPU om de binaire bestanden te lezen, het enige dat nodig is, is om in het geheugen aan te geven welk deel voor ARM is en welk deel voor x86.

Klinkt makkelijk, toch? Nou nee, de reden is dat x86 Little Endian is, wat betekent dat het door het geheugen gaat van het laagste geheugenadres naar het hoogste, ARM is Bi-Endian, dus programma's kunnen aan beide uiteinden starten en afhankelijk van het geval omhoog of omlaag gaan . In principe zou het gemakkelijk zijn om een ​​eindpunt aan elke ISA te koppelen, maar er zijn besturingssystemen voor ARM die in Little Endian werken.

PCB-routering

Het andere probleem is het feit dat RAM is ontworpen om tegelijkertijd een processor te bedienen, dus als we twee processors tegelijkertijd toegang hebben, zou de ene twist over de andere bevatten bij de toegang tot het geheugen, dus toepassingen die zijn ontworpen voor beide ISA's zouden niet met hetzelfde gemak worden uitgevoerd, om nog maar te zwijgen van het feit dat de bronnen die tussen beide binnen de SoC worden gedeeld, dat ook zouden doen.

Zo. Hoe komt het dat a GPU kan vlot ruimte delen met een CPU? Welnu, vanwege het simpele feit dat GPU's, hoewel ze gegevens manipuleren en programma's uitvoeren, niet zijn ontworpen om een ​​besturingssysteem te draaien, en het bestaan ​​van een volledig schizofreen besturingssysteem dat kan worden begrepen met twee architecturen tegelijkertijd, is onmogelijk. Waar elk zijn eigen manier heeft om geheugen aan te spreken en toegang te krijgen tot randapparatuur.