CPU: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Akbg (discussione | contributi)
cleanup sul funzionamento generale di una CPU
Akbg (discussione | contributi)
usate le liste, e ulteriore cleanup
Riga 48:
 
Tipicamente la CPU è l'[[Interprete (informatica)|Interprete]] del linguaggio assembler. Come tutti gli interpreti, si basa sul seguente ciclo:
1)* Acquisizione dell'istruzione: il processore preleva l'istruzione dalla memoria, presente nell'indirizzo (tipicamente [[Memoria virtuale|logico]]) specificato da un registro "speciale" ("speciale" opposto di "generico"), il [[Program counter|PC]]
2)* Decodifica: una volta che la [[Word|word]] è stata prelevata, viene determinata quale operazione debba essere eseguita e come ottenere gli operandi, in base ad una funzione il cui dominio è costituito dai codici operativi (tipicamente i bit alti delle [[Word|word]]) ed il codominio consiste nei brani di [[Microprogramma|microprogramma]] da eseguire
3)* Esecuzione: viene eseguita la computazione desiderata. Nell'ultimo passo dell'esecuzione viene incrementato il [[Program counter|PC]]: tipicamente di uno se l'istruzione non era un salto condizionale, altrimenti l'incremento dipende dall'istruzione e dall'esito di questa
 
Questo ciclo elementare può essere migliorato in vari modi: per esempio, la decodifica di una istruzione può essere fatta contemporaneamente all'esecuzione della precedente e alla lettura dalla memoria della prossima ('''instruction prefetch''') e lo stesso può essere fatto con i dati che si prevede saranno necessari alle istruzioni ('''data prefetch'''). La stessa esecuzione delle istruzioni può essere suddivisa in passi più semplici, da eseguire in stadi successivi, organizzando la unità di controllo e la ALU in stadi consecutivi, come delle catene di montaggio ('''[[Pipeline dati|pipeline]]'''): in questo modo più istruzioni possono essere eseguite "quasi contemporaneamente", ciascuna occupando ad un certo istante uno stadio diverso della pipeline.
 
Il problema di questo approccio sono le istruzioni di ''salto condizionato'',: cioè istruzioni che impostano il valore stesso del registro IP, ma solo se al momento della loro esecuzione sono verificate certe condizioni (particolari valori di registri). Lala CPU non può sapere a priori se dovrà eseguire o no il salto prima di aver eseguito quelle precedenti, così deve decidere se impostare la pipeline tenendo conto del salto o no: e in caso di previsione errata la pipeline va svuotata completamente e le istruzioni in corso di decodifica rilette da capo, perdendo moltoun tempo:numero edi sicicli perdedi tantoclock piùdirettamente tempoproporzionale quantial piùnumero di stadi ha ladella pipeline. Per evitare questo i processori moderni hanno unità interne (“Branch prediction unit”) il cui scopo è tentare di prevedere se, data una istruzione di salto condizionato e quelle eseguite in precedenza, il salto dovrà essere eseguito o no.
 
== Architetture CISC e architetture RISC ==