Vad exakt är microcode och vad skiljer microcode från maskinkod?

Permalänk
Medlem

Vad exakt är microcode och vad skiljer microcode från maskinkod?

Hej alla hackers.
Jag undrar vad exakt är microcode och vad skiljer microcode från maskinkod?
Tänker på detta i samband den senaste bios uppdateringen för moderkort med Skylake processorer där man blockerar överklockning.

Permalänk
Medlem

Microcode är lite som firmware för processorn som jag fattat det. Alltså kod inuti processorn som gör att den fungerar på rätt sätt. BIOS kan ladda in uppdateringar av sådan kod när datorn startar upp men det går även att göra senare i bootprocessen. Själv kör jag Arch Linux och för intel behöver jag då installera programvara som laddar in senaste microcode (för AMD sköts det out of the box i Arch Linux).

https://en.wikipedia.org/wiki/Microcode
https://wiki.archlinux.org/index.php/microcode

En modern processor emulerar x86-instruktionerna som fanns en gång i tiden i en uråldrig processor. Microkoden är där som ett sorts översättningslager. Men det finns nog microkod som sköter om annat också internt i processorn. Om en processor räknar fel så skulle det kunna fixas med en uppdatering av microkoden så att den räknar rätt.

När jag gick gymnasiet på 1980-talet fick vi emulera mikrokoden hos en processor på en labbplatta med diverse brytare. Vi fick liksom göra ett program som kunde addera (jag minns inte hur). Sedan förklarade läraren att när man anropar maskininstruktionen ADD så körs ett sådant program inuti processorn. Det programmet var nog hårdkodat i kislet på den tiden men numera kan det säkert vara omprogrammeringsbart.

Permalänk
Skrivet av MarkSix:

Hej alla hackers.
Jag undrar vad exakt är microcode och vad skiljer microcode från maskinkod?
Tänker på detta i samband den senaste bios uppdateringen för moderkort med Skylake processorer där man blockerar överklockning.

Microcode verkar vara steget under Maskinkoden, dvs det är ännu ett steg närmre elektroniken.

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Inaktiv

Maskinkod är instruktionerna man skickar till hårdvaran.

Dvs instruktioner såsom "addera register1 och register2 till register2 och så vidare.

Microcode är små program som tillåter häftigare instruktioner i maskinkod (ungefär såsom processorns firmware). Microcode kan exempelvis tillåta instruktioner såsom "multiplicera alla tal från register2 och 10 register framåt och spara resultatet i register 1".

Här kan den intresserade dyka djupare https://en.wikipedia.org/wiki/Microcode

Permalänk
Medlem
Skrivet av anon81912:

Maskinkod är instruktionerna man skickar till hårdvaran.

Dvs instruktioner såsom "addera register1 och register2 till register2 och så vidare.

Microcode är små program som tillåter häftigare instruktioner i maskinkod (ungefär såsom processorns firmware). Microcode kan exempelvis tillåta instruktioner såsom "multiplicera alla tal från register2 och 10 register framåt och spara resultatet i register 1".

Här kan den intresserade dyka djupare https://en.wikipedia.org/wiki/Microcode

Tack så mycket för länken och förklaringen. Uppenbart inget man ska leka med om man inte vill trasha processorn men intressant nog för att läsa mer om. Hamnade så klart på Intels hemsida och hittade lite mer info i ämnet.

https://downloadcenter.intel.com/download/23984/Linux-Process...

"Detailed Description
The microcode data file contains the latest microcode definitions for all Intel processors. Intel releases microcode updates to correct processor behavior as documented in the respective processor specification updates. While the regular approach to getting this microcode update is via a BIOS upgrade, Intel realizes that this can be an administrative hassle. The Linux operating system and VMware ESX products have a mechanism to update the microcode after booting. For example, this file will be used by the operating system mechanism if the file is placed in the /etc/firmware directory of the Linux system."

Får läsa på mer om Linux för att se hur dom läser in microcoden i processorn.

Borde det inte gå att skapa virus som utnyttjar microcoden?

Permalänk
Medlem
Skrivet av MarkSix:

Får läsa på mer om Linux för att se hur dom läser in microcoden i processorn.
Borde det inte gå att skapa virus som utnyttjar microcoden?

Ny microcode kan skickas till processorn mha skrivningar till visa MSR (model-specific register).
https://en.wikipedia.org/wiki/Model-specific_register

I teorin kan microcode användas för att lägga virus i processorn men microcode uppdateringar är kryptografiskt signerade och verifieras internt i processorn innan uppdatering sker. Uppdateringarna är också volatile och försvinner vid nästa reboot så det går inte lägga virus i processorn permanent.

Permalänk
Medlem
Skrivet av MarkSix:

Borde det inte gå att skapa virus som utnyttjar microcoden?

Intel har skrivit lite om det i sin Architectures Developer's Manual, se specifikt avsnitt 9.11.7 (sida 346). De går dock inte in särskilt djupt i hur mycket det faktiskt skyddar.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem

Tack för informationen alla då är bara att läsa vidare

Permalänk
Datavetare

Skulle kort beskriva det så här:

Maskinkod är ett CPU-arkitekturspecifikt gränssnitt som kallas ISA.

Mikrokod är ett lager som binder ihop de externt observerbara effekterna som ISA specificerar med en mikroarkitekturen en viss CPU använder. D.v.s. hur instruktioner delas upp på de logiska enheter som finns i kislet.

Som exempel, Apples CPU "Typhoon" som sitter i Iphone6/6+ använder samma ISA (ARMv8) som t.ex. ARMs Cortex A57 men dessa två CPUer har väldigt olika mikroarkitektur (väldigt olika fördelning av beräkningsenheter). Så de exekverar samma maskinkod men har väldigt olika mikrokod.

Idag så är prestandakritiska instruktioner inte mikrokodade på klassiskt vis, utan dessa har av prestandaskäl sin "mikrokod" implanterad direkt i kisel.

Ett annat exempel på mikrokod/firmware är SSD-kontrollers. I detta läge är det externt observerbara gränssnittet definierat av SATA-standaren (motsvarande maskinkod) medan mikrokoden är olika för olika typer av kontrollkretsar.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer