Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico: 2007-2008 Architettura dei computer • Un computer deve: – elaborare l’informazione • usando il processore (Central Processing Unit CPU) – memorizzare l’informazione • usando la memoria principale (RAM) • usando la memoria secondaria – fare l’input/output dell’informazione • usando i dispositivi di input/output I programmi e i dati • Programmi: – Questa lezione: i programmi dal punto di visto dell’hardware – I programmi: sequenze di istruzioni per l’elaborazione delle informazione • Definiscono quale debba essere il comportamento del processore • I computer eseguono deterministicamente istruzioni • Dati: – Distinzione tra dato e informazione: • Dato: sequenza di bit, può essere interpretato in più modi diversi • Informazione: dato + significato del dato I programmi e i dati • I programmi e i dati risiedono nella memoria secondaria Processore Stampante Memoria principale Memoria secondaria I programmi e i dati • I programmi e i dati risiedono nella memoria secondaria • Per essere eseguiti (i programmi) e usati (i dati) vengono copiati nella memoria principale Processore Stampante Memoria principale Memoria secondaria I programmi e i dati • I programmi e i dati risiedono nella memoria secondaria • Per essere eseguiti (i programmi) e usati (i dati) vengono copiati nella memoria principale • Il processore è in grado di eseguire le istruzioni di cui sono composti i programmi Processore Stampante Memoria principale Memoria secondaria Istruzioni macchina • Per ogni tipo di processore è associato un insieme di istruzioni, chiamate istruzioni macchina – Ognuna delle quali corrisponde ad un’operazione elementare – Le operazione più complesse possono essere realizzate mediante sequenze di operazioni elementari • Combinando in modo diverso sequenze anche molto lunghe di istruzioni si possono far svolgere al computer molti compiti diversi Istruzioni macchina • Tre tipi di istruzioni macchina: – Istruzioni aritmetico-logiche: • Per esempio, la somma di due numeri, il confronto tra due numeri per stabilire se essi sono uguali • Bisogna indicare dove si trovano i dati su cui operare – Istruzioni di trasferimento dati: • Indicano quali dati trasferire e in quale direzione • Per esempio, dalla memoria al CPU o vice versa, dall’esterno all’interno (input) o vice versa (output) • Anche bisogna indicare dove si trovano i dati su cui operare – Istruzioni di controllo: • Permettono modificare il flusso di esecuzione delle istruzione (per esempio, sulla base di eventi esterni o risultati intermedi ottenuti dalle istruzioni precedenti) Istruzioni macchina • Tre tipi di istruzioni macchina: – Istruzioni aritmetico-logiche: • • • • add: addizione sub: sottrazione and/or/not: congiunzione/disjunzione/negazione logica … A B A and B A B A or B A not A 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 Istruzioni macchina • Tre tipi di istruzioni macchina: –… – Istruzioni di trasferimento dati: • load: leggere dalla memoria principale • store: scrivere alla memoria principale • … – Istruzioni di controllo: • if_eq: se una condizione è vero, proseguire in un certo modo, altrimenti proseguire in un altro modo • goto: saltare a un’istruzione • … Istruzioni macchina • Le istruzioni possono avere formati diversi - per esempio: Codice istruzione oppure cosa fare Codice istruzione oppure cosa fare Codice istruzione Argomento 1 Argomento 2 su cosa operare Argomento 1 Argomento 2 su cosa operare Argomento 1 Argomento 3 Istruzioni macchina • Per esempio: Codice istruzione Argomento 1 Argomento 2 Argomento 3 • ADD R1 R2 R3 – Recuperare i valori memorizzati nei registri R2 e R3 e inserire il risultato della somma dei valori nel registro R1 – Si nota che i valori nei registri possono cambiare da un’esecuzione all’altra (riferimenti indiretti) (Che cosa un registro? Vedremo…) Istruzioni macchina • Per esempio: Codice istruzione Argomento 1 Argomento 2 • LOAD 3568 R2 – Operazione di lettura dalla memoria: richiede la lettura del valore contenuto nella cella con indirizzo 3568 e il suo caricamento nel registro R2 (Che cosa un registro? Vedremo…) Istruzioni macchina • Per esempio: Codice istruzione Argomento 1 Argomento 2 • ADD R1 R2 – Operazione aritmetica di somma: prevede la somma del contenuto dei registri R1 e R2 e il caricamento del risultato nel registro R1 (Perché R1 non R2? Non c’è una ragione: la decisione è arbitraria) Linguaggio macchina • Il linguaggio in cui si scrivono le istruzione macchina istruzioni prende il nome di linguaggio macchina – Una sequenza di tali istruzioni prende il nome di programma in linguaggio macchina • Il ruolo del processore: – Eseguire programmi in linguaggio macchina • Ogni tipo di processore è in grado di eseguire un numero (molto) limitato di istruzioni macchina – Normalmente circa una centinaia I programmi e i processori • Istruzioni visti dal computer: – Il formato dell’oggetto binario (sequenze di bit che corrisponde alla codifica delle istruzioni di un programma) è l’unico che il computer può interpretare 10001111 10101010 00000011 11001100 10101011 11111110 11001111 00000110 00000100 00000111 11000101 10111001 11111101 01011111 11001111 00101011 ADD R1 R2 R3 I programmi e i processori • Istruzioni visti dai programmatori: – I programmatori dei computer non scrivono i programmi direttamente usando le istruzioni macchina – I programmatori scrivono i programmi in linguaggi di un alto livello di astrazione: i linguaggi di programmazione a alto livello • Per esempio, Java o C – Un singolo commando di un linguaggio di programmazione può corrispondere a più istruzione macchina I programmi e i processori • Tre forme principali di codifica dei programmi: – Linguaggio binario: i programmi sono codificati in formato binario – Linguaggio assembler: rappresenta le istruzioni macchina usando lettere e numeri (per esempio, ADD R1 R2 R3) – Linguaggi di programmazione di alto livello (per esempio, Java o C): • Livello di astrazione più alto rispetto a linguaggio assembler o linguaggio binario, usato dai programmatori dei computer I programmi e i processori Linguaggio di programmazione totale = num1 + num2; compila Linguaggio assembler … ADD R1 R2 R3 … assembla Linguaggio binario 00101000 10100000 00001111 10101010 00101000 10100000 I programmi e i processori Linguaggio di programmazione: esempio di un programma (codice scritto in Java) I programmi e i processori • Famiglie di processori: Intel, Motorola, Sun, … • Processori della stessa famiglia normalmente possono eseguire gli stessi programmi scritti in linguaggio macchina (ma non sempre) • Processi di famiglie diverse normalmente non possono eseguire gli stessi programmi scritti in linguaggio macchina – Le istruzioni che “capiscono” sono diverse • Attenzione! Stiamo considerando il livello delle istruzioni macchina (non il livello dei linguaggi di programmazione, come Java o C) – La stessa programma scritto in un linguaggio di programmazione di alto livello può essere eseguito su processi di famiglie diverse (è un vantaggio del uso dei linguaggi di programmazione a alto livello) Componenti del processore (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 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 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 Unità di controllo • Svolge la sua attività in modo ciclico (implementa il ciclo macchina) • Fetch istruzione (preleva dalla memoria principale la “prossima” istruzione da eseguire) • Decodifica istruzione • Fetch dati (preleva gli operandi specificati nell’istruzione) • Esecuzione istruzione • Restituzione risultato 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 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 Bus • Bus interno: permette la comunicazione tra i componenti del processore • Bus esterno: permette la comunicazione tra il processore e gli altri componenti dell’elaboratore CPU RAM Interfaccia dati indirizzi controllo Bus RAM CPU Bus Interno REGISTRI Unità di controllo … Unità aritmetico logica … 1000 LOAD 4809 R2 1001 LOAD 3568 R1 1002 ADD R1 R2 1003 STORE R1 3568 1004 GOTO 1001 … 3568 25 … 4809 30 … Interfaccia 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 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 Registri • Per esempio: Program Counter – L’indirizzo della “prossima” istruzione da eseguire è memorizzato nel registro Program Counter • Normalmente le istruzioni di un programma sono memorizzati in sequenza nella memoria principale • Il Program Counter deve essere aumentato (di 1) ogni ciclo (in modo tale che corrisponde all’indirizzo della prossima istruzione da eseguire) • Eccezione: istruzione di controllo (per esempio, “salti” da un’istruzione a un’altra usando goto) • Per esempio: i Registri Generali – I registri che possono essere utilizzati come memorie temporanee per svolgere le operazioni matematiche 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 Unità aritmetico logica • L’Unità aritmetico logica (ALU) 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 macchina 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 Clock • Consideriamo una ipotesi semplificata: ogni battito di clock corrisponde esattamente l’esecuzione di una sola istruzione macchina – Per esempio: il clock che ha circa 66 milione battiti per secondo il computer può eseguire circa 66 milione operazioni per secondo • In realtà, questa ipotesi non è sempre vero – L’esecuzione di una istruzione può richiedere più battiti di clock – Oppure nello stesso ciclo di clock si possono eseguire (parti) di istruzioni diverse – Dipende dal tipo di processore - per esempio: • Il processore Intel 80286 richiede 20 battiti del clock per calcolare la moltiplicazione di due numeri • Il processore Intel 80486 può calcolare la moltiplicazione di due numeri usando solo un battito del clock 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 • Esempi: – Pentium 4 – 3,0 – 3,8 GHz – Athlon 64 FX-SOI – 2,2 – 2,8 GHz – Pentium 4M (Centrino) – 1,6 – 2,4 GHz