Hogyan működik az x86-os fordítás Windows on Arm rendszeren?

Sok Windows-alkalmazást x86-ra írtak, és mégis működhetnek Arm CPU-kon. Íme, hogyan lehetséges.

A Windows mindig is erre készült x86-os CPU-k az Inteltől és az AMD-től, de amióta a Windows RT egy évtizede megjelent az okostelefonok számára, az operációs rendszer lassan barátságosabbá válik Élesítsd fel a CPU-kat. Ma már a Windows 10 és a Windows 11 is teljes körű támogatást nyújt az Arm CPU-khoz, de van egy fogás. Míg maga az operációs rendszer jól fut ezeken a CPU-kon, a legtöbb alkalmazás nem indított Arm-kompatibilis verziót. Bár a Windows futhat Arm chipeken, problémát jelentene, ha kevés ténylegesen használható program lenne.

A Microsoftnak azonban van egy trükkje a tarsolyában: egy emulátor, amellyel az x86-os alkalmazások futhatnak Arm-alapú gépeken. Ez a legfontosabb dolog, amely lendületet adott a Windows on Arm számára a fordító 2017-es megjelenése óta. Íme, hogyan működik az emulátor, és miért kell az Arm PC-knek használniuk, ha x86-os chipekhez készült szoftvereket szeretnének futtatni.

Az x86 kód emulálása valós időben élesíthető CPU-khoz

Nem újdonság az az ötlet, hogy az egyik processzortípushoz készült kódot emulálják, hogy az egy másikon is futtatható legyen. Így működik a játékemuláció, amelyet népszerűen arra használnak, hogy a régi videojátékokat új, jelentősen eltérő hardverrel rendelkező eszközökön futtassák. Amikor egy x86-os alkalmazást futtat egy Arm PC-n, a Windows blokkokat vesz az alkalmazás kódjából, és lefordítja olyasmire, amely Arm chipen futhat. Mindez valós időben történik, és a Windowsnak gyorsítótárba kell helyeznie az összes lefordított kódot, ami azt jelenti, hogy nem kell újra és újra lefordítania.

Sajnos az emulált alkalmazások teljesítménye rosszabb lesz, mint a hardverhez tervezett kód. Nehéz megmondani, mennyi teljesítményt veszít az emulált kód Windows rendszeren való futtatásával, mivel a tesztelési adatok nagyon ritkák, de összehasonlításképpen Az Apple Rosetta 2 fordítója (ami az x86-os alkalmazásokat is Arm-ra fordítja) körülbelül 20%-ot veszít. Lehetséges csökkenteni ezt a számot, de általában az emuláció és a fordítás teljesítménybüntetést eredményez, bármi is legyen.

Miért nem futhatnak az x86-os alkalmazások az Arm-on emuláció nélkül?

Felmerülhet benned a kérdés, hogy miért kell szoftvert kifejezetten x86, Arm és más típusú CPU-khoz írni. Ez jön le a különbség az építészetben, és ebben az esetben az utasításkészlet architektúráról (ISA) beszélünk. Ezek a processzorok legalapvetőbb felépítése, és meghatározzák, hogy valami egyszerű, például szorzás vagy valami összetett, például AVX elvégezhető-e natív módon. Az ISA megváltoztatása a szoftver és a hardver közötti legalapvetőbb interakciót érinti, egészen az alapvető értékekig és nullákig, amelyeket a CPU olvas.

Az x86 az Intel és az AMD CPU-k ISA-ja, amelyek történelmileg az egyetlen olyan CPU-k, amelyeken a Windows is futni tudott. Eközben az Arm-ot többnyire okostelefonokhoz használták, és nagyon kicsi az átfedés a PC-szoftverek és a telefonszoftverek között. Természetesen a legtöbb program vagy x86-ra vagy Arm-ra készült, és a Windows on Arm esetében ez óriási probléma volt, mert A fordítás nem jelent meg 2020-ban, míg a Windows RT (a Windows első Arm-ot támogató verziója) 2012.

Körülbelül egy évtized telt el azóta, hogy a Windows elkezdte támogatni az Armot, hol vannak tehát a natív alkalmazások? Az elsődleges probléma az, hogy időbe és szakértelembe telik a szoftver átírása egy másik ISA-ra, különösen, ha a fejlesztők ezt jól akarják csinálni. Azok a fejlesztők, akik nem fordítanak kellő figyelmet az alkalmazások egyik ISA-ról a másikra történő áthelyezésére, hibákat és hibákat okozhatnak. Jó példa erre a Photoshop for Windows on Arm. Natívan fut Windows on Arm rendszeren, még a Lenovo Thinkpad X13s áttekintésében, számos hibába ütköztünk, és sok figyelmeztetést kaptunk arról, hogy az OpenCL és az OpenGL nem támogatott. Az Arm-ot Windowson használó sokkal kisebb felhasználói bázis mellett a fejlesztők kevésbé ösztönzik a törődést.

Tehát, ha a fejlesztők nem tudják vagy nem akarják az erőforrásokat natív szoftverek létrehozására fordítani, az alternatíva az emuláció. Bár az x86-os alkalmazások lefordítása Windows-on Arm-on nem tökéletes, lenyűgöző, hogy egyáltalán működik, és néha a teljesítmény romlása esetén érdemes tudni, hogy az alkalmazás a várt módon fog futni. Legalábbis addig, amíg a Windows on Arm el nem éri azt a pontot, ahol a fejlesztők már nem hagyhatják figyelmen kívül, a fordítás és az emuláció nagyon szükséges lökést ad a hardver-szoftver ökoszisztémájának.