Architettura dei calcolatori Moreno Marzolla Dipartimento di Informatica—Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/
Architettura dei calcolatori Copyright © 2016, 2017, Moreno Marzolla, Università di Bologna, Italy (http://www.moreno.marzolla.name/teaching/FINFA/) This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Architettura dei calcolatori
Architettura dei calcolatori Cos'è un computer? Dal punto di vista tecnologico è quasi impossibile dare una definizione La tecnologia evolve rapidamente I computer di oggi sono molto diversi da quelli degli anni '60 I computer di domani saranno quasi sicuramente molto diversi da quelli di oggi Nonostante questo, dal punto di vista funzionale ci sono delle caratteristiche comuni Architettura dei calcolatori
Architettura dei calcolatori Cos'è un computer? E' un dispositivo in grado di Elaborare dati Memorizzare dati Trasferire dati da e verso l'esterno Eseguire operazioni di controllo e coordinamento tra le parti di cui è composto Controllo I/O Ambiente Esterno Elaborazione Memoria Architettura dei calcolatori
Architettura di Von Neumann Dati e programmi sono rappresentati allo stesso modo (da sequenze di bit) e contenuti nella stessa memoria János Lajos Margittai Neumann, 1903—1957, nato in Ungheria e naturalizzato americano col nome di John Von Neumann Architettura dei calcolatori
Struttura di un calcolatore: Architettura di Von Neumann Processore (CPU) Memoria Sottosistema di interfaccia (I/O) Bus di sistema Esegue le istruzioni elementari richieste dai programmi Mantiene Dati e Programmi Permette di comunicare dati e programmi alla macchina e di ottenere i risultati (tastiera, scheda audio, stampante, schermo, mouse...) Memorizzazione Elaborazione + Controllo Trasferimento dati da/verso l'esterno Architettura dei calcolatori
Architettura dei calcolatori Architettura a Bus Semplicità Una sola linea di connessione cui è possibile collegare più dispositivi, anziché un nuovo collegamento per ogni coppia di dispositivi che devono interagire tra loro Estensibilità Nuovi dispositivi possono essere aggiunti in modo semplice Standardizzazione E' possibile definire normative che consentono a dispositivi di produttori diversi di interagire correttamente Limitata capacità Al crescere del numero dei dispositivi, il bus diventa un fattore limitante (collo di bottiglia) delle prestazioni del sistema Architettura dei calcolatori
Architettura dei calcolatori Memoria Processore (CPU) Memoria Sottosistema di interfaccia Bus di sistema Architettura dei calcolatori
Architettura dei calcolatori Memoria e CPU Bus Dati Indirizzi Controllo Memoria R1 R2 ALU Rn PC Controllo IR PSW Architettura dei calcolatori
Architettura dei calcolatori RAM 8 bit Indirizzo Parola 1 2 3 La RAM è una sequenza di Byte Ogni Byte è identificato dalla sua posizione (indirizzo di memoria) Byte 0, Byte 1, Byte 2, ... Alcune CPU sono in grado di accedere ai singoli byte; altre accedono a parole (es., gruppi di 4 Byte) 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Architettura dei calcolatori
Architettura dei calcolatori Unità di misura 1 Kilo Byte (1KB) 210 = 1024 ≈1000 Byte 1 Mega Byte (1MB) 220 = 1.048.576 ≈1000000 Byte 1 Giga Byte (1GB) 230 = 1.073.741.824 ≈109 Byte 1 Tera Byte (1TB) 240 = 1.099.511.627.776 ≈1012 Byte Architettura dei calcolatori
Funzionamento della RAM Linee di selezione 16 celle di memoria da 8 bit ciascuna linea 0 0 linea 1 0 linea 2 0 linea 3 0 linea 4 0 linea 5 0 linea 6 1 linea 7 0 linea 8 0 linea 9 0 linea 10 0 linea 11 0 linea 12 0 linea 13 0 linea 14 0 linea 15 0 Byte selezionato 1 1 1 1 01102 Bus indirizzi Bus di controllo Leggi/Scrivi Decodificatore 1 1 1 1 Bus Dati Architettura dei calcolatori
Esempio: lettura byte all'indirizzo 01102 Bus Dati Indirizzi = 0110 Controllo = Read Memoria R1 Indirizzo Contenuto 0 00001010 1 10101000 2 00000000 3 00000000 4 01010010 5 11110000 6 01011010 … ... R2 ALU Rn PC Controllo IR PSW Architettura dei calcolatori
Esempio: lettura byte all'indirizzo 01102 Bus Dati = 01011010 Indirizzi = 0110 Controllo = Read Memoria R1 Indirizzo Contenuto 0 00001010 1 10101000 2 00000000 3 00000000 4 01010010 5 11110000 6 01011010 … ... R2 ALU Rn PC Controllo IR PSW Architettura dei calcolatori
Esempio: scrittura di 000001012 all'indirizzo 01102 Bus Dati = 00000101 Indirizzi = 0110 Controllo = Read Memoria R1 Indirizzo Contenuto 0 00001010 1 10101000 2 00000000 3 00000000 4 01010010 5 11110000 6 00000101 … ... R2 ALU Rn PC Controllo IR PSW Architettura dei calcolatori
Architettura dei calcolatori Vari tipi di memoria Accesso lento/molto lento Costo basso Vastissima capacità Accesso molto veloce Costo elevato Limitata capacità Accesso veloce Costo contenuto Ampia capacità Hard Disk CD/ DVD RAM CPU Cache I/O I/O La memoria cache contiene una copia del contenuto delle locazioni di memoria accedute recentemente I programmi tendono a dimostrare località spaziale e località temporale nell'accesso alla memoria Località spaziale: se in un certo momento accedo alla locazione di memoria x, è molto probabile che in seguito accederà a locazioni “vicine” (es., x + 1) Località temporale: se in un certo momento accedo alla locazione di memoria x, è molto probabile che a breve distanza di tempo accederò nuovamente a x Bus di sistema Architettura dei calcolatori
Architettura dei calcolatori Hard Disk meccanici Asse di rotazione Movimento delle testine By Eric Gaba, Wikimedia Commons user Sting, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=11278668 Negli hard disk meccanici i dati vengono memorizzati in tracce concentriche sulle superfici di dischi magnetici rotanti Un blocco composto da testine di lettura/scrittura "sorvola" tutte le superfici per accedere ai dati richiesti Architettura dei calcolatori
Architettura di Von Neumann Processore (CPU) Memoria Sottosistema di interfaccia (I/O) Bus di sistema Architettura dei calcolatori
Architettura dei calcolatori CPU Bus Dati Indirizzi Controllo Memoria R1 R2 ALU Rn PC Controllo IR PSW Architettura dei calcolatori
Architettura dei calcolatori Componenti della CPU N registri di uso generale R1...RN Di solito, ma non necessariamente, un registro contiene 32 bit (1 parola) PC (Program Counter) Indica l'indirizzo di memoria che contiene la prossima istruzione da eseguire IR (Instruction Register) Contiene il codice numerico dell'istruzione che deve essere eseguita PSW (Program Status Word) Informazioni sullo stato del programma (es: se l'ultima operazione aritmetica ha causato overflow, se l'ultima operazione aritmetica ha dato zero come risultato, ...) Architettura dei calcolatori
Ciclo Fetch-Decode-Execute Preleva dalla memoria l'istruzione da eseguire; l'istruzione viene letta dall'indirizzo di memoria che si trova in PC; il contenuto viene posto in IR Decode Esamina l'istruzione memorizzata in IR per decidere quali operazioni richiede Esegue l'istruzione memorizzata in IR, incluso il recupero dalla memoria degli eventuali parametri necessari ad eseguirla, e deposito del risultato. Aggiorna il PC per la prossima istruzione. Execute Architettura dei calcolatori
Architettura dei calcolatori Tipi di istruzioni Istruzioni Aritmetico-Logiche Esempio: Somma due valori contenuti in due registri; salva il risultato in un terzo registro Istruzioni di controllo del flusso di esecuzione Esempio: Salta ad eseguire l'istruzione il cui codice è contenuto nella cella di memoria all'indirizzo X Istruzioni di letture/scrittura di memoria Esempio: Copia il valore contenuto nella cella di memoria all'indirizzo X all'interno del registro Ry Istruzioni di Input/Output Esempio: Invia il contenuto del registro Rx al dispositivo di I/O numero y Architettura dei calcolatori
Formato di una istruzione Le istruzioni sono rappresentate da sequenze di bit In alcuni processori ogni istruzione è codificata con 4 Byte = 32 bit = 1 parola Altri (es., Intel x86) usano codifiche con numero variabile di Byte Se le istruzioni sono codificate con 32 bit, l'IR deve essere ampio esattamente 32 bit All'interno dei 32 bit, occorre indicare: Il tipo di istruzione da eseguire (somma, prodotto, salto, confronto, copia da memoria...) Gli eventuali parametri dell'istruzione (quali registri sono coinvolti, quali locazioni di memoria sono coinvolte, ecc.) Architettura dei calcolatori
Architettura dei calcolatori Esempio Una ipotetica istruzione di somma “Somma i valori contenuti nei registri Ri e Rj; poni il risultato nel registro Rk” Supponiamo di avere 256 possibili registri Una possibile codifica dell'istruzione è la seguente: ADD Ri, Rj, Rk 00000001 8 bit 8 bit 8 bit Codice istruzione i j k Architettura dei calcolatori
Architettura dei calcolatori Esempio Esempio: 1 parola = 4 Byte 1 Byte 1 Byte 1 Byte 1 Byte 00000001 00011100 00000010 10000000 Istruzione= ADD Primo Addendo: Registro 28 Secondo Addendo: Registro 2 Risultato va in Registro 128 Architettura dei calcolatori
Architettura dei calcolatori Esempio Indirizzo Contenuto 32 bit = 1 parola Memoria R2 3710 100010 000000012 R28 2110 ALU 100110 000111002 100210 000000102 R128 100310 100000002 100410 000001102 PC 100010 100510 001001102 Controllo IR 100610 010001102 100710 101101102 PSW Architettura dei calcolatori
Architettura dei calcolatori Fetch Indirizzo Contenuto 32 bit = 1 parola Memoria R2 3710 100010 000000012 R28 2110 ALU 100110 000111002 100210 000000102 R128 100310 100000002 100410 000001102 PC 100010 Supponiamo che i registri siano tutti a 32 bit, incluso l'IR Il PC contiene l'indirizzo dell'inizio della parola (= sequenza di 4 byte contigui) contenente il codice dell'istruzione da eseguire. In questo caso i 4 byte sono quelli che si trovano agli indirizzi 1000, 1001, 1002, e 1003 100510 001001102 Controllo IR 100610 010001102 100710 101101102 PSW Architettura dei calcolatori
Architettura dei calcolatori Fetch Indirizzo Contenuto 32 bit = 1 parola Memoria R2 3710 100010 000000012 R28 2110 ALU 100110 000111002 100210 000000102 R128 100310 100000002 100410 000001102 PC 100010 Il contenuto della word puntata da PC viene ricopiato nell'IR 100510 001001102 Controllo IR 00000001000111000000001010000000 100610 010001102 100710 101101102 PSW Architettura dei calcolatori
Architettura dei calcolatori Decode Indirizzo Contenuto 32 bit = 1 parola Memoria R2 3710 100010 000000012 R28 2110 ALU 100110 000111002 100210 000000102 R128 100310 100000002 100410 000001102 PC 100010 ADD Il contenuto della word puntata da PC viene ricopiato nell'IR 100510 001001102 Controllo IR 00000001000111000000001010000000 100610 010001102 100710 101101102 PSW Architettura dei calcolatori
Architettura dei calcolatori Execute Indirizzo Contenuto 32 bit = 1 parola Memoria R2 3710 100010 000000012 R28 2110 ALU 100110 000111002 100210 000000102 R128 5810 100310 100000002 100410 000001102 PC 100010 ADD L'unità di controllo decodifica l'istruzione, e capisce che si tratta di una operazione di somma. Istruisce quindi la ALU di eseguire una somma tra i registri indicati nel codice dell'istruzione, e memorizzare il risultato nel registro destinazione. Nel caso si verifichino situazioni anomale (esempio, overflow) il registro PSW viene aggiornato di conseguenza. In questo caso non ci sono modifiche in quanto l'operazione viene eseguita correttamente. 100510 001001102 Controllo IR 00000001000111000000001010000000 100610 010001102 100710 101101102 PSW Architettura dei calcolatori
Architettura dei calcolatori Fetch Indirizzo Contenuto 32 bit = 1 parola Memoria R2 3710 100010 000000012 R28 2110 ALU 100110 000111002 100210 000000102 R128 5810 100310 100000002 100410 000001102 PC 100410 L'unità di controllo incrementa il PC per puntare all'istruzione successiva. Dato che stiamo assumendo che tutte le istruzioni richiedano 32 bit (1 word), l'istruzione successiva si trova all'indirizzo di memoria 1000+4. Si noti che non è detto che l'istruzione successiva da eseguire si trovi nella word successiva. Ad esempio, l'istruzione eseguita potrebbe ordinare al processore di saltare (JUMP) ad eseguire l'istruzione contenuta in un indirizzo di memoria diverso, indicato nel codice dell'istruzione. In tal caso il PC verrà modificato per contenere l'indirizzo a cui saltare. 100510 001001102 Controllo IR 00000001000111000000001010000000 100610 010001102 100710 101101102 PSW Architettura dei calcolatori
Architettura dei calcolatori Esempio Ipotetica istruzione di trasferimento registro → memoria “Copia il contenuto del registro Ri nella cella di memoria di indirizzo m” Una possibile codifica STORE Ri, m 00000010 8 bit 16 bit Codice istruzione i m Architettura dei calcolatori
Architettura dei calcolatori Domanda 00000010 8 bit 16 bit Codice istruzione i m Considerando l'istruzione STORE Ri,m rappresentata come sopra, quanto grande può essere la memoria accessibile all'istruzione? Risposta L'indirizzo m della destinazione è espresso con 16 bit L'intero più grande rappresentabile con 16 bit è 216-1 = 65535 Quindi la memoria massima indirizzabile con l'istruzione STORE è di 65536 bytes (numerati da 0 a 65535) Architettura dei calcolatori
Architettura dei calcolatori Domanda La CPU di un computer ha il registro PC di 20 bit e una memoria RAM di un Mbyte (=220 Byte). E' possibile aumentare la sua memoria RAM destinata all'esecuzione dei programmi senza cambiare la CPU? Architettura dei calcolatori