[NB: questa risposta ha lo scopo specifico di affrontare la modifica recente e non si aggiunge alle diverse risposte sonore che sono già state pubblicate.]
Quindi, per ribadire: il microcodice (almeno per una prima approssimazione) è un tipo specifico di firmware.
"Microcodice" è in questo contesto che sta semplicemente commercializzando "firmware del processore".
Bene, non è marketing. Il marketing lo avrebbe chiamato XBoost Pro (TM) o qualcosa del genere. Piuttosto, è un termine ingegneristico; se si progettano CPU, la distinzione tra microcodice e altro firmware della CPU (e il tipo di firmware tipico di altri dispositivi) è importante per te. In caso contrario, probabilmente non lo è.
Se si progettano schede madri o si scrivono sistemi operativi, probabilmente si utilizza "aggiornamento microcodice" come abbreviazione per il più "ingombrante e meno familiare" aggiornamento del firmware della CPU. La maggior parte degli aggiornamenti del firmware della CPU influisce principalmente sul microcodice, quindi è abbastanza vicino alla stessa cosa. Probabilmente conosci la differenza, ma non devi preoccupartene .
L'utente finale non ha bisogno di conoscere o preoccuparsi della differenza, e in un mondo ideale non sentirebbe mai la parola "microcodice".
Immagino che sia arrivata alla tua attenzione nella copertura stampa delle recenti vulnerabilità dell'esecuzione speculativa, anche se potresti averlo sentito prima in un contesto che ha reso più ovvio che non ti occorreva preoccuparti. Queste vulnerabilità sono state rese note prima del previsto, il che potrebbe aver comportato una copertura della stampa meno curata di quanto altrimenti avrebbe potuto essere. Dal punto di vista dell'utente finale, è necessario installare gli aggiornamenti del BIOS, gli aggiornamenti del sistema operativo e in alcuni casi gli aggiornamenti delle applicazioni; non è necessario sapere né preoccuparsi del fatto che se uno di questi include un nuovo microcodice.
Quindi, anche rendendoti conto che probabilmente non hai bisogno di conoscere o preoccuparti, potresti essere comunque interessato per pura curiosità: come potresti fare per distinguere il microcodice da altri firmware?
Bene, la prima cosa da riconoscere è che non esiste necessariamente un'unica definizione difficile e rapida, è più una situazione di Bleggs e Rubes . Tuttavia, ci sono alcune cose che possiamo dire sul microcodice:
Il microcodice generalmente funziona all'interno di una CPU piuttosto che su una CPU. Questa è la vista di alto livello.
L'architettura del microcodice sembra in genere molto diversa dall'architettura del codice ordinario, incluso il firmware ordinario. È probabile che sia altamente parallelo e sia implementato molto più vicino all'hardware. Molte delle risposte esistenti (compresa la tua risposta) ne discutono, anche se va notato che i dettagli possono variare a seconda del design della CPU.
Sebbene l'hardware sia spesso progettato per eseguire solo il firmware fornito dal produttore, non è particolarmente insolito utilizzare firmware di terze parti, anche se probabilmente invaliderà la garanzia! Il microcodice di terze parti è molto più raro, anche se credo che nei tempi antichi (sto parlando di una CPU delle dimensioni di una breadbox) alcuni utenti finali avrebbero modificato il microcodice nelle loro CPU. Per quanto ne so, questo non è possibile nel tipo di CPU utilizzate nei PC.
Il microcodice in genere traduce o aiuta a implementare un'architettura di set di istruzioni pubbliche, ovvero esegue il codice macchina utilizzato dal progettista del sistema operativo e dai programmatori dell'applicazione. Maggiori informazioni su questo nella prossima sezione.
"Esecuzione vs dati" molte risposte usano questo paradigma
Temo in modo confuso e diverso, ma mi rivolgerò al mio commento. Questa sezione serve anche per espandere l'ultimo punto elenco sopra. L'obiettivo qui è cercare di distinguere tra il lavoro svolto da una CPU (raggiunto da una combinazione di hardware e microcodice) e il lavoro svolto da un dispositivo tipico (ottenuto da una combinazione di hardware e firmware). Ho intenzione di scegliere un disco rigido SATA.
L'unità SATA segue le istruzioni del computer, che sono sulla falsariga di "leggere i dati dal settore 5.123" e "scrivere questi dati nel settore 1.321". Il firmware dell'unità è responsabile della realizzazione dell'hardware, ed è in genere un codice abbastanza ordinario in esecuzione su una CPU integrata di qualche tipo. Le istruzioni dell'unità arrivano in sequenza, anche se potrebbero non essere elaborate nell'ordine in cui arrivano. Queste istruzioni non sono un programma, vengono inviate da un programma in esecuzione sulla CPU principale. In particolare non vi è alcun flusso di controllo, ovvero nessuna istruzione per dire all'unità SATA quali istruzioni eseguire successivamente.
La CPU è responsabile del computer. Una volta terminata l'inizializzazione, esegue le istruzioni ("codice macchina") fornite dalla scheda madre (BIOS, un altro tipo di firmware) che lo indirizzano a eseguire il codice macchina fornito dal sistema operativo che lo dirige ad eseguire il codice macchina fornito dai fornitori di applicazioni. La CPU stessa recupera il codice macchina dalla EEPROM (nel caso del BIOS) o dalla RAM (nel caso del sistema operativo e delle applicazioni). In particolare, il codice macchina ha un flusso di controllo: il codice macchina indica alla CPU quale codice macchina eseguire successivamente. È possibile ripetere ripetutamente lo stesso codice macchina, è possibile eseguire diversi bit di codice a seconda dei dati su cui sta lavorando il codice: le istruzioni in un linguaggio di interfaccia del dispositivo come il codice SATA possono eseguire un numero limitato di semplici attività, ma il codice macchina può farequalunque cosa . (Vedi anche Completezza di Turing .)
Potremmo riscrivere quel punto finale sopra come: il microcodice di solito implementa un linguaggio Turing Complete; il firmware normale di solito no.
Cosa significa "interpretare le istruzioni hardware" con il microcodice.
Vero ma probabilmente confuso; il punto importante è la distinzione tra il codice macchina, che ha un flusso di controllo ed è Turing Complete, e le istruzioni definite da un'interfaccia del dispositivo come SATA, che non funziona e non lo è.
Il "microcodice" si applica al codice che gira su schede audio
No, le schede audio ricevono istruzioni, non codice, proprio come le unità SATA. Le istruzioni potrebbero essere come "play A sharp" o "interpretare questi dati come una forma d'onda e riprodurli". Ancora molto semplice.
e schede video (GPU)?
Le schede video vecchio stile (quelle senza GPU) sono le stesse delle unità SATA. Le istruzioni sono come "imposta questo pixel su questo colore" o "scrivi una A in questa posizione".
... Le GPU sono complicate e si trovano da qualche parte tra i due mondi che ho tentato di descrivere sopra. Probabilmente è più semplice pensarli come un computer specializzato all'interno del computer principale, dotato di CPU proprie. È vero che anche dispositivi come le unità SATA hanno CPU integrate, ma la differenza è che la CPU integrata in un'unità SATA esegue solo il codice fornito dal produttore dell'unità, mentre le GPU eseguono anche il codice fornito dal sistema operativo e / o dal fornitore dell'applicazione. In realtà questa è una domanda completamente separata.
TL; DR: il microcodice è un tipo specifico di firmware, che aiuta l'hardware a implementare un set di istruzioni Turing Complete.