Fondamenti di Informatica Architettura del Calcolatore 1
La macchina di von Neumann bus di sistema canale di comunicazione CPU Mem. RAM Mem. Massa Perif. esecutore programmi e dati I/O dei dati (e dei programmi) 2
Elementi funzionali Bus di sistema collega gli altri elementi e consente lo scambio di dati Unità di elaborazione, o CPU elabora dati, coordina trasferimento dei dati esegue i programmi, cioè interpreta ed esegue le loro istruzioni Memoria Centrale memorizza dati e programmi capacità limitata (esempio: 4 GByte) volatile (si cancella se si spegne il calcolatore) accesso all informazione molto rapido 3
Memoria secondaria o memoria di massa memorizza grandi quantità di dati e programmi Su PC: hard disk (es. 750 GB), CD-ROM (700 MB), DVD (4,7 GB), pendrive usb (es. 8 GB), scheda microsd (32 GB) persistente (si deve cancellare esplicitamente) accesso molto meno rapido della RAM Unità periferiche (I/O) comunicazione con l ambiente esterno terminali, con tastiera, mouse, video, stampanti Input: tastiere, microfoni, mouse, touchpad, videocamere, Output: schermi, altoparlanti, stampanti, l ambiente esterno non è sempre un utente umano (impianti industriali, robot, strumenti di controllo) Sensori e attuatori 4
Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 5
Le memorie di massa Informazione memorizzata su supporto magnetico (o ottico o altro...) di costo contenuto Memoria permanente: le informazioni sono raggruppate in file gestiti dal sistema operativo. Dischi rigidi: tempi di accesso dell ordine delle decine di millisecondi; floppy disk: dell ordine delle centinaia di millisecondi Nastri e Cartucce: per memorizzare informazioni storiche (back-up) CD-ROM e DVD-ROM: sola lettura (700 MB e 4,7 GB) CD-RW e DVD-RW: anche riscrivibili 6
Struttura dei dischi rigidi (Hard Disk) testine superfici tracce cilindri settori 7
Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 8
La memoria centrale Contiene le istruzioni e i dati su cui la CPU può operare Contiene, cioè, sia i dati sia i programmi Tutta l informazione, per poter essere elaborata, deve passare dalla memoria centrale e successivamente essere caricata in qualche registro della CPU È memoria a breve-medio periodo è volatile (si perde allo spegnendo la macchina) Ha dimensioni "ridotte" ordine dei GByte (ma fino a non molto tempo fa, MByte) Tempi di accesso più rapidi ordine delle decine di nanosecondi circa 1 milione di volte più veloce delle memorie di massa 9
La memoria centrale È strutturata come un insieme ordinato di parole (celle) 1 parola = n elementi binari (tipicamente 8, 16, 32, 64 bit) La posizione di ogni parola è identificata da un indirizzo Capacità di indirizzamento (numero di celle "accessibili") È definita dalle dimensioni del bus indirizzi e del registro indirizzi (AR), spiegati dopo Una zona di memoria non indirizzabile è inaccessibile di fatto è inutile Il numero di celle di una memoria, quindi, tende a coincidere con il massimo numero di celle indirizzabili Altrimenti il bus e il registro degli indirizzi sono inutilmente sovradimensionati Una capacità di indirizzamento sovradimensionata può (ad esempio) essere predisposta in previsione di una futura espansione della memoria 10
Indirizzamento della memoria centrale Esiste un registro (registro indirizzi - AR) della CPU per indirizzare la memoria È un registro di k bit: può indirizzare 2 k celle Con 10 bit si indirizzano 1.024 celle 1 kilo-parole Con 20 bit, 1.048.576 parole 1 mega parole 30(giga), 40(tera), 50(a), 60(exa) Celle - hanno un indirizzo - contengono parole 0 i-1 i i+1 01110100110 Registro Indirizzi (AR) i i+2 2 k -1 11
RAM e ROM RAM: Random Access Memory Le celle sono indirizzabili in un ordine qualunque (accesso random = diretto, non "casuale") Il tempo di accesso non dipende dalla cella ROM: Read-Only memory Per programmi protetti e definiti dal costruttore Il BIOS (Basic I/O System) che carica in memoria il sistema operativo quando la macchina viene accesa Ne esistono di diversi tipi Erasable, Programmable, (EPROM) Una via intermedia tra Hardware e Software (Firmware) 12
Tecnologie per la memoria centrale La memoria RAM È realizzata mediante circuiti a transistori È modificabile (leggibile e scrivibile) ma deve essere continuamente alimentata per mantenere le informazioni (volatile) All accensione il suo contenuto è una sequenza casuale di 0 e 1 La memoria ROM È solo leggibile: le informazioni sono di solito scritte in modo permanente dal costruttore È caricata al momento della produzione del calcolatore Vi si accede ogni qualvolta questo viene acceso Contiene il bootstrap, un programma contenente le prime istruzioni che la CPU deve eseguire 13
Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 14
La CPU Contiene gli elementi circuitali che regolano il funzionamento del calcolatore: L unità di controllo è responsabile della decodifica e dell esecuzione delle istruzioni. "Dirige" l'azione delle altre parti L orologio di sistema (clock) permette di sincronizzare le operazioni, temporizzando il funzionamento del calcolatore L unità aritmetico-logica (ALU) realizza le operazioni aritmetiche e logiche eventualmente richieste per l esecuzione dell istruzione. È priva di facoltà di scelta I registri sono piccole memorie velocemente accessibili, utilizzate per memorizzare risultati parziali o informazioni necessarie al controllo. L insieme dei valori contenuti nell'insieme di tutti i registri in un dato istante dell elaborazione è detto contesto della CPU 15
La CPU Altri registri speciali R0 R1 registri generici Rn 16
Il ciclo preleva-esegui Le istruzioni da eseguire sono nella memoria RAM La CPU ciclicamente (e indefinitamente): Preleva la prossima istruzione dalla RAM Decodifica ed esegui tale istruzione Tipologie di istruzioni di elaborazione dei dati di trasferimento dei dati di controllo del flusso di esecuzione del programma di arresto (per terminare un programma) Funzionamento scandito dall orologio di sistema ( clock ) 17
Il ciclo preleva-esegui più in dettaglio 1. Preleva la prossima istruzione dalla RAM 2. Decodifica ed esegui l istruzione prelevata 1. Contenuto di PC AR 2. Lettura da memoria centrale DR 3. Trasferimento da DR CIR 4. Incremento di PC 5. Interpretazione ed esecuzione di CIR 18
Formato istruzioni in linguaggio macchina Costituite (ovviamente) da sequenze di 0 e 1 campo codice operativo (obbligatorio) specifica l operazione da eseguire campo operandi (facoltativo) indica i dati da utilizzare (gli operandi solitamente possono essere uno o due) Può contenere direttamente il valore, o l indirizzo della cella che contiene il valore (riferimento a una variabile) FORMATO ISTRUZIONE: Cod. operativo Operandi 19
Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 20
Il bus di sistema Insieme di connettori (conduttori elettrici) che trasferiscono dati (bit!) collegando fra loro CPU, RAM e interfacce di i/o I trasferimenti sono gestiti dalla CPU (modalità master/slave) e si chiamano cicli del bus La capacità del bus e la frequenza del clock determinano la velocità di trasferimento Bus Dati trasferisce dati da master a slave e viceversa Bus Indirizzi trasferisce indirizzi, per esempio l indirizzo di un dato dal registro indirizzi alla memoria, per accedere al dato stesso Bus di Controllo Da master a slave: comandi da eseguire (es: lettura da disco) Da slave a master: informazioni sul successo dell operazione 21
Cicli di bus: esempi Operazione di lettura da memoria centrale (LOAD): la CPU carica l indirizzo della parola di memoria nel registro indirizzi e lo trasmette alla memoria via bus indirizzi la CPU invia il comando di Read Memory sul bus di controllo la memoria trasmette sul bus dati il contenuto della parola verso il registro dati la memoria segnala al processore sul bus di controllo che l operazione è stata completata con successo: il dato si trova nel registro dati Così si copia il contenuto di una cella della RAM nel registro dati della CPU Ogni prelievo di istruzione (preleva-esegui) comporta un ciclo di load Anche l esecuzione di una istruzione può comportare un ciclo di load 22
Cicli di bus: esempi Operazione di scrittura in memoria centrale (STORE): la CPU carica indirizzo della parola di memoria dove si vuole scrivere nel registro indirizzi e lo trasmette alla memoria via bus indirizzi la CPU carica nel registro dati la parola da scrivere in memoria la CPU invia il comando di Write Memory sul bus di controllo la CPU trasmette sul bus dati il contenuto del registro dati verso l indirizzo di memoria segnalato la memoria segnala al processore sul bus di controllo che l operazione è stata completata con successo: il dato si trova nella parola di memoria destinazione Così si copia il contenuto del registro dati della CPU in una cella dalla RAM Tipicamente l esecuzione di un istruzione può comportare un ciclo di store 23
Architettura del calcolatore RAM ROM CPU MEMORIA CENTRALE BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DI INPUT/OUTPUT MM HD INPUT STAMPANTE OUTPUT UNITA PERIFERICHE 24
Interfacce di I/O (verso le periferiche) Consentono il collegamento tra elaboratore e periferiche Possono essere dispositivi elettromeccanici Contengono registri per inviare comandi alla periferica registro comandi periferica (PCR) collegato al bus di controllo scambiare dati registro dati della periferica (PDR) collegato al bus dati controllare il funzionamento della periferica registro stato periferica (PSR): pronto, occupato, errore,... 25
Il sistema operativo Programma di grandi dimensioni e notevole complessità, che permette all utente di interagire con il calcolatore Sviluppo di un sistema operativo: centinaia di anni-uomo Poca teoria, e solo in alcune aree, perché storicamente: prima lo sviluppo tecnologico, poi la teorizzazione aspetti non di calcolo ma di ottimizzazione, gestione di interazione, gestione di malfunzionamenti etc. il progetto di un sistema operativo è un problema intrinsecamente complesso e interdisciplinare Complessità estrema: studio per livelli di macchine astratte per ragionare a diversi livelli di astrazione Funzioni: Supporto per la programmazione Meccanismi di Ingresso / Uscita (I/O) Gestione archivi (file) 26
Esempio minimale: la macchina mini-hw Mini-CPU PC CIR A B ALU UC RAM DR AR BUS INDIRIZZI BUS DATI BUS DI CONTROLLO INTERFACCE DUE SOLE UNITÀ PERIFERICHE (i/o di soli numeri interi) INPUT OUTPUT 27
RAM da 8 KByte = h x 2 k bit indirizzi delle celle 0 Registro Indirizzi (AR) 001000110010 k = 12 bit cella selezionata 562 4.095 h =16 bit 1001011001010010 4.096 parole Registro Dati (DR) 1001011001010010 h = 16 bit 16 x 2 12 bit = 2 16 bit = 65536 bit = 2 3 x 2 10 x 2 3 bit = 8 K Byte 28
La mini-cpu PC CIR A B ALU Unità di Controllo DR AR 29
Formato delle istruzioni della mini-cpu Il codice operativo (obbligatorio) è di 4 bit Il campo operandi è di 12 bit Contiene un solo operando (un solo valore) È facoltativo: non tutte le istruzioni lo richiedono Può contenere direttamente un valore da elaborare (una costante) o l indirizzo di una cella della RAM che contiene il valore da elaborare (un riferimento a una variabile) FORMATO ISTRUZIONE: Operando Cod. operativo 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 1 30
Fasi del ciclo di CPU (preleva-esegui) Prelievo (o Fetch): PC contiene l indirizzo della prossima istruzione acquisizione prossima istruzione da memoria (con un ciclo di bus) (che viene scritta nel CIR, Registro Istr. Corrente) incremento del registro PC Decodifica: interpretazione del codice operativo (Unità di Controllo) Esecuzione: attivazione dell'esecuzione pertinente all istruzione: a) Operazioni di accesso alla RAM (load o store dei valori in A e B) b) Operazioni della ALU sugli operandi contenuti in A e B c) Operazioni di salto (modifica del flusso di esecuzione modificando PC) d) Input o Output di dati da/verso i terminali e) Operazioni di modifica del contenuto dei registri (costanti in A o B) f) 31
a b c d e f cod. bin. cod. simb. Semantica dell istruzione 0000 LOADA copia in A il valore contenuto nella RAM all indirizzo <op> 0001 LOADB copia in B il valore contenuto nella RAM all indirizzo <op> 0010 STOREA copia nella cella RAM di indir. <op> il valore che è in A 0011 STOREB pone nella cella RAM di indir. <op> il valore che è in B 0110 ADD la ALU calcola il valore di A + B e lo pone in A (non ha operando) 0111 DIF la ALU calcola il valore di A B e lo pone in A (non ha operando) 1010 JMP modifica PC (la prox istruz. da eseguire è quella all ind. <op>) 1011 JMPZ se A=0, modifica PC (la prox istr. da es. è quella di ind. <op>) 0100 READ (I/O) legge un valore e lo pone in RAM all ind. <op> 0101 WRITE (I/O) stampa il valore che è in RAM all indirizzo <op> 1000 LDCA pone in A la costante <op> (il valore numerico <op>) 1001 LDCB pone in B la costante <op> (il valore numerico <op>) 1100 HALT fine del programma (non ha operando) 1111 NOP istruzione nulla: nessun effetto [ha senso che esista] 32
Piccolo esempio di programma assembly indirizzo cod. simb. <op> 0 READ 8 1 READ 9 2 LOADA 8 3 LOADB 9 4 ADD - 5 STOREA 10 6 WRITE 10 7 HALT - 8 (un numero intero) 9 (un numero intero) 10 (un numero intero) Che cosa fa? Si noti che il primo valore letto si perde nel processore (sovrascritto per effetto della ADD) ma resta in memoria centrale (cella 8) 33
Un programma «più complesso» Esempio: calcolare l espressione (x + y) - (z + w) 1. Leggi da terminale e poni in RAM (rispettivamente nelle celle 16, 17, 18 e 19) i valori di x, y, z, e w 1. Per quattro volte: leggi un valore da terminale di input e copialo dal registro dati della periferica alle celle 16..19 2. esegui l addizione di z e w: 1. copia da cella 18 a registro A 2. copia da cella 19 a registro B 3. somma i due registri (operazione eseguita dalla ALU, che pone il risultato nel registro A) 3. Copia il risultato (che ora è nel registro A) in RAM (per metterlo al sicuro) nella cella di indirizzo 20 34
4. esegui l addizione di x e y: 1. copia da cella 16 a registro A; 2. copia da cella 17 a registro B; 3. somma i registri (operazione eseguita dalla ALU, che pone il risultato nel registro A); 5. esegui la sottrazione di (x + y) e (z + w): 1. copia da cella 20 a registro B (per recuperare il sottraendo, precedentemente calcolato al punto 2. ); 2. sottrai il contenuto dei due registri (operazione eseguita dalla ALU, che pone il risultato nel reg. A); 6. scrivi il risultato in output sul terminale: 1. copia da registro A a cella 20; 2. copia da cella 20 a registro dati della periferica (WRITE) 7. arresta l esecuzione del programma 35
Il programma in assembly 0-3: acquisizione dei dati 4-6: Somma Z+W 7: salvataggio in RAM del risultato intermedio 8-10: Somma X+Y 11: recupero del risultato intermedio 12-13: calcolo del risultato finale 14: output del risultato finale 16-20: spazio per contenere i dati 0 READ 16 1 READ 17 2 READ 18 3 READ 19 4 LOADA 18 5 LOADB 19 6 ADD 7 STOREA 20 8 LOADA 16 9 LOADB 17 10 ADD 11 LOADB 20 12 DIF 13 STOREA 20 14 WRITE 20 15 HALT 16...int... 17...int... 18...int... 19...int... 20...int... 36
Il programma in assembly 16-20: spazio per contenere i dati le cinque variabili simboliche X, Y, Z, W, RIS menzionate nel programma. Ognuna identifica una cella di memoria I nomi simbolici sono più comodi degli indirizzi, ma bisogna supporre che qualcuno (il compilatore!) gestisca la corrispondenza con un numero opportuno di celle allocate per rappresentare i dati 0 READ X 1 READ Y 2 READ Z 3 READ W 4 LOADA Z 5 LOADB W 6 ADD 7 STOREA RIS 8 LOADA X 9 LOADB Y 10 ADD 11 LOADB RIS 12 DIF 13 STOREA RIS 14 WRITE RIS 15 HALT X...int... Y...int... Z...int... W...int... RIS...int... 37
Il programma in linguaggio macchina indirizzi delle celle codici operativi operando significativo (indirizzo della cella RIS) operando non significativo 0. 0100000000010000 1. 0100000000010001 2. 0100000000010010 3. 0100000000010011 4. 0000000000010010 5. 0001000000010011 6. 0110000000000000 7. 0010000000010100 8. 0000000000010000 9. 0001000000010001 10. 0110000000000000 11. 0001000000010100 12. 0111000000000000 13. 0010000000010100 14. 0101000000010100 15. 1100000000000000 16.... 17.... 18.... 19.... 20....Valore di RIS... istruzioni dati 38
Come si regola il flusso di esecuzione? Il programma inizia sempre dalla prima istruzione, e prosegue fino a quando non incontra HALT Che cosa impedisce che i dati siano caricati al posto delle istruzioni? Che cosa succede se si tenta di "eseguire un dato"? È possibile che il programma si auto-modifichi, alterando le sue stesse istruzioni? Come? In un calcolatore reale, permettereste che questo accada? Come si può impedirlo? I calcolatori reali hanno meccanismi di protezione della memoria e utilizzano speciali convenzioni per memorizzare separatamente i dati e il codice 39
Il programma in C int main() { int x, y, z, w, ris; scanf("%d%d%d%d", &x, &y, &z, &w); ris = (x+y)-(z+w); printf("\n\n Il risultato e : %d", ris); return 0; } Notiamo che: il compilatore deve decidere quanto spazio allocare per le variabili (e dove allocarle prima o dopo le istruzioni?) La corrispondenza posizionale tra i %d e le variabili si traduce in un preciso ordine delle istruzioni READ in assembly 40
0 READ 18 x 1 READ 19 y 2 LDCA 0 3 STOREA 20 sp 4 LOADA 19 y 5 STOREA 21 ns 6 LOADA 20 sp 7 LOADB 18 x 8 ADD 9 STOREA 20 sp 10 LOADA 21 ns 11 LDCB 1 12 DIF 13 STOREA 21 ns 14 JMPZ 16 15 JMP 6 16 WRITE 20 sp 17 HALT 18...intero...(x)... 19...intero...(y)... 20...intero...(sp)... 21...intero...(ns)... Un altro esempio 0 READ 16 x 1 READ 17 y 2 LDCA 0 3 STOREA 18 sp 4 LOADA 18 sp 5 LOADB 16 x 6 ADD 7 STOREA 18 sp 8 LOADA 17 y 9 LDCB 1 10 DIF 11 STOREA 17 y 12 JMPZ 14 13 JMP 4 14 WRITE 18 sp 15 HALT 16...intero...( x )... 17...intero...( y )... 18...intero...(sp)... 0 READ x 1 READ y 2 LDCA 0 3 STOREA sp loop: LOADA sp 5 LOADB x 6 ADD 7 STOREA sp 8 LOADA y 9 LDCB 1 10 DIF 11 STOREA y 12 JMPZ end 13 JMP loop end: WRITE sp 15 HALT x...intero... y...intero... sp...intero... 41 [A] [B] [B] (vers. simbolica)
Prodotto di due interi positivi! 1 Leggi X 2 Leggi Y 3 SP = 0 4 NS = Y 5 SP = SP + X 6 NS = NS - 1 7 NS è uguale a 0? Se no: torna al passo 5 8 Scrivi SP [A] 1 Leggi X 2 Leggi Y 3 SP = 0 4 SP = SP + X 5 Y = Y - 1 6 Y è uguale a 0? Se no: torna al passo 4 7 Scrivi SP [B] 42