Capitolo 9: Bus, memoria, interfacce CPU e unità di elaborazione
CPU
La CPU è il componente fondamentale che fornisce il supporto necessario a elaborare le informazioni e a coordinare il funzionamento di tutti gli altri componenti. È divisa a sua volta in blocchi funzionali collegati da un bus interno. I blocchi funzionali interni alla CPU sono:
Parte operativa
I registri sono celle analoghe a quelle di memoria in grado di memorizzare una singola stringa di lunghezza fissa. La loro funzione è quella di memorizzare temporaneamente gli indirizzi e i dati su cui la CPU sta lavorando.
- Registro di stato SR: indica particolari proprietà dell’istruzione appena conclusa.
- Registro contatore di programma PC: contiene l’indirizzo della cella di memoria in cui è memorizzata la successiva operazione da eseguire.
- Registro istruzione corrente IR: è il registro in cui viene memorizzata l’istruzione trasferita dalla memoria durante la fase di fetch.
- Registro indirizzi MAR: è il registro in cui viene memorizzato l’indirizzo della cella che si vuole andare a leggere o scrivere.
- Registro dati MDR: è il registro in cui transitano le istruzioni o i dati che vengono trasferiti da/verso la memoria centrale.
- Registri A o OP: sono due registri collegati con l’ALU nei quali vengono temporaneamente memorizzati gli operandi che devono essere calcolati dall’ALU stessa. Il risultato delle operazioni viene temporaneamente memorizzato nel registro A che svolge pertanto la funzione di accumulatore.
- Registro interruzioni (INT): riceve e memorizza segnali provenienti dall’esterno.
L’unità aritmetico-logica ALU: impiego combinato di registri e reti combinatorie (circuiti che effettuano fisicamente i calcoli). La specifica operazione è indicata dal contenuto del registro posizionato a fianco dell’ALU, denominato operazione.
Bus interno
Formato da una serie di linee elettriche capaci di trasmettere segnali. Può essere partizionato in tre sezioni:
- Bus indirizzi: collega il MAR (registro indirizzi) con i pin utilizzati dalla memoria per selezionare le celle. Trasferisce le stringhe di bit in una sola direzione: dalla CPU verso la memoria.
- Bus dati: collega l’MDR (registro dati) con i contatti usati dalla memoria per trasferire i dati da/verso le celle. Può trasferire stringhe di bit in entrambe le direzioni. Consente di trasferire il contenuto di più celle contemporaneamente.
- Bus controlli: costituito da fili isolati che trasmettono segnali speciali da un blocco funzionale dell’architettura di Von Neumann a un altro. Possono avere natura unidirezionale e bidirezionale.
Parte di controllo
L’unità di controllo: un circuito complesso che ha collegamenti con i registri, l’ALU e gli altri blocchi funzionali dell’architettura di Von Neumann, e che attraverso tali collegamenti ne comanda il funzionamento.
Memoria centrale
È costituita da un insieme finito di celle di uguale capacità, ciascuna in grado di memorizzare una stringa di bit di lunghezza h assegnata. Normalmente tale lunghezza è di 8 bit e la corrispondente stringa viene detta byte. I dati e le istruzioni vengono memorizzati in una o più celle consecutive, a seconda della lunghezza della stringa che li rappresenta. Ciascuna cella è individuata da una codifica in binario naturale detta indirizzo della cella. La memoria centrale è realizzata in modo tale da ricevere su opportuni contatti elettrici (piedini o pin) la stringa corrispondente all’indirizzo di una cella e un segnale binario che indica se si vuole effettuare un’operazione di lettura o di scrittura.
Cache
Con l’evoluzione delle tecnologie la velocità di funzionamento della CPU aumenta più rapidamente rispetto alla velocità con cui è possibile accedere alle celle della memoria centrale. L’aumento di velocità della CPU non può essere pienamente sfruttato se non si aumenta contemporaneamente la velocità con cui si possono trasferire istruzioni e dati tra la CPU e la memoria centrale. Per ovviare a questo inconveniente viene introdotta una memoria relativamente piccola ma molto veloce chiamata cache.
Le sue celle contengono la copia dei dati memorizzati nella memoria centrale utilizzati con più frequenza. Quando la CPU tramite il MAR (registro indirizzi) chiede la lettura di una cella di memoria, la cache verifica preliminarmente se una delle sue celle contiene il dato corrispondente. In caso affermativo il dato viene trasmesso direttamente alla CPU senza passare per il bus di sistema. In caso negativo il dato viene letto dalla memoria centrale e trasferito nella cache. Quando un dato non presente nella cache viene trasferito in essa, un altro dato precedentemente memorizzato in cache viene eliminato per fare spazio al nuovo arrivato.
Interfacce di ingresso/uscita
Permettono l’interazione del calcolatore con l’ambiente esterno attraverso le periferiche. Devono svolgere due funzioni: trasferire dati da/verso la CPU per realizzare le operazioni di input/output e permettere alla CPU di controllare il funzionamento delle periferiche. Queste operazioni vengono svolte da tre registri per ciascuna interfaccia:
- Registro dati della periferica PDR: memorizza i dati provenienti/diretti dalla/alla periferica.
- Registro di stato della periferica PSR: fornisce alla CPU informazioni sullo stato di funzionamento della periferica (ad esempio se ha terminato l’operazione di input/output o se la sta svolgendo).
- Registro di controllo della periferica PCR: condiziona il funzionamento della periferica (accensione, disattivazione o modifica della modalità di funzionamento).
Se il bus di sistema fosse l’unico, durante il trasferimento di N dati da un'interfaccia I/O non sarebbero possibili trasferimenti tra la CPU e la memoria centrale. Per questo motivo i moderni calcolatori sono caratterizzati da un doppio bus che collega le interfacce input/output tra loro ed è collegato al bus di sistema tramite un componente elettronico che prende il nome di bridge. I due bus hanno caratteristiche diverse e in particolare sono realizzati per trasferire i dati a differenti velocità: molto elevate per il bus di sistema, meno spinte nel caso di bus I/O.
Codifica delle istruzioni
Le istruzioni sono codificate in stringhe di bit. Il formato delle istruzioni prevede che la stringa di bit che codifica l’istruzione sia suddivisa in campi dell’istruzione:
1000 00 0000000001
- Codice operativo: indica il tipo di istruzione.
- Modo di indirizzamento: indica come interpretare il campo operando.
- Indirizzamento immediato: la stringa di bit rappresenta il valore su cui agisce il codice operativo (è utile per operare su valori costanti).
- Indirizzamento indiretto: la stringa di bit è l’indirizzo di una cella di memoria che contiene il valore su cui agisce il codice operativo (è utile per operare su valori variabili).
L’esecuzione di ogni istruzione corrisponde a una microsequenza la cui lunghezza dipende dalla natura dell’istruzione. A ogni microoperazione della microsequenza corrisponde un gruppo di segnali emessi dall’unità di controllo verso la parte operativa della CPU. I gruppi di segnali e la loro successione temporale dipende dal codice operativo e dal modo di indirizzamento. La microsequenza che corrisponde alla fase di fetch è la stessa per tutte le istruzioni.
Fase di fetch
Fase in cui viene recuperata dalla memoria la prossima istruzione da eseguire. Dal registro contatore di programma (PC) è letto l’indirizzo della cella della memoria centrale in cui è memorizzata l’istruzione successiva. L’indirizzo della cella che si vuole leggere (o scrivere) è memorizzato nel registro indirizzi (MAR). L’istruzione è caricata dalla memoria centrale sul registro dati (MDR) e successivamente memorizzata nel registro istruzione corrente (IR). Il registro contatore di programma (PC) viene a questo punto incrementato di 1.
Istruzioni di salto
Sono istruzioni che permettono di realizzare passi decisionali ovvero i punti in cui in un processo viene alterato il flusso sequenziale delle istruzioni. Operano sul PC (registro contatore di programma) modificandolo, causando pertanto un salto nelle istruzioni. Si dividono in due categorie:
- Istruzioni di salto condizionato: producono sempre un salto nella sequenza di istruzioni eseguite. L’istruzione che segue un’istruzione di salto condizionato non è quella memorizzata nell’indirizzo successivo, ma è l’istruzione memorizzata nella cella del suo operando. L’operando viene trasferito dal IR (registro istruzione corrente) al PC (registro contatore di programma) sovrascrivendo l’indirizzo contenuto in PC. Al termine di tale microoperazione l’istruzione di salto incondizionato termina, e, ovviamente, si passa a eseguire la fase di fetch dell’istruzione successiva.
- Istruzioni di salto incondizionato: producono un salto nella sequenza di istruzioni solo se è verificata una determinata condizione.
I vari componenti dell’architettura di Von Neumann vengono definiti blocchi funzionali.