Calcolatori elettronici/I processori
Il processore è un dispositivo capace di:
- elaborare istruzioni, cioè leggere delle istruzioni dalla memoria (fase di fetch) ed eseguirle (fase di esecuzione);
- interagire con il mondo esterno attraverso le porte di periferica, reagendo il più presto possibile alle segnalazioni (= richieste di interrupt) provenienti dall'esterno.
L'importanza di ciascuna di queste capacità dipende dalla destinazione d'uso del processore.
Elaborazione delle istruzioni
modificaPer approfondire su Wikipedia, vedi la voce Ciclo di fetch-execute. |
Fase di fetch
modificaL'instruction set è l'insieme delle operazioni che il processore è in grado di eseguire. A ogni operazione corrisponde una certa istruzione in memoria (es. ADD
). Durante la fase di fetch il processore legge una di queste istruzioni dalla memoria tramite un bus esterno:
- il Program Counter (PC) contiene l'indirizzo di memoria della nuova istruzione da leggere;
- l'Address Register (AR) passa il nuovo indirizzo dal PC alla memoria;
- la memoria restituisce la porzione di codice corrispondente all'indirizzo specificato dal processore;
- il Data Register (DR) memorizza[1] nell'Instruction Register (IR) la porzione di codice proveniente dalla memoria, pronta ad essere decodificata ed eseguita dal processore;
- il PC viene aggiornato all'indirizzo dell'istruzione successiva a quella letta.
Fase di esecuzione
modificaL'unità di controllo, tramite il bus interno, dopo aver ricevuto l'istruzione dall'IR, ha il compito di pilotare i vari moduli, cioè fornire segnali di controllo ad essi, per le operazioni ad es. di caricamento degli operandi, esecuzione delle istruzioni, acquisizione dei risultati, ecc. La ALU è il modulo che esegue una serie di operazioni aritmetiche/logiche su operandi. I registri AC forniscono gli operandi alla ALU e ricevono i risultati delle operazioni.
All'interno di ogni istruzione si possono identificare delle microistruzioni elementari (es. accesso ai registri, fetch, ecc.), ciascuna delle quali richiede un colpo di clock.
Il tempo di esecuzione di un'istruzione, misurato in colpi di clock, dipende da:
- tipo di istruzione: quale istruzione eseguire (es.
MOV
,ADD
)? - tipo di operandi: l'operando si trova nei registri (accesso più veloce) o in memoria (ritardo del fetch)?
- modo di indirizzamento: l'indirizzo passato è diretto (es.
VAR
) o richiede una somma (es.vett[DI]
)?
Gli operandi di una generica istruzione possono essere contenuti nei registri (Rx
) o nella memoria (M[xx]
), a seconda di ciò che è richiesto dall'operazione letta dalla memoria. I registri sono dei moduli di memoria costituiti da flip-flop che risiedono all'interno del processore. Anche se il numero di registri è finito, il tempo di accesso a un registro è molto minore del tempo di accesso a una cella di memoria, a causa dei colpi di clock necessari durante l'operazione di fetch. Il compilatore di C decide automaticamente se utilizzare i registri o la memoria, privilegiando quando possibile i primi: nel caso in cui l'operando si trova in memoria, durante la fase di esecuzione dell'operazione è necessario effettuare un ulteriore fetch per l'operando.
Per ridurre i tempi di esecuzione, mentre l'execution unit esegue un'operazione la bus interface unit si occupa del fetch dell'istruzione successiva.
Note
modifica- ↑ Il DR viene usato in generale per il trasferimento di dati tra la memoria e il processore: un ulteriore segnale di controllo indica se l'operazione che deve effettuare la memoria è la lettura o la scrittura.