Fondamenti d Informatica 1

Documenti analoghi
Architettura dei calcolatori

Note sull architettura del calcolatore

Architettura hardware

Architettura dei computer

Il modello di Von Neumann

La memoria principale

Le Memorie. Si distinguono per: Supporti sui quali le informazioni vengono fisicamente memorizzate.

Informatica giuridica

Informatica e Bioinformatica anno 2013/2014

Struttura dell elaboratore elettronico

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica

Esame di INFORMATICA Lezione 4

Richiami sull architettura del processore MIPS a 32 bit

Elementi di informatica

Informatica. Informazione L Informazione è un dato, o un insieme di dati, interpretati in un determinato contesto.

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Richiami sull architettura del processore MIPS a 32 bit

ARCHITETTURA DI UN ELABORATORE! Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).!

Il computer P R O F. L O R E N Z O P A R I S I

Architettura hardware

Componenti principali

Corso di Informatica

RIASSUNTO La codifica delle informazioni

INFORMATICA GENERALE

Architettura di un elaboratore. Il modello di von Neumann

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Architettura dei calcolatori

Componenti e connessioni. Capitolo 3

Algoritmo: procedimento non ambiguo che in un numero finito di passi risolve un problema (o una classe di problemi)

Elementi di informatica

Architettura di un calcolatore

Il bus. Bus di sistema: insieme di collegamenti (solitamente in rame) che connette tutti i componenti di un architettura

Architettura di Von Neumann. Architettura di Von Neumann. Architettura di Von Neumann INFORMATICA PER LE DISCIPLINE UMANISTICHE 2 (13042)

Struttura di un sistema di elaborazione. SDE: basi. Descrizione dei componenti (2) Descrizione delle componenti

Abilità Informa/che. capitolo 3. Prof. Fabio Calefato a.a Giurisprudenza

Criteri di caratterizzazione di una memoria

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica.

Architettura dei calcolatori. Architettura dei calcolatori. Cos'è un computer?

La memoria secondaria

G L O S S A R I O. Fondamenti di Informatica I - Università degli Studi di Trento Dott. Roberti Pierluigi

Lezione 15. L elaboratore Elettronico

Programma del corso. Introduzione Rappresentazione delle Informazioni Calcolo proposizionale Architettura del calcolatore Reti di calcolatori

Sistemi e reti CPU Concetti di base

Architettura di Von Neumann

Struttura di un elaboratore

La macchina di Von Neumann

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Il modello di von Neumann

La macchina di Von Neumann

Componenti di un processore

Il computer P R O F. L O R E N Z O P A R I S I

ARCHITETTURA DI UN ELABORATORE

Lezione 22 La Memoria Interna (1)

L architettura del calcolatore

aumenta il tempo di accesso; aumenta la capacità di memorizzazione; ma diminuisce il costo per bit.

Concetti Introduttivi

Modulo: Elementi di Informatica

La memoria secondaria

Capitolo 5 Elementi architetturali di base

Informatica e Bioinformatica

Mari, Buonanno, Sciuto Informatica e cultura dell informazione McGraw-Hill

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Architettura generale del calcolatore Hardware (tutto ciò che e tangibile) Software (tutto ciò che non e tangibile)

Il Processore: l unità di controllo

Corso di Fondamenti di Informatica Elementi di Architettura

Architettura del Calcolatore. Danilo Ardagna Politecnico di Milano

Il Modello di von Neumann (2) Prevede 3 entità logiche:

Programmazione A.A Architettura dei Calcolatori. ( Lezione V ) Componenti hardware e loro schema funzionale

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE

Sommario FONDAMENTI DI INFORMATICA. Architettura di Von Neumann. Algoritmi e programmi ESERCITAZIONE PYTHON ARCHITETTURA DEI CALCOLATORI

Il computer P R O F. L O R E N Z O P A R I S I

ARCHITETTURA DI UN CALCOLATORE ELETTRONICO

Architettura dei Calcolatori elettronici

Corso Programmazione

Organizzata secondo il modello della macchina di von Neumann definita nei tardi anni 40 all Institute for Advanced Study di Princeton.

Architettura del calcolatore. L Hardware. A.A Informatica 56

Lezione 1: L hardware

Appunti di informatica. Lezione 5 anno accademico Mario Verdicchio

Sistemi di numerazione

La CPU e la Memoria. Sistemi e Tecnologie Informatiche 1. Struttura del computer. Sistemi e Tecnologie Informatiche 2

Architettura di un calcolatore e ciclo macchina. Appunti per la classe 3 Dinf

Architettura degli Elaboratori

Sistemi di Elaborazione delle Informazioni

La memoria-gerarchia. Laboratorio di Informatica - Lezione 3 - parte I La memoria - La rappresentazione delle informazioni

Architettura del Calcolatore

Il Processore. Informatica di Base -- R.Gaeta 27

Elementi di informatica

Architettura dei Calcolatori Elettronici

Linguaggio Assembly e linguaggio macchina

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

Linguaggio Assembly e linguaggio macchina

Corso di Alfabetizzazione Informatica 2001/2002. La CPU. F. Tortorella Università degli Studi. di Cassino

Linguaggio Assembly e linguaggio macchina

Il linguaggio macchina

Macchina di von Neumann/Turing

Architettura dei calcolatori

L ARCHITETTURA DEI CALCOLATORI. Il processore La memoria centrale La memoria di massa Le periferiche di I/O

Pipeline. Esempio pipeline lineare a 5 stadi. Tempificazione S1 S2 S3 S4 S5. Istruzioni. Istruzione 4. Istruzione 3. Istruzione 2. tempo.

Transcript:

Fondamenti d Informatica 1 A.A. 2015/2016 Corsi di Laurea in Ing. Civile e Ing. per l Ambiente e il Territorio Docente: Giorgio Fumera Università degli Studi di Cagliari

Architettura dei calcolatori

Sommario Cenni storici L architettura di von Neumann Esempio di istruzioni eseguibili da un calcolatore (linguaggio macchina) Estensioni all architettura di von Neumann

Cenni storici I primi strumenti di calcolo: tacche su legno o ossa sassi ( calcolo : dal latino calculus = sassolino) abaco (c. XXVIII secolo a.c.)

Cenni storici Le prime macchine calcolatrici meccaniche: pascalina (B. Pascal, 1623 1662): addizioni e sottrazioni calcolatrici da ufficio (inizio 900)

Cenni storici Anni 30: primi calcolatori elettromeccanici, in grado di svolgere un solo tipo di calcolo, per es.: costruzione di tabelle di tiro per l artiglieria risoluzione di sistemi di equazioni lineari Procedimento (algoritmo) codificato nei meccanismi/circuiti: dati calcolatore (algoritmo) risultato

Cenni storici Anni 30: contributi dai matematici analisi dei procedimenti di calcolo algoritmi idea di macchina esecutrice automatica di algoritmi, programmabile (calcolatore universale) organizzazione logica di un calcolatore programmabile Alan M. Turing (1912-1954) John von Neumann (1903-1957)

Cenni storici Algoritmo: descrizione del procedimento per l esecuzione di una data operazione, espressa in modo non ambiguo, in un linguaggio comprensibile da un dato esecutore, in termini di una sequenza finita di azioni, ciascuna delle quali sia eseguibile dall esecutore. Macchina esecutrice di algoritmi: dati algoritmo calcolatore risultato

Cenni storici Anni 40: la tecnologia elettronica rende possibile la realizzazione di calcolatori programmabili. Alcuni dei primi calcolatori: Mark I (1944) ENIAC (1946) (calcolatore elettromeccanico) (il primo calcolatore elettronico)

Architettura di Von Neumann Organizzazione logica di un calcolatore programmabile (J. von Neumann, 1945). Unità centrale di elaborazione (Central Processing Unit, CPU) Dispositivi periferici (I/O devices) Memoria centrale (Main Memory) Unità logicoaritmetica (Arithmetic-Logic Unit, ALU) Unità di controllo (Control Unit, CU)...

La memoria centrale Un insieme di 2 k (potenza di due) celle o parole, identificate da un indirizzo numerico (a partire da 0), ciascuna in grado di memorizzare n bit (n multiplo di 8). bit indirizzo 0 1 2 3 cella (parola)...... 2 k -1 Funzione: memorizzare il programma in esecuzione e i dati che esso dovrà elaborare (codifica binaria). La memoria centrale è coinvolta in due tipi di operazioni con la CPU: lettura: copiare nella CPU il contenuto di una cella di memoria scrittura: scrivere un dato dalla CPU in una cella di memoria

Unità di misura della capacità di memoria bit: unità elementare d informazione byte: 8 bit Kilobyte (Kb): 2 10 = 1.024 byte Megabyte (Mb): 2 20 = 1.048.576 byte Gigabyte (Gb): 2 30 = 1.073.741.824 byte Terabyte (Tb): 2 40 = 1.099.511.627.776 byte Petabyte (Pb): 2 50 =... byte...

L unità centrale di elaborazione È composta da: unità logico-aritmetica (ALU): circuiti in grado di eseguire un piccolo insieme di operazioni logico-aritmetiche unità di controllo (CU): preleva dalla memoria centrale le istruzioni e i dati, coordina l esecuzione delle istruzioni registri: celle di memoria usate per memorizzare dati temporanei durante l esecuzione di una istruzione orologio di sistema (clock): emette impulsi periodici per sincronizzare le operazioni della CPU e della memoria centrale ALU CU

Il bus di sistema Dispositivo attraverso il quale i dati vengono trasferiti tra le componenti di un calcolatore (CPU, memoria, periferiche). È composto da linee di trasmissione, ciascuna capace di trasportare il valore di un singolo bit, suddivise in tre gruppi: bus dati (ampiezza pari a quella delle celle di memoria, n bit): trasporta dati e istruzioni bus indirizzi (2 k celle di memoria ampiezza: k bit): invia alla memoria centrale l indirizzo della cella sulla quale la CPU intende eseguire un operazione di lettura o scrittura bus controlli: invia alla memoria centrale e alle periferiche i segnali di controllo della CU che indicano quale operazione deve essere eseguita (per es., lettura o scrittura nella memoria centrale)

Architettura di un calcolatore CPU Main memory I/O devices ALU registri... R 0 R N-1 0 1......... SR 2 k -1 CU PC AR Address bus CIR DR Data bus Control bus

Registri della CPU Program Counter (PC) (k bit): in ogni istante contiene l indirizzo della prossima istruzione da eseguire Current Instruction Register (CIR) (n bit): in ogni istante contiene l istruzione in esecuzione Address Register (AR) (k bit): usato per memorizzare l indirizzo della cella di memoria sulla quale la CPU intende eseguire un operazione di lettura/scrittura Data Register (DR) (n bit): usato per memorizzare un dato da scrivere in memoria, o un dato letto dalla memoria Status Register (SR): i suoi bit memorizzano informazioni sull esito delle operazioni della CPU (per es., il tentativo di eseguire una divisione per zero, o un overflow) Registri di lavoro (R 0, R 1,..., R N 1 ) (n bit): usati per memorizzare gli operandi, il risultato e gli eventuali risultati intermedi durante l esecuzione di operazioni logico-aritmetiche

Programmi Sono costituiti da sequenze d istruzioni codificate in binario. Ogni istruzione è memorizzata in una cella di memoria (n bit). Codifica: codice operativo (p < n bit per codificare fino a 2 p istruzioni), e un numero variabile di operandi (n p bit). bit: 0 1... p 1......... n 1 OPCODE OP 1... OP m L architettura di Von Neumann prevede che: il calcolatore esegua un solo programma alla volta le istruzioni siano memorizzate in celle adiacenti le istruzioni vengano eseguite in sequenza dalla CPU, nello stesso ordine in cui sono memorizzate

Insieme di istruzioni eseguibili dalla CPU Una CPU è in grado di eseguire poche decine d istruzioni, la cui codifica binaria è detta linguaggio macchina. Tali istruzioni si suddividono in quattro categorie: elaborazione: operazioni logico-aritmetiche, eseguite dalla ALU (es.: somma, sottrazione, moltiplicazione, divisione, confronto tra numeri) memorizzazione: trasferimento di dati tra registri della CPU, o tra CPU e memoria centrale trasferimento (input/output, I/O): trasferimento di dati tra CPU e periferiche controllo del flusso di esecuzione dei programmi (istruzioni di salto ): consentono di modificare l ordine predefinito (sequenziale) di esecuzione delle istruzioni

Esecuzione delle istruzioni Ciascuna istruzione di un programma viene eseguita in tre fasi: prelievo (fetch): l istruzione viene trasferita (copiata) dalla memoria al registro CIR della CPU decodifica: la CU analizza il codice operativo esecuzione: la CU invia l opportuna sequenza di segnali di controllo alle componenti coinvolte nell esecuzione AVVIO AVVIO DEL DEL PROGRAMMA PROGRAMMA prelievo (fetch) decodifica esecuzione FINE FINE DEL DEL PROGRAMMA PROGRAMMA esecuzione di una istruzione

Avvio di un programma Si memorizza nel PC l indirizzo di memoria della prima istruzione CPU Main memory I/O devices ALU... R 0 R N-1 0 1......... SR 2 k -1 CU PC AR Address bus CIR DR Data bus Control bus

Esecuzione delle istruzioni: fase di prelievo 1. AR PC il contenuto del PC viene copiato nell AR CPU Main memory I/O devices ALU... R 0 R N-1 0 1......... 1 SR 2 k -1 CU PC AR Address bus CIR DR Data bus Control bus

Esecuzione delle istruzioni: fase di prelievo 1. AR PC il contenuto del PC viene copiato nell AR 2. CU READ M la CU chiede alla memoria un operazione di lettura CPU Main memory I/O devices ALU... R 0 R N-1 0 1......... SR 2 k -1 CU PC AR Address bus CIR DR 2 Data bus Control bus

Esecuzione delle istruzioni: fase di prelievo 1. AR PC il contenuto del PC viene copiato nell AR 2. CU READ M la CU chiede alla memoria un operazione di lettura 3. DR M[AR] il contenuto della cella il cui indirizzo si trova nell AR viene copiato del DR CPU Main memory I/O devices ALU... R 0 R N-1 0 1......... SR 2 k -1 CU PC CIR AR DR Address bus 3 Data bus Control bus

Esecuzione delle istruzioni: fase di prelievo 1. AR PC il contenuto del PC viene copiato nell AR 2. CU READ M la CU chiede alla memoria un operazione di lettura 3. DR M[AR] il contenuto della cella il cui indirizzo si trova nell AR viene copiato del DR 4. CIR DR il contenuto del DR viene copiato nel CIR CPU Main memory I/O devices ALU... R 0 R N-1 0 1......... SR 2 k -1 CU PC AR Address bus 4 CIR DR Data bus Control bus

Esecuzione delle istruzioni: fase di prelievo 1. AR PC il contenuto del PC viene copiato nell AR 2. CU READ M la CU chiede alla memoria un operazione di lettura 3. DR M[AR] il contenuto della cella il cui indirizzo si trova nell AR viene copiato del DR 4. CIR DR il contenuto del DR viene copiato nel CIR 5. PC PC +1 si memorizza nel PC l indirizzo della prossima istruzione CPU Main memory I/O devices ALU... R 0 R N-1 0 1......... 5 SR 2 k -1 CU PC AR Address bus CIR DR Data bus Control bus

Esecuzione delle istruzioni: fase di decodifica La CU analizza il codice operativo dell istruzione da eseguire CPU Main memory I/O devices ALU... R 0 R N-1 0 1......... SR 2 k -1 CU PC AR Address bus CIR DR Data bus Control bus

Esecuzione delle istruzioni: fase di esecuzione La CU invia l opportuna sequenza di segnali di controllo alle componenti coinvolte nell esecuzione dell istruzione. Esempio: elaborazione: registri di lavoro, ALU memorizzazione: registri AR e DR e memoria centrale, oppure registri di lavoro trasferimento: registro DR, una periferica controllo: registro PC e registri di lavoro

Architettura di una CPU: esempio Si assuma che un calcolatore abbia le seguenti caratteristiche: la memoria centrale contiene 2 k celle di ampiezza n = 32 bit codifica dei numeri: interi: complemento a due su n = 32 bit reali: virgola mobile (IEEE-754) su n = 32 bit la CPU contiene N = 32 registri di lavoro di n = 32 bit Le istruzioni del programma da eseguire e i dati da elaborare devono essere preliminarmente memorizzati ( caricati ) nella memoria centrale; anche i risultati dell elaborazione dovranno essere memorizzati nella memoria centrale. Le celle possono essere scelte dal programmatore, con l unico vincolo che le istruzioni devono trovarsi in celle adiacenti, nell ordine in cui dovranno essere eseguite.

Insieme di istruzioni della CPU Nella tabelle seguente sono rappresentate in forma simbolica alcune delle istruzioni eseguibili dalla CPU dell ipotetico calcolatore: otto istruzioni che corrispondono alle quattro operazioni aritmetiche principali: tra numeri interi: ADD, SUB, MUL, DIV tra numeri reali: ADDF, SUBF, MULF, DIVF quattro istruzioni di memorizzazione un istruzione di controllo

Insieme di istruzioni della CPU Istruzioni Operazione svolta ADD/ADDF $a, $b, $c $a $b + $c SUB/SUBF $a, $b, $c $a $b $c MUL/MULF $a, $b, $c $a $b $c DIV/DIVF $a, $b, $c $a $b : $c LOAD $a, m $a M[m] LOAD $a, $b $a M[$b] STORE $a, m M[m] $a STORE $a, $b M[$b] $a LOADI $a, x $a x MOVE $a, $b $a $b HALT conclusione del programma

Notazione e osservazioni $a indica un registro di lavoro (0 a 31), per es. $3 x indica un numero intero o reale m indica un indirizzo di memoria (0 m 2 k ) e M[m] la cella corrispondente (per es. M[15]) M[$b] indica la cella di memoria il cui indirizzo corrisponde al contenuto del registro $b (es.: se $3 contiene il valore 10, M[$3] indica la cella M[10]) A B indica il trasferimento (copia) del valore di B (il contenuto di un registro o di una cella di memoria, o il risultato di un operazione aritmetica) in A (un registro o un cella di memoria) (cont.)

Notazione e osservazioni (cont.) Le operazioni aritmetiche possono essere eseguite solo su valori che si trovino all interno dei registri di lavoro: tutti i dati da elaborare devono quindi essere caricati dalla memoria ai registri di lavoro (scelti dal programmatore) Il risultato di un operazione aritmetica è un numero dello stesso tipo (intero o reale) degli operandi. Esempi: ADDF $1, $2, $4 somma i valori (numeri reali codificati in virgola mobile) memorizzati nei registri 2 e 4, e memorizza il risultato (codificato in virgola mobile) nel registro 1 DIV $5, $8, $7 calcola il quoziente (intero) della divisione tra i valori memorizzati nei registri 8 e 7 (numeri interi in complemento a due), e lo memorizza nel registro $5, codificandolo in complemento a due

Programmi eseguibili dalla CPU: un esempio Quello che segue è un esempio di programma eseguibile dalla CPU considerata, espresso nel linguaggio macchina di tale CPU: scopo del programma è calcolare e memorizzare nella cella 0 il valore dell espressione a + b c + d, dove a, b, c e d indicano numeri interi che si assume siano memorizzati nelle celle 1, 2, 3 e 4 si assume che il programma sia memorizzato a partire dalla cella di indirizzo 10; il numero a sinistra di ogni istruzione indica l indirizzo della cella nella quale tale istruzione deve essere memorizzata i valori a, b, c e d vengono memorizzati nei registri da $1 a $4, i risultati intermedi nei registri $5 e $6, e quello finale nel registro $7, dal quale viene trasferito nella cella 0 10 LOAD $1, 1 11 LOAD $2, 2 12 LOAD $2, 3 13 LOAD $4, 4 14 ADD $5, $1, $2 15 SUB $6, $5, $3 16 ADD $7, $6, $4 17 STORE $7, 0 18 HALT

Esercizi 1. Scrivere un programma, memorizzato a partire dalla cella di indirizzo 3, che calcoli il resto della divisione tra due numeri interi memorizzati nelle celle di indirizzo 0 e 1, e memorizzi il risultato nella cella di indirizzo 2 2. Scrivere un programma, memorizzato a partire dalla cella 2, che calcoli il valore assoluto di un numero intero memorizzato nella cella 0, e memorizzi il risultato nella cella 1

Esercizi 3. Scrivere un programma, memorizzato a partire dalla cella 4, che risolva un equazione di primo grado della forma ax + b = 0, tenendo conto anche del caso a = 0. I valori dei coefficienti a e b si trovano rispettivamente nelle celle di memoria 0 e 1. Se a 0, il risultato ( b a ) deve essere scritto nella cella 2. Nella cella 3 deve invece essere memorizzato il valore 0 se a = 0 (per indicare che la soluzione non esiste) oppure il valore 1 se a 0 4. Scrivere un programma, memorizzato a partire dalla cella 11, che calcoli la somma di dieci numeri reali memorizzati nelle celle di indirizzo da 0 a 9, e memorizzi il risultato nella cella 10

Soluzione 1. Le operazioni che l ipotetica CPU è in grado di eseguire non comprendono il calcolo del resto di una divisione tra interi. Tale valore deve quindi essere ottenuto con un opportuna sequenza delle operazioni disponibili. Una soluzione consiste nel calcolare il resto tra p e q come p p q q, dove l operatore indica la parte intera del suo argomento. Nel programma seguente si è scelto di memorizzare i due operandi nei registri 0 e 1, e i risultati intermedi e quello finale nei registri dal 2 al 4. 3 LOAD $0, 0 4 LOAD $1, 1 5 DIV $2, $0, $1 6 MUL $3, $2, $1 7 SUB $4, $0, $3 8 STORE $4, 2

Soluzione Non è difficile rendersi conto che le elaborazioni richieste dagli esercizi 2 e 3 non possono essere svolte usando le quattro operazioni aritmetiche eseguibili dall ipotetica CPU. Sia il procedimento (algoritmo) per il calcolo del valore assoluto di un numero che quello per la risoluzione di un equazione di primo grado richiedono l esecuzione di diverse sequenze di operazioni, a seconda del verificarsi o meno di una certa condizione (il fatto che il numero sia negativo o meno nel primo caso, e il fatto che il coefficiente a sia uguale o diverso da zero nel secondo caso). In altre parole, in entrambi i casi è necessario che la CPU, in un certo punto del programma, sia in grado di scegliere la prossima istruzione da eseguire tra due possibili alternative, invece che proseguire l esecuzione in modo strettamente sequenziale. Questo è reso possibile dalle istruzioni di controllo ( salto ). Quattro possibili istruzioni di controllo sono mostrate di seguito.

Istruzioni di controllo Istruzioni BEQ/BEQF $a, $b, m BNE/BNEF $a, $b, m BLT/BLTF $a, $b, m JUMP m Operazione svolta se $a = $b, salta alla cella m se $a $b, salta alla cella m se $a < $b, salta alla cella m salta alla cella m Le prime tre istruzioni fanno sì che, se una data condizione si verifica, la prossima istruzione che verrà eseguita non sia quella che si trova nella cella di memoria successiva, ma quella che si trova nella cella di indirizzo pari a m (salto condizionato). Il salto viene eseguito: se i registri $a e $b contengono lo stesso valore (BEQ/BEQF: Branch if EQual) se contengono valori diversi (BNE/BNEF: Branch if Not Equal) se il contenuto di $a è minore di quello di $b (BLT/BLTF: Branch if Less Than) L istruzione JUMP consente invece di eseguire un salto incondizionato.

Soluzione 2. Una possibile soluzione: se il numero è negativo, il suo valore assoluto si ottiene moltiplicandolo per 1, altrimenti coincide con il numero stesso. Si può quindi usare l istruzione BLT per confrontare il numero con zero. A questo scopo il valore zero deve prima essere caricato in un registro di lavoro (con LOADI), dato che le istruzioni di salto condizionato operano solo su valori contenuti all interno di registri. 2 LOAD $0, 0 3 LOADI $1, 0 4 BLT $0, $1, 7 5 STORE $0, 1 6 HALT 7 LOADI $2, 1 8 MUL $3, $0, $2 9 STORE $3, 1 10 HALT

Soluzione 3. Una possibile soluzione (se a = 0 vengono eseguite le istruzioni 7 9, altrimenti le istruzioni 10 16): 3 LOAD $0, 0 4 LOAD $1, 1 5 LOADI $2, 0.0 6 BNE $0, $2, $10 7 LOADI $3, 0 8 STORE $3, 3 9 HALT 10 LOADI $2, 1.0 11 MULF $4, $2, $1 12 DIVF $5, $4, $0 13 LOADI $3, 1 14 STORE $3, 3 15 STORE $5, 2 16 HALT

Soluzione 4. Una possibile soluzione: si caricano in un registro ($4), uno alla volta, i valori delle celle 0 9, e si memorizza in un altro registro ($3) la somma (parziale) dei valori già analizzati. Ad ogni passo si deve quindi quindi sommare il contenuto dei registri $4 e $3, e memorizzare il risultato ancora in $3. Il valore iniziale di $3 deve essere 0. Questo si può ottenere eseguendo per ogni valore da sommare due istruzioni: il caricamento di un nuovo valore in $4, e la sua somma con $3: 11 LOADI $3, 0.0 12 LOAD $4, 0 13 ADDF $3, $3, $4 14 LOAD $4, 1 15 ADDF $3, $3, $4... (cont.) 28 LOAD $4, 8 29 ADDF $3, $3, $4 30 LOAD $4, 9 31 ADDF $3, $3, $4 32 STORE $3, 10 33 HALT

Soluzione (cont.) Per ogni valore da sommare la soluzione precedente richiede l esecuzione di una sequenza di (due) istruzioni molto simili: l unica differenza è l indirizzo della cella dalla quale caricare il prossimo addendo (evidenziato in rosso). Questa soluzione porterebbe a scrivere programmi di lunghezza eccessiva se il numero di addendi fosse alto. Una soluzione migliore si può ottenere usando le istruzioni di salto condizionato, in modo tale che sia possibile scrivere una sola volta la sequenza d istruzioni da ripetere. Questo è reso possibile dall istruzione LOAD, che consente di caricare il contenuto di una cella di memoria il cui indirizzo sia memorizzato in un registro. (cont.)

Soluzione (cont.) Questa possibilità può essere sfruttata memorizzando in un registro ($0) l indirizzo della cella da cui prelevare il prossimo addendo, e incrementando di un unità, ad ogni passo, il contenuto di $0. Le stesse istruzioni di prelievo di un addendo e di somma vengono ripetute finchè il contenuto di $0 è minore di 10. Notare che la lunghezza di questo programma non dipende dal numero di addendi. 11 LOADI $0, 0 12 LOADI $1, 10 13 LOADI $2, 1 14 LOADI $3, 0.0 15 LOAD $4, $0 16 ADDF $3, $3, $4 17 ADD $0, $0, $2 18 BLT $0, $1, 15 19 STORE $3, 10 20 HALT

Evoluzione dei calcolatori Evoluzione della tecnologia elettronica: valvole termoioniche (1945 1955) transistor (1955 1965) circuiti integrati (1965 1980) circuiti ad alta densità di integrazione (1980 oggi) Principali conseguenze: diminuzione delle dimensioni, del consumo energetico, del costo di fabbricazione incremento del numero di transistor per unità di superficie, della velocità di elaborazione, della capacità dei dispositivi di memoria estensione dei campi di applicazione dei calcolatori

Estensioni all architettura di von Neumann L architettura di von Neumann ha subìto nel corso degli anni diverse modifiche, legate all evoluzione dei calcolatori e all esigenza di incrementare le loro prestazioni. Le sue limitazioni principali sono le seguenti: esecuzione sequenziale delle istruzioni di un programma, anche se alcune di esse potrebbero essere eseguite in parallelo necessità di prelevare le istruzioni (e i dati da elaborare) dalla memoria centrale: tale operazione richiede tempi superiori rispetto all esecuzione di una istruzione logico-aritmetica

Estensioni all architettura di von Neumann Alcuni dei fattori che determinano la velocità di elaborazione dei calcolatori sono i seguenti: frequenza dell orologio di sistema (clock) complessità delle istruzioni ampiezza dei registri, del bus dati e del bus indirizzi capacità della memoria tempo d accesso alla memoria Principali modifiche all architettura di von Neumann: introduzione di diversi dispositivi di memoria modifica della struttura della CPU per introdurre la possibilità di esecuzione parallela di più istruzioni uso di più CPU in grado di eseguire istruzioni in parallelo

Il sistema di memoria Caratteristiche principali di un dispositivo di memoria: capacità (possibilmente elevata) costo per bit (possibilmente basso) tempo di accesso (possibilmente basso) dimensioni (possibilmente ridotte) consumo di energia (possibilmente basso) memorizzazione permanente o meno dei dati possibilità di trasporto tra diversi calcolatori... Nessun dispositivo fisico può però raggiungere un compromesso accettabile tra le diverse caratteristiche.

Gerarchia di memorie La soluzione consiste nell uso di più dispositivi di memoria con caratteristiche diverse, determinate dal seguente compromesso: un tempo d accesso inferiore può essere ottenuto solo a spese di un maggiore costo per bit un maggiore costo per bit impone una capacità inferiore I diversi dispositivi introdotti nel corso degli anni, in aggiunta alla memoria centrale, costituiscono quindi una gerarchia di memorie, ordinate per valori crescenti o decrescenti delle tre caratteristiche indicate sopra: registri della CPU memoria cache memoria centrale memoria secondaria (outboard storage) memoria terziaria (off-line storage)

Gerarchia di memorie costo per bit capacità tempo d'accesso

La memoria centrale Principale requisito: tempo d accesso confrontabile con il tempo di esecuzione di un istruzione di elaborazione da parte della CPU (ogni istruzione deve essere prelevata dalla memoria centrale). Per soddisfare tale requisito: tecnologia elettronica (come per la CPU) elevato costo per bit bassa capacità volatilità: il contenuto della memoria viene perso in assenza di alimentazione elettrica (allo spegnimento del calcolatore)

La memoria cache Negli anni il tempo d esecuzione delle istruzioni di elaborazione da parte della CPU è diminuito più rapidamente del tempo d accesso alla memoria centrale. Soluzione: introduzione della memoria cache (tecnologia elettronica) tra CPU e memoria centrale, caratterizzata da: tempo d accesso inferiore rispetto alla memoria centrale costo per bit maggiore capacità inferiore

Funzionamento della memoria cache Viene usata per memorizzare un sottoinsieme di istruzioni e dati del programma in esecuzione, per permettere alla CPU di poter accedere spesso ad essa invece che alla memoria centrale: se l istruzione o il dato richiesto dalla CPU si trova nella cache ( hit ), il tempo d accesso è quello della cache in caso contrario ( miss ), un blocco di celle della memoria centrale che lo contiene viene copiato nella cache (sostituendo il contenuto precedente) Questo consente di avere una capacità pari a quella della memoria centrale, e un tempo d accesso molto vicino a quello della cache.

Tempo d accesso alla memoria centrale/cache Tempo d accesso alla memoria centrale: T m Tempo d accesso alla cache: T c (< T m ) Probabilità che il dato richiesto dalla CPU si trovi nella cache: h [0, 1] (di norma h 1) Tempo d accesso del sistema cache + memoria centrale: T = ht c + (1 h)(t c + T m ) = T c + (1 h)t m T c

La memoria secondaria La volatilità e la bassa capacità della memoria centrale rendono necessaria l introduzione di dispositivi di memoria secondaria caratterizzati da: non volatilità capacità elevata basso costo per bit alto tempo d accesso Soluzione: nastri magnetici dischi magnetici (hard disk) recentemente: memorie in tecnologia elettronica (solid state drive, SSD)

Dischi magnetici Diversi dischi rigidi ricoperti da un materiale magnetizzabile, in grado di ruotare insieme intorno a uno stesso asse A una piccola distanza dalla superficie (superiore e inferiore) di ogni disco, una testina di lettura/scrittura è in grado di muoversi lungo un braccio meccanico fisso La testina può rilevare lo stato di magnetizzazione della superficie (lettura), e alterarlo (scrittura)

Dischi magnetici I dati (bit, codificati con due diversi stati di polarizzazione magnetica) vengono memorizzati lungo tracce concentriche sulla superficie di ogni disco ( 500 2000 tracce per facciata) Ogni traccia è suddivisa in più settori ( 10 100 settori per traccia) Ogni settore contiene alcune centinaia di byte (per es., 512)

Dischi magnetici Il tempo d accesso è maggiore di diversi ordini di grandezza rispetto a quello della memoria centrale, a causa della presenza di componenti meccaniche in movimento: velocità di rotazione dei dischi: 5.400 7.200 giri al minuto tempo di posizionamento (spostamento della testina sulla traccia desiderata): 1 20 ms tempo di latenza (tempo di rotazione necessario affinché il settore desiderato passi sotto la testina): 5 10 ms Velocità di trasferimento dei dati attraverso il bus dati: 10 2 MB/sec.

La memoria terziaria Poiché la memoria centrale è volatile, quella secondaria deve essere sempre connessa al bus di sistema. Per consentire il trasferimento di dati tra diversi calcolatori si usano dispositivi di memoria terziaria con caratteristiche simili a quelle della memoria secondaria, ma facilmente rimuovibili: nastri magnetici dischi magnetici flessibili (floppy disk) dischi magnetici rigidi (hard disk esterni ) dischi ottici (CD-ROM, CD-RW, DVD) memorie elettroniche (per es., USB flash drive)

Modifiche all unità di elaborazione Per aumentare la velocità di esecuzione dei programmi sono state introdotte nel corso degli anni modifiche all architettura della CPU che consentono l esecuzione parallela di più istruzioni: architetture pipeline CPU superscalari CPU multi-core

CPU: architetture pipeline Ogni istruzione viene eseguita attraverso una sequenza di un certo numero di passi, ciascuno dei quali coinvolge solo alcune componenti della CPU. Esempio (s = 5 passi): È quindi possibile eseguire in parallelo fino a s istruzioni: in ogni istante, ciascuna si troverà in una fase di esecuzione diversa:

Bus di sistema e dispositivi periferici Il bus di sistema è condiviso da tanti dispositivi periferici caratterizzati da velocità di trasferimento dei dati molto diverse. Esempio (velocità di trasferimento espressa in bit/secondo):

Bus di sistema e dispositivi periferici Problemi: congestione del bus di sistema, conflitti tra diverse periferiche, rischio che le periferiche più veloci monopolizzino il bus a scapito di quelle più lente. Soluzioni: interfacce fisiche standard per la connessione dei dispositivi al bus (per es., USB) controllori di I/O: dispositivi che gestiscono il trasferimento dei dati da/verso le periferiche tecniche di arbitraggio del bus organizzazione gerarchica del bus su più livelli, ai quali vengono connesse periferiche con diverse velocità di trasferimento dei dati