Architettura di un calcolatore e ciclo macchina Appunti per la classe 3 Dinf Il Sistema di Elaborazione Computer Hardware Software 2 Hardware Struttura fisica del calcolatore formata dai circuiti elettronici (chip) e tutto ciò che li fa funzionare. 3 Software • Componente del calcolatore costituita dai: – Programmi di base per la gestione del sistema – Programmi applicativi per l’uso del sistema 4 HARDWARE:RAPPRESENTAZIO NE SCHEMATICA CPU INPUT OUTPUT Istruzioni Dati MEMORIA 5 Collegamento Bus di sistema Unità di Elaborazione (CPU) Memoria Centrale Interfaccia Periferica P1 Esecuzione istruzioni Memoria di lavoro Interfaccia Periferica P2 Memoria di massa, 6 stampante, terminale… • Il processore estrae le istruzioni dalla memoria e le esegue – Le istruzioni possono comportare operazioni di manipolazione dei dati – Oppure operazioni di trasferimento dei dati • I trasferimenti di dati attraverso elementi funzionali diversi avvengono attraverso il bus di sistema • Le fasi di elaborazione si susseguono in modo sincrono rispetto ad un orologio di sistema • Durante ogni intervallo di tempo l’unità di controllo (parte del processore) stabilisce la funzione da svolgere • L’intera macchina opera in maniera sequenziale 7 CPU Preleva istruzione I/O Memoria Esegue Memorizza risultato BUS 8 COMPONENTI DELLA CPU • La CPU non è un unico componente ma è costituita da componenti diversi che svolgono compiti diversi Bus Interno REGISTRI Program Counter Registro di Stato Unità di controllo Registro Istruzioni … Unità aritmetico logica Registri Generali 8 o 16 Registro Indirizzi Memoria Registro Dati Memoria Registro di Controllo 9 Componenti del processore (CPU) Bus Interno REGISTRI Program Counter Registro di Stato Unità di controllo Registro Istruzioni … Unità aritmetico logica Registri Generali 8 o 16 Registro Indirizzi Memoria Registro Dati Memoria Registro di Controllo 10 Registri • I registri sono delle unità di memoria estremamente veloci • Sono usate per mantenere le informazioni di necessità immediata per il processore • Le dimensioni dei registri variano da 16, 32, 64 bit – Sono una parte fondamentale del processore 11 Registri • Per esempio: Program Counter – L’indirizzo della “prossima” istruzione da eseguire è memorizzato nel registro Program Counter • Per esempio: i Registri Generali – I registri che possono essere utilizzati come memorie temporanee per svolgere le operazioni matematiche 12 Componenti del processore (CPU) Bus Interno REGISTRI Program Counter Registro di Stato Unità di controllo Registro Istruzioni … Unità aritmetico logica Registri Generali 8 o 16 Registro Indirizzi Memoria Registro Dati Memoria Registro di Controllo 13 Unità di controllo • L’unità di controllo è la parte più importante del processore – Esegue le istruzioni dei programmi – Coordina le attività del processore – Controlla il flusso delle istruzioni tra il processore e la memoria 14 Unità di controllo • Svolge la sua attività in modo ciclico – Preleva dalla memoria principale la “prossima” istruzione da eseguire – Preleva gli operandi specificati nell’istruzione – Decodifica ed esegue l’istruzione – Ricomincia 15 Unità di controllo • L’esecuzione comporta l’invio di comandi opportuni all’unità relativa – Calcoli → Unità aritmetico logica – Lettura/scrittura dati → memoria – Acquisizione/stampa → dispositivi di I/O 16 Componenti del processore (CPU) Bus Interno REGISTRI Program Counter Registro di Stato Unità di controllo Registro Istruzioni … Unità aritmetico logica Registri Generali 8 o 16 Registro Indirizzi Memoria Registro Dati Memoria Registro di Controllo 17 Unità aritmetico logica • L’Unità aritmetico logica si occupa di eseguire le operazioni di tipo aritmetico/logico – Somme, sottrazioni, …, confronti, … • Preleva gli operandi delle operazioni dai Registri Generali • Deposita il risultato delle operazioni nei Registri Generali • Insieme all’unità di controllo collabora al completamento di un ciclo della macchina 18 Clock • Abbiamo visto che il processore svolga la sua attività in modo ciclico – Ad ogni ciclo corrisponde l’esecuzione di un’operazione elementare (un’istruzione macchina) • Il clock fornisce una cadenza temporale per l’esecuzione delle operazioni elementari • La frequenza del clock indica il numero di operazioni elementari che vengono eseguite nell’unità di tempo 19 Clock • La frequenza del clock si misura in: – MHz (1 MHz corrisponde circa a un milione di istruzioni elementari/battiti al secondo) – GHz (1 GHz corrisponde circa a un miliardo di istruzioni elementari/battiti al secondo) • Per esempio: se acquistate un calcolatore e vi dicono che ha un processore a 3 GHz – Vuol dire che il processore è in grado di eseguire (circa) 3 miliardi di istruzioni al secondo 20 Memoria principale (RAM) • Perchè si chiama RAM (Random Access Memory)? – Si può accedere direttamente alle varie celle, una volta noto il loro indirizzo – Il tempo necessario per accedere ad una cella è lo stesso, indipendentemente dalla posizione della cella nella sequenza – Il termine “random” (casuale) indica proprio il fatto che non vi sono differenze nell’accesso alle varie celle della memoria 21 Memoria principale (RAM) • Alcune proprietà della memoria principale – Veloce: per leggere/scrivere una cella ci vuole un tempo di accesso dell’ordine di poche decine di nanosecondi (millesimi di milionesimi di secondo = 10-9 sec.) – Volatile: è fatta di componenti elettronici, togliendo l’alimentazione si perde tutto – (Relativamente) costosa 22 Memoria principale (RAM) • Tutte le celle hanno la stessa dimensione: 8, 16, 32, o 64 bit • Le operazioni che si eseguono sulla memoria sono operazioni di lettura e scrittura • Una cella può contenere un dato o un’istruzione Indirizzi 0 1 2 3 4 5 N Contenuto 345 13.200.985 3.890 LOAD 3568 R1 LOAD 56 R1 ADD R1 R2 23 Memoria principale (RAM) • Ogni calcolatore usa un numero di bit costante per rappresentare gli indirizzi • Maggiore è il numero di bit usati, maggiore sarà il numero di celle indirizzabili: spazio di indirizzamento – Se si usano 16 bit per codificare gli indirizzi, si potranno indirizzare fino a 65.536 celle (circa 64 KB di memoria, nell’ipotesi di celle di memoria di 1 byte) – Con 32 bit si potranno indirizzare fino a 4.294.967.296 celle (circa 4 GB di memoria) 24 Memoria principale (RAM) • All’aumentare delle dimensioni della memoria principale aumenta il numero di programmi che possono essere “contemporaneamente” attivi • La RAM, fino ad un certo limite, è espandibile (slot di espansione) 25 La memoria centrale • Il numero di bit che costituiscono l’indirizzo di un word all’interno della memoria è caratteristico del microprocessore e identifica lo spazio di indirizzamento del microprocessore – Avendo a disposizione k bit è possibile indirizzare 2k byte • Si ricorda che: – – – – 210 byte = 1Kilo Byte 220 byte = 1Mega Byte 230 byte = 1 Giga Byte 240 byte = 1Tera Byte 26 Bus • Permette la comunicazione tra i vari componenti dell’elaboratore CPU RAM Interfaccia dati indirizzi controllo 27 Il bus di sistema • Il bus di sistema collega tra loro i vari elementi del calcolatore • In ogni istante il bus è dedicato a collegare due unità, una trasmette ed una riceve – Il processore seleziona la connessione da attivare e indica l’operazione da svolgere (bus mastering) • Il bus è suddiviso in tre insiemi di linee: – Bus dati – Bus indirizzi – Linee di controllo: trasportano informazioni relative alla modalità di trasferimento e alla temporizzazione 28 Sequenza di lettura Passo 3 PC INTR 0 Passo 1 Passo 4 2 SR A ALU B 123 123 CIR Ck 42 DR 42 CU 123 AR 1023 READ OK 29 Sequenza di scrittura Passo 2 PC INTR 0 Passo 1 Passo 5 3 SR A ALU B 123 123 CIR Ck 70 DR CU 70 42 Passo 4 123 AR 1023 WRITE OK 30 Le istruzioni macchina • Un programma scritto in linguaggio macchina è formato da una sequenza di istruzioni appartenenti al set di istruzioni del particolare processore • Ogni istruzione è formata da: – Un codice operativo – Zero o più operandi • Tanto il codice operativo quanto gli operandi sono rappresentati nella memoria del calcolatore sotto forma di numeri binari • Data la difficoltà per l’uomo di interpretare numeri binari si usa l’assembler al posto del linguaggio macchina codice operativo operando(i) 31 Le istruzioni macchina • Il set di istruzioni di un qualsiasi linguaggio macchina può essere diviso in quattro classi principali di istruzioni: – Istruzioni per il trasferimento dati tra memoria e registri del processore e viceversa – Operazioni aritmetiche e logiche sui dati – Istruzioni per il controllo del flusso di programma – Istruzioni per la gestione dell’I/ O 32 Forma binaria del programm 0100000000010000 0100000000010001 0100000000010010 0100000000010011 0000000000010000 0001000000010001 0110000000000000 0010000000010100 0000000000010010 0001000000010011 0110000000000000 0001000000010011 1000000000000000 0010000000010100 0101000000010100 1101000000000000 Leggi un valore dall’input e mettilo nella cella 16 (a) Leggi un valore dall’input e mettilo nella cella 17 (b) Leggi un valore dall’input e mettilo nella cella 18 (c) Leggi un valore dall’input e mettilo nella cella 19 (d) Carica il contenuto della cella 16 (a) nel registro A Carica il contenuto della cella 17 (b) nel registro B Somma i registri A e B Scarica il contenuto di A nella cella 20 (z) (ris.parziale) Carica il contenito della cella 18 (c) nel registro A Carica il contenito della cella 19 (d) nel registro B Somma i registri A e B Carica il contenuto della cella 20 (z) (ris. parziale) in B Moltiplica i registri A e B Scarica il contenuto di A nella cella 20 (z) (ris. totale) Scrivi il contenuto della cella 20 (z) (ris. totale) in output Halt 33 Programma in memoria centrale Cella 0 0100000000010000 Spazio riservato per a Spazio riservato per b Spazio riservato per c Spazio riservato per d Spazio riservato per z 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0100000000010001 0100000000010010 0100000000010011 0000000000010000 0001000000010001 0110000000000000 0010000000010100 0000000000010010 0001000000010011 0110000000000000 0001000000010011 1000000000000000 0010000000010100 0101000000010100 1101000000000000 34 Fase di fetch 1 istruzione Passo 1 Memoria centrale (MM) 0 0100000000010000 a Passo 2 PC 0000000001 0000000000 Passo 4 AR 0000000000 1023 DR 0100000000010000 Passo 3 CIR 0100000000010000 35 Fase di interpretazione 1a istruzione CIR 0100000000010000 Codice operativo 0100 = leggi da input 36 Fase di esecuzione 1a istruzione Memoria centrale (MM) Indirizzo operando 00000010000 = cella 16 CIR 0100000000010000 0 Passo 3 16 0001000000011111 Passo 1 AR 0000010000 1023 DR 0001000000011111 Passo 2 Valore di a letto dall’input (es. 4127) PDR 0001000000011111 37 CPU-Instruction Decoder and Control Esempio di Microprogramma associato all'istruzione di Somma del contenuto dell'accumulatore con il contenuto del MDR. Questa operazione può essere scomposta in sette passi elementari: 1. Trasferimento del contenuto dell'accumulatore sul bus dati interno alla CPU. 2. Trasferimento del contenuto del bus dati nella ALU. 3. Trasferimento del contenuto del MDR sul bus dati interno alla CPU. 4. Trasferimento del contenuto del bus dati nella ALU. 5. Attivazione della logica di somma. 6. Trasferimento del contenuto della ALU (risultato della somma) sul bus dati. 7. Trasferimento del contenuto della data bus nell'accumulatore (che conterrà il risultato della somma). 38 CPU - Fasi di Fetch e Execute In qualunque processore l'esecuzione di una generica istruzione avviene in due fasi differenti: la fase di ricerca (FETCH): consiste nel prelievo dalla memoria centrale dell'istruzione la fase di esecuzione (EXECUTE), caratterizzata dalla decodifica dell'istruzione e dall'attivazione del microprogramma ad essa associato. 39 CPU - Fasi di Fetch e Execute Esempio: Supponiamo che l'istruzione sia di somma fra il contenuto dell'accumulatore e il contenuto di una cella di memoria il cui indirizzo sia dato direttamente dalla parte operando dall'istruzione stessa. Supponiamo cioè che la cella di memoria contenente l'istruzione da eseguire sia strutturata come segue: codice istruzione indirizzo RAM del secondo operando 40 CPU - Fasi di Fetch e Execute Fase di ricerca (FETCH): 1. Il contenuto del Program Counter (PC) è relativo all’indirizzo di memoria che contiene l’istruzione. 2. Il contenuto del Program Counter è inviato al MAR (Memory Address Register) per operare il prelevamento dell'istruzione all'indirizzo di memoria contenuto nel MAR. 3. Il dato prelevato dalla memoria è riposto nel MDR (Memory Data Register). 4. Il contenuto del MDR, ossia l’istruzione, è messa nel Instruction Register per essere decodificata. 5. Il Program Counter viene incrementato per puntare all'istruzione successiva. 41 CPU - Fasi di Fetch e Execute Ha inizio a questo punto la fase di esecuzione (EXECUTE): 1. viene compreso che il secondo operando risiede in memoria 2. la parte dell’istruzione relativa all’indirizzo del secondo operando viene trasferita nel MAR 3. L'effettivo operando, prelevato dalla memoria è posto nel MDR. 4. L’operando viene presentato ad un ingresso della ALU. 5. All'altro ingresso dell'accumulatore. dell’ALU viene presentato il contenuto 6. L'ALU, predisposta dall'Instruction Register ad eseguire la somma, pone il suo risultato nell'accumulatore. La fase di esecuzione è terminata ed il processore prosegue con la fase di ricerca dell'istruzione successiva. 42 Esecuzione delle istruzioni • Ciclo Fetch–Decode–Execute (leggi–decodifica–esegui) 1. Prendi l’istruzione corrente dalla memoria e mettila nel registro istruzioni (IR). 2. Incrementa il program counter (PC) in modo che contenga l’indirizzo dell’istruzione successiva. 3. Determina il tipo dell’istruzione corrente (decodifica). 4. Se l’istruzione usa una parola in memoria, determina dove si trova. 5. Carica la parola, se necessario, in un registro della CPU. 6. Esegui l’istruzione. 7. Torna al punto 1 e inizia a eseguire l’istruzione successiva. 43 Ciclo Fetch–Decode–Execute Fetch Decode Execute 44 Fetch dell’istruzione 0000 PO CU R0 R1 R2 R3 SR 0001 RAM PC IR ALU ….. 0001 0001 ADD R3 R0 R1 0002 … … 0005 … 0009 … … … Address Bus Data Bus Control Bus PC (Program Counter): indirizzo IR (Instruction Register): di memoria della cella contenente l’istruzione da eseguire istruzione da eseguire dopo il fetch 45 Fetch dell’istruzione : IR ← M [PC] RAM CU R0 R1 R2 R3 SR 0001 0000 PO PC IR ALU ….. 0001 read! 0001 ADD R3 R0 R1 0002 … … 0005 … 0009 … … … Address Bus Data Bus Control Bus PC (Program Counter): indirizzo IR (Instruction Register): di memoria della cella contenente l’istruzione da eseguire istruzione da eseguire dopo il fetch 46 Fetch dell’istruzione 0001 R0 R1 R2 R3 SR 0002 ADD R3 R0 R1 0000 PO CU PC IR RAM ALU 0002 0002 … ….. … 0009 … … … Address Bus ADD R3 R0 R1 La CU incrementa automaticamente il PC (PC ← PC +1) … 0005 0001 read ADD R3 R0 R1 Data Bus Control Bus IR (Instruction Register): contiene l’istruzione da eseguire dopo il fetch 47 Decodifica dell’istruzione PO CU R0 R1 R2 R3 SR 0002 ADD R3 R0 R1 • PC IR ALU ….. L’istruzione dell’esempio non richiede altri accessi in memoria • La CU decodifica l’istruzione attraverso il codice operativo e trasmette alla PO gli ordini per eseguire l’operazione(microordini). • In assenza di interrupt o di salti sarà prelevato il contenuto 48 Esecuzione dell’istruzione PO CU SR 0003 ADD R3 R0 R1 3 4 R0 R1 R2 R3 PC IR 7 ….. ALU • La PO esegue l’operazione. • Le informazioni sullo stato dell’elaborazione sono memorizzate in SR (Status Register): flag Z (zero), V (overflow), N (negative), CY (carry). 49 Un esempio : ADD 2, R1 (fetch 1) Indirizzo della istruzione memoria Bus controllo 000..01 40 Bus indirizzo Bus dati 40 M A R M D R IC PC PSW Esegui Parte controllo Registro/i coinvolti R0 R1 R2 ... R16 codifica Operazione ALU Registri generali Esito Processore 50 Un esempio : ADD 2, R1 (fetch 2) Indirizzo della istruzione memoria Leggi! 41 40 000..01 IC 40 Bus indirizzo Bus dati PC PSW Esegui Parte controllo Registro/i coinvolti MAR M D R R0 R1 R2 ... R16 codifica Operazione ALU Registri generali Esito Processore 51 Un esempio : ADD 2, R1 (fetch 3) memoria 41 40 000..01 Operazione PC PSW Esegui 000110000100100001 IC Parte controllo Bus indirizzo Registro/i coinvolti MAR Bus dati MDR R0 R1 R2 ... R16 ALU Registri generali Esito Processore 52 Un esempio : ADD 2, R1 (dec) memoria 41 40 000..01 PC add PSW Esegui 000110000100100001 IC Parte controllo Bus indirizzo Registro/i coinvolti MAR Bus dati MDR R0 R1 R2 ... R16 ALU Registri generali Esito Processore 53 Un esempio : ADD 2, R1 (exe 1) memoria 41 40 000..01 PC add PSW Esegui 000110000100100001 IC Parte controllo Bus indirizzo Registro/i coinvolti MAR Bus dati MDR 00010 R1 R2 ... R16 ALU Registri generali Esito Processore 54 Un esempio : ADD 2, R1 (exe 2) memoria 41 40 000..01 PC add PSW Esegui 000110000100100001 IC Parte controllo Bus indirizzo Registro/i coinvolti MAR Bus dati MDR 00010 34 R2 ... R16 ALU Registri generali Esito Processore 55 Un esempio : ADD 2, R1 (exe 3) memoria 41 40 000..01 PC PSW 000110000100100001 IC Parte controllo Bus indirizzo Registro/i coinvolti MAR Bus dati MDR 00010 36 R2 ... R16 ALU Registri generali Esito Processore 56