Architetture dei calcolatori elettronici

48
Una breve introduzione 06/10/2012 Matteo Ceserani

Transcript of Architetture dei calcolatori elettronici

Page 1: Architetture dei calcolatori elettronici

Una breve introduzione

06/10/2012 Matteo Ceserani

Page 2: Architetture dei calcolatori elettronici

Tutto ciò che segue è ESTREMAMENTE

semplificato…

06/10/2012 Matteo Ceserani

Page 3: Architetture dei calcolatori elettronici

I dati in ingresso e i risultati delle

elaborazioni in uscita sono sempre codificati

in binario come stringhe di bit (0/1)

ELABORATORE

Informazione in ingresso

Dati

Informazione in uscita

Risultati

06/10/2012 Matteo Ceserani

Page 4: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Page 5: Architetture dei calcolatori elettronici

Un calcolatore elettronico è un complesso circuito per l’elaborazione automatica dell’ informazione.

La CPU (o le CPU) è il cuore del sistema, svolge nei fatti le operazioni che costituiscono l’elaborazione.

La memoria di sistema serve per memorizzare i dati e i risultati dell’elaborazione.

Sempre la memoria di sistema contiene il codice delle istruzioni da eseguire sui dati (programmi)

Le periferiche di I/O ricevono i dati dall’esterno (Input) e forniscono in uscita i risultati dell’elaborazione (Output).

I diversi elementi sono collegati attraverso un insieme di linee elettriche che prendono complessivamente il nome di bus di sistema.

06/10/2012 Matteo Ceserani

Page 6: Architetture dei calcolatori elettronici

Che tipo di operazioni è in grado di svolgere

una CPU?

Aritmetica intera

Logica delle proposizioni

Aritmetica decimale

Altre operazioni binarie

Rotazioni di bit

Swap

Istruzioni speciali

SIMD

06/10/2012 Matteo Ceserani

Page 7: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Page 8: Architetture dei calcolatori elettronici

L’esempio sopra riportato si riferisce a un

microprocessore molto semplice

Un microcontrollore

31 istruzioni

Nella figura precedente ci sono quasi tutte

Prendiamo l’instruction set reference della

architettura Intel a 32 bit

978 pagine

Circa 340 istruzioni

Alcune davvero sofisticate

06/10/2012 Matteo Ceserani

Page 9: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Page 10: Architetture dei calcolatori elettronici

Programmare

Innanzitutto

occorre

progettare il

funzionamento

del

programma

dal punto di

vista logico

Es. diagrammi

di flusso

06/10/2012 Matteo Ceserani

Page 11: Architetture dei calcolatori elettronici

Programmare

Si sceglie quindi

un linguaggio di

programmazione

tramite il quale

stendere il codice

del programma

Es. Linguaggio C

06/10/2012 Matteo Ceserani

Page 12: Architetture dei calcolatori elettronici

Programmare

Si utilizza un

particolare

software per

tradurre il

linguaggio di

programmazione

in linguaggio

macchina

Compilatore

06/10/2012 Matteo Ceserani

Page 13: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Il codice macchina ha caratteristiche che dipendono fortemente da quelle dell’hardware su cui il software dovrà essere eseguito

Non solo: anche i sistemi operativi sono molto differenti tra di loro

Il programmatore deve conoscere l’ambiente hardware e software in cui il suo programma dovrà funzionare

Il codice macchina ottenuto non è portabile su altre piattaforme

Page 14: Architetture dei calcolatori elettronici

Una situazione alternativa: Java

06/10/2012 Matteo Ceserani

Page 15: Architetture dei calcolatori elettronici

La JVM (Java Virtual Machine) è un particolare software che simula un hardware virtuale standard, su cui vengono eseguiti i programmi scritti in Java

Esiste una Java Virtual Machine per ogni piattaforma hardware (32 bit, 64 bit) e per ogni sistema operativo (Win, Linux, MacOS, Android etc…)

Si realizza così la portabilità del codice, e il programmatore si può astrarre da hardware e sistemi operativi

Altro esempio: Microsoft Visual Basic e il .NET Framework

Limitato al solo ambiente Windows

Realizza la sola portabilità hardware

Le specifiche però sono aperte: volendo…

06/10/2012 Matteo Ceserani

Page 16: Architetture dei calcolatori elettronici

La RAM è composta da celle di memoria che possono contenere ciascuna un certo numero di bit (in genere 8: un Byte)

Ogni cella di memoria è individuata dal suo indirizzo, un numero progressivo che parte da 0.

Le linee per i dati (D) sono bidirezionali e permetto la lettura e la scrittura delle celle di memoria che compongono la RAM.

Le linee A (Address) servono per fornire alla RAM gli indirizzi delle celle da cui si vuole leggere o in cui si vuole scrivere.

Il segnale CS (Chip Select) abilita il dispositivo.

I segnali RD e WR servono ad avviare un’operazione di lettura o di scrittura.

06/10/2012 Matteo Ceserani

Page 17: Architetture dei calcolatori elettronici

Ciclo di lettura

RD 1

A Indirizzo della cella di memoria da leggere

CS 1

Dopo un certo tempo (ns) il contenuto della cella di indirizzo A è disponibile sulle linee D

Ciclo di scrittura

WR 1

A Indirizzo della cella di memoria in cui scrivere

D Parola di bit da scrivere nella cella

CS 1

Dopo un certo tempo (ns) la parola di bit posta in ingresso sulle linee D è memorizzata nella cella di indirizzo A

06/10/2012 Matteo Ceserani

Page 18: Architetture dei calcolatori elettronici

Le linee del bus si dividono logicamente in tre gruppi Linee che trasportano dati e istruzioni (bidirezionali)

Linee che trasportano indirizzi di celle di memoria e di periferiche (unidirezionali)

Altre linee di controllo (unidirezionali)

06/10/2012 Matteo Ceserani

Page 19: Architetture dei calcolatori elettronici

Per permettere l’interfacciamento della CPU

con la memoria

le linee D degli integrati di RAM vengono

collegate al bus dei dati

Le linee A degli integrati di RAM vengono

collegate al bus degli indirizzi

Le linee CS, RD e WR vengono collegate a tre

linee in uscita del bus dei controlli

È sempre la CPU a gestire le letture e le

scritture in memoria

Eccezione: DMA (Direct Memory Access) ma è

un’altra storia

06/10/2012 Matteo Ceserani

Page 20: Architetture dei calcolatori elettronici

Qual è la dimensione massima della memoria

RAM di un sistema di elaborazione?

20 bit 1 MB

32 bit 4 GB

64 bit 2097152 TB

Perché?

ML 2L = dimensione della memoria (parole, in genere Byte)

M = dimensione del bus degli indirizzi (numero di linee)

06/10/2012 Matteo Ceserani

Page 21: Architetture dei calcolatori elettronici

Unità di misura Definizione In byte

1 Byte 8 bit 1

1 KB 1024 Byte 1024

1 MB 1024 KB 1048576

1 GB 1024 MB 1073741824

1 TB 1024 GB 1099511627776

Perché 1 Byte è composto da 8 bit?

Perché si procede di 1024 in 1024?

06/10/2012 Matteo Ceserani

Page 22: Architetture dei calcolatori elettronici

Le periferiche di Input e Output in linea di

massima funzionano come delle celle di

memoria:

Possiedono un indirizzo e le corrispondenti linee

A da collegare al bus degli indirizzi

Possono essere lette (Input) o scritte (Output)

dalla CPU attraverso le loro linee D collegate al

bus dei dati

Possiedono linee di abilitazione (CS) e di lettura

e scrittura (RD, WR)

06/10/2012 Matteo Ceserani

Page 23: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Page 24: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Page 25: Architetture dei calcolatori elettronici

Una CPU funziona ripetendo continuamente quello che si chiama CICLO DI MACCHINA

Approssimativamente un ciclo di macchina corrisponde all’esecuzione di un’istruzione da parte della CPU

Il ciclo di macchina si divide in due parti fondamentali: Fase di FETCH Caricamento da parte della CPU del codice

dell’istruzione da eseguire

Fase di EXECUTE Esecuzione da parte della CPU dell’istruzione il cui

codice è stato caricato nella fase di fetch

06/10/2012 Matteo Ceserani

Page 26: Architetture dei calcolatori elettronici

UC: Unità di Controllo

Circuito elettronico molto complesso

Responsabile sia della fase di Fetch che di quella di Execute

Produce i segnali di comando che determinano l’esecuzione delle istruzioni (fanno parte del bus dei controlli)

IR: Instruction Register

contiene il codice dell’istruzione da eseguire

È una cella di memoria

PC: Program Counter

contiene l’indirizzo della cella di RAM che contiene il codice della prossima istruzione da eseguire

È una cella di memoria

06/10/2012 Matteo Ceserani

Page 27: Architetture dei calcolatori elettronici

MAR: Memory Address Register

cella di memoria per l’interfacciamento con il

bus degli indirizzi

MDR: Memory Data Register

cella di memoria per l’interfacciamento con il

bus dei dati

06/10/2012 Matteo Ceserani

Page 28: Architetture dei calcolatori elettronici

La fase di Fetch si ripete sempre uguale

Passi della fase di Fetch

MAR PC

Bus degli indirizzi MAR

CS 1

RD 1

MDR Bus dei dati

IR MDR

PC PC + 1

06/10/2012 Matteo Ceserani

Page 29: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Page 30: Architetture dei calcolatori elettronici

La fase di Execute è diversa per ogni

istruzione che la CPU è in grado di eseguire

In realtà può essere distinta in due fasi

UC legge il contenuto di IR e lo decodifica,

producendo i corrispondenti segnali di comando

La RAM, le periferiche e le altre parti interne

della CPU si attivano in risposta ai segnali di

comando per eseguire l’istruzione

Vediamo un esempio, si spera semplice

ADD R0,R1,R2

R0 R1 + R2

06/10/2012 Matteo Ceserani

Page 31: Architetture dei calcolatori elettronici

Registri di uso generale Celle di memoria

Possono essere utilizzate per memorizzare qualsiasi valore Dati

Risultati

ALU: Unità Aritmetico Logica Svolge calcoli matematici e logici su numeri interi e

espressioni logiche

Viene affiancata da una FPU (Floating Point Unit) per il calcolo in virgola mobile

Accumulatore Cella di memoria speciale

Contiene sempre uno dei due operandi della ALU

In esso viene posto il risultato delle operazioni svolte dalla ALU

06/10/2012 Matteo Ceserani

Page 32: Architetture dei calcolatori elettronici

Dopo la decodifica da parte di UC i passi sono i seguenti Accumulatore R1

Accumulatore Accumulatore + R2

R0 Accumulatore

Questa fase di Execute non coinvolge in alcun modo la memoria di sistema… Possiamo nel frattempo svolgere la fase di Fetch

successiva (Pipeline)

Esistono ovviamente istruzioni che hanno bisogno di accedere alla memoria di sistema per essere eseguite

06/10/2012 Matteo Ceserani

Page 33: Architetture dei calcolatori elettronici

06/10/2012 Matteo Ceserani

Page 34: Architetture dei calcolatori elettronici

Altro esempio… ADD [3F55],R0,R1

Il risultato della somma del contenuto di R0 e R1 viene memorizzato nella cella di memoria di indirizzo 3F55H = 16213D = 0011111101010101B

I passi sono i seguenti Accumulatore R0

Accumulatore Accumulatore + R1

WR 1

MAR 3F55H

MDR Accumulatore

CS 1

Somma

Scrittura in memoria

06/10/2012 Matteo Ceserani

Page 35: Architetture dei calcolatori elettronici

Durante la somma si può eseguire il fetch

dell’istruzione successiva (il bus è libero)

Durante la scrittura della memoria si può

utilizzare la ALU per un’altra operazione (il

bus non si può utilizzare perché è occupato)

L’efficienza della pipeline è uno dei fattori

principali per l’incremento delle prestazioni

della CPU

Un altro fattore è il parallelismo

Più CPU che lavorano in parallelo possono

svolgere più istruzioni contemporaneamente

06/10/2012 Matteo Ceserani

Page 36: Architetture dei calcolatori elettronici

Come è fatto un software? Un esempio in

linguaggio C…

1. float CalcoloMedia(int N){

2. float Somma;

3. Somma = 0;

4. for(i=0;i<N;i++){

5. scanf(“%d”,&Numero);

6. Somma = Somma + Numero;

7. }

8. Somma = Somma / N;

9. return Somma;

10. }

06/10/2012 Matteo Ceserani

Page 37: Architetture dei calcolatori elettronici

Ordine di esecuzione…

3.

4. 5. 6.

4. 5. 6.

4. 5. 6.

4. 5. 6.

4. 5. 6.

4. 5. 6.

4. 5. 6.

4. 5. 6.

4. 5. 6.

8.

9.

N = 9

06/10/2012 Matteo Ceserani

Page 38: Architetture dei calcolatori elettronici

Principio di località spaziale

Se si sta eseguendo l’istruzione memorizzata

nella cella di memoria di indirizzo X, è probabile

che la prossima istruzione da eseguire sia

memorizzata nella cella di indirizzo X + 1

Principio di località temporale

Se si sta eseguendo un’istruzione, è probabile

che la stessa istruzione venga rieseguita dopo

breve tempo

Perché caricare continuamente dalla

memoria di sistema lo stesso codice, tenendo

occupati i bus?

06/10/2012 Matteo Ceserani

Page 39: Architetture dei calcolatori elettronici

Per sfruttare i principi di località spaziale e temporale si è introdotta nelle CPU la memoria cache

Si tratta di una memoria molto veloce integrata nella CPU

I tempi di accesso alla cache sono molto inferiori a quelli di accesso alla RAM di sistema

Il codice di una istruzione (o un dato) vengono dapprima cercati dalla CPU nella cache

Se il dato o l’istruzione vengono trovati (cache hit) la CPU risparmia un accesso alla memoria esterna

Se il dato o l’istruzione non vengono trovati (cache miss) la CPU accede alla memoria esterna, carica il dato o l’istruzione e li copia anche nella cache

06/10/2012 Matteo Ceserani

Page 40: Architetture dei calcolatori elettronici

Statisticamente l’utilizzo della cache riduce drasticamente il numero di accessi alla memoria di sistema

Per ottimizzare le prestazioni si utilizza una cache gerarchica (almeno due livelli, ma anche tre)

L1: livello più interno. Ogni CPU possiede la sua cache L1 privata, a volte divisa in cache per i dati e cache per le istruzioni. Dimensioni dell’ordine delle decine di KB.

L2: livello più esterno. Di solito condivisa tra tutte le CPU del microprocessore. Dimensioni dell’ordine di qualche MB.

L3: in alcuni casi il livello più esterno è il terzo. In tal caso la cache L2 non è condivisa, mentre lo è la L3.

06/10/2012 Matteo Ceserani

Page 41: Architetture dei calcolatori elettronici

I sistemi operativi gestiscono l’esecuzione di molti programmi contemporaneamente (multitasking)

Questa gestione deve essere completamente trasparente al programmatore

Il programmatore non si deve dover preoccupare del multitasking: scrive il codice come se il suo programma possa disporre del processore in maniera esclusiva

Ovviamente solo un programma può essere in esecuzione in un certo istante (almeno su una singola CPU)

I diversi processi vengono posti in esecuzione a rotazione, assegnando a ciascuno di essi una piccola quantità di tempo di processore (quanto di tempo)

L’utente ha la sensazione che i programmi vengano eseguiti parallelamente tra loro

06/10/2012 Matteo Ceserani

Page 42: Architetture dei calcolatori elettronici

Stati di un processo Running Il processo è in esecuzione, sta utilizzando il

processore.

Ready Il processo dispone di tutte le risorse necessarie all’esecuzione ma non dispone del processore.

Wait Il processo è in attesa della disponibilità di una certa risorsa (es. operazioni di I/O). In generale il tempo di attesa può essere indefinito.

Init Fase di creazione e inizializzazione di un processo.

End Termina l’esecuzione.

Abort Terminazione anormale del processo. Viene generato un file di dump (copia della memoria) per l’analisi dell’applicazione volta a determinare l’errore.

06/10/2012 Matteo Ceserani

Page 43: Architetture dei calcolatori elettronici

Ready Running

End

Abort

Wait Init

Manca una

risorsa

06/10/2012 Matteo Ceserani

Page 44: Architetture dei calcolatori elettronici

La gestione dei processi in attesa o pronti

per l’esecuzione è compito del sistema

operativo (uno dei più importanti)

La CPU e il sistema di elaborazione in

generale devono però supportare il

meccanismo di rotazione dei processi

Oggi il multitasking è uno standard per tutti i

calcolatori

Almeno dal PC in su…

Arduino non ha nemmeno un sistema operativo!

06/10/2012 Matteo Ceserani

Page 45: Architetture dei calcolatori elettronici

Obiettivo: far sì che ciascun processo abbia

l’illusione di disporre dell’intera memoria

indirizzabile dal processore

Questo di solito vuol dire superare il limite

della memoria fisicamente presente sulle

macchine, mantenendo il solo vincolo legato

alla dimensione del bus degli indirizzi

Si noti che questo deve verificarsi per

ciascun processo in esecuzione sulla

macchina

06/10/2012 Matteo Ceserani

Page 46: Architetture dei calcolatori elettronici

Conservare in memoria centrale solo le porzioni di codice e dati che presumibilmente saranno necessarie e/o evolveranno in un prossimo futuro

Occorre farlo in maniera assolutamente trasparente al programmatore

Duplice divisione della memoria: Si divide lo spazio di memoria del programma (limitato solo

dalla dimensione del bus indirizzi) in pagine logiche di dimensione fissa

Si divide lo spazio fisico di memoria (fissato dall’hardware) in pagine fisiche aventi la stessa dimensione di quelle logiche

Meccanismo della paginazione: mappare le pagine logiche necessarie in un certo istante

all’esecuzione di un processo su corrispondenti pagine fisiche

Una MMU (Memory Management Unit) si occupa della traduzione degli indirizzi logici nei corrispondenti indirizzi fisici.

06/10/2012 Matteo Ceserani

Page 47: Architetture dei calcolatori elettronici

B

D E

A

C

F

G

A

B

C

D

E

G

H

F

0

1

2

3

4

5

6

7

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

MEMORIA

LOGICA

MEMORIA

FISICA

0 1 2 3 4 5 6 7

v

v

v v

i

i i

i

3

6

10 11

TABELLA

DELLE

PAGINE MEMORIA DI

SWAP

Pagina

fisica

Bit di

validità

H

06/10/2012 Matteo Ceserani

Page 48: Architetture dei calcolatori elettronici

Il processo è convinto di poter accedere a tutta

la memoria indirizzabile

Richiede l’accesso a una cella appartenente a

una certa pagina logica

Consultando una tabella delle pagine si controlla

se la pagina logica è presente in quel momento

in memoria centrale

Se non è presente la si carica da una memoria di

swap (di solito una parte del disco)

Se necessario si scarica dalla memoria centrale

una pagina logica ritenuta meno utile

06/10/2012 Matteo Ceserani