CPU: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Akbg (discussione | contributi)
cleanup sul funzionamento generale di una CPU
Riga 47:
Una generica CPU deve gestire una serie di operazioni sincronizzandole con il resto del sistema: perciò è dotata, oltre a quanto sopra elencato, anche di uno o più bus interni che si occupano di collegare registri, ALU, unità di controllo e memoria: inoltre, all'unità di controllo interna della CPU fanno capo una serie di segnali elettrici esterni che si occupano di tenere la CPU al corrente dello stato del resto del sistema e di agire su di esso. Il tipo e il numero di segnali esterni gestiti possono variare ma alcuni, come il ''[[RESET]]'', le linee di ''[[IRQ]]'' e il ''[[CLOCK]]'' sono sempre presenti.
 
Tipicamente la CPU è l'[[Interprete (informatica)|Interprete]] del linguaggio assembler. Come tutti gli interpreti, si basa sul seguente ciclo:
Il normale ciclo di operazioni di una CPU è il seguente: l'unità di controllo legge la locazione di memoria indicata dal registro IP, incrementa il registro IP di uno e la decodifica; se la decodifica indica che l'istruzione è più lunga di una locazione di memoria, legge anche il resto dell'istruzione e incrementa l'IP del numero di locazioni lette; esegue l'istruzione; se necessario scrive in memoria (o in altri registri) il risultato. Dopodiché torna a leggere l'indirizzo puntato da IP per caricare ed eseguire un'altra istruzione, all'infinito.
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.