Sei sulla pagina 1di 686

54

Lelaboratore
01.a

Un po di storia

Storia del calcolo automatico

Legata allo sviluppo della tecnologia:


Generazione -1: La preistoria
Generazione 0: Meccanica
Generazione 1: Elettromeccanica
Generazione 2: Valvole termoioniche
Generazione 3: Transistors
Generazione 4: Circuiti integrati
Generazione 5: VLSI

Architettura degli Elaboratori

54

????-1642
1642-1935
1935-1945
1945-1955
1955-1965
1965-1980
1980-????

2012

Generazione -1: preistoria (


(-1642)
Oggetti usati come strumenti di calcolo
(es: conchiglie per rappresentare pecore)

54

= stessa cardinalit
= rappresentano lo stesso numero
2012

Architettura degli Elaboratori

Generazione -1: preistoria (


(-1642)
operazioni aritmetiche come
procedure manuali:
A

rappresentazione
del numero 2

rappresentazione
del numero 1

54

rappresentazione
del numero 3

Procedura: sposta il contenuto del sacco A nel sacco B


Risultato: il sacco B contiene ora la rappresentazione di
Nome della procedura manuale : addizione di numeri interi
Architettura degli Elaboratori

2012

Generazione -1: preistoria (


(-1642)
Osservazioni:
manipolando conchiglie, si possono
manipolare numeri
e fare calcoli (addizioni, sottrazioni)

54

procedure semplici, soggette ad errore, lente


Architettura degli Elaboratori

Generazione -1: preistoria (


(-1642)

2012

Meccanismo pi sofisticato: labaco (2700 aC)


54
usa il concetto di notazione posizionale.
Valore delle cifre

Peso di ciascuna
cifra (potenze di 10)
Architettura degli Elaboratori

2012

Generazione -1: preistoria (


(-1642)

Solo pi tardi il far di conto diventa un processo


astratto che utilizza numeri rappresentati in
54
forma scritta da simboli (cifre).
Le procedure per eseguire le operazioni
aritmetiche sono eseguite su papiro.
111
010 =
101

Si possono fare operazioni pi complesse.


Procedure ancora manuali, ma pi veloci.
Ancora soggette ad errore
meno che con le conchiglie!
Architettura degli Elaboratori

Generazione -1: preistoria (


(-1642)

2012

Nel IX secolo:

Muhammad ibn Musa

54

Al-Khwrizm sviluppa il
concetto di definizione
scritta di un procedimento
da seguire per ottenere
un risultato
XIII secolo, traduzione
latina: algoritmo
Architettura degli Elaboratori

2012

Generazione -1: preistoria (


(-1642)

Per secoli il problema principale era stato:


come riuscire ad eseguire

54

Un
Un dato algoritmo
In modo non-manuale (automatico)
Possibilmente pi velocemente che a mano
Possibilmente pi affidabile (senza errori)

Architettura degli Elaboratori

Generazione -1: preistoria (


(-1642)
Codex Madrid - Leonardo Da Vinci (~1500)
scoperto per caso a Madrid nel 1967
progetto di un calcolatore meccanico...?

Architettura degli Elaboratori

2012

54

2012

Generazione -1: preistoria (


(-1642)

10

Codex Madrid - Leonardo Da Vinci (~1500)


Guatelli (New York) lo costru nel 1968

Architettura degli Elaboratori

54

2012

Generazione 0: Meccanica (1642(1642-1935)


Blaise Pascal, figlio di un esattore delle tasse, costru a
19 anni una macchina addizionatrice con riporto
automatico. Le cifre degli operandi venivano inserite
nelle ruote inferiori, la somma eseguita dagli ingranaggi
interni, le cifre del risultato apparivano nelle finestre
superiori

Architettura degli Elaboratori

11

54

2012

Generazione 0: Meccanica (1642(1642-1935)


Joseph-Marie Jacquard invent nel 1801 un telaio
automatico con trama e ordito controllati da schede
perforate

Architettura degli Elaboratori

12

54

2012

Generazione 0: Meccanica (1642(1642-1935)

13

La macchina di Jacquard (1801) operava secondo


uno schema prefissato.
54
Loutput era funzione del programma scritto
nelle schede perforate
Primo esempio di un software
(istruzioni su schede perforate)
Nessuno raccolse questa invenzione geniale
di Jacquard (considerata una minaccia alla
occupazione nellindustria tessile)

Architettura degli Elaboratori

2012

Generazione 0: Meccanica (1642(1642-1935)

14

Charles Babbage nel 1822


ottenne dal governo
54
britannico un finanziamento
per costruire una macchina
(difference engine) intesa a
calcolare rapidamente e
senza errori le tavole
numeriche usate per la
navigazione.
Primo esempio di
finanziamento della ricerca
in Computer Science.

Architettura degli Elaboratori

2012

Generazione 0: Meccanica (1642(1642-1935)

15

54

Architettura degli Elaboratori

2012

Generazione 0: Meccanica (1642(1642-1935)

16

Il Difference Engine progettato da Babbage


doveva calcolare e stampare tavole di valori di 54
polinomi fino al sesto grado, con la precisione di
20 cifre decimali
Oggi si chiamerebbe:
application specific hard-coded machine
Nonostante il finanzimento Babbage non riusc a
costruire il Difference Engine: dopo 10 anni, nel
1832, abbandon il progetto e ne intraprese un
altro (Analitical Engine)
Architettura degli Elaboratori

2012

Generazione 0: Meccanica (1642(1642-1935)


Nel 1853 (pi di 20 anni dopo) lo svedese Georg
Scheutz, costru una versione limitata del
Difference Engine di Babbage

Architettura degli Elaboratori

17

54

2012

Generazione 0: Meccanica (1642(1642-1935)


Nel 1989-91,
fu costruita
una versione
completa del
Difference
Engine, sulla
base del
progetto
originale di
Babbage

Architettura degli Elaboratori

54

2012

Generazione 0: Meccanica (1642(1642-1935)


LAnalytical Engine (il nuovo progetto di Babbage) il
primo vero computer della storia: Un dispositivo
programmabile con la struttura dei computer moderni:
Organi di Input (schede perforate) per dati e
istruzioni
Organi di Output (ruote predisposte per stampare)
Organi di Memoria (the Store), posizione delle ruote
dentate (1000 colonne di 50 ruote: ~200Kbit)
Una unit aritmetica (the Mill),
Un modulo di controllo, per stabilire la sequenza
delle operazioni.
Nonostante le energie (e il denaro) speso, Babbage non
riusc a costruire nemmeno la Analitical Engine:
come per Leonardo, la
tecnologia non era ancora matura.
Architettura degli Elaboratori

18

19

54

2012

Generazione 0: Meccanica (1642(1642-1935)


Nel 1842, la contessa
Ada Lovelace, scrisse il
primo programma per la
Analytical Engine di
Babbage.

20

54

Pu essere considerata
la prima programmatrice
della storia.

Architettura degli Elaboratori

2012

Generazione 0: Meccanica (1642(1642-1935)


Nel 1890 Herman Hollerith vinse la gara per
la fornitura delle apparecchiature di calcolo
necessarie al governo americano per
elaborare i dati del censimento

21

54

Nel 1914, la societ da lui fondata, Hollerith


Tabulating Company, insieme ad altre due,
costitu la Calculating-Tabulating-Recording
(C-T-R) che, nel 1924, prese il nome di IBM.
Architettura degli Elaboratori

2012

Generazione 1: Elettrom. (1935(1935-1945)


nel 1935 Konrad Zuse (Berlino) costru nel salotto dei
genitori lo Z-1. Era basato su rel e utilizzava
laritmetica binaria.
Tempo di esecuzione delle istruzioni: 6 s ~ 0.17 Hz).

Architettura degli Elaboratori

22

54

2012

Teoria della computabilit

23

1936: Alan M. Turing getta le basi


della teoria della computabilit.
La teoria basata sulla
macchina di Turing,
una macchina molto semplice ma
universale, cio in grado di calcolare
qualsiasi funzione computabile.

54

Il problema ingegneristico di produrre


macchine diverse per svolgere compiti
diversi sostituito dal lavoro di
programmare la macchina universale
per i vari compiti.
Architettura degli Elaboratori

2012

Generazione 1: Elettrom. (1935(1935-1945)


Fine degli anni 30: Howard Aiken costru lo Harvard
Mark I (IBM Automatic Sequence Control Calculator
o ASCC) il primo calcolatore elettromeccanico general
purpose messo in commercio.
Le istruzioni venivano lette da banda perforata,
come previsto nellAnalytical Engine di Babbage.

24

54

2012

Architettura degli Elaboratori

Generazione 1:
Elettromeccanica
(1935(1935
-1945)

25

54

NellHarvard MARK I
Grace M. Hopper
trov il primo bug
(scarafaggio) ucciso
tra le ganasce di un
relay.
Linsetto fu da lei
incollato nel logbook
del computer e da
allora, ad ogni guasto
della macchina, era
solita dire ad Howard
Aiken che dovevano
"debug the computer
Architettura degli Elaboratori

2012

Generazione 2: Valvole (1945(1945-1955)


John Atanasoff and
Clifford Berry
costruirono, tra il 1939 e il
1942, il primo elaboratore
digitale elettronico alla
universit dello Iowa.
The ABC conteneva molte
innovazioni tra cui
laritmetica binaria,
lelaborazione parallela, le
memorie dinamiche e la
separazione tra la
memoria e le funzioni di
calcolo.

26

ABC - Il primo elaboratore


elettronico

Architettura degli Elaboratori

2012

Generazione 2: Valvole (1945(1945-1955)

27

"It was at an evening of scotch and 100


mph car rides, when the concept came,
for an electronically operated machine,
that would use base-two (binary) numbers
instead of the traditional base-10
numbers, condensers for memory, and a
regenerative process to preclude loss of
memory from electrical failure.
John Atanasoff scrisse la maggior parte dei concetti
del primo elaboratore moderno sul retro di un
tovagliolino da cocktail.
Il prototipo funzionante non fu mai brevettato per
linizio della II Guerra mondiale.
Eckert and Mauchly furono i primi a brevettare un
elaboratore digitale, lENIAC.
Architettura degli Elaboratori

54

54

2012

Generazione 2: Valvole (1945(1945-1955)

28

Nel 1943 inizi il


54
progetto per
costruire ENIAC
(Electronic Numerical
Integrator and
Computer)
Mauchly (1907-1980)
e
Eckert (1919-1995)
Architettura degli Elaboratori

Generazione 2: Valvole (1945(1945-1955)


ENIAC
18000 valvole,
1500 relay,
30 tonnellate,
140 kW,
20 registri da 10
cifre decimali.
Programmi cablati
(6000 interruttori,
tonnellate di fili).
Soggetto a guasti:
negli ultimi 6 anni,
in media 100
ore/sett. di
operativit:
availability = 60%
Architettura degli Elaboratori

2012

29

54

2012

Generazione 2: Valvole (1945(1945-1955)

30

Nel 1945, John von Neumann progett un stored program


computer: il programma non pi definito da interruttori e
cavi o da schede perforate, ma si trova in memoria (la stessa 54
che contiene i dati). Larchitettura di von Neumann prevede:
- un modulo di controllo,
- un modulo ALU con accumulatore,
- una memoria per contenere programmi e dati,
- luso dellaritmetica binaria al posto di quella decimale.
I computer odierni sono ancora basati sullarchitettura di von
Neumann (in realt deriva da Babbage).
Questa architettura presenta il cosiddetto (Backus, 1977)
von Neumann bottleneck
tra la memoria e le unit di controllo e calcolo; tutte le nuove
architetture cercano di rimuovere questo collo di bottiglia.
Architettura degli Elaboratori

2012

Generazione 2: Valvole (1945(1945-1955)

31

John von Neumann nel 1952 con il suo EDVAC


(Electronic Discrete Variable Automatic Computer)

Architettura degli Elaboratori

54

2012

Generazione 2: Valvole (1945(1945-1955)


Altre macchine:
Manchester
Mark I, il primo
stored
program
computer ad
essere operativo
(nel 1948)
allUniversit di
Manchester.

Architettura degli Elaboratori

Generazione 2: Valvole (1945(1945-1955)


Altre macchine:
nel 1951, il
Whirlwind
computer (MIT)
fu il primo ad
impiegare
memorie
magnetiche
(nuclei di ferrite)

Architettura degli Elaboratori

32

54

2012

33

54

2012

Generazione 2: Valvole (1945(1945-1955)

34

54

memoria (da 256 bit) a nuclei di ferrite


Architettura degli Elaboratori

2012

Generazione 2: Valvole (1945(1945-1955)

35

Nel 1952 Grace Hopper, nellarticolo intitolato


The Education of a Computer,
(Proc. ACM Conference, Annals of the History
of Computing Vol. 9, No.3-4, pp. 271-281)
descrive il concetto di compilatore.

Architettura degli Elaboratori

54

2012

Generazione 2: Valvole (1945(1945-1955)

36

Nel 1954, John Backus


(IBM) svilupp il primo
linguaggio di programmazione
di alto livello (FORTRAN)
con cui gli utenti potevano
definire i problemi in termini
di formule matematiche
Il primo compilatore
FORTRAN era costituito da
2000 schede perforate
(2000 righe di codice non
documentato)
Molti programmi scientifici
sono tuttora scritti in
FORTRAN
Architettura degli Elaboratori

54

2012

Generazione 3: Transistor (1955(1955-1965)


Nel 1947
W. Shockley,
J. Bardeen, e
W. Brattain
inventano il
dispositivo
transfer resistance
in seguito chiamato
transistor

Architettura degli Elaboratori

37

54

2012

Generazione 3: Transistor (1955(1955-1965)

38

54

Nel 1955, lIBM


produsse un
computer
mainframe
(IBM 704),
usando transistor
discreti.
Il primo
computer con
aritmetica
floating point
(5 kFlops,
clock: 300 kHz)
Architettura degli Elaboratori

2012

Generazione 4: ICs (1965(1965-1980)

39

Nel 1958, J. Kilby della Texas Instruments (premio Nobel per la


fisica nel 2000) dimostr la possibilit di integrare un transistor
insieme con resistenze e capacit su un singolo chip di
semiconduttore (~1 cm2), per ottenere un oscillatore phase shift.

Architettura degli Elaboratori

54

2012

Generazione 4: ICs (1965(1965-1980)

40

Nel 1961, Fernando Corbat (MIT) produsse


CTSS (Compatible Time Sharing System) per il
computer IBM 7090/94:
il primo sistema operativo (time-sharing) della
storia.

54

Nel 1962 allUniversit di Manchester fu


operativo il computer Atlas: il primo ad usare le
tecniche di memoria virtuale, di paging e di
pipelining; possedeva moduli separati per
laritmetica intera e floating-point, (prestazioni
di ~200 kFLOPS).
Architettura degli Elaboratori

Generazione 4: ICs (1965(1965-1980)


Nel 1964 lIBM annunci il System/360, la prima
famiglia di computer compatibili .

Architettura degli Elaboratori

2012

41

54

2012

Generazione 4: ICs (1965(1965-1980)

42

Nel 1965, la DEC


(Digital Equipment 54
Corporation)
produsse il PDP-8, il
primo minicomputer.
Si diffuse presto nei
sistemi di controllo
dei processi

2012

Architettura degli Elaboratori

Generazione 5: VLSI (1980(1980-?)

43

Nel 1971, Ted Hoff


produsse lIntel 4004, il
primo microprocessore,
cio il primo processore
(a 4 bit) integrato su un
singolo chip

Architettura degli Elaboratori

54

2012

Generazione 5: VLSI (1980(1980-?)

44

Nel 1975 MITS produsse lAltair 8800, il primo personal


computer (memoria di 256 byte).
54
Pi tardi, Bill Gates and Paul Allen scrissero il primo
compilatore BASIC per lAltair.
Nel 1976: Apple I (ne furono prodotti 200).
Nel 1981: il primo PC IBM.

2012

Architettura degli Elaboratori

Generazione 5: VLSI (1980(1980-?)

45

Nel 1984, lo Xerox


PARC (Palo Alto
54
Research Center)
present ALTO, il
primo computer con
un nuova interfaccia
utente (GUI):
finestre, icone, mouse

Architettura degli Elaboratori

2012

Generazione 5: VLSI (1980(1980-?)

46

54

Nel 1986: il Cray-XMP


supercomputer con 4
processori (840 Mflops).
(raffreddato ad acqua)
Architettura degli Elaboratori

Generazione 5: VLSI (1980(1980-?)

2012

47

54

Prestazioni simili a quelle del Pentium III (2000)


Architettura degli Elaboratori

2012

Sony Playstation 2000

48

54

2012

Architettura degli Elaboratori

CPU: Emotion Engine

49

128-bit RISC - MIPS IV-subset + 128-bit multimedia extension


64-bit integer unit (2-way superscalar),
107 multimedia 128-bit instructions
32 128-bit registers, 48 double entries memory management unit (TLB)
64 entries branch target address cache (BTAC)
Clock
Cache
Scratch pad RAM
Memory
Direct Rambus
DMA
Co
Co--processor
Vector unit VU0 (4KB/4KB)
Vector unit VU1 (16KB/16KB)
Decoder
Size

54

300MHz (294.912MHz)
16KB instruction (2
(2--way) - 8KB data (2(2-way)
16KB (1K
(1K
128, dual port)
port)
32MB (2 channels at 800MHz)
3.2GB/sec
10 channels
FPU MAC 1, FPU DIV 1
FPU MAC 4, FPU DIV 1
FPU MAC 9, FPU DIV 3
MPEG2
226mm2 (240mm2)

Performance: 6.2 Gflops

66 Mpoly/s (geometric and perspective transformations)


38 Mpoly/s (lighting) / 36 Mpoly/s (fog)
16 Mpoly/s (curved surface, Bezier)

Architettura degli Elaboratori

2012

Imaging: Graphic Synthesizer

Pixel engines
Clock
Video RAM
DRAM bandwidth
DRAM bus width
RGB:Alpha:Z Buffer

50

16 in parallel
150MHz (147.456MHz)
4MB (embedded)
48GB/sec
2560
2560--bit (1024+1024+512)
24:8:32

42.7Mtransistors 183mm2

(279mm2)

Performance: 75 Mpoly
Mpoly/sec
/sec

(small polygons)

54

50 Mpoly
Mpoly/sec
/sec (48 pix quad, 2424-bit, Alpha, Z)
30 Mpoly
Mpoly/sec
/sec (50 pix triangle, Alpha, Z)
25 Mpoly
Mpoly/sec
/sec (48 pix quad, Alpha, Z, texture)
Particle drawing150
drawing 150 Mpixels
Mpixels/sec
/sec
Sprite drawing 18.75 M/s (8x8 pixels)
(8x speed for 640x480 at 60fps)
Architettura degli Elaboratori

2012

Cosa sta accadendo oggi: un esempio

51

2005: Sony, Toshiba e IBM annunciano il


microprocessore CELL

54

Pi unit di calcolo indipendenti sul chip (multi-core)


Parallelismo
Architettura degli Elaboratori

2012

Applicazioni del CELL (1 di 2)

52

54

11 novembre 2006:
Sony mette sul mercato
Playstation 3,
basata sul
microprocessore CELL

Architettura degli Elaboratori

2012

Applicazioni del CELL (2 di 2)

53

25 maggio 2008: IBM RoadRunner, un


progetto ibrido con CPU CELL e AMD Opteron,
supera la barriera del PetaFLOPS

54

(1'000'000'000'000'000 operazioni/secondo)
Architettura degli Elaboratori

2012

Direzioni di sviluppo

54

Parallelismo ad ogni livello


Continua l'integrazione
(system-on-a-chip)

54

Un computer in ogni dispositivo


(ubiquitous computing)
Distributed - Cloud Computing
Internet of Things

?
Architettura degli Elaboratori

2012

54

Fine
01.a

Un po di storia

Testo di rif.to:
[Congiu] - 1.1 (pg. 117)

Rappresentazione delle informazioni


-1.g

Informazioni numeriche

Cosa vedremo
1. I sistemi di numerazione
Decimale, binario, esadecimale
Conversioni di base

33

2. Le informazioni numeriche
Numeri naturali (senza segno o unsigned)
Numeri interi (con segno o signed)
Numeri non interi ( fixed-/floating-point)
3. Le informazioni non numeriche
Testi, immagini, suoni, video
Architettura degli Elaboratori

2010

Il sistema posizionale

( a2a1a0.a-1a-2 )b =
33
2
1
0
-1
-2
= + a2b + a1b + a0b + a-1b + a-2b +
= i aibi

b la base del sistema di numerazione

Gli ai sono le cifre del numero


Il valore di una cifra dipende
dalla sua posizione
2010

Architettura degli Elaboratori

Sistema decimale

b=10
Possibili cifre: {0;1;2;3;4;5;6;7;8;9}

33

2095.4210= 2 103 +
0 102 +
9 10 +
5+
4 / 10 +
2 / 102
Architettura degli Elaboratori

2010

Sistema binario

b=2
Possibili cifre: {0;1}

33

11011.1012 = 1 24 +
1 23 +
0 22 +
12+
1+
1/2+
0 / 22 +
1 / 23 = 27.62510
2010

Architettura degli Elaboratori

Sistema ottale

b=8
Possibili cifre: {0;1;2;3;4;5;6;7}

33

375.18 = 3 82 +
78+
5+
1/8

= 253.12510

Una cifra ottale pu rappresentare 3 cifre binarie:

110 011 101 001


6
3
5
1
Architettura degli Elaboratori

1100111010012 = 63518
2010

Sistema esadecimale

b=16
Possibili cifre: {0;1;2;3;4;5;6;7;8;9;A;B;C;D;E;F}

33

7B9.116 = 7 162 +
11 16 +
9+
1 / 16

= 1977.062510

Una cifra esadecimale pu rappresentare 4 cifre binarie:

1100 1110 1001


C
E
9

1100111010012 = CE916

Architettura degli Elaboratori

2010

Conversioni di base (1 di 4)

Da ottale/esadecimale a binario:
espansione di ogni cifra in una terna/quaterna di
cifre binarie.

Da binario a ottale/esadecimale:
raggruppamento in terne/quaterne di cifre e
sostituzione di ciascuna terna/quaterna con
lopportuna cifra ottale/esadecimale.

Da qualsiasi base a decimale:


applicando la definizione di notazione posizionale.

Architettura degli Elaboratori

33

2010

Conversioni di base (2 di 4)

Da decimale a qualsiasi altra base b


Parte intera: si prendono i resti
delle divisioni successive per b

33

Esempio: 200910 = 7D916


2009/16 =
125/16 =
7/16 =

125
7
0

resto: 9
resto: 13=D16
resto: 7

Lultima cifra
la pi
significativa

Il procedimento si arresta
2010

Architettura degli Elaboratori

Conversioni di base (3 di 4)

Da decimale a qualsiasi altra base b


Parte frazionaria: si prendono le parti intere
delle moltiplicazioni successive per b

33

Esempio: 0.687510 = 0.10112


0.68752 =
0.3752 =
0.752 =
0.52 =

1.375
0.75
1.5
1

parte intera: 1
parte intera: 0
parte intera: 1
parte intera: 1

La prima cifra
la pi
significativa

Il procedimento si arresta
Architettura degli Elaboratori

2010

Conversioni di base (4 di 4)

10

Da decimale a qualsiasi altra base b


Parte frazionaria

33

Il procedimento pu anche essere infinito!


Esempio: 0.310 = 0. 01001

2
0.32 =

0.6

parte intera: 0

0.62 =

1.2

parte intera: 1

0.22 =

0.4

parte intera: 0

0.42 =

0.8

parte intera: 0

0.82 =

1.6

parte intera: 1

0.62 =

1.2

parte intera: 1

Architettura degli Elaboratori

2010

Rappresentazione negli elaboratori

11

Negli elaboratori, lelemento base


33
per la rappresentazione delle
informazioni il BInary digiT o pi
semplicemente BIT (Tukey, 1947).
Pu essere realizzato in molti modi
diversi (carica elettrica, campo
magnetico, ecc.), ma in tutti i casi pu
assumere esattamente 2 valori e
corrisponde quindi a una cifra binaria.
Qualsiasi informazione in un
elaboratore rappresentata tramite un
numero finito di bit.
Architettura degli Elaboratori

2010

Rappresentazione finita: osservazione


Utilizzando un numero di cifre finito si pu
rappresentare solo una quantit finita di numeri.
Esempio per i numeri naturali:
base n. di cifre quantit

min

max

10

10M

10M-1

10

104

9999

2M

2M-1

24

15

10

210

1023

20

220

1048575

30

230

1073741823

Potenze di 2

13

Quando il numero di bit elevato, si usano delle


abbreviazioni analoghe a quelle delle unit di misura
Prefisso

Nome

Pot. di 2

Valore

1K
1Ki

kilokibi-

2 10

1.024

1M
1Mi

megamebi-

2 20

1.048.576

1G
1Gi

gigagibi-

2 30

1.073.741.824

1T
1Ti

teratebi-

2 40

~1.1 x 10 12

1P
1Pi

petapebi-

2 50

~1.1 x 10 15

1E
1Ei

exbiexa-

2 60

~1.2 x 10 18

1Z
1Zi

zebizeta-

2 70

~1.2 x 10 21

1Y
1Yi

yottayobi-

2 80

~1.2 x 10 24

Architettura degli Elaboratori

33

2010

Architettura degli Elaboratori

IEC
60027

12

33

2010

Numeri naturali

14

Esempio di rappresentazione con M=4 cifre (bit):


00002
00012
00102
00112
01002
11102
11112

=
=
=
=
=

=
=

33

010
110
210
310
410
1410
1510

I numeri maggiori di 15 non sono rappresentabili.


2010

Architettura degli Elaboratori

Numeri interi: ampiezza e segno

15

Il primo bit (quello pi significativo) viene utilizzato


per indicare il segno:
11112

-710

11102

-610

11012

-510

33

2 rappresentazioni
dello 0

10012

-110

10002

-010

00002 = +010
00012

= +110

Architettura degli Elaboratori

01102

= +610

01112

= +710

Si riduce il numero
di interi positivi
rappresentabili
2010

Numeri interi: eccesso P

16

Il valore rappresentato si ottiene sottraendo P


al valore calcolato secondo la notazione posizionale.
Esempio con M=4 e P=8 (di solito P=2M-1):
Dissimmetria

00002

-810 = 010-810

00012

-710 = 110-810

00102

-610 = 210-810

33

01112

-110

10002

010

10012

110

Una sola
rappresentazione
dello 0

Architettura degli Elaboratori

11102

610

11112

710

2010

Numeri interi: complemento a 1

17

La rappresentazione di un intero positivo coincide con


quella del corrispondente numero naturale.
La rappresentazione di un intero negativo si ottiene
complementando bit a bit quella del suo opposto.
10002

-710

10012

-610

33

2 rappresentazioni
dello 0

11102

-110

11112

-010

00002

+010

00012

+110

Architettura degli Elaboratori

01102

+610

01112

+710

2010

Numeri interi: complemento a 2

18

La rappresentazione di un intero positivo coincide con


quella del corrispondente numero naturale.
La rappresentazione di un intero negativo si ottiene
aggiungendo una unit al complemento a 1.
10002

-810

10012

-710

33

11112

-110

00002

010

00012

+110

01102

+610

01112

+710
2010

Architettura degli Elaboratori

Complemento a 2: propriet
il metodo di rappresentazione pi diffuso, perch
lunico tra quelli visti con tutte le seguenti propriet.

19

33

Ha una sola rappresentazione dello 0.


Ha una struttura ciclica: aggiungendo 1 al massimo
numero rappresentabile si ottiene il minimo numero
rappresentabile.
Consente le operazioni aritmetiche con i numeri
negativi usando le stesse regole valide per i numeri
positivi. Esempi:
0011

+3

0011

+3

0100

+4

1100

-4

0111

+7

1111

-1

Architettura degli Elaboratori

2010

Complemento a 2: overflow

20

Nelleseguire le operazioni aritmetiche, ci si deve


comunque assicurare che il risultato sia
rappresentabile con il numero di bit a disposizione.
Se ci non vero (overflow), lesito delloperazione
privo di significato.

33

Come riconoscere loverflow? Tramite i riporti.


Riporto nel bit
di segno

Riporto nel bit a


SX del segno

Esito
delloperazione

No

No

OK

No

Si

OVERFLOW (-)

Si

No

OVERFLOW (+)

Si

Si

OK
2010

Architettura degli Elaboratori

Overflow: esempi
0101

+5

0010

+2

0111

+7

1011

-5

1010

-6

1 0101

-11

0011

+3

0110

+6

1001

+9

1011

-5

1110

-2

1 1001

-7

Architettura degli Elaboratori

21

Rip. bit segno Rip. SX bit segno


No

No

Rip. bit segno Rip. SX bit segno


No

Si

Rip. bit segno Rip. SX bit segno


Si

No

Rip. bit segno Rip. SX bit segno


Si

Si

Esito
OK

33

Esito
OVERFLOW

Esito
OVERFLOW

Esito
OK

2010

Numeri non interi (1 di 2)

22

FIXED-POINT
I: parte intera;

R = I.F
F: parte frazionaria

33

Il numero di bit riservati a I e a F non dipende


da R: il punto decimale fisso.
A seconda delle applicazioni, la posizione del punto
decimale pu essere codificata o implicita.
Nota: un numero con NF cifre frazionarie pu essere
trattato come un intero se viene moltiplicato per 2NF
2010

Architettura degli Elaboratori

Numeri non interi (2 di 2)

23

FLOATING-POINT (standard IEEE 754)


R = M2E
31 30

23 22

8 bit

33

m
23 bit

M = {s }1.m
E = e - 127
Architettura degli Elaboratori

2010

Rappresentazione floating-point

24

Standard IEEE 754


R = M2E

33

M (mantissa)

24 bit: 1 per il segno s (0=+)


23 per lampiezza
1.xxxxx - in notazione fixed point normalizzata;
la parte intera (sempre 1) non viene rappresentata,
i 23 bit rappresentano la parte frazionaria m = xxxxx
E (caratteristica)

8 bit: in notazione eccesso 127(e)

2010

Architettura degli Elaboratori

Rappresentazione floating-point: esempio


Standard IEEE 754
R = M2E

25

33

Es: 0.310 = 0.010012 = 1.001122-2


M = +1.0011
E = -2 = e-127
31 30

s = 0
m = 0011
e = 12510 = 011111012

23 22

0 01111101 00110011001100110011001
1

8 bit

23 bit

In esadecimale: 3E999999
Architettura degli Elaboratori

2010

Numeri f.p. rappresentabili

26

R = M2E
31 30

s
1

23 22

33

8 bit

23 bit

Intervallo dei numeri rappresentabili 1 |M| 2-2-23


M = {s }1.m 1.0002 |M| 1.1112
-126 E 127
0 e 255

E = e 127

-127 E +128

i valori estremi sono riservati per situazioni particolari:


e =0
il numero 0 (se m = 0)
(se m 0) numero non normalizzato
e = 255
il numero (se m = 0)
(se m 0) numero non valido
2010

Architettura degli Elaboratori

Numeri f.p. rappresentabili

27

R = M2E
1

|M|

2-2-23

-126

33

127

il numero P con modulo pi piccolo ( 0):


1.181010-38
P = 12-126
(con mantissa normalizzata)

P = 0.0012-126
(non normalizzato)

2-149

il numero G con modulo pi grande:


G = (2 - 2-23 ) 2+127
Architettura degli Elaboratori

1.41010-45

3.41010+38
2010

Numeri f.p. rappresentabili

28

R = M2E
Intervallo dei numeri rappresentabili sullasse reale:
-G

-P P

33

1.41010-45

3.41010+38

degli infiniti numeri reali compresi tra - G e G sono


rappresentabili con esattezza solo 232 ( 4109) numeri
razionali (in realt un po meno); in generale un numero
reale R sar rappresentato dal pi vicino di questi
numeri razionali; lerrore di approssimazione d/2
erra

d/2
2010

Architettura degli Elaboratori

Numeri f.p. rappresentabili

29

R = M2E
Intervallo dei numeri rappresentabili sullasse reale:
-G

-P P

1.41010-45

33

3.41010+38

d la differenza tra due numeri rappresentabili


consecutivi:
1.xxx12E
-1.xxx02E
d=0.00012E = 2E-23
erra
Architettura degli Elaboratori

d/2 = 2E-24
2010

Errori nella rappresentazione f.p.

30

R = M2E

Intervallo dei numeri rappresentabili sullasse reale:


-G
-P P

33

erra d/2=2E-24

1.41010-45

3.41010+38

lerrore assoluto di approssimazione erra funzione di E:


erra piccolo vicino allo 0 (2-126-24)
erra grande vicino a G (2+127-24)

Ma ci che pi interessa lerrore relativo errr :


erra 2E-24 2-24
errr =
=
=
(1 M<2)
R
M2E
M
errr

2-24

10-8
2010

Architettura degli Elaboratori

Caratteristiche della rappresentazione f.p.

31

R = M2E
Intervallo dei numeri rappresentabili sullasse reale:
-G

-P P

33

errr 2-24

10-8

1.41010-45

3.41010+38

precisione: 7 decimali significativi (es: h=173.4768 cm)


Esempi di grandezze fisiche estreme i cui valori sono
gestibili con questa rappresentazione f.p.:
distanza terra - quasar: 1027 m
dimensione quark: 10-18 m
Architettura degli Elaboratori

2010

Caratteristiche della rappresentazione f.p.


FLOATING POINT (standard IEEE 754)

32

R = M2E
33

PRECISIONE DOPPIA: 64 bit


63 62

52 51

11 bit

52 bit

M = {s }1.m
E = e - 1023
2010

Architettura degli Elaboratori

Rappresentazione f.p. in precisione doppia

33

R = M2E
PRECISIONE DOPPIA: 64 bit
-G

33

-P P

errr

10-17

2.21010-308

1.81010+308

precisione: 16 cifre decimali significative.


Sono rappresentabili solo 264 = 16 E (EXA = 1018) degli
infiniti numeri reali compresi tra -G e G.
Esempio di grandezza fisica estrema gestibile con questa
rappresentazione f.p.:
numero di particelle subatomiche nelluniverso:
Architettura degli Elaboratori

1080
2010

Fine
-1.g

Rappresentazione delle informazioni

Rappresentazione binaria
delle informazioni numeriche
NUMERI NATURALI
con 32 bit (i primi 232 = 4G numeri) (da 0 a 232-1)
0
1
2

231 -2
231 -1

00 00
00 ... 01
00 ... 10

01 ... 10
01 ... 11

231
231+1
231+2

232 -2
232 -1

10 ... 00
10 ... 01
10 ... 10

11 ... 10
11 ... 11

Rappresentazione binaria
delle informazioni numeriche
NUMERI NATURALI
con 32 bit (i primi 232 = 4G numeri) (da 0 a 232-1)
0
1
2

231 -2
231 -1

00 00
00 ... 01
00 ... 10

01 ... 10
01 ... 11

231
231+1
231+2

232 -2
232 -1

10 ... 00
10 ... 01
10 ... 10

11 ... 10
11 ... 11 +1
100 ... 00

Rappresentazione binaria
delle informazioni numeriche
NUMERI NATURALI
con 32 bit (i primi 232 = 4G numeri) (da 0 a 232-1)
0
1

231 -2
231 -1
231
231+1

232 -2
232 -1

00 00
00 ... 01

01 ... 10
01 ... 11
10 ... 00
10 ... 01

11 ... 10
11 11

01 ... 11

10 ... 00

0010 00 _

_ 1100 ... 00

00 ... 00

11 ... 11

bit C = guardalinee

Rappresentazione binaria
delle informazioni numeriche
NUMERI NATURALI

INTERI

con 8 bit (28 = 256 numeri) (da -127 a +128)


ECCESSO 127
-127
-126
-125

-1
0

0
1
2

126
127

negativi
00000000
00000001
00000010

01111110
01111111

1
2
3

127
128

128
129
130

254
255

positivi
10000000
10000001
10000010

11111110
11111111

Rappresentazione binaria
delle informazioni numeriche
NUMERI NATURALI

INTERI

con 8 bit (28 = 256 numeri) (da -128 a +127)


COMPLEMENTO A DUE
0
1
2

126
127

0
1
2

126
127

positivi
00000000
00000001
00000010

01111110
01111111

-128
-127
-126

-2
-1

128
129
130

254
255

negativi
10000000
10000001
10000010

11111110
11111111 +1
100000000

Rappresentazione binaria
delle informazioni numeriche
NUMERI NATURALI

INTERI

con 32 bit
negativi

positivi
0
1
2

231 -2
231 -1

00 00
00 ... 01
00 ... 10

01 ... 10
01 ... 11

231
231+1
231+2

232 -2
232 -1

10 ... 00 -231
10 ... 01 -231+1
10 ... 10 -231+2

11 ... 10 -2
11 ... 11 -1

Rappresentazione binaria
delle informazioni numeriche
NUMERI INTERI
con 32 bit (da -231 a + 231-1)

COMPLEMENTO A DUE

negativi

positivi
0
1
2

231 -2
231 -1

-231
-231+1
-231+2

-2
-1

00 00
00 ... 01
00 ... 10

01 ... 10
01 ... 11

10 ... 00
10 ... 01
10 ... 10

11 ... 10
11 ... 11 +1
100 ... 00

Rappresentazione binaria
delle informazioni numeriche
NUMERI INTERI (complemento a 2)
-231
-231+1

-2
-1
0
1

231 -2
231 -1

10 ... 00
10 ... 01

11 ... 10
11 11
00 00
00 ... 01

01 ... 10
01 ... 11

con 32 bit (da -231 a + 231-1)


bit V = guardalinee
01 ... 11

10 ... 00

0010 00 _

_ 1100 ... 00

00 ... 00

11 ... 11

Rappresentazione binaria
delle informazioni numeriche
NUMERI INTERI (complemento a 2)
con 32 bit
-231
-231+1
-231+2

0
1

231 -2
231 -1

Il bit pi significativo ha peso negativo (-231)


10 ... 00
Gli altri bit hanno peso positivo (+20)
10 ... 01
21)
10 ... 10

2 i)

00 00
00 ... 01

01 ... 10
01 ... 11

Rappresentazione binaria
delle informazioni numeriche
NUMERI INTERI (complemento a 2)
Come passare dalla notazione:
con P bit
con N bit a quella
CP-1 CP-2 CN CN-1 CN-2 C1C0
CN-1 CN-2 C1C0
Ci =

{0,1}

P >N

Rappresentazione binaria
delle informazioni numeriche
PESO DEGLI N BIT
NEL COMPLEMENTO A DUE
CN-1 CN-2 C1C0

(Ci = {0,1})

= CN-1(-2N-1) + CN-2 2N-2 + + C1 21 + C0 20


se CN-1= 0 il numero positivo
se CN-1= 1 il numero negativo
vediamo separatamente i due casi

Rappresentazione binaria
delle informazioni numeriche
caso dei numeri positivi (CN-1= 0) con N bit: 0CN-2 C1C0

= 0 (-2N-1)+CN-2 2N-2++C1 21+C0 20

{1}

aggiungendo (P - N) termini nulli alla {1}, il valore non cambia:

= 0 (-2P-1)+0 2P-2++0 2N-1+CN-2 2N-2+ +C1 21+C0 20


notazione posizionale con P bit: 0000CN-2 C1C0

Rappresentazione binaria
delle informazioni numeriche
caso dei numeri negativi (CN-1= 1) con N bit: 1CN-2 C1C0

= 1(-2N-1)+CN-22N-2++C121+C020

{1}

11111 +
1
= 100000

(P > N)
2P-1 = 2P-2+2P-3 ++2N+1 +2N +2N-1 +2N-1
-2P-1+2P-2+2P-3 ++2N+1 +2N +2N-1 +2N-1 = 0
aggiungendo questa somma (= 0) alla {1}, il valore non cambia:
= -2P-1+2P-2+2P-3 ++ 2N-1+CN-22N-2++C121+C020
notazione posizionale con P bit: 11111CN-2 C1C0

Rappresentazione binaria
delle informazioni numeriche
NUMERI INTERI (complemento a 2)
Per passare dalla notazione:
con P bit
con N bit a quella
S S S CN-1 CN-2 C1C0
S CN-2 C1C0

si estende verso sinistra il bit di segno

Testo di rif.to:
[Congiu] - 1.2 (pg. 1722)

Rappresentazione delle informazioni


-1.h

Testi
Immagini
Suoni
Video

Testi: lo standard ASCII

American Standard Code for Information Interchange

13

7 bit, 27 = 128 simboli diversi:


(a z AZ 0 9 ! ? , . ; : @ # $ )
alcuni codici di controllo, per controllare la
visualizzazione di un testo (capo riga, salto di pagina, )
o la sua trasmissione (XON, XOFF, )
I 7 bit sono memorizzati e trasmessi in un byte.
Il bit in pi pu essere usato come bit di parit per
rilevare eventuali errori di trasmissione.
Architettura degli Elaboratori

2012

Tabella dei caratteri ASCII

Da un documento del 1972


13

Architettura degli Elaboratori

2012

Oltre lo standard ASCII

Codifica ASCII estesa


256 simboli; i 128 aggiuntivi rappresentano caratteri 13
di alfabeti nazionali (, , , ) e altro (, , , )
Sviluppate varie estensioni tra loro incompatibili
Standard ISO/IEC 8859 (a 8 bit): varie tabelle
compatibili ASCII per soddisfare le esigenze di varie
lingue nazionali.
Standard UNICODE (a 16 bit): 216 = 65536 simboli
per rappresentare i caratteri di tutte le principali lingue
scritte del mondo.
Architettura degli Elaboratori

2012

Immagini: rappresentazione raster

Dal latino rastrum (rastrello): sottolinea come


limmagine sia costituita da una griglia di punti.
I punti sono detti pixel (PICture Elements).

13

Il numero di bit usati per rappresentare un pixel


definisce il tipo di immagine
1 bit/pixel: bianco e nero
8 bit/pixel: scala di grigi, a colori con palette
24 bit/pixel: 16777216 colori (true color)
Esempi di standard:
BMP
PNG
Formati compressi (vediamo che significa)
JPEG
Architettura degli Elaboratori

2012

Rappresentazione raster: dimensioni

La qualit di unimmagine raster aumenta con il numero


di pixel che la compongono

13

Anche loccupazione in byte, per, aumenta!


Immagine 640x480, 24 bit/pixel: 900 KiB
Immagine 3648x2736, 24 bit/pixel: 29241 KiB (32x)
Per ovviare al fenomeno si adotta la compressione
Architettura degli Elaboratori

2012

Compressione: lossless vs. lossy

Compressione senza perdite (lossless)


Preserva interamente linformazione originaria
Fattore di compressione: 2 (tipico)
Esempi: PNG (immagini), ZIP (documenti generici)

13

Compressione con perdita (lossy)


Scarta alcune informazioni, valutate meno rilevanti
Il documento originale non pu essere ricostruito
fedelmente.
Fattore di compressione: 20 o pi
Esempi: JPEG (immagini), MP3 (suoni)
Architettura degli Elaboratori

Compressione lossy
lossy:: esempio (JPEG)

2012

13

La nascita di Venere Botticelli.jpg ( 221 Kbyte)


La nascita di Venere Botticelli.bmp (2.59 Mbyte)
Architettura degli Elaboratori

2012

Immagini: rappresentazione vettoriale

Insieme di elementi geometrici bidimensionali


(punti, linee, archi di curva, triangoli) o
tridimensionali (cubi, quadriche, )

Esempi di standard:
Postscript (immagini 2D)
DXF (disegno tecnico)
RISpec (immagini 3D)
TrueType (caratteri)

...
/V /v ldef
/y {_r 2 copy curveto} bdef
/Y /y ldef
/l {_r lineto} bdef
/L /l ldef
/m {_r moveto} bdef
% path construction operators
/_R {.25 sub round .25 add} bdef
...

Architettura degli Elaboratori

2012

Suoni: rappresentazione (1 di 2)
1.

13

Il suono (vibrazione dellaria) tramite un trasduttore


(microfono) viene trasformato in un segnale
elettrico analogico (tensione elettrica che varia nel
tempo in modo analogo al suono)

13

2. Tramite un convertitore analogico/digitale (A/D)


il segnale analogico viene discretizzato
nel TEMPO, raccogliendone campioni
a una frequenza prestabilita
nello SPAZIO, codificando ciascun
A/D
campione con un numero finito di bit
La sequenza dei campioni codificati
la rappresentazione digitale del suono.
Architettura degli Elaboratori

2012

Suoni: rappresentazione (2 di 2)

10

Il suono sonoro pu essere ricostruito con la


trasformazione inversa
suono

D/A
segnale elettrico

valori digitali

13

trasduttore

La rappresentazione tanto pi fedele quanto maggiori


sono
la frequenza di campionamento
(per riprodurre fedelmente un suono a frequenza f
bisogna campionare a frequenza almeno 2f)
il numero N di bit dei campioni (rapp. segnale/rumore)
Architettura degli Elaboratori

2012

Esempio: il Compact Disc (1982)

11

Frequenza di campionamento: 44100 Hz


(la massima frequenza udibile ~20KHz).

13

16 bit per campione.


Suono stereofonico: 2 canali.

Una canzone di 3 minuti occupa ~31000 KiB!


Anche per i suoni importante la compressione.
Esempio: 3 minuti di suono compresso (lossy)
in MP3 a 128 Kbit/s occupano ~3000 KiB.
Architettura degli Elaboratori

2012

Video

12

Un video una sequenza di immagini (frame)


Cinema: 24 frame al secondo (fps)
TV, standard europeo PAL: 25 fps
TV standard USA NTSC: 30 fps

13

La compressione fondamentale:
Un minuto di film alla risoluzione di 640x480
(true color) occupa 1296000 KiB (~1.2 GiB).
Un minuto di video ad alta definizione 1080p30
(1920x1080) occupa 10935000 KiB (~10.4 GiB)
Architettura degli Elaboratori

2012

Video: compressione

13

La maggior parte dei formati sono lossy.


Vengono ereditate le tecniche per le immagini,
inoltre si effettua anche una compressione
lungo lasse del tempo (predizione del moto, eccetera).

13

Standard pi diffuso: MPEG


MPEG-2: DVD, digitale satellitare e terrestre
MPEG-4 AVC (detto anche H.264): Blu-ray Disc
Esempi di altri standard:
FLV (Macromedia/Adobe)
DiVX (DivX, Incorporated)
Windows Media Video (Microsoft)
Architettura degli Elaboratori

2012

Fine
-1.h

Rappresentazione delle informazioni

Testo di rif.to:
[Congiu] - 2.1-2.3 (pg. 2737)

Reti Logiche
00.a

Porte logiche
Registri
Bus

Valori logici: convenzione

I valori logici sono 2.


Per indicarli useremo i nomi:

1
VERO
ALTO
+5 V

24

0
FALSO
BASSO
0 V

I nomi in ciascuna colonna sono equivalenti.


I nomi sono solo una convenzione!
Architettura degli Elaboratori

2009

Definizione di porta logica; porta NOT


Una porta logica un dispositivo
con N ingressi ed 1 uscita, che realizza
un legame tra il valore presente alluscita
e quelli presenti agli ingressi,
esprimibile con una funzione logica elementare

24

Primo esempio di porta logica: la porta NOT

Produce in uscita un valore logico opposto a quello


presente allingresso. Chiaramente N=1.
Architettura degli Elaboratori

Porte logiche AND e OR


La porta AND fa assumere
alluscita il valore logico 1
se e solo se tutti gli ingressi
si trovano ad avere il valore 1

2009

24

La porta OR fa assumere
alluscita il valore logico 1 se
ad almeno uno degli ingressi
presente un valore logico 1

Architettura degli Elaboratori

2009

Porte logiche NAND e NOR

La porta NAND fa assumere


alluscita il valore logico 0
se e solo se tutti gli ingressi
si trovano ad avere il valore 1

24

La porta NOR fa assumere


alluscita il valore logico 0 se
ad almeno uno degli ingressi
presente un valore logico 1

Architettura degli Elaboratori

2009

Equivalenze tra porte logiche (1 di 3)

La funzione realizzata da una porta logica pu essere


ottenuta mediante opportune sequenze di altre porte
logiche.
Ad esempio, le porte NOR/NAND possono essere
ottenute mediante una porta OR/AND e una NOT
collegate in sequenza

Architettura degli Elaboratori

24

2009

Equivalenze tra porte logiche (2 di 3)


Ogni funzione logica pu essere ottenuta
impiegando solo porte OR e NOT

24

Ogni funzione logica pu essere ottenuta


impiegando solo porte AND e NOT

Architettura degli Elaboratori

Equivalenze tra porte logiche (3 di 3)


Ogni funzione logica pu essere ottenuta
impiegando solo porte NAND

2009

24

Ogni funzione logica pu essere ottenuta


impiegando solo porte NOR (provarlo per esercizio)
Architettura degli Elaboratori

2009

Tabelle di verit

Un secondo modo di rappresentare una rete logica


mediante la sua tabella di verit,
che specifica il valore delluscita per ciascuna
possibile combinazione dei valori in ingresso.

24

Esempi per alcune porte logiche elementari:

Architettura degli Elaboratori

2009

OR esclusivo

10

Un esempio pi complesso dato dalla rete logica che


realizza la funzione di OR esclusivo: luscita Y assume
il valore 1 se e solo se ai 2 ingressi sono presenti
valori logici diversi
A
0
0
1
1

B
0
1
0
1

24

Y
0
1
1
0

Architettura degli Elaboratori

2009

Buffer tri-state (1 di 2)

11

A
24

Quando A=1, Y=B


Quando A=0, Y=0

A controlla se in uscita
passa il valore di B,
oppure no.

Ma Y=0 un valore di A passato attraverso la porta


aperta, oppure dovuto alla porta chiusa?
Lambiguit si risolve con il buffer tri-state.
Architettura degli Elaboratori

2009

Buffer tri-state (2 di 2)

12

Il buffer tri-state un dispositivo in cui il valore


logico delluscita Y non vincolato (n.v.) quando
lingresso di controllo assume il valore logico 0

24

Quando luscita Y non vincolata,


il suo valore dipende dalle altre porte a cui collegata
Architettura degli Elaboratori

2009

Collegam. wired OR di buffer tri-state


Le uscite delle porte tri-state possono essere
collegate tra loro purch al pi una di esse sia
vincolata ad un valore logico (0 oppure 1).
Viene realizzato lOR delle uscite senza leffettiva
presenza di una porta OR (wired OR).

13

24

Y=A se C=1
Y=B se C=0
Funzione di MULTIPLEXER 2/1
2009

Architettura degli Elaboratori

Multiplexer 2/1 (senza buffer tri-state)

14

24

Y=A se C=1
Y=B se C=0
Architettura degli Elaboratori

2009

Porta NAND open collector (1 di 2)

15

Un altro dispositivo che consente collegamenti in


wired OR la porta NAND open collector.

24

In tale porta luscita vincolata (al valore logico 0)


solo quando ad entrambi gli ingressi presente il
valore logico 1.

2009

Architettura degli Elaboratori

Porta NAND open collector (2 di 2)

16

Luscita di una porta NAND open collector pu


assumere solo il valore logico 0: dunque possibile
attivare contemporaneamente pi uscite di porte di
questo tipo visto che i valori ad esse presenti non
possono mai essere contrastanti.

24

Resistenza di pull-up

Lo schema qui sopra pu essere usato per segnalare il


verificarsi di un evento.
Architettura degli Elaboratori

2009

Registro da un bit

17

Un registro un dispositivo in grado di memorizzare


(cio conservare nel tempo) un valore logico.
Tale capacit distingue i registri dalle porte logiche.

24

w il segnale di controllo
w=1: il valore di X viene trasferito (memorizzato)
nel registro; Y=X
w=0: Y rimane al valore memorizzato,
senza risentire di eventuali variazioni di X
2009

Architettura degli Elaboratori

Registro da un bit: diagramma temporale

18

24

w
t
Architettura degli Elaboratori

2009

Bus

19

Un bus un collegamento elettrico tra parti diverse


di un elaboratore che consente il trasferimento di
informazione.
Un bus composto da una o pi linee; ogni linea
consente di trasferire un bit.

24

Per rappresentare un bus di n bit si usano i seguenti


simboli grafici:

2009

Architettura degli Elaboratori

Trasferimento di un bit

20

24

r1=1: il valore presente in R1 viene trasferito sul bus


w2=1: il valore sul bus viene memorizzato in R2
Diagramma temporale dei segnali di controllo:
r1
w2
Architettura degli Elaboratori

t
2009

Trasferimento di gruppi di bit

21

Un po di nomenclatura

24

4 bit: nibble (o nybble)


8 bit: byte
16 bit: half-word
32 bit: word
64 bit: double-word
La definizione di word dipende comunque dalla taglia
della parola di memoria della macchina che si sta
considerando (ne parleremo meglio pi avanti).
Architettura degli Elaboratori

Trasferimento in parallelo di pi bit

2009

22

24

Vantaggio: velocit
Svantaggio: servono pi linee per il bus
Architettura degli Elaboratori

2009

Shift register

23

Per il trasferimento seriale si utilizza un dispositivo


chiamato registro a scorrimento (shift register)

24

a ciascun impulso ( ) di S, i bit contenuti nel


registro scorrono di una posizione verso destra:
-

X
R1
R2
R3

R1
R2
R3
R4

Esempio: se inizialmente X=1 e lo shift register contiene 0111,


dopo un impulso di S lo shift register contiene 1011
Architettura degli Elaboratori

Trasferimento seriale di pi bit

2009

24

Trasferimento seriale tra due shift register:


24

C=0: a ciascun impulso ( ) di S, un bit del registro di sx


viene trasferito al registro di dx
C=1: a ciascun impulso di S, un bit del registro di sx
- viene trasferito al registro di dx
- e viene riportato allingresso del registro di sx stesso
(dopo quattro impulsi di S nel registro di dx stata
trasferita copia del contenuto del registro di sx)
Architettura degli Elaboratori

2009

Fine
00.a

Reti logiche

Architettura degli
Elaboratori

2009

25

Testo di riferimento:
[Congiu] - 2.4 (pagg. 3757)

Reti Logiche Combinatorie


00.b

Analisi
Minimizzazione booleana
Sintesi

Rete logica combinatoria: definizione


Una rete logica combinatoria una rete
logica nella quale, in ogni istante, i valori
presenti alle uscite sono determinati
unicamente dai valori presenti agli ingressi
nel medesimo istante.

34

Una rete logica combinatoria quindi


priva di stato
(non contiene elementi di memoria);
interamente descritta dalla sua
tabella di verit
Architettura degli Elaboratori

2009

Primo esempio: il decodificatore 3/8

Un decodificatore una rete


combinatoria che attiva
li-esima uscita se e solo se
il valore binario codificato
dagli ingressi i

34

Tabella di verit per un decodificatore con 3 ingressi e 23=8 uscite:

Architettura degli Elaboratori

Decodificatore: realizzazione

2009

34

Sono rappresentate
solo le funzioni
F0, F1 e F4.
Le porte NOT
sono rappresentate
con circoletti .

Architettura degli Elaboratori

2009

Porte logiche: notazione algebrica


Nome

Simbolo
grafico

Tabella
di verit

Notazione
algebrica

AND

Y = AB

OR

Y = A+B

NOT

Y=A

XOR

Y=A B

Architettura degli Elaboratori

34

2009

Reti logiche: rappresentazioni

Quanto abbiamo visto per le porte logiche


vale in generale per le reti logiche.
In altre parole, sono tra loro equivalenti
le tre rappresentazioni

34

mediante uno schema grafico


mediante una tabella di verit
mediante una espressione algebrica
Sceglieremo in ciascun caso la rappresentazione
pi opportuna per quel caso.
Architettura degli Elaboratori

2009

Funzione di equivalenza (1 di 3)

34

possibile ottenere E
attraverso la
somma di prodotti
E= AB+AB

2009

Architettura degli Elaboratori

Funzione di equivalenza (2 di 3)

34

... possibile ottenere E


anche attraverso il
prodotto di somme
E= (A+B) (A+B)

Architettura degli Elaboratori

2009

Funzione di equivalenza (3 di 3)

34

Diversi circuiti logici


equivalenti che realizzano
la stessa funzione logica

2009

Architettura degli Elaboratori

Algebra di Boole o booleana

10

34

Lanalisi delle propriet delle espressioni


algebriche costruite da variabili binarie e
operatori logici, si deve al matematico G. Boole
(1815-1864), ed nota come algebra booleana.

S = B(AB) + A(AB)
Architettura degli Elaboratori

?
2009

Algebra di Boole: propriet (1 di 2)


A

A1 = A

A0 = 0

AA = A

AA = 0

A=A

A+0 = A

A+1 = 1

A+A = A

11

34

A+A = 1
Propriet commutativa, associativa e distributiva:
AB = BA

A+B = B+A

A+(B+C) = (A+B)+C

A(BC) = (AB)C
A(B+C) = AB+AC

A+(BC) = (A+B)(A+C)
Architettura degli Elaboratori

Algebra di Boole: propriet (2 di 2)


A

Legge di De Morgan:

2009

12

34

A+B=AB
AB=A+B

Architettura degli Elaboratori

2009

Sintesi di un half-adder (1 di 2)

13

34

S = AB+AB = A B
C = AB

Architettura degli Elaboratori

2009

Sintesi di un half-adder (2 di 2)

14

Utilizziamo lalgebra booleana e le sue propriet


per riscrivere S utilizzando solo porte NAND:

34

S = AB + AB
S = AB AB
S = (AB+BB) (AB+AA)
S = B(A+B) A(A+B)
S = B(AB) A(AB)
Architettura degli Elaboratori

2009

Half-adder con sole porte NAND

15

S = B(AB) A(AB)
C = AB

34

2009

Architettura degli Elaboratori

Sintesi di un full-adder (1 di 2)

16

34

S = ABC + ABC + ABC + ABC


S = (AB + AB)C + (AB + AB)C
S = (A B)C + (A B)C = (A B)

Half-Adder
S = (A B)
C = AB

S = S C
C = ABC + ABC + ABC + ABC
C = (AB + AB)C + AB(C + C) = (A B)C + AB
C = SC + C
Architettura degli Elaboratori

2009

Sintesi di un full-adder (2 di 2)

17

34

S = S

C = SC + C

Architettura degli Elaboratori

Full-adder con sole porte NAND


C = SC + C = SC C

Architettura degli Elaboratori

2009

18

34

2009

Sommatore binario da 4 bit

19

34

Architettura degli Elaboratori

Sommatore binario da 16 bit

2009

20

34

Architettura degli Elaboratori

2009

Minimizzazione: Mappe di Karnaugh (1/7)


Tra le propriet dellalgebra di Boole, le seguenti
consentono di semplificare notevolmente le espressioni
booleane:

21

34

AB + AB = A(B + B) = A
A(BC + BC + BC + BC) = A
Le mappe di Karnaugh sono una particolare forma di
tabella di verit, che consente di individuare
immediatamente la possibilit di fare queste
semplificazioni.

2009

Architettura degli Elaboratori

Minimizzazione: Mappe di Karnaugh (2/7)

22

Ad esempio, la seguente tabella di verit della funzione Y=Y(A,B,C)


A
0
0
0
0
1
1
1
1

B
0
0
1
1
0
0
1
1

C
0
1
0
1
0
1
0
1

Y
0
0
0
1
0
1
1
1

A
B

0
0

0
1

1
1

1
0

pu essere ridisegnata cos: C

34

Mappa di Karnaugh della funzione Y

Nelle mappe di K. i valori della funzione sono scritti dentro le caselle.


Dalla tabella di verit o dalla mappa di Karnaugh immediato ottenere
lespressione booleana della funzione Y come somma di prodotti, cio
come OR di tanti termini AND quante sono le caselle in cui la funzione vale 1;
ciascuno di questi termini AND (detti minterm) costituito dallAND delle
variabili di ingresso, negate oppure no a seconda che il valore della variabile
associato a quella casella sia 0 oppure 1:
Y = ABC + ABC + ABC + ABC

Architettura degli Elaboratori

2009

Minimizzazione: Mappe di Karnaugh (3/7)

23

Nel caso di funzioni di 4 variabili, ad es. Z=Z(A,B,C,D), la mappa di


Karnaugh ha 4 righe e quattro colonne:
A0
CD B 0

0
1

1
1

1
0

00

01

11

10

34

Mappa di Karnaugh della funzione Z

I valori delle variabili A,B,C,D individuano le coordinate delle caselle:


le coppie di valori di A e B (di C e D) associate alle colonne (alle righe)
sono ordinate in modo che tra due caselle adiacenti (della medesima riga
o della medesima colonna) cambi il valore di una sola delle variabili,
mentre quello di tutte le altre rimane lo stesso; ci vale anche tra le
caselle estreme di ciascuna riga e di ciascuna colonna (che possono
quindi essere considerate adiacenti, in senso circolare).
Architettura degli Elaboratori

2009

Minimizzazione: Mappe di Karnaugh (4/7)


In questo modo a ciascuna coppia di caselle adiacenti contrassegnate con il
valore 1 corrispondono, nella espressione booleana, due termini prodotto
(minterm) nei quali una variabile presente negata in uno e non negata
nellaltro, mentre tutte le altre variabili hanno lo stesso valore.

24

34

E` allora possibile semplificare lespressione sostituendo quei due termini


con un unico termine nel quale non pi presente la variabile che cambia
valore.
Ad esempio le ultime due caselle della seconda riga nella mappa della
funzione Y portano alla seguente semplificazione:
ABC + ABC = AC

Architettura degli Elaboratori

2009

Minimizzazione: Mappe di Karnaugh (5/7)


Allo stesso modo, quaterne di caselle adiacenti tutte con il valore 1 (sulla
stessa riga o sulla stessa colonna) corrispondono a quattro termini che si
riducono ad uno; ad esempio le quattro caselle della terza riga nella mappa
della funzione Z portano alla seguente semplificazione:

25

34

CD(AB + AB + AB + AB) = CD
le quattro caselle della terza colonna nella mappa della funzione Z portano
alla seguente semplificazione:
AB(CD + CD + CD + CD) = AB
Cos pure quaterne adiacenti disposte secondo un quadrato producono un
unico termine; ad esempio le quattro caselle in basso a sinistra nella mappa
della funzione Z portano alla seguente semplificazione:
AC(BD + BD + BD + BD) = AC
Analogo discorso vale per gruppi di otto caselle adiacenti tutte con il
valore 1.
2009

Architettura degli Elaboratori

Minimizzazione: Mappe di Karnaugh (6/7)


Per semplificare lespressione di una funzione, si individuano, nella mappa di
K., i gruppi di (2 o 4 o 8) caselle adiacenti con il valore 1.
Spesso conviene sfruttare la propriet A+A=A, che consente di utilizzare
pi volte la stessa casella (lo stesso minterm), per formare gruppi diversi e
ottenere il maggior numero di semplificazioni possibile.
Individuando un insieme di gruppi (da 1, 2, 4 o 8) che copra tutte le caselle
in cui compare il valore 1, si ottiene una espressione semplificata,
costituita dallOR dei termini corrispondenti a ciascun gruppo.

26

34

Ad es. per la funzione Z, si possono individuare i gruppi segnati in figura:


A0
CD B 0

0
1

1
1

1
0

00

01

11

10

AC

AB

BD

Si ottiene, immediatamente, lespressione semplificata: Z=AC+AB+BD


Architettura degli Elaboratori

2009

Minimizzazione: Mappe di Karnaugh (7/7)

27

Funzioni booleane parzialmente definite: il loro valore specificato solo


per alcune combinazioni dei valori delle variabili.
Le altre combinazioni o non si verificano mai o il valore della funzione non
interessa: dont care conditions (d.c.c.).

34

In una mappa di K. spesso utile inserire un valore 1 al posto di d.c.c. (per


formare ulteriori raggruppamenti).
Es. Funzione parzialmente definita W (i trattini individuano d.c.c.):
A
0
0
0
0
1
1
1
1

B
0
0
1
1
0
0
1
1

C
0
1
0
1
0
1
0
1

W
1
1
0

Si possono sostituire due


d.c.c. con altrettanti 1:

A 0
B 0

0
1

1
1

1
0

0
1

1
1

1
0

A 0
B 0

si forma la quaterna con cui si ottiene lespressione semplificata: W = B


2009

Architettura degli Elaboratori

Encoder

28

34

Y0

X0

0
X
X2 X3 1 0

0
1

1
1

1
0

0 0

0 1

1 1

1 0

Y0 = X1 + X3

X0
X1
X2

Analogamente:
Y1 = X2 + X3

Architettura degli Elaboratori

Y0

Y1

X3

2009

Multiplexer

29

34

X0
X1
Y

X7

DEC 3/8

C2 C1 C0
2009

Architettura degli Elaboratori

Demultiplexer

30

34

Y0
Y1
Y2

Y3

DEC 2/4

C1 C0
Architettura degli Elaboratori

2009

Sintesi a due livelli

31

34

Sintesi come somma di prodotti

Architettura degli Elaboratori

Sintesi tramite PLA

2009

32

PLA = Programmable Logic Array


34

Tipicamente, p < 2i
Architettura degli Elaboratori

2009

Sintesi tramite ROM (1 di 2)

33

34

Architettura degli Elaboratori

Sintesi tramite ROM (2 di 2)

2009

34

34

Architettura degli Elaboratori

2009

Fine
00.b

Reti logiche combinatorie

Minimizzazione booleana tramite Mappe di Karnaugh


Tra le propriet dellalgebra di Boole, le seguenti consentono di semplificare notevolmente le
espressioni booleane:
AB + AB = A(B + B) = A
A(BC + BC + BC + BC) = A
Le mappe di Karnaugh sono una particolare forma di tabella di verit, che consente di individuare
immediatamente la possibilit di fare queste semplificazioni.
Ad esempio, la seguente tabella di verit della funzione Y = Y(A,B,C)
A
0
0
0
0
1
1
1
1

B
0
0
1
1
0
0
1
1

C
0
1
0
1
0
1
0
1

Y
0
0
0
1
0
1
1
1

pu essere ridisegnata cos:

A 0
B 0
C
0
0

0
1

1
1

1
0

Mappa di Karnaugh della funzione Y

Dalla tabella di verit o dalla mappa di Karnaugh immediato ottenere lespressione booleana della
funzione Y come somma di prodotti, cio come OR di tanti termini AND quante sono le caselle in
cui la funzione vale 1; ciascuno di questi termini AND (detti minterm) costituito dallAND delle
variabili di ingresso, negate oppure no a seconda che il valore della variabile associato a quella
casella sia 0 oppure 1.
Y = ABC + ABC + ABC + ABC
Nel caso di funzioni di 4 variabili, ad es. Z = Z(A,B,C,D), la mappa di Karnaugh ha 4 righe e
quattro colonne:
A0
CD B 0

0
1

1
1

1
0

00

01

11

10

Mappa di Karnaugh della funzione Z


Nelle mappe di Karnaugh i valori della funzione Y sono scritti dentro le caselle.
I valori delle variabili A,B,C,D sono indicati come coordinate delle caselle. Esaminando queste
coordinate, si constata che le coppie di valori di A e B (di C e D) associate alle colonne (alle righe)
sono ordinate in modo che tra due caselle adiacenti (della medesima riga o della medesima colonna)
cambia il valore di una sola delle variabili, mentre quello di tutte le altre rimane lo stesso; questa
propriet vale anche tra le caselle estreme di ciascuna riga e di ciascuna colonna (che, sotto questo
aspetto, possono quindi essere considerate adiacenti, in senso circolare).

Si osserva che, in virt di questo fatto, a ciascuna coppia di caselle adiacenti contrassegnate con il
valore 1 corrispondono, nella espressione booleana, due termini prodotto (minterm) nei quali una
variabile presente negata in uno e non negata nellaltro, mentre tutte le altre variabili hanno lo
stesso valore. E` allora possibile semplificare lespressione sostituendo quei due termini con un unico
termine nel quale non pi presente la variabile che cambia valore. Ad esempio le ultime due caselle
della seconda riga nella mappa della funzione Y portano alla seguente semplificazione:
ABC + ABC = AC
Allo stesso modo, quaterne di caselle adiacenti tutte con il valore 1 (sulla stessa riga o sulla stessa
colonna) corrispondono a quattro termini che si riducono ad uno; ad esempio le quattro caselle della
terza riga nella mappa della funzione Z portano alla seguente semplificazione:
CD(AB + AB + AB + AB) = CD
le quattro caselle della terza colonna nella mappa della funzione Z portano alla seguente
semplificazione:
AB(CD + CD + CD + CD) = AB
Cos pure quaterne adiacenti disposte secondo un quadrato producono un unico termine; ad
esempio le quattro caselle in basso a sinistra nella mappa della funzione Z portano alla seguente
semplificazione:
AC(BD + BD + BD + BD) = AC
Analogo discorso vale per gruppi di otto caselle adiacenti tutte con il valore 1.
Per semplificare lespressione booleana di una funzione, si tratta dunque di individuare, nella relativa
mappa di Karnaugh, i gruppi di (2 o 4 o 8) caselle adiacenti con il valore 1.
Nel far ci conviene tenere presente la propriet A+A=A, che consente di utilizzare pi volte la
stessa casella (ovvero pi volte lo stesso minterm nellespressione booleana), per formare gruppi
diversi, al fine di operare il maggior numero di semplificazioni possibile.
Individuando un insieme di gruppi (da 1, 2, 4 o 8) che copre tutte le caselle in cui compare il valore 1,
si ottiene una espressione semplificata, costituita dallOR dei termini corrispondenti a ciascun gruppo.
Riprendendo lesempio della funzione Z, si possono individuare i gruppi segnati in figura:
A0
CD B 0

0
1

1
1

1
0

00

01

11

10

AC

AB

B D

Con questi raggruppamenti si ottiene, immediatamente, lespressione semplificata di Z:


Z = A C + A B + B D
Nellesempio si pu osservare che si sono considerate adiacenti anche le caselle estreme delle righe
o delle colonne.
Si osserva che si possono individuare diversi raggruppamenti che coprono tutte le caselle in cui Z
vale 1, ciascuno dei quali porta a diverse espressioni di Z equivalenti (pi o meno semplificate).
2

Funzioni booleane parzialmente definite


Una funzione booleana si dice parzialmente definita se il suo valore specificato solo per alcune
combinazioni dei valori delle variabili.
Nella pratica si ha a che fare con funzioni booleane parzialmente definite in due casi: o quando le
altre combinazioni dei valori delle variabili non si possono verificare mai, oppure quando, anche se si
verificano, i corrispondenti valori della funzione non importano (possono essere indifferentemente 0
od 1, perch comunque non vengono usati).
Nella tabella di verit (o nella mappa di Karnaugh) di una funzione parzialmente definita, i valori non
specificati sono comunemente indicati con un trattino e corrispondono a ci che si chiama
condizioni di indifferenza, ovvero dont care conditions (d.c.c.).
La presenza delle d.c.c. nelle caselle di una mappa di Karnaugh pu essere convenientemente
sfruttata, sostituendone alcune con il valore 1, al fine di ottenere gruppi (da 2, 4, 8) che portano a
semplificare lespressione della funzione.
Ad esempio, considerando la funzione parzialmente definita W la cui tabella di verit riportata qui
sotto insieme con la relativa mappa di Karnaugh:
A
0
0
0
0
1
1
1
1

B
0
0
1
1
0
0
1
1

C
0
1
0
1
0
1
0
1

W
1
1
0

Si possono sostituire due


d.c.c. con altrettanti 1:

A 0
B 0

0
1

1
1

1
0

A 0
B 0

0
1

1
1

1
0

e individuare la quaterna che consente di ottenere la seguente espressione semplificata di W:


W = B

Sintesi di un encoder
Si ricorda che il funzionamento di un encoder basato sullipotesi che, in ogni istante, una e una sola
delle variabili di ingresso abbia il valore 1.
Si consideri il caso dellencoder con 4 ingressi e due uscite:
X0
X1
X2

ENC
4/2

Y0
Y1

X3
Le due funzioni duscita Y0 ed Y1 sono, dunque, parzialmente definite perch le combinazioni di valori
delle variabili dingresso diverse da quelle in cui vi un solo valore uguale ad 1 non si possono
presentare mai (la rete logica a monte sar tale da produrre valori di Xi che soddisfano questa
ipotesi).
Delle 16 righe della tabella di verit sono significative solo le 4 nelle quali Y0 ed Y1 sono definite:
X0

X1

X2

X3

Y1

Y0

La corrispondente mappa di Karnaugh per la funzione Y0 :


X0 0
X2 X3 X1 0

0
1

1
1

1
0

0 0

0 1

1 1

1 0

Sfruttando le condizioni di indifferenza (d.c.c.) presenti in questa mappa, si possono disegnare i due
raggruppamenti da 8 caselle indicati in figura:
X0 0
X2 X3 X1 0

0
1

1
1

1
0

0 0

0 1

1 1

1 0

E ottenere lespressione semplificata: Y0 = X1 + X3


Analogamente si pu ottenere:

Y1 = X2 + X3
4

C -1

Approfondimento su binary adder:


adder:
Carry Look Ahead

A0
B0

'

A1
B1

'

A2
B2

'

A3
B3

'

!'

S0
C0
S1
C1
S2
C2
S3

Ai

!"#$
!
"#%!&

pi

'

Bi

gi

Si

'

C i-1
Ci

()

pi= Ai Bi

(S)

S i = p i C i-1

gi= AiBi

(C)

C i = g i + p i C i-1

C3

*
* !')
!')
C -1
A0
B0

'

A1
B1

'

A2
B2
A3
B3

S0

S1

S2

'

C2
S3

'

(S)

gi= AiBi

(C)

+
C -1

C i = g i + p i C i-1

C0

C1

pi= Ai Bi

C 0 = g 0 + p 0 C 1
C1= g1+ p1C0
= g 1 + p 1 g 0 + p 1 p 0 C 1

A0
B0

'

A1
B1

'

C2= g2+ p2C1


= g 2 + p 2 g 1 + p 2 p 1 g 0 + p 2 p 1 p 0 C 1

A2
B2

'

C 3 = g3 + p3 C 2
= g3 + p3 g 2 + p3 p 2 g 1 + p3 p 2 p 1 g 0 +
+ p3 p 2 p 1 p 0 C 1

A3
B3

'

C3

A1
B1
A2
B2
A3
B3

'

S0

'

S1

C1

'

S2

C2

'

S3

C1

C2

Sia il tempo di propagazione attraverso una porta


S 2 OR, AND, XOR:
gi e pi si ottengono (da A i e B i) in un tempo ,
per ottenere Ci servono altri 2 : uno per le AND e
uno per le OR; in tutto 3 a partire da A i e B i.
S 3 per sveltire il calcolo si possono ottenere i riporti
Ci con una rete combinatoria apposita:

CLA (Carry Look-Ahead)

ponendo:
G0 = g3 + p3 g 2 + p3 p 2 g 1 + p3 p 2 p 1 g 0
P0 = p3 p 2 p 1 p 0

-'
!

si pu scrivere:
C3 = G0 + P0 C 1

C2

allora possibile iterare il metodo di CLA, applicandolo a


4 4-bit adder.

g3
p3

C3

C1

g2
p2

C i = g i + p i C i-1

S1

Vediamo come:
C3 = g3 + p3 g 2 + p3 p 2 g 1 + p3 p 2 p 1 g 0 + p3 p 2 p 1 p 0 C 1

C0

g1
p1

(S)
(C)

Per operandi con pi di 4 bit, la rete CLA diventa troppo complessa:


conviene usare due livelli di CLA

g0
p0

C0

pi= Ai Bi
gi= AiBi

/
/ !' -.'

C -1

A0
B0

S0
C0

C3

"

*
* !' -.'

C 3 = g3 + p3 g 2 + p3 p 2 g 1 + p3 p 2 p 1 g 0 + p3 p 2 p 1 p 0 C 1

C3
,

/
/ !' -.'
Per operandi con pi
di 4 bit, la rete CLA
diventa troppo
complessa:
conviene usare due
livelli di CLA

C -1
A 0 ..A 3
B 0 ..B 3
A 4 ..A 7
B 4 ..B 7
A 8 ..A 11
B 8 ..B 11
A 12 ..A 15
B 12 ..B 15

'

S 0 ..S 3

'

S 4..S 7

'

S 8..S 11

'

S 12 ..S 15

-'

C3

P0

-'

C7

-'

C 15

C3

G1
P1

-'

C 11

G0

G2
P2

C7

-'

(2livello)

C 11

G3
P3

C 15
0

Testo di riferimento:
[Congiu] - 2.5 (pagg. 5776)

Reti Logiche Sequenziali


00.d

Latch e flip-flop
Sintesi
Reti sincrone

Rete logica sequenziale: definizione


Una rete logica sequenziale una rete logica
nella quale i valori presenti alle uscite sono
determinati dai valori presenti agli ingressi
e dal valore dello stato in cui si trova il
sistema.

33

Una rete logica sequenziale:


contiene elementi di memoria
descritta da una tabella di verit che
contiene anche lo stato del sistema
Architettura degli Elaboratori

2009

Elementi di memoria: cosa vedremo

Latch: sensibili al livello dei segnali dingresso


Latch di tipo R-S
Latch di tipo R-S con clock
Latch di tipo D
Latch di tipo J-K

33

Flip-flop: sensibili ai fronti dei segnali dingresso


Flip-flop di tipo T (2 versioni)
Flip-flop di tipo D
Flip-flop di tipo J-K
2009

Architettura degli Elaboratori

Elementi di memoria: latch di tipo R-S

33

Q
0
0
0
0
1
1
1
1

R
0
0
1
1
0
0
1
1

S
0
1
0
1
0
1
0
1

Q
0
1
0
1
1
0
-

Architettura degli Elaboratori

R = Reset
S = Set
S=1

R=1
Q=0

S=1
Q=1

R=1
Dont care

diagramma di stato
2009

Latch di tipo R-S con clock

33

Gli ingressi R e S esercitano il loro effetto solo


quando il clock C ha valore logico 1
Architettura degli Elaboratori

Latch di tipo D

2009

33

Nel latch R-S la configurazione R=S=1 non


un input valido.
Il latch D risolve questo problema.
Architettura degli Elaboratori

2009

Latch di tipo D con ingressi asincroni

33

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

NOR
1
0
0
0
0
0
0
0

Asincrono (C = 0) : si comporta come un


Latch R-S
Sincrono (R=S=0) : si comporta come un
Latch D
Nota: una porta NOR a 3 ingressi
con il terzo ingresso nullo si comporta
come una porta NOR a 2 ingressi
2009

Architettura degli Elaboratori

Latch di tipo J-K

33

C=1

Q
0
0
0
0
1
1
1
1

K
0
0
1
1
0
0
1
1

J
0
1
0
1
0
1
0
1

Q
0
1
0
1
1
1
0
0

tabella delle transizioni


Architettura degli Elaboratori

C=1

J=1

Q=0

Q=1
K=1

diagramma di stato
2009

Latch di tipo J-K

J=K=1 funzione di toggle

C=1

Q
0
0
0
0
1
1
1
1

K
0
0
1
1
0
0
1
1

J
0
1
0
1
0
1
0
1

Q
0
1
0
1
1
1
0
0

Luscita Q viene invertita


ripetutamente.
La durata del clock C deve
essere calibrata per generare
una sola commutazione di Q.

33

tabella delle transizioni


2009

Architettura degli Elaboratori

Flip-flop di tipo T (1 di 2)

10

33

Latch : sensibile al livello 0/1


Flip-flop : sensibile ai fronti
salita/discesa

Architettura degli Elaboratori

2009

Flip-flop di tipo T (2 di 2)

11

33

Q
0
0
1
1

T
0
1
0
1

Q
0
1
1
0

T 1

T 0
Q=0

T 0
Q=1

T 1

diagramma di stato
2009

Architettura degli Elaboratori

Flip-flop di tipo D (Master-Slave)

12

Ingresso e uscita: disaccoppiati

33

Il flip-flop slave memorizza il valore


in ingresso sul fronte di discesa,
con un ritardo di mezzo ciclo di clock

Architettura degli Elaboratori

2009

Shift register con flip-flop Master-Slave


La propriet di disaccoppiare gli ingressi dalle uscite,
consentita dai flip-flop di tipo Master-Slave, risulta
utile nella costruzione di registri a scorrimento.

Architettura degli Elaboratori

13

33

2009

Flip-flop di tipo J-K

14

33

Unaltra configurazione di flip-flop di tipo Master-Slave


quella del flip-flop J-K.
Il funzionamento si distingue dal latch J-K per:
- la commutazione sui fronti di discesa anzich sul livello
- il disaccoppiamento uscita/ingresso tipico
della configurazione Master-Slave
Architettura degli Elaboratori

2009

Flip-flop di tipo J-K

15

33

2009

Architettura degli Elaboratori

Flip-flop T sensibile ai fronti

16

Se eliminiamo gli ingressi J e K da un flip-flop J-K si


ottiene un flip-flop T sensibile ai fronti di discesa.
Luscita oscilla tra 0 ed 1 commutando in corrispondenza
dei fronti di discesa.

Q
0
0
1
1

T
0
1
0
1

Q
1
0
0
1

T 0

T 1
Q=0

33

T 1
Q=1

T 0

tabella delle transizioni


Architettura degli Elaboratori

diagramma di stato
2009

Esempio: contatore binario

17

33

U3
U2
U1
U0
C

tx

Allistante tx si ha: U3 U2 U1 U0 = 0 1 1 12 = 7
Architettura degli Elaboratori

2009

Sintesi delle reti sequenziali (1 di 2)

18

33

Lo stato del sistema contenuto in elementi di memoria:


per Z stati servono P= log2Z bit di memoria.
Ad ogni istante, una rete combinatoria fornisce le uscite
e il nuovo valore dello stato in funzione degli ingressi.
Architettura degli Elaboratori

2009

Sintesi delle reti sequenziali (2 di 2)

19

Una oculata scelta delle variabili di stato riduce la


complessit della parte combinatoria, ma non ci sono
regole generali da seguire.

33

Per la sintesi della rete combinatoria si applicano


le tecniche gi illustrate in precedenza.
Spesso la rete viene realizzata in due parti separate,
secondo uno dei due modelli seguenti:
modello della macchina di Mealy (1955);
modello della macchina di Moore (1956).
I due modelli sono funzionalmente equivalenti.
Architettura degli Elaboratori

2009

Sintesi: macchina di Mealy

20

33

Rete combinatoria C1: fornisce le uscite in funzione degli ingressi


e dello stato.
Rete combinatoria C2: fornisce il nuovo stato in funzione degli
ingressi e del vecchio stato (= stato allistante precedente).
Architettura degli Elaboratori

2009

Sintesi: macchina di Moore

21

33

Rete combinatoria C2: fornisce le uscite in funzione del solo stato.


Rete combinatoria C1: fornisce il nuovo stato in funzione degli
ingressi e del vecchio stato.
Architettura degli Elaboratori

2009

Parte combinatoria: sintesi con ROM

22

33

1.Rete generica: (M+P)2N+P bit di ROM;


2.Mealy: M2N+P + P2N+P = (M+P)2N+P bit (come sopra);
3.Moore: P2N+P + M2P bit (sembra minore, ma il numero
di stati P in genere maggiore).
Architettura degli Elaboratori

2009

Esempio di sintesi: interruttore

23

Un interruttore i, due lampadine l1 e l2.


Assegnazione degli stati logici allinterruttore e alle lampadine:
0 = interruttore aperto, 1 = interruttore chiuso (premuto);
0 = lampadina spenta, 1 = lampadina accesa.

33

Specifica di funzionamento
Interruttore aperto (X=0):
le lampadine sono entrambe spente (Y1=Y2=0).
Interruttore chiuso (X=1):
si accende a turno una delle due lampadine.
Architettura degli Elaboratori

2009

Esempio di sintesi: diagramma di stato


4 stati

24

33

2 bit di stato

Specifica di funzionamento
Interruttore aperto (X=0):
le lampadine sono entrambe spente (Y1=Y2=0).
Interruttore chiuso (X=1):
si accende a turno una delle due lampadine.
Architettura degli Elaboratori

2009

Esempio di sintesi: modello

25

33

Architettura degli Elaboratori

Esempio di sintesi: parte combinatoria

2009

26

33

Architettura degli Elaboratori

2009

Esempio di sintesi: versione 1


Y1 = S1X
Y2 = S1X

27

S1 = Y2 + (S1 S2)X
S2 = X

33

Latch R-S come elementi di memoria: rete sequenziale asincrona


Architettura degli Elaboratori

Esempio di sintesi: revisione


S2 = X: si pu fare a meno di S2?
SI, ma i cambiamenti di stato devono avvenire
sulle transizioni di X

2009

28

33

S=0: la prossima lampadina ad accendersi sar l1


S=1: la prossima lampadina ad accendersi sar l2
Architettura degli Elaboratori

2009

Esempio di sintesi: versione 2

29

33

Serve un flip-flop, e di tipo master-slave.


Architettura degli Elaboratori

Esempio di sintesi: versione 3

2009

30

S = S X descrive un flip-flop di tipo T


33

Architettura degli Elaboratori

2009

Sincronizzazione di pi reti

31

Nelle reti logiche reali i tempi di propagazione sono


non nulli: questo pu essere uno svantaggio, ma
consente anche di operare simultaneamente i diversi
passi di una catena di elaborazioni:

33

Le uscite allistante t della rete Ci fungono da ingressi


per la rete Ci+1 allistante ti+1 (pipeline).
Un clock sincronizza le elaborazioni, assicurando che
gli elementi di memoria Si acquisiscano valori corretti.
2009

Architettura degli Elaboratori

Limiti sul periodo del clock

32

Diagramma temporale del sistema precedente:


33

tcy: periodo del clock


ts: tempo di sicurezza
td: tempo di memorizzaz.
tp: tempo di propagazione

Deve essere:
tcy ts+ td+ tp
Architettura degli Elaboratori

2009

Ingressi e uscite nei medesimi registri

33

33

Ingressi e uscite della rete combinatoria


sono memorizzati nei medesimi elementi di stato.
Architettura degli Elaboratori

2009

Fine
00.d

Reti logiche sequenziali

Reti Logiche Sequenziali


00.e

Cenni sugli
Automi a stati finiti

Automa a stati finiti: definizione


Un automa a stati finiti deterministico (DFA
Deterministic Finite Automaton) una quintupla
(Q, , , qi, F) dove:
Q un insieme finito di k 2 stati
{q0, q1, qk-1}
un alfabeto finito di l 1 simboli dingresso
{s0, s1, , sl-1}
la funzione di transizione di stato
: Qx
Q
(q, s) lo stato futuro in cui lautoma si porter se, a
partire dallo stato q, il simbolo di ingresso s
qi Q lo stato iniziale
F Q il sottoinsieme degli m 1 stati finali (di
accettazione)
F = {qf0, qf1, qf(m-1)}
Architettura degli Elaboratori

10

2010

Esempio: distributore di caff

1. Un caff costa 40c


2. Si accettano monete da 10c e da 20c
3. Raggiunti 40c (o 50c, se si sbaglia, non d resto)
prepara il caff

10

Quanti stati servono?


Uno per ogni quantit di soldi parziale raggiunta
0c
10c
20c
30c
40c

q0
q1
q2
q3
q4

2010

Architettura degli Elaboratori

DFA del caff (1/2)

20c
0c

0c

q0

10c

0c

q1

10c

0c

q2

20c

10c

(0c)

q3

10c, 20c

10

q4

20c

Q = {q0, q1, q2, q3, q4}


= {0c, 10c, 20c}
= [vedi tabella successiva]
qi = q0
F = {q4}
Architettura degli Elaboratori

2010

DFA del caff (2/2)

20c
0c

0c

q0

10c

0c

q1

10c

0c

q2

10c

20c

(0c)

q3

10c, 20c

q4

20c

0c

10c

20c

q0

q0

q1

q2

q1

q1

q2

q3

q2

q2

q3

q4

q3

q3

q4

q4

q4

--

--

--

Input

10

Stato corrente

Architettura degli Elaboratori

Il sistema ha anche unuscita

Nellesempio luscita (binaria) rappresentata


dal comando di preparazione del caff

In generale un DFA deve includere la possibilit


di generare uscite: diventa una macchina a
stati finiti (deterministica)

Esistono due definizioni che si dimostrano


sostanzialmente equivalenti: la macchina di
Mealy e la macchina di Moore

Architettura degli Elaboratori

2010

10

2010

La macchina di Mealy

Una macchina di Mealy una sestupla


(Q, , , , , qi) dove Q, , , e qi hanno lo
stesso significato del DFA,

un alfabeto finito di n 1 simboli duscita


{d0, d1, dn-1}

la funzione di uscita
: Qx
(q, s) il valore delluscita che la macchina
produrr nella transizione dallo stato q con
simbolo di ingresso s
La macchina ha generalmente un funzionamento
continuativo e pertanto non vengono esplicitati
stati finali (di accettazione; hanno pi senso in
altre applicazioni del DFA)

10

2010

Architettura degli Elaboratori

Macchina Mealy del caff

20c/0
0c/0

0c/0

q0

10c/0

0c/0

q1

10c/0

10

0c/0

q2

10c/0

q3

20c/0
20c/1
10c, 20c/1

Il valore dellingresso e la corrispondente uscita


etichettano ogni transizione
Lo stato finale q4 diventa inutile: luscita a 1 si ha al
ritorno allo stato iniziale
Architettura degli Elaboratori

2010

La macchina di Moore

Una macchina di Moore una sestupla


(Q, , , , , qi) dove Q, , , , qi hanno lo
stesso significato di quella di Mealy,

la funzione di uscita
:Q
(q) il valore delluscita quando la macchina si
trova nello stato q
Si pu dimostrare che data una macchina di
Mealy (Moore) possibile trovare una macchina
di Moore (Mealy) equivalente nel
comportamento ingresso/uscita

10

A parit di problema, la soluzione con la macchina di


Moore pu necessitare di pi stati rispetto alla soluzione
con la macchina di Mealy perch questultima in grado di
produrre uscite diverse a partire dallo stesso stato con
ingressi diversi
2010

Architettura degli Elaboratori

Macchina Moore del caff

20c
0c

q0/0

0c

10c

q1/0

0c

10c

q2/0

20c

10

0c

10c

q3/0

10c, 20c

q4/1

20c
0c

Siamo tornati a 5 stati: q4 ci serve per produrre


luscita 1 prima di tornare allo stato iniziale
Architettura degli Elaboratori

2010

Esercizio proposto

10

Realizzare, sia in forma di macchina di Mealy che di


Moore, il controllo di un ascensore di un edificio con piano
terra e primo piano

Lingresso costituito dallimpostazione della tastiera


(N=nessun tasto premuto, T=premuto tasto Terra,
P=premuto tasto Primo piano) e dalla posizione corrente
dellascensore (T=posizione di Terra, I=posizione
intermedia tra i piani, P=posizione di Primo piano)

Luscita costituita dal comando da fornire al controllo


dellascensore (F=fermo, A=verso lalto, B=verso il basso)

Dopo aver progettato le macchine usando i simboli


descritti sopra, si ipotizzi una codifica binaria per lo
stato, gli ingressi e le uscite

In base a questa codifica si definiscano le funzioni di


transizione di stato e duscita per le 2 macchine

Architettura degli Elaboratori

10

2010

Fine
00.e

Cenni sugli
Automi a stati finiti

Testo di riferimento:

Sintesi

Minimizzazione booleana

Analisi

Reti Logiche Combinatorie

[Congiu] - 2.4 (pagg. 3757)

00.b

marted 29 marzo 2011

Rete logica combinatoria: definizione

Una rete logica combinatoria una rete logica nella


quale, in ogni istante, i valori presenti alle uscite sono
determinati unicamente dai valori presenti agli
ingressi nel medesimo istante.
Una rete logica combinatoria quindi
priva di stato
(non contiene elementi di memoria);
interamente descritta dalla sua
tabella di verit

Architettura degli Elaboratori


marted 29 marzo 2011

34

2009

Primo esempio: il decodificatore 3/8

Un decodificatore una rete


combinatoria che attiva
li-esima uscita se e solo se
il valore binario codificato
dagli ingressi i

34

2009

Tabella di verit per un decodificatore con 3 ingressi e 23=8 uscite:

Architettura degli Elaboratori


marted 29 marzo 2011

Decodificatore: realizzazione

Sono rappresentate
solo le funzioni
F0, F1 e F4.
Le porte NOT
sono rappresentate
con circoletti !.

Architettura degli Elaboratori


marted 29 marzo 2011

34

2009

Porte logiche: notazione algebrica

Y = AB

Nome
AND

Y = A+B

34

2009

Notazione
algebrica

OR

Y=A

Tabella
di verit

NOT

Y = AB

Simbolo
grafico

XOR
Architettura degli Elaboratori
marted 29 marzo 2011

Reti logiche: rappresentazioni

Quanto abbiamo visto per le porte logiche vale


in generale per le reti logiche.
In altre parole, sono tra loro equivalenti
le tre rappresentazioni
mediante uno schema grafico
mediante una tabella di verit

mediante una espressione algebrica

34

2009

Sceglieremo in ciascun caso la rappresentazione


pi opportuna per quel caso.
Architettura degli Elaboratori
marted 29 marzo 2011

E= AB+AB

34

2009

possibile ottenere E
attraverso la
somma di prodotti

Funzione di equivalenza (1 di 3)

Architettura degli Elaboratori


marted 29 marzo 2011

E= (A+B) (A+B)

34

2009

... possibile ottenere E


anche attraverso il
prodotto di somme

Funzione di equivalenza (2 di 3)

Architettura degli Elaboratori


marted 29 marzo 2011

34

2009

Diversi circuiti logici


equivalenti che realizzano la
stessa funzione logica

Funzione di equivalenza (3 di 3)

Architettura degli Elaboratori


marted 29 marzo 2011

Algebra di Boole o booleana

10

34

2009

Lanalisi delle propriet delle espressioni


algebriche costruite da variabili binarie e
operatori logici, si deve al matematico G. Boole
(1815-1864), ed nota come algebra booleana.

S = B(AB) + A(AB)
Architettura degli Elaboratori
marted 29 marzo 2011

A1 = A
A+0 = A

A0 = 0

A+1 = 1

AA = A

A+A = A

AA = 0

Algebra di Boole: propriet (1 di 2)


A

A=A
A+A = 1

A+B = B+A

A(B+C) = AB+AC

A(BC) = (AB)C

Propriet commutativa, associativa e distributiva:


AB = BA

A+(B+C) = (A+B)+C
A+(BC) = (A+B)(A+C)
Architettura degli Elaboratori

marted 29 marzo 2011

11

34

2009

Algebra di Boole: propriet (2 di 2)


A

Legge di De Morgan:

A+B=AB

AB=A+B

Architettura degli Elaboratori


marted 29 marzo 2011

12

34

2009

Sintesi di un half-adder (1 di 2)

S = AB+AB = AB
C = AB

Architettura degli Elaboratori


marted 29 marzo 2011

13

34

2009

Sintesi di un half-adder (2 di 2)

14

34

2009

Utilizziamo lalgebra booleana e le sue propriet


per riscrivere S utilizzando solo porte NAND:
S = AB + AB
S = AB AB
S = (AB+BB) (AB+AA)
S = B(A+B) A(A+B)
S = B(AB) A(AB)

Architettura degli Elaboratori


marted 29 marzo 2011

Half-adder con sole porte NAND


S = B(AB) A(AB)
C = AB

Architettura degli Elaboratori


marted 29 marzo 2011

15

34

2009

Sintesi di un full-adder (1 di 2)

Half-Adder
S = ABC + ABC + ABC + ABC
S = (AB + AB)C + (AB + AB)C
S = (AB)
S = (AB)C + (AB)C = (AB) C
C = AB
S = S C
C = ABC + ABC + ABC + ABC
C = (AB + AB)C + AB(C + C) = (AB)C + AB
C = SC + C
Architettura degli Elaboratori
marted 29 marzo 2011

16

34

2009

Sintesi di un full-adder (2 di 2)

S = S C
C = SC + C

Architettura degli Elaboratori


marted 29 marzo 2011

17

34

2009

Full-adder con sole porte NAND


C = SC + C = SC C

Architettura degli Elaboratori


marted 29 marzo 2011

18

34

2009

Sommatore binario da 4 bit

Architettura degli Elaboratori


marted 29 marzo 2011

19

34

2009

Sommatore binario da 16 bit

Architettura degli Elaboratori


marted 29 marzo 2011

20

34

2009

Sintesi di reti combinatorie (4)


Rete combinatoria

1 a 1 con lespressione principale ottenuta


realizzazione a due livelli AND-to-OR dalla
forma normale canonica
progettata secondo obiettivi

minimizzazione del costo


minimizzazione del tempo di propagazione
vincoli sugli elementi/componenti disponibili
(porte elementari, circuiti integrati MSI, LSI,
VLSI)

marted 29 marzo 2011

21

Tecniche di minimizzazione
Rete combinatoria

rete a componenti discreti (porte elementari AND, OR,


NOT,
tecniche di minimizzazione con logica discreta

22

disponibili tecniche sistematiche per la progettazione di reti a


due livelli AND-to-OR (SOP) and OR-to-AND (POS)
N.B.: le reti a due livelli sono le pi veloci in relazione alla
realizzazione di una qualsiasi funzione

marted 29 marzo 2011

Tecniche di minimizzazione (2)


Criteri di ottimalit - reti

una rete a due livelli AND-to-OR minimale se ha

il numero minimo di porte AND,


tra tutte le reti che hanno numero minimo di porte AND, ha il
minimo numero di ingressi alle porte AND

una rete a due livelli OR-to-AND minimale se ha

23

il numero minimo di porte OR,


tra tutte le reti che hanno numero minimo di porte OR, ha il
minimo numero di ingressi alle porte OR

marted 29 marzo 2011

Tecniche di minimizzazione (4)


Criteri di ottimalit - esempio
espressioni

24

le due espressioni sono equivalenti; il numero di prodotti si


riduce; nel caso specifico viene rimossa anche loperazione di
somma

reti

marted 29 marzo 2011

Tecniche di minimizzazione (5)


Minimizzazione

due minterm sono adiacenti quando differiscono in esattamente


una variabile
due termini prodotto (non obbligatoriamente minterm) sono
adiacenti quando differiscono in esattamente una variabile
ladiacenza consente di accoppiare i termini, eliminando la
variabile di differenziazione, usando distributivit e
complementariet

Tecniche di minimizzazione

riconoscere ed accoppiare opportunamente i termini adiacenti

marted 29 marzo 2011

25

Tecniche di minimizzazione (6)


Tecniche di minimizzazione

riconoscere ed accoppiare opportunamente i


termini adiacenti

metodo algebrico
metodi grafici (mappe; valido fino a 4 variabili)
metodi tabulari

marted 29 marzo 2011

26

Mappe di Karnaugh (3)


Riorganizzazione tabella di verit
Mappe di Karnaugh

1100

1001

1000

10

0100

1101

1011

00

0000

0101

1111

1010

0001

0111

1110

11

0011

0110

01

0010

000

011

010

111

110

101

100

27

001

commutazioni delle variabili indipendenti


(etichettatura regioni)

Variabili pi significative
Variabili meno
significative

marted 29 marzo 2011

Minimizzazione: Mappe di Karnaugh (1/7)

Tra le propriet dellalgebra di Boole, le seguenti


consentono di semplificare notevolmente le espressioni
booleane:
AB + AB = A(B + B) = A
A(BC + BC + BC + BC) = A

Le mappe di Karnaugh sono una particolare forma di


tabella di verit, che consente di individuare
immediatamente la possibilit di fare queste
semplificazioni.

Architettura degli Elaboratori


marted 29 marzo 2011

21

34

2009

Minimizzazione: Mappe di Karnaugh (2/7)

Architettura degli Elaboratori


marted 29 marzo 2011

22

34

2009

Minimizzazione: Mappe di Karnaugh (3/7)

Architettura degli Elaboratori


marted 29 marzo 2011

23

34

2009

Minimizzazione: Mappe di Karnaugh (4/7)

Architettura degli Elaboratori


marted 29 marzo 2011

24

34

2009

Minimizzazione: Mappe di Karnaugh (5/7)

Architettura degli Elaboratori


marted 29 marzo 2011

25

34

2009

Minimizzazione: Mappe di Karnaugh (6/7)

Architettura degli Elaboratori


marted 29 marzo 2011

26

34

2009

34

Termini prodotto-Mappe Karnaugh (2)


Cubi

Adiacenti!!!

dimensione inversamente proporzionale al numero di letterali


presenti nei termini prodotto
ogni letterale implica unintersezione
anche un prodotto di 1 solo letterale un cubo (3-cubo)
Un k-cubo contiene 2k quadrati

marted 29 marzo 2011

35

Termini prodotto-Mappe Karnaugh (3)


Cubi

vedere testo ulteriori casi e adiacenze

2 letterali (2-cubo)

marted 29 marzo 2011

36

Termini prodotto-Mappe Karnaugh (4)


Cubi
3 letterali (1-cubo)
0

vedere testo ulteriori casi e adiacenze

4 letterali (0-cubo)

marted 29 marzo 2011

Condizioni Dont care


Condizioni dont care (indifferenti o non
specificate)

37

combinazioni di ingressi che non si verificano mai (per


esempio ingressi BCD, per i quali alcune combinazioni non
sono consentite non essendo rappresentative di nessuna cifra tra
0 e 9)
uscita il cui valore indifferente in determinate combinazioni
degli ingressi

In talune situazioni il valore delluscita di una rete (il


valore della funzione booleana desiderata) pu essere
liberamente scelto (0 o 1) per alcune combinazioni degli
ingressi

marted 29 marzo 2011

Condizioni Dont care (2)

38

Il grado di libert consentito dalle


condizioni Dont care viene utilizzato per
minimizzare lespressione
Notazione

simbolo dont care:


funzioni obiettivo con condizioni dont care:

marted 29 marzo 2011

Minimizzazione: Mappe di Karnaugh (7/7)

Architettura degli Elaboratori


marted 29 marzo 2011

27

34

2009

Condizioni Dont care (3)


Esempio

40

Sia dato un ingresso corrispondente ad una cifra


decimale codificata in BCD; scrivere una
funzione di commutazione per determinare se la
cifra dispari (uscita = 1), e progettare una rete
che realizzi la funzione.

marted 29 marzo 2011

f3

f1

f0

f6

f7

f5

f4

f14

f15

f13

f12

f10

f11

f9

f8

x4

x3

x2

x1

41

Condizioni Dont care (4)


Esempio

f2

marted 29 marzo 2011

=0

=1

=1

=0

=0

=1

42

Condizioni Dont care (5)


Minimizzazione SOP
dont care

Se mettiamo tutti i a 0

marted 29 marzo 2011

Encoder

1 1

0 1

0 0

X0 0
X2 X3 X1 0

0
1

1
1

1
0

Y0

1 0

Y0 = X1 + X3

Analogamente:
Y1 = X2 + X3

Architettura degli Elaboratori


marted 29 marzo 2011

X0
X1
X2
X3

Y0

Y1

28

34

2009

x4

x3

x2

x1

f obiettivo

f= x1

44

Condizioni Dont care (7)


Esempio

marted 29 marzo 2011

Multiplexer

Architettura degli Elaboratori


marted 29 marzo 2011

X0
X1

X7

DEC 3/8

C2 C1 C0

29

34

2009

Demultiplexer

Architettura degli Elaboratori


marted 29 marzo 2011

DEC 2/4

C1 C0

Y0

Y1

Y2

Y3

30

34

2009

Sintesi a due livelli

31

34

2009

Sintesi come somma di prodotti

Architettura degli Elaboratori


marted 29 marzo 2011

Sintesi tramite PLA


PLA = Programmable Logic Array

Tipicamente, p < 2i
Architettura degli Elaboratori
marted 29 marzo 2011

32

34

2009

Sintesi tramite ROM (1 di 2)

Architettura degli Elaboratori


marted 29 marzo 2011

33

34

2009

Sintesi tramite ROM (2 di 2)

Architettura degli Elaboratori


marted 29 marzo 2011

34

34

2009

00.b

marted 29 marzo 2011

Fine

Reti logiche combinatorie

Testo di rif.to:
[Congiu] - 2.1-2.3 (pg. 2737)

00.a

marted 29 marzo 2011

Reti Logiche

Porte logiche

Registri

Bus

Valori logici: convenzione


I valori logici sono 2.
Per indicarli useremo i nomi:

1
VERO
ALTO
+5 V

0
FALSO
BASSO
0 V

I nomi in ciascuna colonna sono equivalenti.


I nomi sono solo una convenzione!
marted 29 marzo 2011

22

24

Definizione di porta logica; porta NOT

Una porta logica un dispositivo


con N ingressi ed 1 uscita, che realizza
un legame tra il valore presente alluscita
e quelli presenti agli ingressi,
esprimibile con una funzione logica elementare

Primo esempio di porta logica: la porta NOT

Produce in uscita un valore logico opposto a quello


presente allingresso. Chiaramente N=1.
marted 29 marzo 2011

33

24

Porte logiche AND e OR


La porta AND fa assumere
alluscita il valore logico 1
se e solo se tutti gli ingressi
si trovano ad avere il valore 1

La porta OR fa assumere
alluscita il valore logico 1 se
ad almeno uno degli ingressi
presente un valore logico 1

marted 29 marzo 2011

44

24

Porte logiche NAND e NOR


La porta NAND fa assumere
alluscita il valore logico 0
se e solo se tutti gli ingressi
si trovano ad avere il valore 1

La porta NOR fa assumere


alluscita il valore logico 0 se
ad almeno uno degli ingressi
presente un valore logico 1

marted 29 marzo 2011

55

24

Equivalenze tra porte logiche (1 di 3)

La funzione realizzata da una porta logica pu essere


ottenuta mediante opportune sequenze di altre porte
logiche.
Ad esempio, le porte NOR/NAND possono essere
ottenute mediante una porta OR/AND e una NOT
collegate in sequenza

marted 29 marzo 2011

66

24

Equivalenze tra porte logiche (2 di 3)

Ogni funzione logica pu essere ottenuta impiegando


solo porte OR e NOT

Ogni funzione logica pu essere ottenuta impiegando


solo porte AND e NOT

marted 29 marzo 2011

77

24

Equivalenze tra porte logiche (3 di 3)

Ogni funzione logica pu essere ottenuta impiegando


solo porte NAND

Ogni funzione logica pu essere ottenuta impiegando


solo porte NOR (provarlo per esercizio)
marted 29 marzo 2011

88

24

marted 29 marzo 2011

Realizzazione ALL-NAND

Tabelle di verit

Un secondo modo di rappresentare una rete logica


mediante la sua tabella di verit,
che specifica il valore delluscita per ciascuna possibile
combinazione dei valori in ingresso.
Esempi per alcune porte logiche elementari:

marted 29 marzo 2011

10
10

24

OR esclusivo

B
0
1
0
1

Y
0
1
1
0

Un esempio pi complesso dato dalla rete logica che


realizza la funzione di OR esclusivo: luscita Y assume
il valore 1 se e solo se ai 2 ingressi sono presenti valori
logici diversi

A
0
0
1
1

marted 29 marzo 2011

11
11

24

Reti ed espressioni
Simboli per invertitore, AND e OR

Terminali di ingresso

Rete combinatoria e sottoreti

marted 29 marzo 2011

Terminale
di uscita

12

Reti ed espressioni
Definizione di reti combinatorie
i terminali di ingresso sono reti elementari
Se N1 e N2 sono reti, lo sono anche le seguenti

N1

N2

N1

N1

N2

Definizione di espressioni booleane

Le variabili (sia complementate che non complementate) e le


costanti sono espressioni (espressioni elementari)
Se e sono espressioni, lo sono anche

marted 29 marzo 2011

13

Reti ed espressioni
Rete, espressione, funzione

Ogni rete di commutazione data, calcola una funzione di


commutazione dei suoi ingressi

Una espressione descrive una (n) rete con ingressi


assegnati; una rete con ingressi assegnati realizza una
espressione

marted 29 marzo 2011

14

Fan-in e Fan-out

Fan-in = numero di ingressi di una porta


Fan-out = numero di ingressi alimentati da una
porta

Fan-out multiplo = quando unuscita di una porta


alimenta due o pi ingressi di

15

unaltra porta
(rete con fan-out multiplo non corrisponde ad una singola
espressione booleana)

marted 29 marzo 2011

Funzione
booleana

Descrizione
verbale

Analisi di reti combinatorie


Espressione
booleana

Schema di analisi
Rete
combinatoria

Esempio

marted 29 marzo 2011

16

Analisi di reti combinatorie (2)


Espressione booleana
Esempio

marted 29 marzo 2011

17

Analisi di reti combinatorie (3)


Funzione booleana e tavola di verit
Esempio
modo A

18

riduzione a forma SOP canonica (minterm) (algebra booleana)

modo B
realizzazione diretta della tavola di verit

Descrizione verbale ???

marted 29 marzo 2011

Analisi di reti combinatorie (4)

Funzione booleana e tavola di verit

x4

x3

x2

x1

Esempio

0
1

0
0

19

marted 29 marzo 2011

Funzione
booleana

Rete
combinatoria

Sintesi di reti combinatorie


Espressione
booleana

Schema di sintesi
Descrizione
verbale

Esempio

20

la temperatura dellacqua nel serbatoio (T) alta


e
( impostato il riscaldamento forzato manuale (M)
oppure
il termostato in posizione inverno (I), la temperatura desiderata
superiore a quella corrente (D))

La pompa di circolazione di un impianto di riscaldamento deve


essere abilitata quando contemporaneamente:

marted 29 marzo 2011

Sintesi di reti combinatorie (2)


Espressione booleana
P=T(M+ID)
Realizzazione diretta della rete?

marted 29 marzo 2011

21

T=x4

M=x3

I=x2

D=x1

22

Sintesi di reti combinatorie (3)


Funzione booleana
P=T(M+ID)
tavola di verit
modo A: forma canonica
SOP (mediante algebra)
modo B: calcolo diretto

In certi casi ottenibile


direttamente dalla
descrizione verbale

marted 29 marzo 2011

Buffer tri-state (1 di 2)
A

23
23

Inibita 24

Abilitata

A controlla se in uscita
Quando A=1, Y=B
passa il valore di B,
Quando A=0, Y=0
oppure no.
Ma Y=0 un valore di A passato attraverso la porta
aperta, oppure dovuto alla porta chiusa?

Lambiguit si risolve con il buffer tri-state.

marted 29 marzo 2011

Buffer tri-state (2 di 2)

Il buffer tri-state un dispositivo in cui il valore


logico delluscita Y non vincolato (n.v.) quando
lingresso di controllo assume il valore logico 0

Quando luscita Y non vincolata,


il suo valore dipende dalle altre porte a cui collegata

Usato per collegare molti dispositivi sulla stessa linea di comunicazione


dati.
marted 29 marzo 2011

24
24

24

Collegam. wired OR di buffer tri-state

Funzione di MULTIPLEXER 2/1

Y=A se C=1
Y=B se C=0

Le uscite delle porte tri-state possono essere


collegate tra loro purch al pi una di esse sia
vincolata ad un valore logico (0 oppure 1).
Viene realizzato lOR delle uscite senza leffettiva
presenza di una porta OR (wired OR).

marted 29 marzo 2011

25
25

24

Y=A se C=1
Y=B se C=0

Multiplexer 2/1 (senza buffer tri-state)

marted 29 marzo 2011

26
26

24

Porta NAND open collector (1 di 2)

Un altro dispositivo che consente collegamenti in wired


OR la porta NAND open collector.

In tale porta luscita vincolata (al valore logico 0)


solo quando ad entrambi gli ingressi presente il
valore logico 1.

marted 29 marzo 2011

27
27

24

Wired OR di NAND open-collector

Luscita di una porta NAND open collector pu


assumere solo il valore logico 0: dunque possibile
attivare contemporaneamente pi uscite di porte di
questo tipo visto che i valori ad esse presenti non
possono mai essere contrastanti.
Resistenza di pull-up

Lo schema qui sopra pu essere usato per segnalare il


verificarsi di un evento.
marted 29 marzo 2011

28
28

24

Registro da un bit

Un registro un dispositivo in grado di memorizzare


(cio conservare nel tempo) un valore logico.
Tale capacit distingue i registri dalle porte logiche.

Latch o flip-flop

w il segnale di controllo
w=1: il valore di X viene trasferito (memorizzato)
nel registro; Y=X
w=0: Y rimane al valore memorizzato,
senza risentire di eventuali variazioni di X
marted 29 marzo 2011

29
29

24

Registro da un bit: diagramma temporale

marted 29 marzo 2011

30
30

24

Bus

Un bus un collegamento elettrico tra parti diverse di


un elaboratore che consente il trasferimento di
informazione.
Un bus composto da una o pi linee; ogni linea
consente di trasferire un bit.

Per rappresentare un bus di n bit si usano i seguenti


simboli grafici:

marted 29 marzo 2011

31
31

24

Trasferimento di un bit

r1=1: il valore presente in R1 viene trasferito sul bus

w2=1: il valore sul bus viene memorizzato in R2

w2

Diagramma temporale dei segnali di controllo:


r1

marted 29 marzo 2011

32
32

24

Trasferimento di gruppi di bit


Un po di nomenclatura
4 bit: nibble (o nybble)
8 bit: byte
16 bit: half-word
32 bit: word
64 bit: double-word

A nibble is a small bite

La definizione di word dipende comunque dalla taglia della


parola di memoria della macchina che si sta considerando
(ne parleremo meglio pi avanti).

marted 29 marzo 2011

33
33

24

Trasferimento in parallelo di pi bit

Vantaggio: velocit
Svantaggio: servono pi linee per il bus
marted 29 marzo 2011

34
34

24

Shift register

Per il trasferimento seriale si utilizza un dispositivo


chiamato registro a scorrimento (shift register)

X R1
R1 R2
R2 R3
R3 R4

a ciascun impulso ( ) di S, i bit contenuti nel registro


scorrono di una posizione verso destra:
-

Esempio: se inizialmente X=1 e lo shift register contiene 0111,


dopo un impulso di S lo shift register contiene 1011
marted 29 marzo 2011

35
35

24

Trasferimento seriale di pi bit

Trasferimento seriale tra due shift register:

C=0: a ciascun impulso ( ) di S, un bit del registro di sx


viene trasferito al registro di dx

C=1: a ciascun impulso di S, un bit del registro di sx


- viene trasferito al registro di dx
- e viene riportato allingresso del registro di sx stesso
(dopo quattro impulsi di S nel registro di dx stata
trasferita copia del contenuto del registro di sx)
marted 29 marzo 2011

36
36

24

00.a

marted 29 marzo 2011

Fine

Reti logiche

37

00.e

Architettura degli
Elaboratori
marted 29 marzo 2011

Automi a stati finiti

Cenni sugli

Reti Logiche Sequenziali

2010

Automa a stati finiti: definizione

Un automa a stati finiti deterministico (DFA Deterministic


Finite Automaton) una quintupla
(Q, , , qi, F) dove:
Q un insieme finito di k2 stati
{q0, q1, qk-1}

un alfabeto finito di l1 simboli dingresso


{s0, s1, , sl-1}

22

10

2010

la funzione di transizione di stato


: Qx Q
(q, s) lo stato futuro in cui lautoma si porter se, a partire
dallo stato q, il simbolo di ingresso s
qiQ lo stato iniziale
FQ il sottoinsieme degli m1 stati finali (di accettazione)
F = {qf0, qf1, qf(m-1)}
Architettura degli Elaboratori

marted 29 marzo 2011

Esempio: distributore di caff


Un caff costa 40c
Si accettano monete da 10c e da 20c

q2

q1

q0

30c

20c

10c

0c

33

10

2010

Raggiunti 40c (o 50c, se si sbaglia, non d resto) pronta per fare il caff

q3
40c

Quanti stati servono?


Uno per ogni quantit di soldi parziale raggiunta

q4

Architettura degli Elaboratori


marted 29 marzo 2011

0c

q1
10c

0c

q2

20c

DFA del caff (1/2)


0c

q0
10c
20c

Q = {q0, q1, q2, q3, q4}


= {0c, 10c, 20c}
= [vedi tabella successiva]
qi = q 0

10c

F = {q4} stato finale di accettazione


Architettura degli Elaboratori
marted 29 marzo 2011

0c

q3

20c

(0c)

10c, 20c

q4

44

10

2010

0c

q1

20c
0c

q2

0c

q3

(0c)

10c, 20c

20c

10c

10c

q2

10c

0c

q1

q3

20c

q0

q2

q4

20c

q0

q1

q3

Input

10c

DFA del caff (2/2)


0c

q0

=
q1

q2

q4

Stato corrente

q2

q4

--

q3

--

q3

q4
-Architettura degli Elaboratori
marted 29 marzo 2011

q4

55

10

2010

Nellesempio luscita (binaria) rappresentata


dal comando di preparazione del caff

Il sistema ha anche unuscita

Esistono due definizioni che si dimostrano

finiti (deterministica)

In generale un DFA deve includere la possibilit


di generare uscite: diventa una macchina a stati

sostanzialmente equivalenti: la macchina di


Mealy e la macchina di Moore

Architettura degli Elaboratori


marted 29 marzo 2011

66

10

2010

La macchina di Mealy
qi hanno

lo stesso

significato del DFA,


un alfabeto finito di n1 simboli duscita
{d0, d1, dn-1}

qi)

Una macchina di Mealy una sestupla


(Q, , , , ,
dove Q, , , e

la funzione di uscita
: Qx

(q, s) il valore delluscita che la macchina produrr nella


transizione dallo stato q con simbolo di ingresso s

La macchina ha generalmente un funzionamento


continuativo e pertanto non vengono esplicitati stati finali
(di accettazione; hanno pi senso in altre applicazioni del
DFA)
Architettura degli Elaboratori
marted 29 marzo 2011

77

10

2010

10c/0

0c/0

q1

10c/0

0c/0

q2

20c/0

Macchina Mealy del caff


0c/0

q0

20c/0
20c/1

0c/0

10c/0

10c, 20c/1

q3

88

10

Il valore dellingresso e la corrispondente uscita etichettano ogni


transizione
Lo stato finale q4 diventa inutile: luscita a 1 si ha al ritorno allo
stato iniziale

2010

Preferibile quando il simbolo di uscita direttamente legato ad un simbolo di ingresso


Architettura degli Elaboratori
marted 29 marzo 2011

La macchina di Moore

Una macchina di Moore una sestupla


(Q, , , , , qi) dove Q, , , , qi hanno lo stesso
significato di quella di Mealy,

la funzione di uscita
:Q

Si pu dimostrare che data una macchina di Mealy (Moore)


possibile trovare una macchina di Moore (Mealy)
equivalente nel comportamento ingresso/uscita

(q) il valore delluscita quando la macchina si trova nello


stato q

A parit di problema, la soluzione con la macchina di


Moore pu necessitare di pi stati rispetto alla soluzione
con la macchina di Mealy perch questultima in grado di
produrre uscite diverse a partire dallo stesso stato con
ingressi diversi
Architettura degli Elaboratori

marted 29 marzo 2011

99

10

2010

0c

q1/0
10c

0c

q2/0

10c

Macchina Moore del caff


0c

q0/0
10c
20c

0c

20c
0c

q3/0

20c

10c, 20c

Siamo tornati a 5 stati: q4 ci serve per produrre


luscita 1 prima di tornare allo stato iniziale

q4/1

10
10

10

2010

Preferibile quando il simbolo di uscita deve essere insensibile ai transitori dei


simboli di ingresso o dello stato interno
Architettura degli Elaboratori
marted 29 marzo 2011

Lingresso costituito dallimpostazione della tastiera (N=nessun

Realizzare, sia in forma di macchina di Mealy che di Moore, il


controllo di un ascensore di un edificio con piano terra e primo piano

Esercizio proposto

tasto premuto, T=premuto tasto Terra, P=premuto tasto Primo

Dopo aver progettato le macchine usando i simboli descritti sopra,


si ipotizzi una codifica binaria per lo stato, gli ingressi e le uscite

Luscita costituita dal comando da fornire al controllo


dellascensore (F=fermo, A=verso lalto, B=verso il basso)

piano) e dalla posizione corrente dellascensore (T=posizione di


Terra, I=posizione intermedia tra i piani, P=posizione di Primo piano)

11
11

10

2010

In base a questa codifica si definiscano le funzioni di transizione di


stato e duscita per le 2 macchine

Architettura degli Elaboratori


marted 29 marzo 2011

Robovie-M v.2

! 22 DOF
! 45 cm, 2.3 Kg

24 Ottobre 2005

marted 29 marzo 2011

Intelligent Autonomous Systems Lab (IAS-Lab)


Tesi di Laurea Specialistica in Ingegneria Informatica

ARCHITETTURA HARDWARE

12

VS7054 (VStone)

Caratteristiche:
! scheda VS7054 (VStone):
" SH7054 (Renesas) 40 MHz
" RAM esterna (Cypress) da 256K x 16bit
" EEPROM esterna (ATMEL) da 512K (65536x8)
" accelerometro su due assi (ANALOG DEVICES)
" convertitore seriale SP3222E (SIPEX)
" bus a 16 bit per telecamera
" alimentazione 6 V
! telecamera digitale OV7620

Alberto Maggi

Intelligent Autonomous Systems Lab (IAS-Lab)


Tesi di Laurea Specialistica in Ingegneria Informatica

LIBRERIA DI RAGIONAMENTO

Mappa decisionale

Alberto Maggi

Mappa logica
con sguardo basso

Processing

13

Etichettatura delle regioni

Sovrapposizione

ESEMPIO DI SOVRAPPOSIZIONE DELLE MAPPE LOGICHE

Immagine acquisita

Mappa logica
con sguardo alto

24 Ottobre 2005

marted 29 marzo 2011

Intelligent Autonomous Systems Lab (IAS-Lab)


Tesi di Laurea Specialistica in Ingegneria Informatica

Alberto Maggi

LIBRERIA DI RAGIONAMENTO
AUTOMA A STATI FINITI
DEL GIOCATORE
alcuni stati sono dei sotto-automi

24 Ottobre 2005

marted 29 marzo 2011

14

00.e

Architettura degli
Elaboratori
marted 29 marzo 2011

2010

Fine

Cenni sugli

Automi a stati finiti

Testo di rif.to:
[Congiu] - 3.1, 3.2 (pg. 8093)

Struttura di un elaboratore
01.b

Blocchi funzionali
La memoria centrale

Suddivisione in blocchi funzionali

24

I blocchi funzionali di un elaboratore

Architettura degli Elaboratori

2010

Organizzazione dei bus

24

Calcolatore con due bus (memoria e periferiche)

2010

Architettura degli Elaboratori

Organizzazione dei bus

24

Calcolatore con bus unico

Architettura degli Elaboratori

2010

Caratteristiche della memoria centrale


Ogni locazione (tipicamente byte) individuata da un
indirizzo.
Con un indirizzo da N bit sono indirizzabili un totale di
2N locazioni (nota: 210 = 1024 = 1K, 220 = 1M, 230 = 1G).
In realt quasi sempre solo una parte di queste corrisponde a

24

memoria effettivamente presente e quindi indirizzabile.

Per motivi di efficienza, le singole operazioni di lettura e


di scrittura interessano unit pi ampie:
16 bit: word
(halfword),
...
32 bit: longword
(word),
...
64 bit: quadword
(doubleword).
...
nomi usati nel testo:

ora sostituiti da:

in futuro:
2010

Architettura degli Elaboratori

Classificazione delle memorie

Principio di funzionamento:
STATICHE (SRAM) il bit memorizzato in un latch o flip-flop

24

pi veloci (memorie cache), dissipano poca potenza (dispositivi portatili),


non richiedono refresh, pi costose (almeno 4 transistor per bit);

DINAMICHE (DRAM) il bit la carica di un condensatore (refresh)


meno veloci, richiedono refresh, ma meno costose (1 transistor per bit).

Funzioni:
RAM (rwm)
read-write
ROM
read-only
PROM
programmable ROM
tipi di prom
erase time
write read
EPROM
20 m (chip)
100 ms 200 ns
E2PROM
5 ms (byte)
5 ms 35 ns

FLASH
1 s (sector)
100 ms 200 ns
Architettura degli Elaboratori

esempi duso
bios, monitor,
cellulari, sintonizzatori,

foto digitali, mp3, bios,


2010

Ordinamento dei byte in memoria

Big-endian e Little-endian sono i termini che


descrivono l'ordine con cui una elaboratore
immagazzina i byte in una parola da 16 o 32 bit. 24
Big-endian l'ordine per cui la parte pi significativa
(BIG END) viene memorizzata per prima (all'indirizzo pi
basso di memoria).
Little-endian l'ordine per cui la parte meno significativa
(LITTLE END) viene memorizzata per prima.
Jonathan Swift, nel libro I viaggi di Gulliver, racconta
che i Big Endians erano una fazione conservatrice che
rompeva le uova sode dalla parte pi larga del guscio, in
contrapposizione al re dei Lillipuziani che richiedeva ai
suoi sudditi (i Little Endians) di aprire le uova dalla punta.
In realt, come per le uova, anche nelle memorie le due
alternative sono equivalenti.
2010

Architettura degli Elaboratori

Ordinamento dei byte: little endian


7

15

8 7

0 0

$1D

$2C

$1D

$2C

$4A

$3B

$3B

$4A

O
byte

24

Word
31

16 15

$4A

$3B

$2C

$1D

Long-word

Organizzazione little endian: numero $4A3B2C1D E STRINGA CIAO


Architettura degli Elaboratori

2010

Ordinamento dei byte: big endian


7

15

8 7

0 0

$1D

$1D

$2C

$2C

$3B

$4A

$3B

$4A

O
byte

24

Word
31

16 15

$1D

$2C

$3B

$4A

Long-word

Organizzazione big endian: numero $1D2C3B4A E STRINGA CIAO


Architettura degli Elaboratori

2010

Ordinamento dei byte: little o big endian?

I computer IBM370, molti RISC e i processori Motorola


usano il metodo big-endian.
24
Dell'altro partito sono i processori INTEL e i computer
DEC Alpha che preferiscono usare il little-endian, ritenuto
pi conveniente nella trasmissione dei dati, ove trasmessa
per prima la parte meno significativa.
Il PowerPC e l'ARM possono funzionare in tutte e due le
modalit.
Windows NT stato progettato per la architettura Little
Endian.
Anche nei formati grafici vi sono scelte diverse:
GIF -- Little Endian
JPEG -- Big Endian
Architettura degli Elaboratori

2010

Accesso alla memoria

10

24

Architettura degli Elaboratori

Tempo di accesso

2010

11

24
Tempo di accesso (ta ):
tempo necessario per completare unoperazione
di lettura o scrittura
Il tempo misurato a partire dallistante in cui
lindirizzo fornito dalla CPU valido (i livelli di
tensione nelle linee indirizzi si sono stabilizzati).
Tale istante corrisponde allattivazione del
segnale denominato address strobe (AS)
(il segnale MA nel nostro schema semplificato)

Architettura degli Elaboratori

2010

Temporizzazione: READ da SRAM

12

24

Lettura dei dati

I dati saranno pronti


tra un periodo di clock

Tempo di accesso ta

Lettura senza stati di attesa


2010

Architettura degli Elaboratori

READ da SRAM lenta

13

24

Lettura dei
dati

I dati non saranno pronti


tra un periodo di clock

I dati saranno pronti


tra un periodo di clock

Lettura con stati di attesa

Architettura degli Elaboratori

2010

Sincronizzazione degli accessi

14

24

Temporizzazione della CPU per l


listruzione Incremento diretto della memoria
Architettura degli Elaboratori

2010

Tempi di accesso

15

Memorie statiche (SRAM):


1.4 15 ns (high speed)
35 100 ns (low power)

24

Memorie dinamiche (DRAM):


50 70 ns (DRAM asincrone)
7 12 ns (SDRAM sincrone)
(+ latenza: per il primo dato ci vuole un tempo
4-5 volte quello per i dati successivi)
Architettura degli Elaboratori

2010

Accesso ad un chip SRAM da 128 byte

16

24

128x8
(1Kb)

Architettura degli Elaboratori

Accesso ad un chip SRAM da 1KB

2010

17

24

Architettura degli Elaboratori

2010

Accesso ad una SRAM da 4KB

18

24

2010

Architettura degli Elaboratori

Elemento di memoria dinamica: write

19

row select

24

transistor

condensatore

bit line

Operazione di scrittura:
1- imposta il valore (H o L) nella bit line (bit da memorizzare),
2- seleziona la riga (attiva row select): il transistor diventa un
interruttore chiuso e la tensione della bit line si trasferisce ai
capi del condensatore (caricandolo o scaricandolo);
quando il row select viene disattivato, il transistor diventa un
interruttore aperto e il condensatore conserva la carica
(mantiene memorizzato il bit).
Architettura degli Elaboratori

2010

Elemento di memoria dinamica: read

20

row select

24

transistor

condensatore

bit line

Operazione di lettura:
1- precarica la bit line a circa met della tensione H,
2- seleziona la riga (attiva row select): il transistor diventa un
interruttore chiuso e la corrente che circola tra condensatore
e la bit line rivela il bit memorizzato (se il condensatore
memorizzava un valore H o L); cos per viene alterata la
carica del condensatore;
3- memorizza in un latch il valore (H o L) letto e lo riscrive
(ripristina la carica del condensatore).
2010

Architettura degli Elaboratori

Elemento di memoria dinamica: refresh

21

rowselect

24

transistor

condensatore

bit line

Operazione di refresh:
1- esegue unoperazione di lettura su tutte le celle
della stessa riga (tutti i bit della riga vengono letti,
memorizzati in altrettanti latch e poi riscritti).
Architettura degli Elaboratori

2010

Accesso ad un chip DRAM da 64Kb

22

24

Chip di memoria dinamica da 64K x 1 bit


Architettura degli Elaboratori

2010

Refresh

23

DRAM 64Kx1 (256 righe x 256 colonne)


Periodo di refresh di ciascun bit = 4 ms
ta = 60ns
Refresh di un bit alla volta
tr = 4 ms / (64210) 61 ns
Impegno percentuale 100%
Refresh di unintera riga alla volta
tr = 4 ms / 256 16 s
Impegno percentuale=(60 ns/16 s)*100
Architettura degli Elaboratori

24

0.4%
2010

Accesso ad una DRAM da 1MB

24

24

Memoria dinamica da 1MB ottenuta con 16 banchi da 8 chip da 64Kx1


Architettura degli Elaboratori

2010

Fine
01.b

Struttura di un elaboratore

Testo di riferimento:
appunti

Le memorie dinamiche
01.c

Classificazione
Organizzazione

Legge di Moore (dal 1965)

44

x2
ogni 18 mesi
Scala
logaritmica

Architettura degli Elaboratori

x1000
ogni 15 anni

2010

Legge di Moore per la cella DRAM?

Processor - DRAM Memory Gap

Moores Law

10000

CPU

Processor-Memory
Performance Gap:
(grows 50% / year)

100

Less Law?

DRAM

Year

04
20

02
20

00
20

98
19

96
19

94
19

92
19

90
19

88
19

86
19

84
19

82
19

80

19

Performance

44

Proc: 60%/yr. (2X/1.5yr)

1000000

DRAM: 9%/yr. (2X/10 yrs)

Architettura degli Elaboratori

2010

Come aumentare le prestazioni?

1. Aumentando il numero di bit per accesso (es.: con un


bus dati da 64 bit si trasferiscono 8 byte per volta)
svantaggi: aumentano le dimensioni, aumenta la
corrente

44

2. Aumentando il grado di parallelismo interno delle


operazioni (es. memory interleaving: con pi banchi di
memoria possibile avviare un accesso ad un altro
banco, prima che sia completato laccesso precedente)
3. Evitando di eseguire alcune delle operazioni (ad es. la
selezione di una riga gi selezionata)
Architettura degli Elaboratori

2010

Classificazione delle DRAM

Interfaccia asincrona (DRAM standard):


il processore deve attendere, in uno stato idle,
il completamento delloperazione in memoria.

44

Interfaccia sincrona (SDRAM):


le operazioni sono in sincronia con clock del bus;
con l'uso di opportuni latch si aumenta il parallelismo
con la CPU (bus oltre i 66MHz).
Interfaccia basata su protocollo (RDRAM):
indirizzi e dati vengono trasmessi in parallelo
con modalit pipelined sul medesimo bus.
Architettura degli Elaboratori

Interfaccia asincrona (DRAM)

2010

In uninterfaccia asincrona il processore attende il


tempo necessario per il completamento di ciascuna
44
operazione (invio di RAS dopo che lindirizzo di riga
stabile; invio di CAS dopo che lindirizzo di colonna
stabile; successivo trasferimento del dato).
Lattivazione di RAS trasferisce, in appositi latch dati, il
contenuto di tutti i bit della riga selezionata.
Se un ciclo di clock inizia prima che sia trascorso il
tempo richiesto per loperazione, occorre attendere
linizio del successivo ciclo di clock per poter iniziare
loperazione successiva.
Tenendo presente questo vincolo, i tempi per il
trasferimento di un dato sono indicati in termini di
numero di cicli di clock.
Architettura degli Elaboratori

2010

Accesso per righe in una DRAM

4096 righe,
512 colonne,
dati da 8 bit.

44

indirizzo
di colonna
indirizzo
di riga

chip DRAM da 2 MB (16 Mbit)


la selezione di una riga rende accessibili 512 byte
Architettura degli Elaboratori

Logica negata (si presta al wired-or O.C.)

2010

44

Y = A1B1 A2B2 A3B3


(De Morgan)

Y = A1B1 + A2B2 + A3B3


Architettura degli Elaboratori

2010

Ciclo di lettura in una DRAM


T1

T2

T3

Clock
Indirizzo

T5

T6

T7

tc
riga

44

riga

colonna

1. Memorizza indirizzo di
riga; legge la riga e la RAS
memorizza nei latch dati
2. Memorizza indirizzo
di colonna

T4

ta

CAS

5. Trasferimento del dato


letto; fine del ciclo.

3. Refresh della riga


(ricopia nella riga
Dout
i bit dai latch dati) 4. Dato valido

dato

il ciclo di lettura tc (indicato anche con tRC) di 6 periodi di clock;


il tempo di accesso ta (indicato anche con tRAC) di 4 periodi (tc>ta);
con clock a 66 MHz (Tc=15ns) si avrebbe: tc = 90 ns, ta = 60 ns;
la velocit di una DRAM spesso definita dal tempo di accesso ta.
2010

Architettura degli Elaboratori

Ciclo di refresh in una DRAM


T1

T2

T3

T4

T5

T6

44

Clock
Indirizzo

riga

RAS

1. Memorizza indirizzo di
riga; legge la riga e la
memorizza nei latch dati
2. Refresh della riga
(ricopia nella riga
i bit dai latch dati)

Architettura degli Elaboratori

2010

Ciclo di scrittura in una DRAM


T1

T2

T3

T4

10

T5

T6

Clock
Indirizzo

44

riga

colonna

riga

1. Memorizza indirizzo di
riga; legge la riga e la RAS
memorizza nei latch dati
2. Invio del dato

Din

3. Write Enable

WE

dato

2. Memorizza indirizzo di
colonna e modifica, nei CAS
latch dati, il bit da scrivere
4. RAS alto: ricopia, dai latch dati, la riga modificata
5. CAS alto: termina il ciclo di scrittura
Architettura degli Elaboratori

2010

Fast Page Mode (FPM) DRAM

11

un esempio della strategia 3): sfrutta il fatto che accessi


consecutivi spesso interessano colonne successive della stessa riga.
RAS\ rimane attivo per un intero ciclo di riga (=pagina): basta
fornire lindirizzo di riga una sola volta allinizio dellaccesso.

44

Ogni ciclo di CAS\ include: impostazione dellindirizzo di colonna,


attivazione di CAS\, attesa del dato in uscita, latch del dato,
refresh, disattivazione di CAS\ (necessaria per segnalare il
termine del ciclo).
Timing: indica il numero di cicli di clock necessari per il primo
accesso a un dato della riga, seguito da quelli per gli accessi ai dati
successivi nella medesima riga.
Valori tipici per FPM: 6-3-3-3 o 5-3-3-3 con celle da 70 ns o 60 ns
(bus a 66 MHz).
Architettura degli Elaboratori

2010

Fast Page Mode: temporizzazioni


tRCD
tPC

12

= RAS to CAS delay = 3 Tc


= page (CAS) cycle = 3 Tc
tPC

44

tPC

timing:
5-3-3-3
Tc

tRCD

tCAC
tRAC

clock

il primo dato della riga disponibile


con un ritardo (tRAC) di 5 Tc dopo RAS\

i dati successivi sono


disponibili ogni 3 Tc

Architettura degli Elaboratori

FPM: temporizzazioni in dettaglio

2010

13

44

Architettura degli Elaboratori

2010

Extended Data Output (EDO) DRAM

14

Vengono aggiunti dei latch dati che mantengono


il dato appena letto, consentendo di anticipare
la disattivazione di CAS\ e linvio dellindirizzo
della colonna successiva.
Si pu cos ridurre il periodo tPC del segnale
CAS\ dopo il primo accesso: il segnale CAS\
rimane disattivato per il minimo intervallo di
tempo.

44

Timing: 5-2-2-2 o 5-3-3-3 con celle da 50..70 ns


(bus a 66 MHz)
2010

Architettura degli Elaboratori

EDO DRAM: temporizzazioni

15

44

tCAC

= column access time

Architettura degli Elaboratori

tPC

= page (CAS) cycle


2010

EDO DRAM: temporizzazione in dettaglio

16

44

Architettura degli Elaboratori

2010

SIMM (Single In-line Memory Module)

17

DRAM 4M x32 - 72 pin SIMM (Micron), chip 4Mx4


44

DRAM 8Mx32, chip 4Mx4 su entrambe le facce

Architettura degli Elaboratori

2010

SIMM - 2

4Mx32 DRAM - 72 pin SIMM (Micron)

18

44

Architettura degli Elaboratori

Evoluzione dei moduli SIMM


30 pin, DB da 8 bit (primi anni 90)
per fornire 16 bit alla volta (286, 386 SX)
occorrevano 2 moduli giustapposti
per fornire 32 bit alla volta (386 DX)
occorrevano 4 moduli giustapposti

2010

19

44

72 pin, DB da 32 bit (met anni 90)


con lavvento del Pentium e del bus PCI
per fornire 64 bit alla volta (Pentium)
occorrevano 2 moduli giustapposti
Architettura degli Elaboratori

2010

Evoluzione dei moduli SIMM

DIMM

20

DIMM (Dual In-line Memory Module):


una schedina su cui sono collocati i chip di memoria,
44
caratterizzata da un bus dati da 64 bit;
i moduli DIMM hanno ormai sostituito i moduli SIMM
(Single In-Line Memory Module), nei quali il bus dati
da 32 bit;
nei moduli SIMM (72 pin), i contatti sulle 2 facce
della scheda sono uniti e formano un contatto unico;
nei DIMM (168 pin), i contatti opposti sono
elettricamente isolati e formano 2 contatti separati;
le attuali DDR3 usano DIMM da 240 pin e DB da 128
bit
ECC (Error Correction Codes):
un chip in pi contenente bit aggiuntivi per consentire
la correzione di errori sui dati memorizzati.
Architettura degli Elaboratori

2010

Interfaccia sincrona (SDRAM)

21

Dopo laccesso al primo dato di una riga, anzich attendere linvio


degli indirizzi di colonna successivi, questi vengono generati
internamente alla DRAM con semplici incrementi (burst counter).

44

Le operazioni interne della DRAM sono strettamente regolate dal


clock, che lunico segnale di temporizzazione da fornire per i dati
della riga successivi al primo.
Pi comandi possono essere accodati (pipelining): si ottengono cos
prestazioni migliori e si possono usare bus a frequenze pi elevate.
Il tempo per laccesso al primo dato (SDRAM latency) maggiore di
quello per i dati successivi della stessa riga (CAS latency).
SDRAM latency e CAS latency sono ancora espresse in numero di
cicli di clock: 5-1-1-1 (SDRAM Latency = 5, CAS Latency = 1).
La CAS latency determinata dal column access time tCAC. Le
specifiche JEDEC prevedono valori di CAS latency pari a 1, 2, o 3.
Architettura degli Elaboratori

2010

JEDEC Synchronous DRAM (SDRAM)

22

JEDEC = Joint Electron Devices Engineering Council (1958)


Dal 1993 definisce i tipi base di DRAM sincrona.

44

Caratteristiche:
interfaccia sincrona;
architettura a banco multiplo: consente di avviare un accesso
ad un altro banco, prima che sia completato laccesso
precedente (su un banco diverso);
burst mode.
Una volta selezionata la riga, CS\, RAS\, CAS\, WE\ codificano
il comando da eseguire (sincronizzato dal clock).
Un registro programmabile di modo stabilisce:
il tipo (sequential o interleaved) e le modalit di burst;
la lunghezza del burst (1 bit, 2 bit, 4 bit, );
la CAS latency (1, 2 o 3).
Architettura degli Elaboratori

SDRAM: diagramma a blocchi

2010

23

44

Architettura degli Elaboratori

2010

SDRAM: esempio di architettura interna

SDRAM 4Mb (512 KB)


divisa internamente in
2 banchi 512x256x16

24

44

ind. di riga: 10 bit


(A9 seleziona banco,
A8..A0
512 righe)
ind. di colonna: 8 bit
(A7..A0
256 col)

Architettura degli Elaboratori

SDRAM: lettura SDRAM

2010

25

44

Architettura degli Elaboratori

2010

SDRAM: comando READ

26

44

Architettura degli Elaboratori

SDRAM: CAS latency

2010

27

44

Architettura degli Elaboratori

2010

CAS latency: determinazione

28

Allinizio di un ciclo di lettura burst viene impostato


lindirizzo di riga e, nel successivo fronte di salita del
clock, vengono attivati i segnali RAS\ e CS\. Ci avvia
il recupero dellintera riga selezionata.
Trascorso un tempo pari a tRCD (RAS\ to CAS\ delay),
nel successivo fronte di salita del clock pu essere
attivato CAS\.

44

Trascorso un ulteriore tempo pari a tCAC (column access


time), il primo dato leggibile sulle linee duscita.
Perch tutto funzioni deve essere:
CASLatency * tCLK

tCAC

Architettura degli Elaboratori

2010

SDRAM: evoluzione

29

SDR (Single Data Rate) SDRAM PC100

Specifiche Intel per sistemi con bus a 100 MHz


Timing 4-1-1-1

44

DDR (Double Data Rate) SDRAM

Loutput ha luogo su entrambi i fronti del clock


Frequenze di clock fino a 200 MHz

DDR-2 SDRAM

Aumenta la dimensione della minima unit di lettura/scrittura;


questo vincolo permette ottimizzazioni, con clock fino a 400 MHz.

DDR-3 SDRAM

Ulteriore raddoppio della minima unit di lettura/scrittura, e


quindi della frequenza di clock (400800 MHz)

Enhanced SDRAM (ESDRAM)

SDRAM con una porzione di cache statica on-chip


(fino a 200 MHz)

Architettura degli Elaboratori

2010

Caratteristiche delle DDR SDRAM

30

44

Architettura degli Elaboratori

Timing per SDRAM DDR-n


misurati in periodi di system clock
4 valori
tCL
CAS latency
tempo tra comando READ e
dato disponibile in uscita
tRCD
RAS to CAS delay
tempo tra comando ACTIVE e
comando READ/WRITE
tRP
Row Precharge
tempo tra comando PRECHARGE e
comando ACTIVE
tRAS
Row Active time
tempo tra un comando ACTIVE e un
comando PRECHARGE

2010

31

44

es: DDR3 OCZ HPC1333 standard PC3-10600


(3/2008)
Clock 1.333 MHz
timing 6-5-5-20
Architettura degli Elaboratori

2010

32

44

Architettura degli Elaboratori

2010

33

44

Architettura degli Elaboratori

2010

Interfaccia basata sul protocollo

34

Indirizzi (row e col) e dati vengono trasmessi


in parallelo con modalit pipelined sul medesimo bus
(mentre nelle SDRAM gli indirizzi seguono percorsi
diversi da quelli dei dati).

44

RDRAM (Rambus DRAM), DRDRAM (Direct Rambus DRAM)


Soluzione proprietaria (Rambus Inc.)
Adotta un approccio diverso rispetto a DDR e DDR2:
anzich usare bus dati con molte linee, usa un bus
da 16 bit con una elettronica progettata in modo da
assicurare alte frequenze operative
I dati sono trasferiti su entrambi i fronti del clock
(come DDR)
Data rate fino a 1.6 GB/s (standard PC800) e 2.1 GB/s
(standard PC1066)
Architettura degli Elaboratori

2010

Principali produttori di DRAM 3Q 2009

35

44
(ROK)
(ROK)
(J)
(USA)
(Taiwan)
(Taiwan)
(Taiwan)
(Taiwan)
(Taiwan)

I primi 4 produttori detengono pi dell80% del mercato!


Il mercato delle memorie DRAM molto dinamico
Architettura degli Elaboratori

2010

Principali produttori di DRAM Q1 2008

36

44

Nel 2007 iniziato un sensibile calo delle entrate dovuto a sovrapproduzione


Nel 2009 Qimonda (D) (ex Infineon) fallita ed ha cessato la produzione, in
parte rilevata dalla rivale Micron.

2010

Architettura degli Elaboratori

Principali produttori di semiconduttori


Revenue
(million
$ USD)

2009/2008
changes

Market
share

Rank
2009

Rank
2008

Company

Intel Corporation

USA

32 095

-5.0%

14.2%

Samsung Electronics

South Korea

17 123

+1.3%

7.6%

Toshiba

Japan

10 640

-4.0%

4.7%

Texas Instruments

USA

9 612

-13.2%

4.2%

STMicroelectronics

France

8 400

-18.6%

3.7%

Qualcomm

USA

6 475

0.0%

2.9%

Hynix

South Korea

5 940

-1.4%

2.6%

Renesas Technology

Japan

5 664

-19.3%

2.5%

12

AMD

USA

5 038

-7.6%

2.2%

10

Sony

Japan

4 670

-32.8%

2.1%

11

11

NEC

Japan

4 403

-24.4%

1.9%

12

10

Infineon

Germany

4 340

-27.1%

1.9%

13

14

Broadcom

USA

4 198

-9.6%

1.9%

14

16

Micron Technology

USA

3 995

-9.9%

1.8%

15

24

MediaTek

Taiwan

3 524

+21.7%

1.6%

16

19

Elpida Memory

Japan

3 498

-2.8%

1.5%

17

13

Freescale

USA

3 344

-32.7%

1.5%

18

15

Panasonic

Japan

3 330

-25.6%

1.5%

19

17

NXP

Netherlands

3 247

-19.9%

1.4%

20

18

Sharp

Japan

2 886

-20.0%

1.3%

Top 20

142 422

-10.7%

62.8%

All Other companies

84 313

-15.2%

37.2%

TOTAL

226 735

-12.4%

100.0%

Architettura degli Elaboratori

Country of origin

Italy

37

44

2010

Sviluppo tecnologico

38

44

Architettura degli Elaboratori

2010

Sviluppo tecnologico nelle DRAM

39

TECNOLOGIA
(anno) 90 95
00
05
09
( m) 0.35 - 0.25 - 0.22 - 0.18 - 0.15 - 0.13 - 0.11 (nm) 90 60 - 45
(wafer) 200mm
300mm
(chip) 4Mb 16Mb 64Mb 256M
1G
2G
4G

44

DENSIT DEI CHIP DRAM


64 Mb $2-3 | $0.25/Mbyte
128 Mb $3-5 |
256 Mb $4-7 (0.18-0.13 m)
512 Mb in produzione, 0.13 - 0.11 m
1 Gb
in produzione, 0.11 m - 90 nm
4 Gb
30/1/09: SAMSUNG annuncia DDR3 DRAM chip da 4Gb (50nm)

Architettura degli Elaboratori

2010

Capacit dei chip di DRAM

40

1G

106 Kb
256M

105

44

64M
16M

104
4M
1M

103
256K

102

64K
16K

10
1977

1980

1983

1986

1989

1992

1995

1998

2001

Legge di Moore (x 4 ogni 3 anni)

2004

2010

Architettura degli Elaboratori

Capacit e Velocit dei chip di DRAM


DRAM:
Disk:

Capacity
4x in 3 years
4x in 3 years

Speed (latency)
2x in 10 years
2x in 10 years

DRAM
Year
Size
19801000:1! 64 Kb 2:1!
1983
256 Kb
1986
1 Mb
1989
4 Mb
1992
16 Mb
1995
64 Mb
Architettura degli Elaboratori

2007

41

44

Cycle Time
250 ns
220 ns
190 ns
165 ns
145 ns
120 ns
2010

Sviluppi futuri

memorie non volatili

42

Potranno sostituire le attuali NAND Flash, ma anche le DRAM:


PRAM (PCRAM) (Phase Change RAM): sfruttano le propriet 44
di una lega calcogenura (Ge2Sb2Te5), in grado di cambiare
fase (cristallina o amorfa) in modo controllato elettricamente;
FRAM (FeRAM) (Ferroelettric RAM): usano uno strato di
materiale ferroelettrico il cui stato controllabile da un
campo elettrico;
MRAM (Magnetoresistive RAM): usano uno strato di
materiale ferromagnetico il cui stato controllabile da un
campo magnetico;
NRAM (Nano-RAM): sfruttano la propriet dei nanotubi di
carbonio di cambiare posizione meccanica (toccarsi o non
toccarsi) in modo controllato elettricamente.
Architettura degli Elaboratori

Magnetoresistive RAM (MRAM)

2010

43

Ancora allo stato sperimentale


44
Per memorizzare i dati utilizzano la polarit di minuscoli
elementi magnetici, anzich la presenza o lassenza di cariche
elettriche (come avviene nelle DRAM)
Non volatili: i dati non scompaiono quando manca lalimentazione
Nel giugno 2003 IBM e Infineon hanno presentato un chip
MRAM da 128Kbit, costruito con tecnologia da 0.18 m
Con memoria MRAM non volatile un calcolatore potrebbe essere
avviato istantaneamente allaccensione, con il sistema operativo
gi presente in memoria
Le memorie dei primi calcolatori (1950-1960) erano costituite
da nuclei di ferrite (non volatili): forse le RAM future saranno
basate sullo stesso principio fisico, pur con dimensioni
decisamente pi ridotte

Architettura degli Elaboratori

2010

MRAM (IBM)

44

44

Architettura degli Elaboratori

2010

Fine
01.c

Le memorie dinamiche

Testo di rif.to:
[Congiu] - 3.3-3.6 (pg. 94-112)

Il processore PD32
01.e

Modulo di controllo
Modulo ALU
Interfacce di I/O
Le istruzioni del PD32

Modulo di controllo

1 - FETCH:

16

PC
MAR
L[MAR]
MBR
MBR
IR
PC+4
PC

2 DECODE
3 - EXECUTE

Architettura degli Elaboratori

2009

Modulo ALU

16

Architettura degli Elaboratori

Condition Codes (CC)

2009

I pi comuni sono i seguenti.


16

C (carry): bit di riporto;


N (negative): N=1 indica che il risultato negativo
secondo la convenzione del complemento a 2;
Z (zero): Z=1 indica che il risultato nullo;
V (overflow): V=1 indica che il risultato affetto da
overflow nellaritmetica con numeri interi (signed);
P (parity): P=1 indica che il risultato contiene un
numero pari di bit uguali a 1.

Architettura degli Elaboratori

2009

Operazioni col Modulo ALU

1
1

16

1
1

Esempi di esecuzione di alcune operazioni


Architettura degli Elaboratori

Accesso ai registri dellALU

2009

16

Architettura degli Elaboratori

2009

Interfaccia di un dispositivo di input

16

PROTOCOLLO:
READY[DISP] = ?
0: aspetta e riesamina
1: START[DISP] = 1

.
.
.

READY[DISP] = ?
0: aspetta e riesamina
1: IORD[DISP] = 1
2009

Architettura degli Elaboratori

Protocollo di input
CPU

segnali

DISP

READY[DISP] = ?

16

0: aspetta e riesamina
1: START[DISP] = 1

.
.
.

READY[DISP] = ?
0: aspetta e riesamina
1: IORD[DISP] = 1

Architettura degli Elaboratori

STARD = 1
0
STATUS

COMPLETE = 1
1
STATUS
DATA BUFFER

avvia loperazione

.
.
.

Dato

DATA BUFFER

linee dati

2009

Interfaccia di un dispositivo di output

16

PROTOCOLLO:
READY[DISP] = ?
0: aspetta e riesamina
1: IOWR[DISP] = 1
START[DISP] = 1
READY[DISP] = ?
0: aspetta e riesamina
1: output completato
2009

Architettura degli Elaboratori

Struttura del processore PD32


Bus interno

16

Architettura degli Elaboratori

2009

Realizzazione della fase di FETCH


PC

MAR

L[MAR]
PC+4

10

RPC=1, MA=1
MBR

IR

16

Z=2, MRD=1, WIR=1


X2=1, S1=6, S2=0, XCI=0,
OP=0, RA=1, WPC=1

PC

Le operazioni indicate a sinistra si ottengono con le


sequenze di segnali di controllo riportate a destra.
In queste sequenze, per semplicit, non sono specificate
le relazioni temporali tra i segnali:
per quanto tempo ciascun segnale conserva il valore,
quali valori possono essere assunti in parallelo,
quali valori devono essere assunti in serie.
2009

Architettura degli Elaboratori

Codifica di una istruzione nel PD32

11

16

MOVL R0, R1

Architettura degli Elaboratori

20002001

2009

Esecuzione delle istruzioni

12

Istruzione di un linguaggio di alto livello:


Z := X + Y
16
(nel linguaggio assembly i nomi delle variabili X, Y, Z
possono essere usati per rappresentare indirizzi di
memoria)
Il PD32 non in grado di sommare due operandi in
memoria (almeno uno deve essere in un registro dellALU).
Listruzione di assegnazione va quindi espansa nella
sequenza di istruzioni macchina:
MOVL
X, R0
ADDL
Y, R0
MOVL
R0, Z
2009

Architettura degli Elaboratori

Codifica delle istruzioni nel PD32

13

16

Organizzazione dei dati e


delle istruzioni in memoria

Architettura degli Elaboratori

2009

Esecuzione delle istruzioni nel PD32 - 1

14

16

Architettura degli Elaboratori

2009

Esecuzione delle istruzioni nel PD32 - 2

15

16

Architettura degli Elaboratori

2009

Esecuzione delle istruzioni nel PD32 - 3

16

16

Architettura degli Elaboratori

2009

Fine
01.e

Il processore PD32

Testo di rif.to:
[Congiu] - 3.6, 3.8 (pg. 112119)

Le istruzioni del PD32


01.f

Classi di istruzioni
Programmazione dei protocolli di I/O

Struttura del processore PD32

17

Architettura degli Elaboratori

2009

Classi di istruzioni del PD32

Le istruzioni che il PD32 in grado di


decodificare ed eseguire (istruzioni di
macchina) sono le seguenti:
Istruzioni di trasferimento dei dati
Istruzioni aritmetiche e logiche
Istruzioni di controllo del programma
Istruzioni di ingresso e uscita

17

Sono esaminate alcune istruzioni di ogni classe.


Lelenco completo delle istruzioni del PD32 si
trova nellappendice del libro di testo.
Architettura degli Elaboratori

2009

Istruzioni di trasferimento dati (1 di 2)


MOVL s, d
s: operando sorgente
d: operando destinazione

17

s e d possono essere o indirizzi di registri (R0, , R7)


oppure indirizzi di long-word (da 32 bit) di memoria.
MOVW s, d
MOVB s, d
se s o d rappresentano un registro di CPU, il word o il
byte interessati sono quelli meno significativi
se d rappresenta un registro di CPU, il bit di segno del
risultato (byte o word) viene esteso allintero registro
Architettura degli Elaboratori

2009

Istruzioni di trasferimento dati (2 di 2)

ESEMPI:
17

MOVL R0, R1
MOVB $2000, R0
MOVW R1, $2000
MOVB $2000, $3000

Architettura degli Elaboratori

; R0
R1
; ext32(B[$2000])
R0
; R1W
W[$2000]
; B[$2000]
B[$3000]

2009

Istruzioni aritmetiche e logiche (1 di 3)


opcode s, r
ADDz s, r
SUBz s, r
CMPz s, r
NEGz s, r
ANDz s, r
ORz s, r
XORz s, r
NOTz s, r
UMULs, r
SMUL s, r
UDIV s, r
SDIV s, r

(r indica uno dei registri R0, , R7)


; somma: r + s
r
17
; sottrazione: r - s
r
; confronto: imposta CNZV in funzione di r-s
; complemento a due: -s
r
; funzione logica AND bit per bit
; funzione logica OR bit per bit
; funzione logica OR esclusivo bit per bit
; funzione logica NOT bit per bit
; moltiplicazione su operandi usigned
; moltiplicazione su operandi signed
; divisione su operandi usigned
; divisione su operandi signed

Architettura degli Elaboratori

2009

Istruzioni aritmetiche e logiche (2 di 3)


Operazioni di scorrimento:
opcode k, r

17

r registro (R0, , R7) contenente loperando su cui vengono


effettuate le operazioni di scorrimento.
k numero di posizioni che vengono scorse.
ASLz
ASRz
LSLz
LSRz

k, r
k, r
k, r
k, r

;
;
;
;

scorrimento aritmetico verso sinistra


scorrimento aritmetico verso destra
scorrimento logico verso sinistra
scorrimento logico verso destra

loperando destinazione delle istruzioni aritmetiche e


logiche sempre un registro dellALU;
se z=B (o z=W), viene modificato solo il Byte (o il Word)
meno significativo del registro di destinazione
Architettura degli Elaboratori

2009

Istruzioni aritmetiche e logiche (3 di 3)

ESEMPI:
17

ADDL
SUBW
ANDB
ASLW

R1, R0
; R0 + R1
R0
$2000, R1; R1W - W[$2000]
R0, R1
; R0B & R1.B
R1B
3, R2
; R2W * 8
R2W

Architettura degli Elaboratori

R1W

2009

Istruzioni di controllo

Istruzione di salto incondizionato:


JMP addr

17

Istruzione di salto condizionato:


Jc addr
JNc addr
c
rappresenta uno dei bit di condizione,
addr rappresenta un indirizzo di memoria.
Lesecuzione di queste istruzioni comporta linserimento
di addr nel PC (condizionato nel caso di Jc e di JNc).
Architettura degli Elaboratori

2009

Esempi di Istruzioni di controllo

17

JMP $300 ; $300


PC
JNZ $300 ; IF Z=0 THEN $300
JN $300 ; IF N=1 THEN $300

Architettura degli Elaboratori

PC
PC

2009

Altre istruzioni di controllo

10

Chiamata a subroutine:
JSR addr

17

Ritorno da subroutine:
RET
ESEMPI:
JSR $2400
RET

;PC
;pop

push, $2400
PC

Architettura degli Elaboratori

PC
2009

Istruzioni di input/output

11

Per realizzare i protocolli di input e di output descritti in


precedenza, sufficiente che il processore sia in grado di
eseguire le seguenti istruzioni:
INz
OUTz
START
JR
JNR

17

disp, d
s, disp
disp
disp, addr
disp, addr

se la destinazione dellistruzione INz un registro dellALU


e se z=B (o z=W), viene modificato solo il Byte (o il Word)
meno significativo del registro di destinazione
Architettura degli Elaboratori

2009

Esempi di Istruzioni di input/output


INB 5, R0

;5
linee di I/O indirizzi,
; invio del segnale IORD,
; linee I/O dati
R0B.

START 5

;5
linee di I/O indirizzi,
; invio del segnale START.

JR 5, $200

;5
linee di I/O indirizzi,
; IF READY=1 THEN $200

12

17

PC
2009

Architettura degli Elaboratori

Protocollo di input: richiamo

13

17

PROTOCOLLO:
DI

READY[DI] = ?
0: aspetta e riesamina
1: START[DI] = 1

.
.
.

READY[DI] = ?
0: aspetta e riesamina
1: IORD[DI] = 1
Architettura degli Elaboratori

2009

Protocollo di input: programmazione

14

17

WAIT1:

WAIT2:

JNR DI, WAIT1 ;esame stato DI (ciclo


;di attesa: busy-wait)
START DI
;avvio delloperazione
;di produzione del dato
JNR DI, WAIT2 ;esame stato DI
INB DI, R0
;trasferimento del dato

Architettura degli Elaboratori

2009

Protocollo di input: diagramma temporale

15

17

DI

Architettura degli Elaboratori

2009

Protocollo di output: richiamo

16

17

PROTOCOLLO:
DO

READY[DO] = ?
0: aspetta e riesamina
1: IOWR[DO] = 1
START[DO] = 1
READY[DO] = ?
0: aspetta e riesamina
1: output completato
2009

Architettura degli Elaboratori

Protocollo di output: programmazione

17

17

W1: JNR DO, W1


OUTB R0, DO
START DO
W2: JNR DO, W2
...

Architettura degli Elaboratori

;esame stato DO:


;trasferimento del dato
;avvio delloperazione
;di consumo del dato
;esame stato DO:
;listruzione successiva
;sar eseguita quando il
;dato sar stato consumato

2009

Fine
01.f

Le istruzioni del PD32

Testo di rif.to:
[Congiu] - 3.7,3.9,3.10 (pg. 112127)

Modulo di Controllo
01.g

Lesecuzione delle istruzioni


Realizzazione del modulo
Microprogrammazione

Esecuzione delle istruzioni

Istruzione di un linguaggio di alto livello:


Z := X + Y
14
(nel linguaggio assembly i nomi delle variabili X, Y, Z
possono essere usati per rappresentare indirizzi di
memoria)
Il PD32 non in grado di sommare due operandi in
memoria (almeno uno deve essere in un registro dellALU).
Pertanto listruzione di assegnazione va espansa in una
sequenza di istruzioni macchina:
MOVL X, R0
ADDL Y, R0
MOVL R0, Z
Architettura degli Elaboratori 1

2007

Codifica delle istruzioni nel PD32 - 1

14

Organizzazione dei dati e


delle istruzioni in memoria

Architettura degli Elaboratori 1

2007

Esecuzione delle istruzioni nel PD32 - 1

14

Architettura degli Elaboratori 1

2007

Esecuzione delle istruzioni nel PD32 - 2

14

Architettura degli Elaboratori 1

2007

Esecuzione delle istruzioni nel PD32 - 3

14

Architettura degli Elaboratori 1

2007

Realizzazione del Modulo di controllo

14

Modulo di controllo
del processore PD32

Architettura degli Elaboratori 1

Cosa fanno i segnali di controllo

2007

14

Operazioni elementari
eseguite dai segnali
di controllo

Architettura degli Elaboratori 1

2007

Modulo di controllo (variante)

14

Una possibile variante


PLA del Modulo di
Controllo del PD32

Architettura degli Elaboratori 1

Modulo di controllo a microcodice

2007

14

Una realizzazione
microprogrammata
del Modulo di
Controllo del PD32

Architettura degli Elaboratori 1

2007

-programmazione orizzontale/verticale
Orizzontale: ciascun bit nella -istruzione corrisponde
ad un segnale di controllo:
-istruzioni lunghe: ad es -istruzioni da 80 bit se ci
sono 80 segnali di controllo.

10

14

Verticale: i campi della -istruzione contengono, in


forma codificata, i valori di pi segnali di controllo (ad
es, se di 8 segnali uno solo pu valere 1, bastano 3 bit);
-istruzioni corte: ad es -istruzioni da 20 bit;
minor area di silicio;
ma necessaria la decodifica
minor velocit.
A due livelli: soluzione mista.
2007

Architettura degli Elaboratori 1

-programmazione a due livelli

11

n-ROM: la nano-ROM contiene (una sola copia di) tutte


le -istruzioni orizzontali.
-ROM: la micro-ROM, anzich contenere sequenze di
-istruzioni orizzontali, contiene sequenze di puntatori
(meno bit) alle -istruzioni nella n-ROM;

14

esempio:
le -istruzioni orizzontali di un processore siano da 120 bit;
il numero -istruzioni orizzontali diverse sia inferiore a 512;
allora la -ROM contiene sequenze di elementi da 9 bit (puntatori
alle -istruzioni orizzontali nella n-ROM), anzich sequenze di
elementi da 120 bit.

minor area di silicio;


ma sono richiesti 2 accessi
Architettura degli Elaboratori 1

minor velocit.
2007

Livelli di programmazione - 1

12

14

Notazioni diverse del medesimo programma


Architettura degli Elaboratori 1

Livelli di programmazione - 2

2007

13

14

Operazioni di traduzione e di esecuzione

Architettura degli Elaboratori 1

2007

Livelli di programmazione - 3

14

14

Architettura degli Elaboratori 1

2007

Fine
01.g

Modulo di Controllo

Testo di rif.to:
[Congiu] - 4.1,4.2 (pg. 129138)

Le istruzioni di macchina
02.a

Classificazione delle istruzioni


Direttive per lassemblatore

Classificazione delle istruzioni

consuetudine classificare le istruzioni


macchina in base al numero degli operandi a cui
si riferiscono.

15

Questa classificazione pu essere usata per


classificare anche i processori:
Macchine a tre indirizzi
Macchine a due indirizzi
Macchine a un indirizzo
Macchine a zero indirizzi
Architettura degli Elaboratori 1

2007

Macchine a tre indirizzi


ADD
SUB
MUL
DIV

X, Y, Z
X, Y, Z
X, Y, Z
X, Y, Z

;
;
;
;

M[X]
M[X]
M[X]
M[X]

+
*
/

M[Y]
M[Y]
M[Y]
M[Y]

M[Z]
M[Z]
M[Z]
M[Z]

15

(si noti lordine degli operandi nelle operazioni


non invertibili, sottrazione e divisione)
2007

Architettura degli Elaboratori 1

Macchine a tre indirizzi - esempio

Espansione di una istruzione HLL che valuta una


espressione aritmetica:
Z := U * (V - (W + X) / Y)

ADD
DIV
SUB
MUL

W, X, T
T, Y, T
V, T, T
U, T, Z

Architettura degli Elaboratori 1

15

4 istruzioni di macchina
2007

Macchine a due indirizzi


ADD
SUB
MUL
DIV

X, Y
X, Y
X, Y
X, Y

MOV X, Y

;
;
;
;

M[X]
M[X]
M[X]
M[X]

; M[X]

+
*
/

M[Y]
M[Y]
M[Y]
M[Y]

M[Y]
M[Y]
M[Y]
M[Y]

M[Y]

2007

Architettura degli Elaboratori 1

Macchine a due indirizzi esempio 1

Espansione della stessa istruzione HLL:


Z := U * (V - (W + X) / Y)

ADD
DIV
SUB
MUL
MOV

W, X
X, Y
V, Y
U, Y
Y, Z

Architettura degli Elaboratori 1

15

15

5 istruzioni di macchina
2007

Macchine a due indirizzi esempio 2

Se si vogliono conservare tutti gli operandi:


Z := U * (V - (W + X) / Y)
MOV
ADD
MOV
DIV
SUB
MUL

X, T
W, T
Y, Z
T, Z
V, Z
U, Z

15

6 istruzioni di macchina
2007

Architettura degli Elaboratori 1

Macchine ad un indirizzo

Un operando nel registro accumulatore (RA)


15

ADD X
SUB X
MUL X
DIV X
LOAD X
STORE X

Architettura degli Elaboratori 1

;
;
;
;
;
;

RA +
RA RA *
RA /
M[X]
RA

M[X]
M[X]
M[X]
M[X]
RA
M[X]

RA
RA
RA
RA

2007

Macchine ad un indirizzo esempio

Z := U * (V - (W + X) / Y)
15

LOAD W
ADD X
DIV Y
STORE T
LOAD V
SUB T
MUL U
STORE Z

8 istruzioni di macchina
2007

Architettura degli Elaboratori 1

Macchine a zero indirizzi

Gli operandi nello stack


15

D
push
pop
D
Architettura degli Elaboratori 1

;SP - 2
SP, D
W[SP]
;W[SP]
D, SP + 2
SP
;si suppone che D sia un word (2byte)
2007

Macchine a zero indirizzi (con stack)


ADD
SUB
MUL
DIV
POP X
PUSH X

;
;
;
;
;
;

pop +
pop
pop *
pop
pop
M[X]

pop
push
T, pop - T
pop
push
T, pop / T
M[X]
push

10

15

push
push

2007

Architettura degli Elaboratori 1

Macchine a zero indirizzi esempio

11

Z := U * (V - (W + X) / Y)
15

PUSH U
PUSH V
PUSH W
PUSH X
ADD
PUSH Y
DIV
SUB
MUL
POP Z
Architettura degli Elaboratori 1

10 istruzioni di macchina

2007

Notazione polacca inversa

12

Z := U * (V - (W + X) / Y)
15

PUSH U
PUSH V
PUSH W
PUSH X
ADD
PUSH Y
DIV
SUB
MUL
POP Z
Architettura degli Elaboratori 1

Lespansione della espressione


aritmetica in istruzioni a zero
indirizzi corrisponde alla
riscrittura della espressione con
operatori postfissi, secondo la
notazione polacca inversa
(Reverse Polish Notation, RPN):
U V W X + Y / - *

10 istruzioni di macchina

2007

Direttive per lassemblatore - 1

13

Specificano operazioni che devono essere eseguite


dallassemblatore.

15

direttive per la
DEFINIZIONE DI SIMBOLI
1. direttiva LABEL
WAIT1:
JNR DI, WAIT1 ; il simbolo rappresenta
; un indirizzo di memoria
2. direttiva di ASSEGNAZIONE
AD1 = 24
; il simbolo rappresenta un
; valore generico
; (che di solito non un
; indirizzo di memoria)
Architettura degli Elaboratori 1

2007

Direttive per lassemblatore - 2

14

direttive per la
DEFINIZIONE DI AREE DI MEMORIA

15

.DSz espressione ; lassemblatore calcola il valore N


; della espressione e lascia libera
; unarea di memoria di dimensione
; pari a N byte (o word o long-word).
.DCz esp1,esp2,

; lassemblatore calcola Ni=espi e


; inserisce in memoria i valori N1, N2,...

.DCB stringa,0

; lassemblatore inserisce in
; memoria, in byte consecutivi,
; i codici ASCII della stringa di
; caratteri.

Architettura degli Elaboratori 1

2007

Direttive per lassemblatore - 3

15

direttive per la
DEFINIZIONE DI SEGMENTI DI MEMORIA
.TEXT
.DATA
.BSS

15

; indica linizio di un segmento contenente


; codice (istruzioni)
; indica linizio di un segmento contenente
; dati inizializzati
; indica linizio di un segmento contenente
; dati non inizializzati

Architettura degli Elaboratori 1

2007

Fine
02.a

Le istruzioni di macchina

Testo di rif.to:
[Congiu] 4.3 (pg. 138148)

Metodi di indirizzamento
02.b

Indirizzamento immediato
Indirizzamento di registro
Indirizzamenti in memoria

Metodi di indirizzamento 1
Gli indirizzi degli operandi sono collocati in
appositi campi (gruppi di bit) delle istruzioni.

24

Esempio:

Il modo di considerare il contenuto del


campo INDIRIZZO determina il particolare
metodo di indirizzamento.
Architettura degli Elaboratori 1

2008

Metodi di indirizzamento 2

In genere il primo word (operation word) di


ciascuna istruzione contiene, oltre alla codifica
delloperazione da eseguire, le informazioni
relative ai metodi di indirizzamento da
utilizzare per accedere agli operandi.

24

Alcuni di questi metodi richiedono ulteriori


informazioni che vengono memorizzate in uno o
pi word aggiuntivi (extension word).

2008

Architettura degli Elaboratori 1

Metodi di indirizzamento nel PD32

Nel PD32 le istruzioni hanno un operation long-word


(OL) di 32 bit.
24
Alcuni metodi di indirizzamento richiedono informazioni
contenute in un extension long-word (EL) di 32 bit.
Ogni indirizzo (IND1, IND2) specificato da due campi:
M (da 3 bit) che individua il modo di indirizzamento,
R (da 3 bit) che individua leventuale registro usato.

Codifica dei modi di


indirizzamento nelle
istruzioni del PD32

Architettura degli Elaboratori 1

2008

Metodi di indirizzamento usati

Indirizzamento immediato
Assoluto diretto

Assoluto indiretto

24

in blu i metodi non presenti nel PD32


(attribuibili al PD132)

Diretto di registro
Indiretto con registro
Auto-incrementante (diretto e indiretto)
Auto-decrementante (diretto e indiretto)
Con registro indice

Indiretto con registro indice


Con registro base
Auto-relativo (diretto e indiretto)

2008

Architettura degli Elaboratori 1

Indirizzamento immediato
MOVL #28, R0

; 28

R0

Nel PD32 lindirizzamento immediato individuato dal


valore 1 nel campo M. Il campo R non usato.

24

Loperando immediato contenuto in un EL di 32 bit.


Il suo valore compreso tra -231 e 231-1.
Per accedere alloperando il processore deve eseguire il
fetch di questo EL.
Numero accessi alla memoria:

Architettura degli Elaboratori 1

fetch(OL) +fetch(EL) +0
fetch(OL) + 1 = 2
2008

Indirizzamento assoluto
ADDL

132, R0

; L[132] + R0

R0
24

Nel PD32 lindirizzamento assoluto corrisponde al valore


2 nel campo M. Il campo R non usato.
Lindirizzo assoluto contenuto in un EL di 32 bit.
Consente perci di accedere a 232 = 4 GB di memoria.
Per accedere alloperando il processore, dopo aver
effettuato il fetch dellEL, con cui ottiene lindirizzo
delloperando, deve effettuare un ulteriore accesso alla
memoria (al valore delloperando).
Numero accessi alla memoria:

fetch(OL) +fetch(EL) +1
fetch(OL) + 2 = 3
2008

Architettura degli Elaboratori 1

Indirizzamento assoluto indiretto (PD132)


ADDL

@456, R0

; L[L[456]] + R0

R0

Nel PD132 lindirizzo del puntatore contenuto in un EL


di 32 bit, con cui si possono individuare 230 = 1 G
puntatori (da 4 byte) situati in memoria.

24

Ciascun puntatore pu accedere a 232 = 4 GB.


Per accedere alloperando il processore, dopo aver
effettuato il fetch dellEL, con cui ottiene lindirizzo di
un puntatore alloperando, deve effettuare due ulteriori
accessi alla memoria:
il primo per leggere il puntatore alloperando,
il secondo per accedere al valore delloperando
Numero accessi alla memoria:
Architettura degli Elaboratori 1

fetch(OL) +fetch(EL) + 2
fetch(OL) + 3 = 4
2008

Confronto tra i tre metodi presentati

24

Confronto tra i 3 diversi modi di indirizzamento

2008

Architettura degli Elaboratori 1

Indirizzamento diretto di registro


ADDL R0, R1

; R0 + R1

R1
24

Nel PD32 lindirizzamento diretto di registro


corrisponde al valore 0 nel campo M.
Il campo R specifica il registro in cui si trova loperando.
Per accedere alloperando non sono necessari accessi alla
memoria.
Numero accessi alla memoria:

Architettura degli Elaboratori 1

fetch(OL) + 0
fetch(OL) + 0 = 1

2008

Indirizzamento indiretto con registro


ADDL (R0), R1

; L[R0] + R1

10

R1
24

Nel PD32 lindirizzamento indiretto con registro


corrisponde al valore 3 nel campo M.
Il campo R specifica il registro in cui si trova un
puntatore alloperando.

Per accedere alloperando necessario un accesso alla


memoria (allindirizzo contenuto nel registro specificato).
Numero accessi alla memoria:

fetch(OL) + 1
fetch(OL) + 1 = 2

2008

Architettura degli Elaboratori 1

Indirizzamento auto-incrementante
ADDz (R0)+, R1

11

; M[R0] + R1
R1
; R0 + d
R0

Nel PD32 questo indirizzamento individuato dal valore 7


nel campo M. Il campo R specifica il registro in cui si trova
un puntatore alloperando ( un indirizzamento indiretto
con registro).

24

Dopo laccesso alloperando, il puntatore viene incrementato


di una quantit d pari alla lunghezza (in byte) delloperando
stesso (d = 1 per B, 2 per W, 4 per L).
Per accedere alloperando necessario un accesso alla
memoria (allindirizzo contenuto nel registro specificato).
Numero accessi alla memoria: fetch(OL) + 1
fetch(OL) + 1 = 2
Architettura degli Elaboratori 1

2008

Indirizzamento auto-decrementante

12

ADDz -(R0), R1

; R0 - d
R0
; M[R0] + R1
R1
24
Nel PD32 questo indirizzamento individuato dal valore 6
nel campo M. Il campo R specifica il registro in cui si trova
un puntatore alloperando ( un indirizzamento indiretto
con registro).
Prima di accedere alloperando, il puntatore viene
decrementato di una quantit d pari alla lunghezza (in byte)
delloperando stesso (d = 1 per B, 2 per W, 4 per L).
Per accedere alloperando necessario un accesso alla
memoria (allindirizzo contenuto nel registro specificato).
Numero accessi alla memoria: fetch(OL) + 1
fetch(OL) + 1 = 2
Architettura degli Elaboratori 1

2008

Utilit dellauto-in(de)cremento

13

Consente di percorrere liste di dati consecutivi (in avanti


o a ritroso).

24

Consente di realizzare gli accessi LIFO ad uno stack:


MOVW 1000, -(R7) ; W[1000]
push
MOVW (R7)+, R0
; pop
RO
; (R7 funge da stack pointer)

Architettura degli Elaboratori 1

2008

Indirizzamento autoinc. indiretto (PD132)


ADDW @(R0)+, R1

; W[L[R0]] + R1W
; R0 + 4
R0

R1W

14

24

Questo metodo non esiste nel PD32.


Il dato puntato dal registro specificato un puntatore
(un indirizzo, lungo 4 byte), perci lincremento di 4.
Dopo il fetch, il primo accesso alla memoria ottiene un
puntatore alloperando; un secondo accesso necessario
per ottenere il valore delloperando.
Numero accessi alla memoria:

fetch(OL) + 2
fetch(OL) + 2 = 3
2008

Architettura degli Elaboratori 1

Indirizzamento autodec. indiretto (PD132)

15

ADDB @-(R0), R1

; R0 - 4
R0
; B[L[R0]] + R1B

R1B

24

Questo metodo non esiste nel PD32.


Il dato puntato dal registro specificato un puntatore
(un indirizzo, lungo 4 byte), perci lincremento di 4.
Dopo il fetch, il primo accesso alla memoria ottiene un
puntatore alloperando; un secondo accesso necessario
per ottenere il valore delloperando.
Numero accessi alla memoria:

Architettura degli Elaboratori 1

fetch(OL) + 2
fetch(OL) + 2 = 3
2008

Indirizzamento con registro indice - 1

16

E un metodo di indirizzamento a due componenti:


24

MOVL X(R1), R2

; L[X+R1]

R2

X:

indirizzo base

R1:

registro indice (contiene loffset)

Nel PD32 questo metodo di indirizzamento individuato


dal valore 4 nel campo M.
Il registro che funge da registro indice specificato nel
campo R.
2008

Architettura degli Elaboratori 1

Indirizzamento con registro indice - 2

17

Lindirizzo base X contenuto in un EL.


Per accedere alloperando il processore, dopo aver
24
effettuato il fetch dellEL, con cui ottiene lindirizzo
base, lo somma alloffset contenuto nel registro indice,
per calcolare lindirizzo delloperando; effettua poi un
ulteriore accesso alla memoria (al valore delloperando).
Numero accessi alla memoria: fetch(OL) +fetch(EL) +1
fetch(OL) + 2 = 3
Codifica, nel PD32,
dellindirizzamento
con registro indice

Architettura degli Elaboratori 1

2008

Indirizzamento con registro indice - 3

18

ESEMPIO DI USO DI UN REGISTRO INDICE:


short[] A, B, C; //array di short (2 byte)
for (int i=0; i<100 ; i++) A[i]=B[i]+C[i];

24

102

Organizzazione in memoria
dei tre array A,B,C

2008

Architettura degli Elaboratori 1

Indirizzamento con registro indice - 4


La somma dei due array pu essere effettuata
mediante le seguenti istruzioni:
MOVW 300(R1), R0 ;B[R1]
R0
ADDW 500(R1), R0 ;C[R1] + R0
MOVW R0, 100(R1) ;R0
A[R1]

19

24

(B[i])
R0 (B[i]+C[i])
(A[i])

eseguite iterativamente 100 volte, con il registro R1


contenente il valore 0 la prima volta e incrementando
questo valore di 2 unit ad ogni iterazione.
Architettura degli Elaboratori 1

2008

Indirizzamento con registro indice - 5

20

Organizzazione del ciclo iterativo che calcola la somma dei


due array:

24

MOVB #100, R2 ; valore iniziale del contatore


MOVL #0, R1
; e del registro indice
LOOP: MOVW 300(R1), R0
ADDW 500(R1), R0
MOVW R0, 100(R1)
ADDL #2, R1
; incremento del registro indice
SUBB #1, R2
; decremento del contatore
JNZ LOOP
; criterio di fine iterazioni
. .
; istruzione successiva
Architettura degli Elaboratori 1

2008

Indirizzamento indiretto con RI (PD132)


Forma pre-indexed:
il registro indice RI viene usato prima di effettuare
lindirizzamento indiretto: in tal modo il longword
situato allindirizzo X+RI viene interpretato come un
puntatore alloperando.

21

24

Loperando M[L[X + RI]]


Forma post-indexed:
il registro indice RI viene usato dopo aver considerato
lindirizzo base X in modo indiretto: lindirizzo
delloperando si ottiene sommando il contenuto del
registro indice al contenuto del longword di memoria
situato allindirizzo base.
Loperando M[L[X] + RI]
Architettura degli Elaboratori 1

2008

Confronto tra pre e post-indexed (PD132)

22

24

Architettura degli Elaboratori 1

2008

Indirizzamento con registro base (PD132)

23

Lindirizzo viene calcolato come somma del contenuto di


un registro RB (il registro base) e di un offset D fornito
24
dallistruzione.
Loperando M[RB + D].
Alcune macchine ammettono sia lindirizzamento con
registro base sia quello con registro indice. In tal caso
lindirizzo delloperando dato dalla somma di tre
componenti:
RB (che contiene lindirizzo base),
X (che contiene un offset, specificato nella
istruzione),
RI (che contiene un indice).
Loperando M[RB + X + RI]
Architettura degli Elaboratori 1

2008

Indirizzamento autorelativo

24

E anchesso un metodo di indirizzamento a due


componenti. Lindirizzo delloperando dato dalla somma
del contenuto del program counter PC e di un offset D.

24

Nel PD32 lindirizzamento auto-relativo individuato dal


valore 5 nel campo M. Il campo R non usato e loffset D
contenuto in un EL.
Loperando M[PC + D].
Il valore del PC che interviene nella somma quello
che punta al (primo) EL dellistruzione.
Nel caso di indirizzamento auto-relativo indiretto
(PD132) la somma D + PC individua non loperando ma un
puntatore ad esso.
Architettura degli Elaboratori 1

2008

Fine
02.b

Metodi di indirizzamento

Testo di rif.to:
[Congiu] 4.4.1 (pg. 148158)

Uso dei metodi di indirizzamento


02.e

Un esempio: acquisizione dati


Esempi dimpiego
Confronto tra i metodi
Analisi temporale

Sistema di acquisizione dati

5 dispositivi A/D (convertitori analogico/digitale)


siano collegati ad un calcolatore come indicato in figura:

Architettura degli Elaboratori

35

2010

Sistema di acquisizione dati - esempio

Le conversioni A/D sono sincronizzate da un clock c(t).


Ciascun fronte di salita di c(t) avvia, in parallelo, le
conversioni su tutti 5 i dispositivi: i 5 campioni (valori
digitali prodotti nei registri Rui) si riferiscono quindi al
medesimo istante.

35

Lelaboratore deve acquisire i 5 campioni e ricopiarli in


memoria, prima che i valori contenuti nei Rui vengano
sovrascritti dai nuovi campioni prodotti dal successivo
fronte di salita del clock (specifica real-time).
Si debbano acquisire 100 set di dati dai 5 convertitori A/D

Architettura degli Elaboratori

Conversione A/D
registro Ru da 16 bit: 64 K valori digitali possibili,
lerrore (assoluto) di discretizzazione massimo :
es = (SiMAX - SiMIN)/64K

2010

35

Errore di discretizzazione
nella conversione A/D:

Architettura degli Elaboratori

2010

Sincronizzazione delle conversioni

Le conversioni vengono avviate dal primo fronte di salita del clock


successivo al comando START.
Il tempo necessario al convertitore A/D per produrre il valore
digitale in Ru tc (tempo di conversione).
Rispetto allo START, il dato convertito pronto con un ritardo
minimo pari a tc e massimo pari a tc+T (T = periodo del clock).

35

Diagramma temporale
delle operazioni di
conversione

Architettura degli Elaboratori

2010

Organizzazione dei dati in memoria

Organizzazione della struttura di dati


nella memoria centrale:
a ciascun convertitore sia associata
unarea (a partire dagli indirizzi
TAB1, TAB2, ) destinata a
contenere i dati acquisiti;
vi sia anche una tabella di puntatori,
situata allindirizzo IND, ciascuno
dei quali individua il primo elemento
dellarea corrispondente destinata a
contenere i dati.

Architettura degli Elaboratori

35

2010

Programmazione dellesempio

Conviene scrivere prima il codice che acquisisce


i 100 campioni da un convertitore (ad es. AD4).

35

Vengono ora presentate diverse soluzioni, con


diversi modi di indirizzamento (allo scopo di
esemplificarne luso e di consentire qualche
raffronto).
Si affronter poi il problema di codificare la
soluzione completa, che acquisisce 100 set di 5
campioni simultanei dai 5 convertitori,
rispettando le specifiche di tempo reale.
Architettura degli Elaboratori

2010

1a soluzione

Si supponga di usare una macchina (pi semplice del PD32)


ad un indirizzo (con registro accumulatore), dotata dei
soli metodi di indirizzamento:

35

immediato,
assoluto (diretto e indiretto);

in grado di eseguire almeno le seguenti istruzioni:


m
- aritmetiche:
ADD
SUB
m
- di trasferimento: LOAD(W)
m
STORE(W) m
- di controllo:
JNZ
m
- di I/O:
INW
disp
START
disp
JNR
disp, m
Architettura degli Elaboratori

2010

Codifica della 1a soluzione

PT:
CT:

.DSL 1
; puntatore
.DSL 1
; contatore
. . .
LOAD IND+12 ; valore iniziale del
STORE PT
; puntatore
LOAD #100
; valore iniziale del
STORE CT
; contatore
LOOP: JNR
AD4, LOOP
; protocollo di input per la
LOOP1: START AD4
; acquisizione
WAIT: JNR
AD4, WAIT
; del
INW
AD4
; dato
STOREW @PT
; memorizzazione del dato
LOAD PT
; incremento
ADD
#2
; del
STORE PT
; puntatore
LOAD CT
; aggiornamento
SUB
#1
; del
STORE CT
; contatore
JNZ
LOOP1
; iterazione se L[CT] diverso da zero
Architettura degli Elaboratori

35

2010

2a soluzione

Si supponga di usare una macchina:


- con pi registri e quindi con la possibilit di usare
anche i metodi di indirizzamento con registro;

35

- i metodi di indirizzamento disponibili siano:


immediato,
assoluto (diretto),
diretto di registro,
indiretto con registro.
Questa macchina potrebbe essere il PD32.

Architettura degli Elaboratori

2010

Codifica della 2a soluzione


. . .
MOVL
MOVB
LOOP: JNR
LOOP1: START
WAIT: JNR
INW
ADDL
SUBB
JNZ
. . .

IND+12, R1
#100, R0
AD4, LOOP
AD4
AD4, WAIT
AD4, (R1)
#2, R1
#1, R0
LOOP1

;
;
;
;
;
;
;
;
;

10

35

valore iniziale del puntatore


valore iniziale del contatore
protocollo di input per la
acquisizione
del
dato
incremento del puntatore
aggiornamento del contatore
iterazione se R0 0

Architettura degli Elaboratori

2010

3a soluzione

11

Si voglia usare anche lindirizzamento con registro


indice;

35

- i metodi di indirizzamento disponibili siano:


immediato,
assoluto (diretto),
diretto di registro,
indiretto con registro,
con registro indice.
Questa macchina potrebbe essere il PD32.
Architettura degli Elaboratori

2010

Codifica della 3a soluzione


MOVL
MOVB
LOOP: JNR
LOOP1: START
WAIT: JNR
INW
ADDL
SUBB
JNZ
. . .

#0, R1
;
#100, R0
;
AD4, LOOP
;
AD4
;
AD4, WAIT
;
AD4, TAB4(R1) ;
#2,R1
;
#1,R0
;
LOOP1
;

12

valore iniziale delloffset


valore iniziale del contatore
35
protocollo di input per la
acquisizione
del
dato
incremento delloffset
aggiornamento del contatore
iterazione se R0 0

Specificando gli indirizzi base TAB1, TAB2, , nellistruzione che


memorizza il dato acquisito, con lo stesso valore in R1 si potr collocare
il set di 5 campioni in posizioni di pari indice nelle 5 tabelle. Questo
sar il metodo usato nella soluzione completa.
Architettura degli Elaboratori

4a soluzione
Si voglia usare lindirizzamento con registro indice
indiretto (pre-indexed);
- i metodi di indirizzamento disponibili siano:
immediato,
assoluto (diretto),
diretto di registro,
indiretto con registro,
con registro indice,
con registro indice indiretto (pre-indexed).
Questa macchina non il PD32 (potrebbe essere il
PD132).
Architettura degli Elaboratori

2010

13

35

2010

Codifica della 4a soluzione


. . .
MOVL
MOVB
LOOP: JNR
LOOP1: START
WAIT: JNR
INW
ADDL

SUBB
JNZ
. . .

#12, R1
;
#100, R0
;
AD4, LOOP
;
AD4
AD4, WAIT
AD4, @IND(R1)
#2, IND(R1) ;
;
;
;
#1, R0
;
LOOP1
;

Architettura degli Elaboratori

14

valore nel registro indice


valore iniziale del contatore
protocollo di input per la
; acquisizione
; del
; dato
incremento del puntatore in
memoria (PD132!)
attenzione: cos si altera il
contenuto della tabella IND
aggiornamento del contatore
iterazione se R0 0

2010

5a soluzione

15

Si voglia usare il registro indice indiretto nella forma


post-indexed;
- i metodi di indirizzamento disponibili siano:
immediato,
assoluto (diretto),
diretto di registro,
indiretto con registro,
con registro indice,
con registro indice indiretto (post-indexed).
Questa macchina non il PD32 (potrebbe essere il
PD132).
Architettura degli Elaboratori

35

35

2010

Codifica della 5a soluzione

16

. . .
PT:
.DSL 1
; puntatore (a TAB4)
. . .
MOVL #12, R1
; valore iniziale del
MOVL IND(R1), PT ; puntatore
MOVB #100, R0
; valore iniziale del contatore
MOVL #0, R1
; valore iniziale del registro indice
LOOP: JNR
AD4, LOOP
; protocollo di input per
LOOP1: START AD4
; la acquisizione
WAIT: JNR
AD4, WAIT
; del
INW AD4, [@PT](R1) ; dato
ADDL #2, R1
; incremento del registro indice
SUBB #1, R0
; aggiornamento del contatore
JNZ
LOOP1
; iterazione se R0 0
. . .
Architettura degli Elaboratori

2010

6a soluzione

17

Con lindirizzamento auto-incrementante si ottiene la


soluzione pi efficiente (minor numero di istruzioni!);
- i metodi di indirizzamento disponibili siano:
immediato,
assoluto (diretto),
diretto di registro,
indiretto con registro,
post-incrementante e pre-decrementante
con registro indice,
Questa macchina il PD32.

Architettura degli Elaboratori

35

35

2010

Codifica della 6a soluzione


. . .
MOVL
MOVB
LOOP: JNR
LOOP1: START
WAIT: JNR
INW
SUBB
JNZ
. . .

IND+12, R1
#100, R0
AD4, LOOP
AD4
AD4, WAIT
AD4, (R1)+
#1, R0
LOOP1

;
;
;
;
;
;
;
;

18

valore iniziale del puntatore


valore iniziale del contatore
protocollo di input per la
acquisizione
del dato
+ incremento del puntatore
aggiornamento del contatore
iterazione se R0 0

2010

Architettura degli Elaboratori

Soluzioni esaminate - 1

19

Se non disponibile un indirizzamento tramite registro,


bisogna ricorrere ad una locazione di memoria che svolga
le funzioni di puntatore.
Cos si fatto nella prima soluzione (puntatore PT):
STOREW @PT
LOAD PT
ADD #2
STORE PT
memoria
puntatore

Architettura degli Elaboratori

35

;
;
;
;

35

memorizzazione del dato


incremento
del
puntatore
dato
dato successivo
2010

Soluzioni esaminate - 2

20

Lefficienza aumenta se possibile sfruttare


lindirizzamento con registro:

35

Cos si fatto nella seconda soluzione (registro R1):


INW AD4, (R1)

; memorizzazione del dato

ADDL #2, R1

; incremento del puntatore

registro
puntatore

dato
dato successivo

2010

Architettura degli Elaboratori

Soluzioni esaminate - 3

21

Se si usa il metodo di indirizzamento con registro indice,


lindirizzo di ciascun elemento si ottiene come somma di
un indirizzo base X e di un offset, fornito da un registro
indice RI. Per individuare elementi diversi si pu
modificare RI oppure X.

35

Laccesso agli elementi consecutivi di una lista di dati si


ottiene incrementando RI, come fatto nel terzo dei
metodi presentati (registro indice R1):
INW AD4, TAB4(R1)
ADDL #2, R1

; memorizzazione del dato


; incremento del puntatore

Con un diverso valore di X (ad es. TAB5 invece di TAB4)


si accede allelemento di uguale indice in unaltra tabella.
Architettura degli Elaboratori

2010

Schematizzazione del terzo metodo

22

35

istruzione
ind. base

dato
+
registro

dato successivo

offset

2010

Architettura degli Elaboratori

Soluzioni esaminate - 3

23

Diversi valori di X, inseriti in istruzioni diverse,


consentono di accedere a elementi corrispondenti di
liste diverse, come si fatto nellesempio della somma di
due array:
MOVW
ADDW
MOVW
ADDW

Architettura degli Elaboratori

35

300(R1), R0
500(R1), R0
R0, 100(R1)
#2, R1

2010

Soluzioni esaminate - 4
Con lindirizzamento indiretto e luso di un registro
indice nella forma pre-indexed gli elementi della
struttura di dati sono individuati da un puntatore che si
trova allindirizzo RI + X.

24

35

Per scandire gli elementi consecutivi si incrementa tale


puntatore, come si fatto nel quarto metodo presentato
INW AD4, @IND(R1) ; memorizzazione del dato
ADDL #2, IND(R1)
; incremento del puntatore
; in memoria (PD132!)
istruzione
ind. base
registro

puntatore
+

dato

ind. base

offset

dato successivo
2010

Architettura degli Elaboratori

Soluzioni esaminate - 5

25

Con lindirizzamento indiretto e luso di un registro indice


nella forma post-indexed, lindirizzo di ciascun elemento
fornito dalla somma dellindirizzo base (puntatore situato 35
allindirizzo X) e delloffset (contenuto nel registro RI).
Gli elementi successivi possono essere individuati
incrementando RI, come si fatto nel quinto dei metodi
presentati (registro indice R1):
INW AD4, [@PT](R1)
ADDL #2, R1

; memorizzazione del dato


; incremento del reg. indice

In alternativa, sarebbe stato possibile incrementare il


puntatore base (situato allindirizzo PT):
INW AD4, [@PT](R1)
ADDL #2, PT
Architettura degli Elaboratori

; memorizzazione del dato


; incremento del puntatore
2010

Schematizzazione del quinto metodo


istruzione
indir. punt.

26

35

memoria
puntatore
+
registro

dato
dato successivo

offset

2010

Architettura degli Elaboratori

Soluzioni esaminate - 6

27

I metodi di indirizzamento con registro (diretto,


indiretto, auto-incrementante e auto-decrementante)
sono, per questo tipo di problemi, i pi efficienti.
La possibilit di auto-aggiornamento consente di
risparmiare istruzioni, come appare dal sesto dei metodi
presentati:
INW AD4, (R1)+ ; memorizzazione del dato
; + incremento del puntatore
registro
puntatore

Architettura degli Elaboratori

35

dato
dato successivo

2010

Soluzione completa
Si tratta ora di codificare la soluzione completa, che
acquisisce 100 set di 5 campioni simultanei dai 5
convertitori, rispettando le specifiche di tempo reale:

28

35

per evitare perdita di dati, dopo lavvio del campionamento


(fronte di salita del clock) il calcolatore deve acquisire i 5
campioni e ricopiarli in memoria, prima che i valori
contenuti nei Rui vengano sovrascritti dai nuovi campioni
prodotti dal successivo fronte di salita del clock:
lesecuzione di tutte le istruzioni che: acquisiscono i 5 dati,
li mettono in memoria e comandano lacquisizione dei
successivi 5, deve durare meno del periodo del clock.
per garantire la simultaneit dei 5 campioni acquisiti ad
ogni tic del clock, il calcolatore deve inviare il comando
START a tutti 5 i dispositivi, prima del fronte di salita del
clock.

Architettura degli Elaboratori

Soluzione completa: avvio

2010

29

35

Architettura degli Elaboratori

2010

Soluzione completa: ciclo iterativo

30

35

2010

Architettura degli Elaboratori

Soluzione completa: diagramma temporale

31

tc MAX= tempo di conversione massimo


tL
= tempo di esecuzione del ciclo V1: JMP V1
T
= periodo del clock che sincronizza il campionamento

35

Per rispettare le specifiche real-time, deve essere:


tL < T - tc MAX

Architettura degli Elaboratori

2010

Esercizio

32

Con riferimento al sistema di acquisizione di 100


set da 5 campioni dai 5 convertitori A/D,
supponendo che il tempo di conversione tc dei 5
convertitori sia compreso tra 1 s e 1.2 s, e
nellipotesi che il tempo di esecuzione delle
istruzioni del PD32 (comprese le operazioni di
fetch) sia di 200 ns se la codifica dell'istruzione
occupa un long word, 300 ns se occupa 2 long
word, e 400 ns se occupa 3 long word,

35

si calcoli il periodo minimo TMIN del clock che


garantisce la contemporaneit dei campioni
acquisiti e la non perdita dei dati.
Architettura degli Elaboratori

Soluzione dellesercizio
; istruzioni del ciclo iterativo e relativi tempi desecuzione
V1:
JNR AD1, V1
; 2L
300ns
INW AD1, TAB1(R1) ; 2L
300ns
V2:
JNR AD2, V2
; 2L
300ns
INW AD2, TAB2(R1) ; 2L
300ns
V3:
JNR AD3, V3
; 2L
300ns
INW AD3, TAB3(R1) ; 2L
300ns
V4:
JNR AD4, V4
; 2L
300ns
INW AD4, TAB4(R1) ; 2L
300ns
V5:
JNR AD5, V5
; 2L
300ns
INW AD5, TAB5(R1) ; 2L
300ns
ADDL #2, R1
; 2L
300ns
SUBB #1, R0
; 2L
300ns
JZ FINE
; 2L
300ns
START AD1
; 1L
200ns
START AD2
; 1L
200ns
START AD3
; 1L
200ns
START AD4
; 1L
200ns
START AD5
; 1L
200ns
JMP V1
; 2L
300ns
;---------------------------------5200ns
;
totale tL

Architettura degli Elaboratori

2010

33

35

2010

Soluzione: considerazioni - 1

34

Prima che sia trascorso un periodo del clock, il processore


deve completare lacquisizione dei 5 campioni e comandare
lacquisizione dei 5 successivi;
deve, cio, completare lesecuzione di tutte le istruzioni
comprese tra V1: e JMP V1.
Va tenuto inoltre presente il fatto che le istruzioni di
attesa (Vx: JNR ADx, Vx) sono destinate ad essere
eseguite pi volte, in attesa che, trascorso il tempo di
conversione, il dato sia pronto.
Per rispettare le specifiche del problema, va considerato
il caso peggiore, che si ha quando il primo dei dispositivi
che vengono esaminati (AD1) il pi lento (ha un tempo di
conversione pari a tc MAX = 1200ns).
Architettura degli Elaboratori

Soluzione: considerazioni - 2

35

2010

35

Nelle ipotesi fatte, il primo ciclo di attesa


(V1: JNR AD1, V1) viene eseguito tante volte quante sono
35
necessarie a far trascorrere i 1200ns .
Il caso pi sfortunato che, trascorso questo tempo, debba
ancora iniziare il fetch della istruzione V1: JNR AD1, V1 (la
cui esecuzione trova READY = 1 e consente di uscire dal ciclo
di attesa). Pertanto la durata di questo primo ciclo di attesa
, nel caso peggiore, 1200+300ns.
La durata totale del ciclo V1: JMP V1 , nel caso peggiore,
1200ns + 5200ns = 6400ns.
Allo stesso risultato si arriva usando la formula
tL < T - tc MAX
da cui si ottiene: T > tL + tc MAX = 5200ns + 1200ns = 6400ns.
In conclusione il periodo minimo del clock TMIN = 6400ns
Architettura degli Elaboratori

2010

Fine
02.e

Uso dei modi di indirizzamento

Introduzione ad ARM
e al processore S3C2440

03.a

C. Fantozzi, A. Gardich
(revisione di S. Congiu, M.Moro)

Che cosa ARM?

ARM = Advanced RISC Machine


46

ARM Ltd non produce microprocessori:


progetta e vende propriet intellettuale
ARM una architettura:
insieme dei registri e delle istruzioni disponibili
modi dindirizzamento
gestione delle interruzioni

Esistono molte versioni dellarchitettura,


e molti processori per versione
Architettura degli Elaboratori

2010

ARM nella vita quotidiana: esempi

Nintendo DSi (un ARM7 e un ARM9)


Netgear WGR614 (Marvell ARM9)
Apple iPhone (ARM11)
Molte calcolatrici e palmari

Architettura degli Elaboratori

46

2010

Architettura ARM: versioni

Sono state definite 7 versioni (da 1 a 7) del set di


istruzioni ARM.

46

Per ogni versione esistono varianti, identificate da


lettere:

T (Thumb: istruzioni da 16 bit)


M (Multiply: con prodotto da 64 bit)
E (Enhanced: con istruzioni DSP per applicazioni multimediali

Le pi diffuse nei sistemi embedded portatili


(smartphones, Personal Digital Assistants, ) sono le
versioni 4 e 5.

Architettura degli Elaboratori

2010

Architettura ARM: famiglie

Le famiglie di processori ARM attualmente pi diffuse sono:


46

FAMIGLIA

VERSIONE CORE

ARM7

ARMv3

ARM9

ARMv4T

ARM9E

ARMv5TE

ARM10E

ARMv5TE

XScale

ARMv5TE

ARM11

ARMv6

Cortex

ARMv7-x (anche ARMv6-M)

Architettura degli Elaboratori

2010

La famiglia Cortex
Presentata nel 2005, si caratterizza per essere costituita da un
insieme di unit funzionali collegabili tra loro
Uno specifico processore ne pu realizzare un sottoinsieme
serie A (application) quella pi completa (computer,
smartphone, ecc.)
serie R (realtime), floating point opzionale, cache configurabile,
MMU pi semplice
serie M (microcontroller) quella pi semplice, cache assente e
MMU opzionale
Le diverse configurazioni possono essere a singolo core o multicore
Alcune caratteristiche specifiche dellarchitettura v7
unit NEON per operazioni SIMD su 64 o 128 bit
unit floating point con pi registri e nuove operazioni
set di istruzioni Thumb per accelerare lesecuzione di macchine
virtuali (es. JVM)
modalit di esecuzione sicura (TrustZone)
Architettura degli Elaboratori

46

2010

Cortex

46

Architettura degli Elaboratori

La famiglia Cortex

2010

46

Architettura degli Elaboratori

2010

Samsung S3C24xx Application Processors


Applicazioni
Mobile Computing
Portable Network Devices
Portable media players
Edutainment toys
E-book readers

Mobile Communication
Smartphones

Obiettivi di progetto
Insieme completo di
periferiche on-chip
Elevate prestazioni
Basso consumo
Rapporto
prezzo/prestazioni

S3C2440: specifiche tecniche

Core ARM 920T; thumb i.s.


Memory Management Unit
Cache (instruction & data)

Nessun HW floating point


Funzionalit integrate:
ADC a 10 bit, 8 canali;
3 porte seriali;
USB host & device;
controller LCD, touch screen;
Interfacce per sensori
CMOS, schede di memoria,
audio, ecc. ecc.
Architettura degli Elaboratori

46

2010

Architettura degli Elaboratori

Processore RISC a 32 bit


Architettura ARMv4T

14x14 mm 289-pin FBGA


(Fine Ball Grid Array)
46
Processo produttivo: 130 nm
Frequenza: 533 MHz max
Bus memoria: 100 MHz max
Tensione di alimentazione 1.2V
Consumo: 0,368W @ 400 MHz

2010

S3C2440: schema a blocchi

10

46

Architettura degli Elaboratori

2010

ARMv4: caratteristiche

11

Larchitettura ARMv4 a 32 bit


word=32 bit
(in memoria allineati ad indirizzi multipli di 4)
halfword=16 bit
(in memoria allineati ad indirizzi multipli di 2)
byte =8 bit
(singolarmente indirizzabili in memoria)

46

232 byte di memoria indirizzabili (4GB), ma


S3C2440 supporta max 1 GB (8 banchi da 128 MB)
Architettura degli Elaboratori

2010

ARMv4: caratteristiche RISC

12

Larchitettura ARMv4 di tipo RISC


Numero elevato di registri (37 in tutto)
Istruzioni con lunghezza fissa di 32 bit
Le parole di estensione non esistono,
Architettura load/store: ad esclusione di load
e store, tutte le istruzioni operano su registri
Modi di indirizzamento semplici: tutti gli
indirizzi di memoria nelle istruzioni load/store
sono specificati da informazioni contenute in
registri o nei campi dellistruzione
Architettura degli Elaboratori

2010

ARMv4: altre caratteristiche

13

Controllo sia dellALU sia dello shifter, con


tutte le istruzioni di elaborazione-dati
Modalit di indirizzamento auto-incrementanti
e auto-decrementanti (efficienza nei loop)
Esecuzione condizionata specificabile in tutte
le istruzioni
Istruzioni di load e store multipli (pi registri)
Shift di n posizioni in un solo ciclo di clock
Istruzioni a 3 operandi
Architettura degli Elaboratori

46

46

2010

Modi operativi
User (USR): modo utente
FIQ (FIQ): gestione veloce interruzioni
IRQ (IRQ): gestione interruzioni
Supervisor (SVC): modo protetto
Abort (ABT): per gestione memoria
Undefined (UND): emulaz. coprocessori
System (SYS): usa risorse di USR
senza limitazioni daccesso

Architettura degli Elaboratori

I registri: panoramica

14

46

2010

15

46

Architettura degli Elaboratori

2010

I registri

16

R0-R13: registri di uso generale


SP: stack pointer (R13)
LR: link register (R14)

46

Memorizza lindirizzo di ritorno da subroutine

PC: program counter (R15)


Punta allistruzione da eseguire

CPSR: Current Program Status Register


Contiene i bit di stato

SPSR: Saved Program Status Register


Copia di CPSR prima del cambio di modo

2010

Architettura degli Elaboratori

CPSR: bit utili


Bit 04
Bit 7
Bit 28
Bit 29
Bit 30
Bit 31
Altri bit:
Bit 5
Bit 6
Bit 7

17

(M): modo operativo (7 attualmente previsti)


(I): interruzioni on/off (0/1)
(V): indica errore di overflow
(aritmetica con segno in complemento a 2)
(C): indica il carry o riporto
(overflow nellaritmetica senza segno)
(Z): indica un risultato zero
(N): indica un risultato negativo
(aritmetica con segno in complemento a 2)

46

(T): Thumb instruction set off/on (0/1)


(F): fast IRQ on/off (0/1)
(I): IRQ on/off (0/1)

Riservati
Architettura degli Elaboratori

2010

Big o Little Endian?

18

S3C2440 supporta tutte e 2 le modalit


Il comportamento predefinito
little endian, secondo specifiche ARM

Architettura degli Elaboratori

46

2010

Operazioni di I/O

19

LI/O di tipo memory mapped:


i registri delle periferiche si trovano in
locazioni di memoria predefinite

46

2 tipi di interruzioni:
Normale
Fast (vengono salvati meno registri)
Hardware delle periferiche con accesso diretto
alla memoria (DMA)
Architettura degli Elaboratori

2010

Classificazione delle istruzioni

20

Accesso alla memoria


Load / store tra memoria e registri

46

Elaborazione di dati (data processing)


Operazioni di movimento tra registri
Operazioni aritmetico-logiche
Operazioni di confronto
Controllo di flusso
Branch (=salto) con o senza condizione
Architettura degli Elaboratori

2010

Le istruzioni

21

ARMv4 prevede:
- istruzioni di elaborazione dati a 3 operandi:
uno (registro) per il risultato, due per gli operandi:
SUB R2, R0, R1
@ R2=R0-R1
SUB R2, R0, R1, LSL #4 @ R2=R0-R1*16
- altre istruzioni a 2 operandi:
uno per lop. destinazione, uno per lop. sorgente:
MOV R2, R2, ASR #2
@ R2=R2/4
- altre istruzioni a 1 operando:
ad es. le istruzioni di branch:
B LAB2
Architettura degli Elaboratori

46

2010

Modifica dei bit di stato

22

Per default le istruzioni


non modificano i bit di stato N,Z,C,V

46

Per modificare i bit di stato si aggiunge il


suffisso S al simbolo mnemonico dellistruzione:
ADD R2, R0, R1

@ non modifica NZCV

ADDS R2, R0, R1

@ modifica NZCV

Non vale per le istruzioni di confronto!

2010

Architettura degli Elaboratori

Istruzioni con condizione - 1


Aggiungendo specifici suffissi di condizione,
listruzione viene eseguita solo se i bit di
condizione soddisfano quanto specificato
Esempi:

MOVEQ R0, #0
MOVNE R0, #0
MOVGT R0, #0
MOVLE R0, #0
MOVAL R0, #0

Architettura degli Elaboratori

23

46

poni R0=0 solo se Z=1


esegui se Z=0
esegui se Z=0 e N=V
esegui se Z=1 o N V
esegui sempre
2010

Istruzioni con condizione - 2

24

Permettono di velocizzare il codice


risparmiando salti condizionati
mantenendo pieni i pipeline

if (a > 10) return 0;


else return 1

46

CMP r0, #10


MOVGT r0, #0
MOVLE r0, #1

Nessun branch misprediction!


2010

Architettura degli Elaboratori

Lista delle condizioni


Estensione
mnemonica

Significato

25
Flag di
condizione

Opcode
[31:28]

EQ

Uguali

Z=1

0000

NE

Non uguali

Z=0

0001

CS/HS

Carry Attivato / Senza segno maggiore o uguale

C=1

0010

CC/LO

Carry Disattivato / Senza segno minore

C=0

0011

MI

Negativo

N=1

0100

PL

Positivo o Zero

N=0

0101

VS

Overflow

V=1

0110

VC

Non Overflow

V=0

0111

HI

Senza segno maggiore

C=1 e Z=0

1000

LS

Senza segno minore o uguale

C=0 o Z=1

1001

GE

Con segno maggiore o uguale

N=V

1010

LT

Con segno minore

N!=V

1011

GT

Con segno maggiore

Z=0 e N=V

1100

LE

Con segno minore o uguale

Z=1 o N!=V

1101

AL

Sempre ( il default)

1110

NV

Mai

1111

Architettura degli Elaboratori

46

2010

I modi di indirizzamento

26

Ogni categoria di istruzioni ha i propri: ci sono


4 classi di modi di indirizzamento.

46

RISC:
niente indirizzamento assoluto (non usa
puntatori in memoria, ma solo nei registri)
indirizzamento in memoria (indiretto con
registro) solo per le istruzioni LDR (load) e
STR (store)
Architettura degli Elaboratori

2010

Classi di indirizzamento

27

Modo 1: per istruzioni di elaborazione dati


ADC, ADD, AND, BIC, CMN, CMP, EOR, MOV,
MVN, ORR, RSB, RSC, SBC, SUB, TEQ, TST

46

Modo 2: per Load&Store di word o unsigned byte


LDR, LDRB, STR, STRB
Modo 3: per L&S di halfword o signed byte
LDRH, LDRSB, LDRSH, STRH
Modo 4: per L&S di registri multipli
LDMxx, STMxx
Architettura degli Elaboratori

2010

Istruzioni di elaborazione dati

28

3 indirizzi:
<opcode>{<cond>}{S} <Rd>, <Rn>, <shifter_operand>

46

<cond>: stabilisce lesecuzione condizionata


S: stabilisce se modifica i bit di condizione
<Rd>: destinazione
<Rn>: primo operando
<shifter_operand>: secondo operando
esempio:

addges R4, R3, R2

@ R4

R3+R2

Architettura degli Elaboratori

2010

Modo 1 (indirizz. per elaboraz. dati)

29

sintassi:
<istruzione3op> Rd, Rn, <shifter_operand>
<istruzione2op> Rd, <shifter_operand>
<shifter_operand> pu essere:
un valore immediato #<valore>
un registro
Rm
un registro, dopo scorrimento specificato con:
- un valore immediato Rm, <sop> #<shift_imm>
- un registro
Rm, <sop> Rs
gli operatori <sop> disponibili sono:
ASR, LSL, LSR, ROR, RRX
Architettura degli Elaboratori

46

2010

<shifter_operand>: indirizzamento immediato

30

Il campo dellistruzione contiene il valore su cui


operare
sintassi: #<immediato>
esempio:

add R3, R3, #1

@ R3

46

R3+1

12 bit a disposizione per loperando immediato,


con la seguente struttura:
8 bit (bit c) definiscono un valore c (0 c 255);
4 bit (bit r) specificano una rotazione verso destra
di 2r posizioni

2010

Architettura degli Elaboratori

<shifter_operand>: indirizzamento immediato


31

28

24

21

cond 0 0 1 opcode S

19

16 15

Rn

12 11

Rd

87

rotate

31

immed_8
46

0x00

0
0

0xFF
r 15
2r 30

#<immediato>=c>>rot2r
immediato valido:
#0x104 (c=0x41, r=15)
immediato non valido: #0x102
Architettura degli Elaboratori

2010

<shifter_operand>: indirizzamento di registro

32

Il valore su cui operare contenuto in un registro Rm


Tale valore pu essere shiftato di una quantit:
specificata in modo immediato (0..31: 5 bit)
specificata da un altro registro (Rs):
Rm, LSR #shift_imm oppure Rm, LSR Rs
Rm, ASR #shift_imm oppure Rm, ASR Rs
Rm, LSL #shift_imm oppure Rm, LSL Rs
Rm, ROR #shift_imm oppure Rm, ROR Rs
Rm, RRX
esempi:
add R3, R1, R2, LSL #2 @ R3 R1+R2*4

add R3, R1, R2, ASR R5

@ R3

46

R1+R2/2R5
2010

Architettura degli Elaboratori

<shifter_operand>: indirizzamento di registro


31

28

24

21

19

cond 0 0 0 opcode S

16 15

Rn

12 11

Rd

shift_imm sop 0

Rm

46

codifica di Rm, <sop> #shift_imm


31

28

cond

24

21

0 0 0 opcode S

19

16 15

Rn

12 11

Rd

Rs

0 sop 1

33

Rm

codifica di Rm, <sop> Rs


<sop>:

00
01
10
11

LSL
LSR
ASR
ROR (RRX = ROR #0)

Architettura degli Elaboratori

2010

Modo 1: esempi
mov R0, #0
add R3, R3, #1
cmp R7, #1000
bic R9, R8, #0xff00
mov R2, R0
add R4, R3, R2
mov R2, R0, LSL #2
add R9, R5, R5, LSL #3
sub R9, R5, R5, ASR #3
rsb R9, R5, R5, ASR #3
mov R5, R3, RRX
mov R7, R4, ROR R3

34

@
@
@
@
@
@
@
@
@
@
@
@
@
@

R0
R3
cc
R9
R2
R4
R2
R9
R9
R9
R5
R7

0
R3+1
(R71000)
R8 and not 0xff00
R0
R3+R2
R0*4
R5+R5*8 = R5*9
R5R5/8
R5/8R5
R3 ruotato esteso
a destra di una posiz.
R4 ruotato a destra
di R3 posizioni

Architettura degli Elaboratori

46

2010

Modo 2 (per Word o unsigned Byte)

35

sintassi:
LDR|STR{B}
Rd, <addressing_mode2>
<addressing_mode2> un indirizzamento di registro
con un eventuale:

46

offset immediato
offset da registro
offset da registro scalato
pre-incremento immediato
pre-incremento da registro
pre-incremento da registro scalato
post-incremento immediato
post-incremento da registro
post-incremento da registro scalato
Architettura degli Elaboratori

2010

Modo 2: nessun offset

36

Corrisponde a quello che nel PD32


lindirizzamento indiretto con registro.

46

Il valore delloperando puntato da un registro


Rn (cio Rn contiene lindirizzo delloperando)
sintassi: [Rn]
esempio:

ldr R1, [R0]

@ R1

M32[R0]

2010

Architettura degli Elaboratori

Modo 2: offset

37

Offset immediato
[Rn, #<offset_12>]
@ Rd

46

M[Rn <offset_12>]

Offset da registro
[Rn, Rm]
@ Rd

M[Rn Rm]

Offset da registro scalato


[Rn, Rm, <sop> #<shift_imm>]
@ Rd

Architettura degli Elaboratori

M[Rn (Rm <sop> # <shift_imm>)]


2010

Modo 2: pre-incremento
Pre-incremento immediato
[Rn, #<offset_12>]!
Rn <offset_12>
@ Rn
@ Rd
M[Rn]
Pre-incremento da registro
[Rn, Rm]!
@ Rn
Rn Rm
@ Rd
M[Rn]
Pre-incremento da registro scalato
[Rn, Rm, <sop> #<shift_imm>]!
@ Rn
Rn (Rm <sop> # <shift_imm>)
M[Rn]
@ Rd
Architettura degli Elaboratori

Modo 2: post-incremento
Post-incremento immediato
[Rn], #<offset_12>
M[Rn]
@ Rd
@ Rn Rn <offset_12>
Post-incremento da registro
[Rn], Rm
M[Rn]
@ Rd
@ Rn Rn Rm
Post-incremento da registro scalato
[Rn], Rm, <sop> #<shift_imm>
M[Rn]
@ Rd
@ Rn Rn (Rm <sop> # <shift_imm>)
Architettura degli Elaboratori

38

46

2010

39

46

2010

Pre/post-increm. con registro scalato


Loffset contenuto nel registro Rm pu essere
shiftato di un valore immediato di 5 bit
sintassi:

Pre-incremento
[Rn,
[Rn,
[Rn,
[Rn,
[Rn,

Rm,
Rm,
Rm,
Rm,
Rm,

LSL #num]!
LSR #num]!
ASR #num]!
ROR #num]!
RRX]!

esempio:
ldr R1, [R0], -R2, ASR #2

40

46

Post-incremento
[Rn],
[Rn],
[Rn],
[Rn],
[Rn],

Rm,
Rm,
Rm,
Rm,
Rm,

LSL #num
LSR #num
ASR #num
ROR #num
RRX

@ R1 M32[R0]; R0 R0-(R2/4)
2010

Architettura degli Elaboratori

Indirizzamento auto-relativo

41

Si ottiene usando il registro R15 (PC)


nellindirizzamento indiretto con registro:
esempi:
ldr R1, [R15, -#8]
@ R1
ldr PC, [PC, R0, LSL #2] @ PC

46

M32[R15-8]
M32[PC+R0*4]

Il valore di R15 usato PC_istruz.+8 o +12 a


causa del prefetching
Lo shift specificato tramite un valore immediato:
il valore di R15 usato PC_istruz.+8
Lo shift specificato tramite un registro:
il valore di R15 usato PC_istruz.+12
Architettura degli Elaboratori

2010

Modo 2: esempi

42

ldr R2, [R0]

@ R2

M32[R0]

ldr R1, [R0,#4]

@ R1

M32[R0+4]

ldr R1, [R0], #8

@ R1
@ R0

M32[R0]
R0+8

ldr PC, [PC, R0, LSL #2]@ PC

46

M32[PC+R0*4]

strb R7, [R9], #1

R7B
@ M8[R9]
@ R9
R9+1

str R5, [R0,#4]!

@ R0
R0+4
R5
@ M32[R0]

Architettura degli Elaboratori

Modo 3 (per HalfWord/signed Byte)


sintassi:
STR|LDR[H] Rd, <addressing_mode3>
LDR[SH|SB] Rd, <addressing_mode3>
<addressing_mode3> pu essere:

2010

43

46

offset immediato
offset da registro
pre-incremento immediato
pre-incremento da registro
post-incremento immediato
post-incremento da registro
differenze rispetto al Modo 2:
- non si possono scalare i registri
- gli offset immediati sono a soli 8bit
Architettura degli Elaboratori

2010

Modo 2 e modo 3: tabella riassuntiva


W
SH
H
SB
B

LDR
Modo 2
Modo 3
Modo 3
Modo 3
Modo 2

44

STR
Modo 2
Modo 3
Modo 2

46

NOTA BENE: non ha senso parlare di STORE per


quantit con segno, perch non c alcuna estensione
del segno da effettuare
Architettura degli Elaboratori

2010

Modo 4 (per load/store multiplo) - 1

45

sintassi:
LDM|STM <addressing_mode4> Rn{!}, <registers>

<addressing_mode4> pu essere:
IA increment after

46

start_addr = Rn ; end_addr = Rn + #regs*4 - 4

IB increment before

start_addr = Rn + 4 ; end_addr = Rn + #regs*4

DA decrement after

start_addr = Rn - #regs*4 + 4 ; end_addr = Rn

DB decrement before

start_addr = Rn - #regs*4 ; end_addr = Rn 4


(#regs il numero di registri indicati in <registers>)

! provoca l'aggiornamento del registro Rn: al suo contenuto

viene sommata o sottratta la quantit #regs*4

Architettura degli Elaboratori

2010

Modo 4 (per load/store multiplo) - 2

46

sintassi:
LDM|STM <addressing_mode4> Rn{!}, <registers>

46

<registers> la lista di registri da salvare/caricare,


racchiusa tra parentesi graffe {} e con gli elementi
separati da virgola.
esempi:
STMDB SP!, {R0-R7}
LDMIA SP!, {R0-R7}

@ salva sullo stack i registri


@ da R0 a R7

@
@
LDMDA R9, {R1,R3-R5} @
@

Architettura degli Elaboratori

ricarica R0-R7 salvati


dallistruzione precedente
carica i registri R1, R3-R5
da M32[R9-12].. M32[R9]

2010

Fine
03.a

Introduzione ad ARM
e al processore S3C2440

ARM: le istruzioni assembly


03.b

C. Fantozzi, A. Gardich
(revisione di S. Congiu)

Struttura programma assembly

La forma generale delle linee di codice assembly :


52

label:<sp>istruzione<sp>operandi<sp>@commento
Ogni campo deve essere separato da uno o pi spazi
I label devono iniziare dal primo carattere della riga
Le istruzioni non cominciano mai dal primo carattere
della riga: devono essere precedute da almeno 1 spazio
Tutti e tre le sezioni ... : ... @ ... sono opzionali
Esistono inoltre:
direttive per lassemblatore
pseudo-istruzioni
Architettura degli Elaboratori 1

2009

Direttive per l'assemblatore

direttive: sono comandi per l'assemblatore, non per il


processore

52

.text specifica la sezione contenente il codice eseguibile


.data specifica la sezione contenente dati inizializzati
.bss specifica la sezione contenente dati non inizializzati
.end specifica la fine del modulo sorgente
.global definisce simboli visibili al di fuori del modulo stesso:
utile per collegare pi moduli (linking)
.long .short .byte definiscono costanti (es. in .data)
.ascii definisce una stringa
.lcomm .comm .skip definiscono aree di mem. non inizializzate
(locali al modulo o visibili da altri moduli)

2009

Architettura degli Elaboratori 1

Esempio di file .s
Label

.text
.global _start
_start:
mov r0, #0x100

52

@ Inizia il programma

ciclo:
subs r0, r0, #1
bne ciclo

Istruzione

ldr pc, =0x112C

.data
maschera:
.long 0xAAAAAAAA
stringa:
.ascii "Pippo"
.bss
.lcomm spazio, 100

@ esce al sistema

Direttiva

Sezione

.end
Architettura degli Elaboratori 1

2009

Classi di indirizzamento

Modo 1: per istruzioni di elaborazione dati


ADC, ADD, AND, BIC, CMN, CMP, EOR, MOV,
MVN, ORR, RSB, RSC, SBC, SUB, TEQ, TST

52

Modo 2: per Load&Store di word o unsigned byte


LDR, LDRB, STR, STRB
Modo 3: per L&S di halfword o signed byte
LDRH, LDRSB, LDRSH, STRH
Modo 4: per L&S di registri multipli
LDMxx, STMxx

Architettura degli Elaboratori 1

2009

Modo 1 (indirizz. per elab. dati)

sintassi:
<istruzione3op> Rd, Rn, <shifter_operand>
<istruzione2op> Rd, <shifter_operand>
<shifter_operand> pu essere:
un valore immediato #<valore>
un registro
Rm
un registro, dopo scorrimento specificato con:
- un valore immediato Rm, <sop> #<shift_imm>
- un registro
Rm, <sop> Rs
gli operatori <sop> disponibili sono:
ASR, LSL, LSR, ROR, RRX
Architettura degli Elaboratori 1

52

2009

Modo 1: esempi
mov R0, #0
add R3, R3, #1
cmp R7, #1000
bic R9, R8, #0xff00
mov R2, R0
add R4, R3, R2
mov R2, R0, LSL #2
add R9, R5, R5, LSL #3
sub R9, R5, R5, ASR #3
rsb R9, R5, R5, ASR #3
mov R5, R3, RRX
mov R7, R4, ROR R3

@
@
@
@
@
@
@
@
@
@
@
@
@
@

R0
R3
cc
R9
R2
R4
R2
R9
R9
R9
R5
R7

0
R3+1
(R71000)
R8 and not 0xff00
R0
R3+R2
R0*4
R5+R5*8 = R5*9
R5R5/8
R5/8R5
R3 ruotato esteso
a destra di una posiz.
R4 ruotato a destra
di R3 posizioni

Architettura degli Elaboratori 1

52

2009

Modo 2 (indirizz. per Word o uns. Byte)

sintassi:
LDR|STR{B}
Rd, <addressing_mode2>
52
<addressing_mode2> un indirizzamento indiretto
con registro [Rn], che pu avere una delle seguenti forme:
offset immediato
offset da registro
offset da registro scalato
pre-incremento immediato
pre-incremento da registro
pre-incremento da registro scalato
post-incremento immediato
post-incremento da registro
post-incremento da registro scalato
Architettura degli Elaboratori 1

2009

Modo 2: offset

Offset immediato
[Rn, #<offset_12>]
@ Rd

52

M[Rn <offset_12>]

Offset da registro
[Rn, Rm]
@ Rd

M[Rn Rm]

Offset da registro scalato


[Rn, Rm, <sop> #<shift_imm>]
@ Rd

M[Rn (Rm <sop> # <shift_imm>)]

Architettura degli Elaboratori 1

Modo 2: pre-incremento
Pre-incremento immediato
[Rn, #<offset_12>]!
Rn <offset_12>
@ Rn
@ Rd
M[Rn]
Pre-incremento da registro
[Rn, Rm]!
Rn Rm
@ Rn
@ Rd
M[Rn]
Pre-incremento da registro scalato
[Rn, Rm, <sop> #<shift_imm>]!
@ Rn
Rn (Rm <sop> # <shift_imm>)
M[Rn]
@ Rd
Architettura degli Elaboratori 1

2009

52

2009

Modo 2: post-incremento

10

Post-incremento immediato
[Rn], #<offset_12>
M[Rn]
@ Rd
@ Rn Rn <offset_12>
Post-incremento da registro
[Rn], Rm
M[Rn]
@ Rd
@ Rn Rn Rm
Post-incremento da registro scalato
[Rn], Rm, <sop> #<shift_imm>
M[Rn]
@ Rd
@ Rn Rn (Rm <sop> # <shift_imm>)

52

2009

Architettura degli Elaboratori 1

Modo 2: esempi

11

ldr R2, [R0]

@ R2

M32[R0]

ldr R1, [R0,#4]

@ R1

M32[R0+4]

ldr R1, [R0], #8

@ R1
@ R0

M32[R0]
R0+8

ldr PC, [PC, R0, LSL #2]@ PC

M32[PC+R0*4]

strb R7, [R9], #1

R7B
@ M8[R9]
@ R9
R9+1

str R5, [R0,#4]!

@ R0
R0+4
R5
@ M32[R0]

Architettura degli Elaboratori 1

52

2009

Modo 3 (ind. per HalfWord/signed Byte)


sintassi:
STR|LDR[H] Rd, <addressing_mode3>
LDR[SH|SB] Rd, <addressing_mode3>
<addressing_mode3> pu essere:

12

52

offset immediato
offset da registro
pre-incremento immediato
pre-incremento da registro
post-incremento immediato
post-incremento da registro
differenze rispetto al Modo 2:
- non si possono scalare i registri
- gli offset immediati sono a soli 8bit
2009

Architettura degli Elaboratori 1

Modo 2 e modo 3: tabella riassuntiva


W
SH
H
SB
B

LDR
Modo 2
Modo 3
Modo 3
Modo 3
Modo 2

13

STR
Modo 2
Modo 3
Modo 2

52

NOTA BENE: non ha senso parlare di STORE per


quantit con segno, perch non c alcuna estensione
del segno da effettuare
Architettura degli Elaboratori 1

2009

Modo 4 (ind. per load/store multiplo)

14

sintassi:
LDM|STM <addressing_mode4> Rn{!}, <registers>

<addressing_mode4> pu essere:
IA increment after

52

start_addr = Rn ; end_addr = Rn + #regs*4 - 4

IB increment before

start_addr = Rn + 4 ; end_addr = Rn + #regs*4

DA decrement after

start_addr = Rn - #regs*4 + 4 ; end_addr = Rn

DB decrement before

start_addr = Rn - #regs*4 ; end_addr = Rn 4


(#regs il numero di registri indicati in <registers>)

! provoca l'aggiornamento del registro Rn: al suo contenuto

viene sommata o sottratta la quantit #regs*4

2009

Architettura degli Elaboratori 1

Modo 4 (ind. per load/store multiplo)

15

sintassi:
LDM|STM <addressing_mode4> Rn{!}, <registers>

52

<registers> la lista di registri da salvare/caricare,


racchiusa tra parentesi graffe {} e con gli elementi
separati da virgola.
esempi:
STMDB SP!, {R0-R7}
LDMIA SP!, {R0-R7}

@ salva sullo stack i registri


@ da R0 a R7

@
@
LDMDA R9, {R1,R3-R5} @
@

Architettura degli Elaboratori 1

ricarica R0-R7 salvati


dallistruzione precedente
carica i registri R1, R3-R5
da M32[R9-12].. M32[R9]

2009

Classificazione delle istruzioni

16

Elaborazione di dati
operazioni aritmetiche e logiche:
ADC, ADD,
AND, BIC, EOR, ORR, RSB, RSC, SBC, SUB
movimento tra registri: MOV, MVN
confronto: CMN, CMP, TEQ, TST
Accesso alla memoria
load/store tra memoria e registri: LDR, LDRB,
STR, STRB, LDRH, LDRSB, LDRSH, STRH, LDMxx,
STMxx
Controllo del flusso
branch: B, Bcc

52

2009

Architettura degli Elaboratori 1

Istruzioni di elaborazione di dati

17

Queste istruzioni usano la classe di indirizzamento modo 1


52
Regole per le istruzioni di elaborazione di dati:
tre operandi: due sorgente, uno destinazione
tutti gli operandi sono a 32 bit, sia registri che costanti
il risultato anch'esso a 32 bit ed posto in un registro

Esempi:
add r0, r1, r2
add r0, r0, r0

Architettura degli Elaboratori 1

@ r0 = r1 + r2
@ r0 = r0 + r0 = 2*r0

2009

Istruzioni aritmetiche

18

Addizione:
ADD{<cond>} Rd, Rn, <addr_mode1>

52

Sottrazione:
SUB{<cond>} Rd, Rn, <addr_mode1>
RSB{<cond>} Rd, Rn, <addr_mode1>
Moltiplicazione:
MUL{<cond>} Rd, Rn, Rs
(attenzione: MUL ha solo operandi nei registri)

Nessuna istruzione per la divisione!


2009

Architettura degli Elaboratori 1

Istruzioni aritmetiche: esempi


add
add r0,
r0, r1,
r1, r2
r2
adc
adc r0,
r0, r1,
r1, r2
r2

@
@ r0
r0 == r1
r1 ++ r2
r2
@
@ r0
r0 == r1
r1 ++ r2
r2 ++ CC

sub
sub
sbc
sbc

r2
r2
r2
r2

@
@ r0
r0 == r1
r1 r2
r2
@
@ r0
r0 == r1
r1 -- r2
r2 ++ CC 11

rsb
rsb r0,
r0, r1,
r1, r2
r2
rsc
rsc r0,
r0, r1,
r1, r2
r2

@
@ r0
r0 == r2
r2 -- r1
r1
@
@ r0
r0 == r2
r2 -- r1
r1 ++ CC 11

r0,
r0,
r0,
r0,

r1,
r1,
r1,
r1,

19

52

rsb sta per reverse subtraction


C il carry bit del CPSR
per impostare i bit di condizione in base al risultato
occorre aggiungere il suffisso s al simbolo operativo
Architettura degli Elaboratori 1

2009

ADD, SUB, MUL: esempi

20

ADD R0, R0, #1


ADD R0, R0, #-1
ADDS R0, R0, #-1
ADD
SUB
SUB
MUL

@ R0=R0+1
@ R0=R0-1
@ R0=R0-1 e aggiorna i bit
@ di stato (utile nei cicli)
R0, R1, R2, ASR #2 @ R0=R1+R2/4
R0, R0, #1
@ di nuovo R0=R0-1
PC, LR, #4
@ ritorno da interruzione
R0, R1, R2
@ R0=R1*R2

Architettura degli Elaboratori 1

52

2009

Istruzioni logiche

21

AND logico:
AND{<cond>} Rd, Rn, <addr_mode1>

52

OR logico:
ORR{<cond>} Rd, Rn, <addr_mode1>
OR esclusivo:
EOR{<cond>} Rd, Rn, <addr_mode1>
Bit Clear (Rd=Rn AND NOT <addr_mode1>):
BIC{<cond>} Rd, Rn, <addr_mode1>
Architettura degli Elaboratori 1

2009

Istruzioni logiche: esempi


and
and r0,
r0, r1,
r1, r2
r2
orr
orr r0,
r0, r1,
r1, r2
r2

@
@ r0
r0 == r1
r1 and
and r2
r2
@
@ r0
r0 == r1
r1 or
or r2
r2

eor
eor r0,
r0, r1,
r1, r2
r2
bic
bic r0,
r0, r1,
r1, r2
r2

@
@ r0
r0 == r1
r1 xor
xor r2
r2
@
@ r0
r0 == r1
r1 and
and not
not r2
r2

22

52

bic sta per bit clear : ogni bit 1 nel secondo


operando fa azzerare il corrispondente bit nel
primo.
2009

Architettura degli Elaboratori 1

AND, ORR, EOR, BIC: esempi


AND R0, R1, R2
AND R0, R1, #0x7
ORR R0, R0, R1
EOR R0, R1, #0xF
EOR R0, R0, R0
BIC R0, R1, R2

23

@ R0=R1 AND R2
@ estrae da R1 i 3 bit meno
@ significativi e li pone in R0
@ R0=R0 OR R1
@ R0=R1 XOR 16
@ R0=0
@ R0=R1 AND NOT R2

52

e il NOT? si pu usare MVN:


MVN R1, R0
MVN R0, R0
Architettura degli Elaboratori 1

@ R1=NOT R0
@ nega i bit di R0
2009

Move (MOV)

24

Muove un valore tra registri o carica un valore


immediato espresso con 12 bit (imm_12=c_8>>2*r_4)

52

MOV{<cond>} Rd, <addr_mode1>


MOV
MOV
MOV
MOV
MOV
MOV
MOV

R0,
R1,
R2,
R3,
R3,
R1,
PC,

#0
#0xFF00
R1
R1, LSL #2
R1, ASR #1
R1, ROR R2
LR

@ R0=0
@ R1=65280
@ R2=R1
@ R3=R1*4
@ R3=R1/2
@ R1 ruotato a destra di R2 bit
@ ritorno da subroutine
2009

Architettura degli Elaboratori 1

Movimento tra registri: esempi


mov
mov r0,
r0, r2
r2
mvn
mvn r0,
r0, r2
r2

@
@ r0
r0 :=
:= r2
r2
@
@ r0
r0 :=
:= not
not r2
r2

25

52

mvn sta per move negated

Architettura degli Elaboratori 1

2009

Istruzioni di confronto
Compare:
aggiorna bit di stato in base al risultato di
Rn - <addr_mode1>:

26

52

CMP{<cond>} Rn, <addr_mode1>


Test:

aggiorna bit di stato in base al risultato di


Rn AND <addr_mode1>:
TST{<cond>} Rn, <addr_mode1>

Test Equivalence:
aggiorna bit di stato in base al risultato di
Rn XOR <addr_mode1>:
TEQ{<cond>} Rn, <addr_mode1>
2009

Architettura degli Elaboratori 1

Operazioni di confronto: esempi


cmp r1, r2
cmn r1, r2
tst r1, r2
teq r1, r2

@ set cc on r1 r2
@ set cc on r1 + r2
@ set cc on r1 and r2
@ set cc on r1 xor r2

27

52

I risultati delle operazioni (-, +, and, xor) non sono salvati


in alcun registro;
Solo i bit di condizione (cc) del CPSR sono modificati da
queste istruzioni.

Architettura degli Elaboratori 1

2009

Accesso alla memoria (load/store)

28

Queste istruzioni usano gli indirizzamenti modo 2 e 3


52

Load : nel registro destinazione viene caricato il


contenuto della locazione di memoria indicata dal
modo di indirizzamento
ldr
r0, [r1] @ r0
M32[r1]
Store : il contenuto del registro destinazione viene
salvato nella locazione di memoria indicata dal
modo di indirizzamento
str
r0, [r1] @ M32[r1]
r0

2009

Architettura degli Elaboratori 1

Istruzioni load/store - 2
ldr Rd,<addr_mode2>

29

str Rn,<addr_mode2>
52

memoria

risultato di
<addr_mode>

risultato di
<addr_mode>
AAAA AAAA

AAAA AAAA

1
AAAA AAAA

Rd

memoria

DDDD DDDD

AAAA AAAA

DDDD DDDD

Architettura degli Elaboratori 1

Rn

DDDD DDDD

DDDD DDDD

2009

Istruzione load (LDR)

30

Carica un word da memoria nel registro Rd


52

LDR{<cond>}Rd, <addr_mode2>

Carica in Rd16/8 un halfword/byte con zero padding


LDR{<cond>}H Rd, <addr_mode3>
LDR{<cond>}B Rd, <addr_mode2>
Carica un halfword/byte con estensione del segno
LDR{<cond>}SH Rd, <addr_mode3>
LDR{<cond>}SB Rd, <addr_mode3>
2009

Architettura degli Elaboratori 1

LDR: esempi

31

LDR

R0, [R1]

@ r0

M32[r1]

LDRB

R0, [R1]

@ r0

M8[r1]

LDRSH R0, [R1]

@ r0

ext32(M16[r1])

LDR

R0, [R1,#-8]

@ r0

M32[r1-8]

LDR

R0, [R1,R2]

@ r0

M32[r1+r2]

Architettura degli Elaboratori 1

52

2009

Caricare un valore immediato

32

Non esiste unistruzione per caricare in un


registro un valore immediato arbitrario!

52

Due possibili soluzioni:


Caricare un valore immediato valido con MOV e
poi ottenere quello voluto con somme e shift;
Usare la pseudo istruzione
LDR Rd, =numero
Esempio:
LDR R0, =0x47A0
2009

Architettura degli Elaboratori 1

Pseudoistruzione di estensione di ldr

33

La pseudo istruzione ldr (estensione di ldr) :


ldr rn, = valore
52
l'assemblatore espande la pseudo istruzione, ovvero la
realizza tramite una o pi istruzioni assembly e aree di
supporto:
viene creato un dato ausiliario, in un luogo sicuro nelle
vicinanze dellistruzione, contenente il valore da caricare
e vi si accede tramite un indirizzamento relativo al PC
pc

ldr r0,=0x47A0

pc+4

...

pc+8

...

pc+12

b ...

pc+16

0x000047A0

Architettura degli Elaboratori 1

ldr r0, [pc, #8]

[pc, #8]

(pc+8)+#8 = pc+16

2009

Caricare un indirizzo: ADR

34

Spesso utile caricare in un registro un indirizzo


definito da un label
si pu usare la pseudo istruzione:
ADR Rd, <label>

52

Esempio:
caricare in R0 lindirizzo pippo al quale inizia un
array da elaborare:
ADR R0, pippo
Architettura degli Elaboratori 1

2009

Caricare un indirizzo: ADR, LDR

35

per inserire in un registro un puntatore ci sono


due possibilit:
1. si usa la pseudo istruzione adr, che
permette di caricare in un registro
l'indirizzo identificato da un label, purch
tale label si trovi nello stesso segmento del
codice (segmento text );

52

2. si usa la pseudo istruzione che estende


l'istruzione ldr, che permette di caricare
in un registro l'indirizzo identificato da un
label ovunque questo sia definito (text,
data, bss)
Architettura degli Elaboratori 1

2009

Pseudo istruzione adr

36

La sintassi della pseudo istruzione adr :


adr Rd, label

52

Lassemblatore espande la pseudo istruzione sostituendola


con una istruzione add, che somma al PC la distanza (offset)
dellindirizzo label: add Rd, pc, #offset
Esempio:

pc

adr r0, pippo

pc+4

ldr r1, [r0]

add r0, pc, #4

pc+8
pippo: pc+12
R0

DDDD DDDD

(pc, #4

(pc+8)+#4 = pc+12)

pippo
R1

DDDD DDDD

Architettura degli Elaboratori 1

Store (STR)

2009

37

Salva Rn in un word di memoria


STR{<cond>}Rn, <addr_mode2>

52

Salva Rn16/8 in un halfword/byte di memoria


STR{<cond>}H Rn, <addr_mode3>
STR{<cond>}B Rn, <addr_mode2>
Salva un halfword/byte con estensione del segno:
non c; non ha senso estendere il segno in memoria
Architettura degli Elaboratori 1

2009

STR: esempi
STR R0, [R1, #4]!

38

@ preincremento: R1=R1+4,
R0
@ poi M32[R1]

STR R0, [R1], #4

@ postincremento:
@ M32[R1]
R0, poi R1=R1+4

STRB R0, [R1, -R2]

@ offset da registro:
@ M8[R1-R2]
R0B

STRH R0, [R1, #8]

@ offset immediato:
@ M18[R1+8]
R0W

Architettura degli Elaboratori 1

52

2009

Load/store multipli: LDM/STM

39

Queste istruzioni usano lindirizzamento modo 4


LDM<xx> Rn{!}, {lista registri}

52

carica un insieme di registri da memoria a partire


da M32[Rn]
STM<xx> Rn{!}, {lista registri}
salva un insieme di registri in memoria (da M32[Rn])
<xx> indica come aggiornare Rn:
IB: Increment Before
IA: Increment After
DB: Decrement Before
DA: Decrement After
Architettura degli Elaboratori 1

2009

LDM/STM e lo stack

40

4 tipi di stack: FA, FD, EA, ED


F
E
A
D

= full:
SP punta allultimo elemento usato
= empty:
SP punta al primo elemento libero
= ascending: SP cresce con push sullo stack
= descending: SP decresce con push sullo stack

52

valgono le seguenti equivalenze:


LDMIB = LDMED
LDMIA = LDMFD
LDMDB = LDMEA
LDMDA = LDMFA

STMIB = STMFA
STMIA = STMEA
STMDB = STMFD
STMDA = STMED
2009

Architettura degli Elaboratori 1

LDM/STM: esempi di accesso allo stack

41

Di solito si usa Rn = R13 = SP


Nella convenzione usata nel PD32 lo stack pointer
punta allultimo elemento inserito (F)
cresce per indirizzi decrescenti (D):
STMFD SP!, {R0-R7}
LDMFD SP!, {R0-R7}

52

@ salva sullo stack i registri


@ da R0 a R7 (come STMDB)
@ ricarica R0-R7 salvati
@ dallistruzione precedente
@ (come LDMIA)

LDMDB R12, {R12,SP,PC} @ carica i registri R12, SP, PC


@ con M32[R12-12], M32[R12-8],
@ e M32[R12-4]
Architettura degli Elaboratori 1

2009

Esempio: primo programma

42

Si costruisce ora un primo programma in linguaggio


assembly per processori ARM:
Si voglia spostare il contenuto di una serie di locazioni
contigue di memoria da una posizione ad unaltra
(programma che copia il contenuto di un array
copy:
copy:

adr
adr R1,
R1, TABLE1
TABLE1
adr
adr R2,
R2, TABLE2
TABLE2
ldr
ldr R0,
R0, [R1]
[R1]
str
str R0,
R0, [R2]
[R2]
...
...
...
...
TABLE1:
...
TABLE1:
...
...
...
TABLE2:
...
TABLE2:
...
Architettura degli Elaboratori 1

52

@
@ R1
R1 punta
punta aa TABLE1
TABLE1
@
@ R2
R2 punta
punta aa TABLE2
TABLE2
@
@ carica
carica ilil primo
primo valore
valore
@
@ copia
copia ilil primo
primo valore
valore
@
@ array
array sorgente
sorgente
@
@ array
array destinazione
destinazione
2009

Esempio: somma

43

Bisogna ora continuare a copiare gli elementi successivi:


copy:
copy:

adr
adr R1,
R1, TABLE1
TABLE1
adr
R2,
TABLE2
adr R2, TABLE2
ldr
ldr R0,
R0, [R1]
[R1]
str
str R0,
R0, [R2]
[R2]
add
add R1,
R1, R1,
R1, #4
#4
add
add R2,
R2, R2,
R2, #4
#4
ldr
R0,
[R1]
ldr R0, [R1]
str
str R0,
R0, [R2]
[R2]

@
@ R1
R1 punta
punta aa TABLE1
TABLE1
@
R2
punta
a
@ R2 punta a TABLE2
TABLE2
@
@ carica
carica ilil primo
primo valore
valore
@
@ copia
copia ilil primo
primo valore
valore
@
@ R1
R1 punta
punta al
al successivo
successivo
@
@ R2
R2 punta
punta al
al successivo
successivo
@
carica
il
secondo
@ carica il secondo valore
valore
@
@ ...
... ee copialo
copialo

52

Si sono incrementati i due puntatori alle tabelle (i registri


R1 e R2) della dimensione degli elementi (word da 4 byte)
Architettura degli Elaboratori 1

2009

Esempio: offset

44

possibile conglobare l'operazione di incremento dei


puntatori nelle istruzioni di load e store, usando
lindirizzamento a due componenti (registro+offset
immediato):
copy:
@
copy: adr
adr R1,
R1, TABLE1
TABLE1
@ R1
R1 punta
punta aa TABLE1
TABLE1
adr
R2,
TABLE2
@
R2
punta
a
adr R2, TABLE2
@ R2 punta a TABLE2
TABLE2
ldr
@
ldr R0,
R0, [R1]
[R1]
@ carica
carica ilil primo
primo val.
val.
str
@
str R0,
R0, [R2]
[R2]
@ salva
salva ilil primo
primo valore
valore
ldr
@
ldr R0,
R0, [R1,
[R1, #4]
#4]
@ carica
carica ilil secondo
secondo val.
val.
str
@
str R0,
R0, [R2,
[R2, #4]
#4]
@ ...
... ee copialo
copialo
Usati i puntatori contenuti in R1 e R2, si aggiunta ad
essi la dimensione dellelemento (4) in modo che puntino
al successivo (con ununica istruzione):
ldr R0, [R1, #4] @ R0
M32[R1+4]
Architettura degli Elaboratori 1

2009

Esempio: pre-incremento

45

Nell'ultima versione del programma i registri R1 e R2


continuano a puntare all'inizio delle rispettive tabelle; per
scorrerle tutte bisogna aumentare, ogni volta, gli offset
(8, 12, 16, ...), oppure (meglio) si incrementano i puntatori
R1 e R2, usando lindirizzamento con pre-incremento:
copy:
copy:

loop:
loop:

52

52

adr
adr R1,
R1, TABLE1
TABLE1 @
@ R1
R1 punta
punta aa TABLE1
TABLE1
adr
adr R2,
R2, TABLE2
TABLE2 @
@ R2
R2 punta
punta aa TABLE2
TABLE2
ldr
R0,
[R1]
@
carica
il
primo
ldr R0, [R1]
@ carica il primo valore
valore
str
@
str R0,
R0, [R2]
[R2]
@ salva
salva ilil primo
primo valore
valore
ldr
ldr R0,
R0, [R1,
[R1, #4]!
#4]! @carica
@carica ilil secondo
secondo val.
val.
str
str R0,
R0, [R2,
[R2, #4]!@
#4]!@ ...
... ee copialo
copialo

Il punto esclamativo comporta la pre-modifica del registro:


ldr R0, [R1, #4]! @ R1
R1+4, R0
M32[R1]
Architettura degli Elaboratori 1

2009

Esempio: post-incremento

46

Per scorrere tutta la tabella basta ripetere invariate le


ultime due istruzioni; copiato il primo elemento, si pu
procedere (loop) con i successivi.
possibile uniformare anche la prima operazione, usando
l'indirizzamento con post-incremento:
copy:
copy:
loop:
loop:

adr
adr R1,
R1, TABLE1
TABLE1
adr
adr R2,
R2, TABLE2
TABLE2
ldr
ldr R0,
R0, [R1],
[R1], #4
#4
str
str R0,
R0, [R2],
[R2], #4
#4

52

@
R1 punta
punta aa TABLE1
TABLE1
@ R1
@
@ R2
R2 punta
punta aa TABLE2
TABLE2
@
@ carica
carica dal
dal 1.mo
1.mo vettore
vettore
@
@ salva
salva nel
nel 2.ndo
2.ndo vettore
vettore

Rispetto al caso precedente, R1 e R2 sono prima usati per


accedere agli operandi, e poi vengono incrementati di 4:
ldr R0, [R1], #4 @ R0 M32[R1], R1 R1+4
Servono altre istruzioni per eseguire il loop il numero di
volte desiderato (istruzioni di confronto e di salto)
Architettura degli Elaboratori 1

2009

Istruzioni di controllo del flusso (salto)


Salto:
B{<cond>} <indirizzo>

47

52

Salto a subroutine (salva PC in LR):


BL{<cond>} <indirizzo>
Lindirizzamento di tipo auto-relativo: 32MB dalla
posizione attuale

Chiamata a sistema (interruzione sw):


SWI{<cond>} <immed_24>

Architettura degli Elaboratori 1

2009

Istruzioni di salto: esempi

48

B (branch incondizionato)
B <indirizzo>
@ PC indirizzo

52

BL (branch and link incondizionato)


BL <indirizzo>
@ LR PC-4, PC indirizzo
bb label1
label1
...
...
label1:
label1: bl
bl label2
label2
cont:
...
cont:
...
...
...
label2:
label2: ...
...
mov
mov PC,
PC, LR
LR

@
@ salta
salta aa label1
label1
@
@ salta
salta ee salva
salva ilil PC
PC
@
@ continua
continua ilil programma
programma
@
@ fa
fa qualcosa
qualcosa (subroutine)
(subroutine)
@
@ torna
torna aa cont
cont
2009

Architettura degli Elaboratori 1

Condizioni
Estensione
mnemonica

49
Significato

Flag di
condizione

Opcode
[31:28]

EQ

Uguali

Z=1

0000

NE

Non uguali

Z=0

0001

CS/HS

Carry Attivato / Senza segno maggiore o uguale

C=1

0010

CC/LO

Carry Disattivato / Senza segno minore

C=0

0011

MI

Negativo

N=1

0100

PL

Positivo o Zero

N=0

0101

VS

Overflow

V=1

0110

VC

Non Overflow

V=0

0111

HI

Senza segno maggiore

C=1 e Z=0

1000

LS

Senza segno minore o uguale

C=0 o Z=1

1001

GE

Con segno maggiore o uguale

N=V

1010

LT

Con segno minore

N!=V

1011

GT

Con segno maggiore

Z=0 e N=V

1100

LE

Con segno minore o uguale

Z=1 o N!=V

1101

AL

Sempre ( il default)

1110

NV

Mai

1111

Architettura degli Elaboratori 1

52

2009

Istruzioni condizionate

50

Tutte le istruzioni di elaborazione di dati e di salto


possono essere rese condizionate, ovvero la loro effettiva
esecuzione pu essere fatta dipendere dallo stato dei bit
ZNCV nel CPSR.
Per rendere una istruzione condizionata sufficiente
apporre come suffisso dell'istruzione il codice della
condizione.

52

Esempi:
bne label
@ salta se non uguale
addlt r0, r1, #10 @ somma se minore o uguale
movcc R1, #6
@ copia se non c stato riporto

2009

Architettura degli Elaboratori 1

Confronto e salto: esempi

51

CMP R1, #0
BEQ label1

@ confronta R1 e 0
@ salta a label1 se R1=0

CMP R1, R0
BGT label2

@ confronta R1 e R0
@ salta a label2 se R1>R0 (signed)

TST R1, #0x42


BLNE errore

@ controlla i bit 1 e 6 di R1
@ salta alla subroutine errore se
@ almeno uno di tali bit 0

SWI #0x0F

@ chiama la funzione di sistema


@ numero 16

Architettura degli Elaboratori 1

52

2009

Completamento dellesempio

52

Supponiamo che larray da copiare contenga 16 elementi:


le istruzioni scritte prima vanno eseguite ripetutamente
(loop) 16 volte; allo scopo si pu utilizzare un registro
(ad es. R3) come contatore:
- vi si inserisce il valore iniziale 16,
- lo si decrementa di una unit ad ogni iterazione,
- con una instruzione di salto condizionato si riesegue il
loop se il contatore diverso zero, altrimenti no:
copy:
copy:
loop:
loop:

52

mov
mov R3,
R3, #0x10
#0x10 @
@ valore
valore iniziale
iniziale contatore
contatore
adr
adr R1,
R1, TABLE1
TABLE1 @
@ R1
R1 punta
punta aa TABLE1
TABLE1
adr
adr R2,
R2, TABLE2
TABLE2 @
@ R2
R2 punta
punta aa TABLE2
TABLE2
ldr
ldr R0,
R0, [R1],
[R1], #4
#4 @
@ carica
carica dal
dal primo
primo vettore
vettore
str
R0,
[R2],
#4
@
salva
nel
secondo
str R0, [R2], #4 @ salva nel secondo vettore
vettore
subs
subs R3,
R3, R3,
R3, #1
#1 @
@ decrementa
decrementa ilil contatore
contatore
bne
@
bne loop
loop
@ salta
salta se
se non
non zero
zero

Architettura degli Elaboratori 1

2009

Fine
03.b

ARM: le istruzioni assembly

ARM
esempi di programmi ASM

03.d

C. Fantozzi, A. Gardich
(revisione di S. Congiu)

EsA1: copia di un vettore


Nel progettare un programma che esegua la
copia di un vettore vanno definiti:
i dati su cui il programma opera:

19

sia quelli inizializzati, che hanno gi un valore


iniziale prima che inizi lesecuzione del programma
(nellesempio il vettore da copiare pu essere di
questo tipo),
sia quelli non inizializzati, nei quali verranno
scritti dei valori durante lesecuzione del
programma (nellesempio il vettore che riceve la
copia pu essere di questo tipo);

le istruzioni che, operando su quei dati,


realizzano quanto richiesto.
Architettura degli Elaboratori 1

2007

EsA1: dati inizializzati (.data)

Il vettore da copiare, contenente ad es. una stringa di


caratteri (480 byte = 120 word), pu esser collocato
nella sezione .data, tramite la direttiva (.ascii); in
questo modo il vettore viene caricato in memoria
(allindirizzo vett1), prima dellinizio del programma:

19

.data
.data
vett1:
vett1:
.ascii
.ascii "Registers
"Registers R0
R0 to
to R7
R7 are
are unbanked
unbanked registers.
registers. This
This me"
me"
.ascii
.ascii "ans
"ans that
that each
each of
of them
them refers
refers to
to the
the same
same 32-bit
32-bit ph"
ph"
.ascii
"ysical
register
in
all
processor
modes.
They
are
c"
.ascii "ysical register in all processor modes. They are c"
.ascii
.ascii "ompletely
"ompletely general-purpose
general-purpose registers,
registers, with
with no
no speci"
speci"
.ascii
.ascii "al
"al uses
uses implied
implied by
by the
the architecture,
architecture, and
and can
can be
be us"
us"
.ascii
"ed
wherever
an
instruction
allows
a
general-purpos"
.ascii "ed wherever an instruction allows a general-purpos"
.ascii
.ascii "e
"e register
register to
to be
be specified.
specified. Registers
Registers R8
R8 to
to R14
R14 ar"
ar"
.ascii
.ascii "e
"e banked
banked registers.
registers. The
The physical
physical register
register referred"
referred"
.ascii
.ascii "to
"to by
by each
each of
of them
them depends
depends on
on the
the current
current processo"
processo"
.ascii
.ascii "r
"r mode.
mode. Where
Where aa particular
particular phy"
phy"
2007

Architettura degli Elaboratori 1

EsA1: dati non inizializzati(.bss)

Nella sezione contenente i dati non inizializzati


(.bss), si pu collocare il vettore destinato a
ricevere la copia (vett2):
vett2:
vett2:

.bss
.bss
.skip
.skip 480
480

Architettura degli Elaboratori 1

19

@
@ spazio
spazio di
di 480
480 byte
byte

2007

EsA1: le istruzioni

Conviene prevedere di mantenere nei registri le informazioni che


servono per realizzare lalgoritmo:
R0: lunghezza del vettore in word,
R1: indirizzo primo elemento di vett1 (vettore sorgente),
R2: indirizzo primo elemento di vett2 (vett. destinazione).
Il cuore del programma:

loop:
loop:

19

MOV
MOV R0,
R0, R0,
R0, LSL#2@
LSL#2@ lunghezza
lunghezza vettore
vettore in
in BYTE
BYTE
ADD
@
ADD R0,
R0, R1,
R1, R0
R0
@ R0:
R0: indirizzo
indirizzo di
di stop
stop (indirizzo
(indirizzo
@
@ successivo
successivo allultimo
allultimo elemento)
elemento)
LDR
LDR R3,
R3, [R1],
[R1], #4
#4
STR
STR R3,
R3, [R2],
[R2], #4
#4
CMP
CMP R1,
R1, R0
R0
BLO
loop
BLO loop

@
@ carica
carica un
un word
word dal
dal 1.mo
1.mo vettore
vettore
@
@ salva
salva ilil word
word nel
nel 2.do
2.do vettore
vettore
@
@ raggiunta
raggiunta la
la fine?
fine?
@
no:
riesegue
@ no: riesegue ilil loop
loop
2007

Architettura degli Elaboratori 1

EsA1: cuore del programma

Modi di indirizzamento usati:


di registro,
di registro scalato,
post-incremento immediato.
Viene usato R3 (come registro di transito dei dati).
MOV
MOV R0,
R0, R0,
R0, LSL#2
LSL#2
ADD
R0,
R1,
R0
ADD R0, R1, R0
loop:
loop:
LDR
LDR R3,
R3, [R1],
[R1], #4
#4
STR
R3,
[R2],
#4
STR R3, [R2], #4
CMP
CMP R1,
R1, R0
R0
BLO
BLO loop
loop
Architettura degli Elaboratori 1

19

@
@ lunghezza
lunghezza v.re
v.re in
in BYTE
BYTE
@
R0:
indirizzo
di
stop
@ R0: indirizzo di stop (indirizzo
(indirizzo
@
successivo
allultimo
elemento)
@ successivo allultimo elemento)
@
@ carica
carica un
un word
word dal
dal primo
primo v.re
v.re
@
salva
il
word
nel
secondo
v.re
@ salva il word nel secondo v.re
@
@ raggiunta
raggiunta la
la fine?
fine?
@
@ no:
no: riesegue
riesegue ilil loop
loop
2007

EsA1: il programma completo

Si pu costruire ora il programma completo;


lambiente di programmazione richiede che:
la prima istruzione da eseguire si trovi
allindirizzo _start
il simbolo _start sia dichiarato con
lattributo .global
prima delle istruzioni viste, vanno inserite le
istruzioni che inseriscono nei registri i valori di
inizializzazione.

19

2007

Architettura degli Elaboratori 1

EsA1: le istruzioni (.text)

Si usa LDR R1, =vett1 (anzich ADR R1, vett1)


perch vett1 definito in un segmento diverso da .text
Listruzione finale (trap: B trap) serve a non perdere il
controllo del processore alla fine del programma

19

.global
.global _start
_start
.text
.text
_start:
_start:

MOV
MOV R0,
R0, #120
#120
LDR
R1,
=vett1
LDR R1, =vett1
LDR
LDR R2,
R2, =vett2
=vett2
copyvec:
copyvec: MOV
MOV R0,
R0, R0,
R0, LSL
LSL #2
#2
ADD
R0,
R1,
R0
ADD R0, R1, R0
loop:
LDR
loop:
LDR R3,
R3, [R1],
[R1], #4
#4
STR
STR R3,
R3, [R2],
[R2], #4
#4
CMP
R1,
R0
CMP R1, R0
BLO
BLO loop
loop
trap:
B
trap
trap:
B trap
Architettura degli Elaboratori 1

@
@ ilil vettore
vettore lungo
lungo 120
120 word
word
@
indirizzo
del
v.re
sorgente
@ indirizzo del v.re sorgente
@
@ indirizzo
indirizzo del
del v.re
v.re dest.
dest.
@
@ lunghezza
lunghezza del
del v.re
v.re in
in Byte
Byte
@
indirizzo
di
stop
in
R0
@ indirizzo di stop in R0
@
@ carica
carica un
un word
word dal
dal 1.mo
1.mo v.re
v.re
@
@ salva
salva ilil word
word nel
nel 2.do
2.do v.re
v.re
@
@ raggiunta
raggiunta la
la fine?
fine?
@
@ no:
no: riesegue
riesegue ilil loop
loop
@
fine
programma
@ fine programma
2007

EsA1: versione pi efficiente

Indirizzo di stop in R0: stato ottenuto con una sola


istruzione (anzich due), usando lindirizzamento di
registro scalato; con le istruzioni LDM e STM si copiano
10 word alla volta!

19

.global
.global _start
_start
.text
.text
_start:
_start:

MOV
MOV R0,
R0, #120
#120
LDR
R1,
LDR R1, =vett1
=vett1
LDR
LDR R2,
R2, =vett2
=vett2
copyvec1:ADD
R0,
copyvec1:ADD R0, R1
R1 ,, R0,
R0, LSL
LSL #2
#2
loop:
LDMIA
loop:
LDMIA R1!,
R1!, {R3-R12}
{R3-R12}
STMIA
STMIA R2!,
R2!, {R3-R12}
{R3-R12}
CMP
R1,
R0
CMP R1, R0
BLO
BLO loop
loop
trap:
BB trap
trap:
trap

@
@ ilil vettore
vettore lungo
lungo 120
120 word
word
@
indirizzo
del
v.re
sorgente
@ indirizzo del v.re sorgente
@
@ indirizzo
indirizzo del
del v.re
v.re destinaz.
destinaz.
@
indirizzo
di
stop
in
@ indirizzo di stop in R0
R0
@
@ carica
carica 10
10 word
word dal
dal 1.mo
1.mo v.re
v.re
@
@ salva
salva 10
10 word
word nel
nel 2.do
2.do v.re.
v.re.
@
@ raggiunta
raggiunta la
la fine?
fine?
@
@ no:
no: riesegue
riesegue ilil loop
loop
@
@ fine
fine programma
programma

Architettura degli Elaboratori 1

EsA2: lunghezza di una stringa

2007

Si vuole scrivere un programma che calcoli la


lunghezza di una stringa.
19
La stringa in memoria sia terminata dal codice di
controllo EOS (End Of String): byte con tutti i
bit uguali a zero, che indica la line della stringa.

Architettura degli Elaboratori 1

2007

EsA2: sezioni .data e .bss

10

Il programma non fa uso di dati non inizializzati:


la sezione .bss non c.

19

/*
/* Dati
Dati inizializzati
inizializzati (stringa)
(stringa) */
*/
str1:
str1:

.data
.data
.ascii
.ascii "Questa
"Questa stringa
stringa e'
e' lunga
lunga 36
36 caratteri"
caratteri"
.byte
@
.byte 00
@ EOS
EOS (terminatore
(terminatore di
di stringa)
stringa)
.align
@
.align
@ allineamento
allineamento aa indir.
indir. di
di word
word

Architettura degli Elaboratori 1

EsA2: uso dei registri


R0: contenga, allinizio, lindirizzo del primo
carattere della stringa;
R1: contenga, alla fine, la lunghezza della
stringa, cio il numero di caratteri di cui
costituita (EOS escluso).

Architettura degli Elaboratori 1

2007

11

19

2007

EsA2: le istruzioni (.text)


esempio di istruzioni eseguite sotto condizione;
esempio di indirizzamento con offset da registro.

12

19

.global
.global _start
_start
.text
.text
_start:
_start:
strlen:
strlen:
loop:
loop:

trap:
trap:

LDR
LDR R0,
R0, =str1
=str1
MOV
R1,
MOV R1, #0
#0
LDRB
LDRB R2,
R2, [R0,
[R0, R1]
R1]
CMP
R2,
#0
CMP R2, #0
ADDNE
ADDNE R1,
R1, R1,
R1, #1
#1
BNE
loop
BNE loop
BB trap
trap

@
@ puntatore
puntatore alla
alla stringa
stringa str1
str1
@
R1:
lunghezza
stringa
@ R1: lunghezza stringa
@
@ carica
carica byte
byte all'ind.
all'ind. R0+R1
R0+R1
@
e'
fine
stringa
(EOS)?
@ e' fine stringa (EOS)?
@
@ no:
no: conteggia
conteggia ilil carattere
carattere
@
esamina
quello
successivo
@ esamina quello successivo
@
@ fine
fine programma
programma

2007

Architettura degli Elaboratori 1

EsA3: fattoriale
Si vuole scrivere un programma
che calcoli il fattoriale di un numero

n!

Architettura degli Elaboratori 1

13

19

n (n 1)! per n 0
1
per n 0

2007

EsA3 : sezioni .data e .bss

14

Il programma non fa uso di dati inizializzati:


19
la sezione .data non c;
Il programma non fa uso di dati non inizializzati:
la sezione .bss non c.

Architettura degli Elaboratori 1

EsA3 : uso dei registri

2007

15

R0: contenga:
19
allinizio, il numero n di cui calcolare il fattoriale;
alla fine:
n! (il fattoriale di n),
0 in caso di overflow.

Architettura degli Elaboratori 1

2007

EsA3: sezione .text

16

.global
.global _start
_start
.text
.text
_start:
_start: MOV
MOV R0,
R0, #6
#6
fact:
fact:
CMP
CMP R0,
R0, #12
#12
BLS
do_it
BLS do_it
MOV
MOV R0,
R0, #0
#0
B
B fine
fine
do_it:
do_it: MOV
MOV R1,
R1, R0
R0
ciclo:
SUBS
R1,
ciclo:
SUBS R1, R1,
R1, #1
#1
BEQ
BEQ fine
fine
MUL
MUL R0,
R0, R1,
R1, R0
R0
B
ciclo
B ciclo
fine:
fine:
trap:
B
trap:
B trap
trap

19

@
@ da
da calcolare
calcolare 6!=720=0x02D0
6!=720=0x02D0
@
@ 13!
13! non
non ci
ci sta
sta in
in 32
32 bit
bit
@
non
c'e'
overflow:
procedi
@ non c'e' overflow: procedi
@
@ c'e'
c'e' overflow:
overflow: poni
poni R0=0
R0=0
@
@ fine
fine programma
programma
@
@N
N
@
R1=N-1
@ R1=N-1
@
@ se
se R1=0
R1=0 ilil ciclo
ciclo e'
e' finito
finito
@
@ R0=R1*R0
R0=R1*R0 == N*(N-1)
N*(N-1)
@
vai
all'iterazione
@ vai all'iterazione successiva
successiva
@
@ fine
fine programma
programma
2007

Architettura degli Elaboratori 1

EsA3: versione pi efficiente

17

usando le istruzioni condizionate si ottiene codice con


meno istruzioni.
_start:
_start: MOV
MOV R0,
R0, #6
#6
fact:
CMP
fact:
CMP R0,
R0, #12
#12
BLS
do_it
BLS do_it
MOV
MOV R0,
R0, #0
#0
B
B fine
fine
do_it:
do_it: MOV
MOV R1,
R1, R0
R0
ciclo:
SUBS
R1,
ciclo:
SUBS R1, R1,
R1, #1
#1
MULNE
MULNE R0,R1,R0
R0,R1,R0
BNE
BNE ciclo
ciclo
fine:
fine:
trap:
B
trap:
B trap
trap

Architettura degli Elaboratori 1

19

@
@ da
da calcolare
calcolare 6!=720=0x02D0
6!=720=0x02D0
@
@ 13!
13! non
non ci
ci sta
sta in
in 32
32 bit
bit
@
non
c'e'
overflow:
procedi
@ non c'e' overflow: procedi
@
@ c'e'
c'e' overflow:
overflow: poni
poni R0=0
R0=0
@
@ fine
fine programma
programma
@
@N
N
@
R1=N-1
@ R1=N-1
@
@ R0=R1*R0
R0=R1*R0 se
se R1
R1 diverso
diverso da
da 00
@
@ iteraz.
iteraz. successiva
successiva se
se R1=0
R1=0
@
@ fine
fine programma
programma

2007

EsA3: compilatore c

18

Come si comporta il compilatore c?


19

unsigned
unsigned int
int main()
main() {{
unsigned
unsigned int
int r0=6;
r0=6;
unsigned
unsigned int
int r1;
r1;
r1=r0;
r1=r0;
while(r1>1)
while(r1>1) {{ r1--;
r1--; r0*=r1;
r0*=r1; }}
}}

return
return r0;
r0;

2007

Architettura degli Elaboratori 1

EsA3: O1/livello di ottimizzazione 1

19

i commenti sono stati aggiunti (non sono stati prodotti


dal compilatore)
unsigned
unsigned int
int r0=6;
r0=6;
0:
mov
0: e3a00006
e3a00006
mov r0,
r0, #6
#6
unsigned
int
r1;
unsigned int r1;
r1=r0;
r1=r0;
4:
mov
4: e1a0c000
e1a0c000
mov r12,
r12, r0
r0
while(r1>1)
while(r1>1) {{ r1--;
r1--; r0*=r1;
r0*=r1; }}
8:
sub
8: e24cc001
e24cc001
sub r12,
r12, r12,
r12, #1
#1
c:
mul
c: e000009c
e000009c
mul r0,
r0, r12,
r12, r0
r0
10:
cmp
10: e35c0001
e35c0001
cmp r12,
r12, #1
#1
14:
movls
14: 91a0f00e
91a0f00e
movls pc,
pc, lr
lr
18:
bhi
18: eafffffa
eafffffa
bhi 88
Architettura degli Elaboratori 1

19

@@ NN
@@
@@
@@
@@
@@

N=N-1
N=N-1
R0=N*(N-1)
R0=N*(N-1)
R12>1?
R12>1?
no:
no: fine
fine
si:
si: itera
itera
2007

Fine
03.d

esempi di programmi ASM

03.e

ARM920T SAMSUNG s3c2440


partendo da zero
A. Barbalace, M. Comin, C. Fantozzi, G. Manduchi

System on Chip Samsung s3c2440: che cos?


Il chip SAMSUNG s3c2440
integra un elevato numero di
periferiche nello stesso chip,
da cui il nome System On Chip
(SoC).
Il sistema di sviluppo
costituito da due schede (PCB
printed circuit board): una,
pi piccola, su cui saldato il
SoC Samsung ed una seconda,
pi grande, la Motherboard, su
cui si trova la circuiteria
necessaria alla connessione di
tutte le periferiche.
Architettura degli Elaboratori

21

2010

Vista del sistema di sviluppo

Samsung
s3c2440A

21

SDRAM
Alimentatore
12V

Flash
Pulsante
RESET
CODEC IIS
amplificatore
speaker

Pulsanti
connessi
al port I/O

Led e switch
USB
host

USB
client

Chip e
connettore
RS232

Controller e
connettore
Ethernet

Pulsanti
OFF e ON

2010

Architettura degli Elaboratori

Scrittura di un programma

21

Editing

Assembl.

Architettura degli Elaboratori

Collegam.
moduli

Collaudo

2010

Ambiente di sviluppo

Programma Text Editor

21

Per la scrittura e la modifica del testo sorgente

Programma Assemblatore
Traduce il testo sorgente in modulo oggetto

Programma Linker
Costruisce il programma eseguibile

Programma Debugger
Esegue il programma sotto controllo del
programmatore
Architettura degli Elaboratori

Assemblatore e linker

2010

21

Architettura degli Elaboratori

2010

Il primo programma

Preparare lambiente di lavoro su PC


Scrivere il programma
Compilare e linkare
Accendere il sistema
Caricare il programma
Eseguire il programma
Non funziona... Premere RESET!

21

2010

Architettura degli Elaboratori

Compilare e linkare (1 di 2)

Partiamo dal seguente programma in assembly:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*add1.s****************************************************
* somma di due numeri :
*
* addendi immediati, risultato su registro
*
***********************************************************/

21

.text
.global _start
_start:
.global add1_func
add1_func:
mov r0, #10
mov r1, #15
add r2, r1, r0
add1_end:
b add1_end

@ carica il primo operando


@ carica il secondo operando
@ esegue la somma
@ trappola

.end
/**********************************************************/
/* Suggerimento/variante:
*/
/* in esecuzione passo-passo cambiare il valore contenuto */
/* nei registri r0, r1 prima di eseguire la somma
*/
/**********************************************************/

Architettura degli Elaboratori

2010

Compilare e linkare (2 di 2)

1) Assemby del programma tramite il seguente comando:


arm-elf-as --gdwarf-2 -o add1.o add1.s

21

--gdwarf-2: specifica che si vogliono includere, nel modulo oggetto,


informazioni di debug
-o <file>.o: specifica il file di output (in cui verr prodotto il modulo oggetto);
<file>.s: specifica il file di input (contenente il modulo sorgente da tradurre).

2) Creazione delleseguibile (in formato ELF):


arm-elf-ld -Ttext 0x30000000 -o add1 add1.o
-Ttext 0x30000000 specifica lindirizzo di memoria a partire dal quale si
vuole che venga caricato il segmento .text

Architettura degli Elaboratori

2010

Avviare il sistema Samsung s3c2440 (1 di 2)

Prima di avviare il sistema di sviluppo e necessario:


1) controllare che
lalimentatore sia
collegato alla rete
elettrica e alla scheda;
2) collegare la scheda al
computer host tramite
una connessione seriale;
3) aprire un terminale nel
computer host.

Architettura degli Elaboratori

21

2010

Avviare il sistema Samsung s3c2440 (2 di 2)

10

Si procede poi con i seguenti punti:


4) PRIMA - alimentare il sistema azionando
linterruttore on, situato in basso a destra;

21

5) POI (prima che siano trascorsi 10 secondi, senn sul


sistema di sviluppo si avvia Linux) impartire, dal
terminale, il comando di connessione alla scheda:
sh connetti.sh
che avvia il programma kgdb, che la parte di debugger
residente sul sistema di sviluppo, con cui colloquier il
debugger (insight) residente sul PC host;
6) laccensione, sui led della scheda, del valore 0xAAAA
segnala che la connessione e lavvio del debugger sulla
scheda sono avvenuti correttamente.
Architettura degli Elaboratori

Caricare il programma (1 di 4)
Il programma viene
caricato ed eseguito sotto
il controllo del debugger
tramite il tool insight.

2010

11

21

Il tool viene lanciato, sul


PC host, dal comando:
arm-elf-insight -nx
Scegliere File->Open e
selezionare il programma
precedentemente prodotto
in formato ELF (nel nostro
caso, add1)
Architettura degli Elaboratori

2010

Caricare il programma (2 di 4)
Occorre adesso richiedere
al debugger di connettersi
alla scheda (target)
selezionando Run ->
Connect to Target.
Si imposta quindi la
finestra Target Selection
come da figura, eccetto il
il campo Port, posto a

12

21

/dev/ttyS0

Si preme infine il pulsante


Ok, e la connessione tra
host e scheda viene
instaurata

Architettura degli Elaboratori

Caricare il programma (3 di 4)
Una volta connesso,
linterfaccia diventa vuota.
Cio e dovuto al fatto che il
processore Samsung sta
eseguento il codice di
UBOOT, e non ancora il
programma add1.
Questultimo deve essere
infatti ancora caricato.
Si puo tornare alla
visualizzazione del
programma selezionandolo
dal menu a tendina in alto.
Architettura degli Elaboratori

2010

13

21

2010

Caricare il programma (4 di 4)
Ora il programma puo
essere scaricato dallHost
alla scheda target tramite il
comando Run->Download.

14

21

A questo punto il codice e


stato caricato nella memoria
del Samsung, a partire
dallindirizzo 0x30000000
ed e pronto per essere
eseguito, con il comando
Run.
Architettura degli Elaboratori

Eseguire il programma (1 di 2)
Per quanto fatto nei passi
precedenti, lesecuzione si
fermata alla prima riga di
codice del nostro file.
Si procede quindi con
lesecuzione passo passo
usando oppure a seconda
che si vogliano eseguire le
istruzioni passo passo o si
voglia eseguire tutta la
chiamata ad una subroutine.
Si possono anche definire
dei breakpoint, sui quali
lesecuzione si sospender.
Architettura degli Elaboratori

2010

15

21

2010

Eseguire il programma (2 di 2)

16

E possibile visualizzare lo
stato del processore
Samsung tramite il comando

21

View->Registers
La finestra evidenziera il
contenuto dei registri e le
modifiche conseguenti alle
esecuzione delle istruzioni.
Sara altresi possibile, tra
le altre cose, alterare il
contenuto di questi registri.
2010

Architettura degli Elaboratori

File di listing

17

Per produrlo (nel file add1.lst) aggiungere lopzione


a > add1.lst nel comando arm-elf-as:
arm-elf-as --gdwarf-2 -o add1.o add1.s a > add1.lst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

21

/*add1.s****************************************************
* somma di due numeri :
*
* addendi immediati, risultato su registro
*
***********************************************************/
.text
.global _start
_start:

0000 0A00A0E3
0004 0F10A0E3
0008 002081E0
000c 010000EA

.global add1_func
add1_func:
mov r0, #10
@
mov r1, #15
@
add r2, r1, r0 @
add1_end:
b add1_end
@

carica il primo operando


carica il secondo operando
esegue la somma
trappola

.end

Architettura degli Elaboratori

2010

Oltre ad assemblatore e linker (1 di 2)


arm-elf-objdump D -S add1.o > add1.odump
produce, in add1.odump, il disassemblato del
modulo oggetto add1.o
arm-elf-objdump D -S add1 > add1.edump
produce, in add1.edump, il disassemblato del
modulo eseguibile add1
arm-elf-nm -a -l add1 > add1.sym
stampa, in add1.sym, la lista di tutti i simboli
usati nel modulo eseguibile
arm-elf-size add1 > add1.size
stampa, in add1.size, la lunghezza delle varie
sezioni
Architettura degli Elaboratori

18

21

2010

Oltre ad assemblatore e linker (2 di 2)


Per tutti i comandi, maggiori informazioni sulle
opzioni disponibili possono essere ottenute con

19

21

man <nomecomando>

Architettura degli Elaboratori

2010

Esempio duso di arm-elf-objdump (1 di 2)


Disassemblato del modulo oggetto add1.o
ottenuto con il comando arm-elf-objdump add1.o D
add1.o:

20

21

file format elf32-littlearm

Disassembly of section .text:


00000000 <_start>:
0: e3a0000a
4: e3a0100f
8: e0812000

mov
mov
add

0000000c <add1_end>:
c: ea000001
b

r0, #10
r1, #15
r2, r1, r0

; 0xa
; 0xf

c <add1_end>

...

2010

Architettura degli Elaboratori

Esempio duso di arm-elf-objdump (2 di 2)


Disassemblato del modulo eseguibile add1
ottenuto con il comando arm-elf-objdump add1 D
add1:

21

21

file format elf32-littlearm

Disassembly of section .text:


30000000 <_start>:
30000000:
e3a0000a
30000004:
e3a0100f
30000008:
e0812000

mov
mov
add

r0, #10
r1, #15
r2, r1, r0

3000000c <add1_end>:
3000000c:
eafffffe

3000000c <add1_end>

; 0xa
; 0xf

...
Architettura degli Elaboratori

2010

Fine
03.e

ARM920T SAMSUNG s3c2440


partendo da zero

Testo di rif.to:
[Congiu] 4.4.2 (pg. 159168)

Le Strutture di dati
04.a

Vettori (array) e Matrici


Liste LIFO (stack)
Liste FIFO (buffer circolare)
Liste concatenate, alberi

Accesso alle strutture di dati

A livello di linguaggio assembly, c la completa


visibilit di come sono organizzate in memoria le 28
strutture di dati e i loro elementi.
Esaminiamo ora come si definiscono le pi
comuni strutture dati e come si accede ai loro
elementi:
Vettori
Matrici
Liste di tipo LIFO (stack)
Liste di tipo FIFO (buffer circolari)
Liste concatenate
Alberi
Architettura degli Elaboratori 1

2008

Vettori (array)

In linguaggio assembly, la definizione di un array si


effettua rendendo disponibili le seguenti informazioni:

28

lindirizzo iniziale V,
il numero degli elementi N,
la lunghezza L di ciascun elemento.

Organizzazione in
memoria di un vettore
di N elementi

Architettura degli Elaboratori 1

Definizione di un array
La definizione dellarray in figura pu essere
fatta con le seguenti direttive:
V: .DSB N*L

Architettura degli Elaboratori 1

2008

28

2008

Accesso agli elementi di un array

Per accedere agli elementi di un vettore si pu usare un


metodo di indirizzamento a due componenti (ad es. con
28
registro indice): una componente, che rimane fissa,
costituita dallindirizzo iniziale V; laltra, destinata a
variare, fornisce loffset dellelemento rispetto a V.
Lindirizzo dellelemento V[i] (ind V[i]) V + offset.
Laccesso allelemento di indice i richiede di trasformare
lindice nelloffset corrispondente:
ind V[i]= V + i*L
(se lindice i parte da zero)
- il calcolo delloffset richiede una moltiplicazione
ind V[i]= V + (i-1)*L
(se lindice i parte da uno)
- il calcolo delloffset richiede unoperazione in pi
pi conveniente che lindice i parta da zero.
Architettura degli Elaboratori 1

2008

Accesso agli elementi di un array

Se L = 1 loffset uguale allindice i


Se L = potenza intera di 2, allora il calcolo delloffset
(i*L) pu essere ottenuto, con una semplice operazione
di scorrimento.

28

Es: sia L=4 e R1 contenga lindice i:


ASLL 2, R1
; i*4 (indice offset)
MOVL R0, V(R1) ; accesso allelemento
Negli altri casi per ottenere loffset necessario
calcolare il prodotto (i*L): in termini di tempo di
esecuzione una moltiplicazione pi gravosa di una
somma o di uno shift.
Architettura degli Elaboratori 1

2008

Matrici

Gli elementi di una matrice possono essere


collocati in memoria ordinati per riga oppure per 28
colonna.

Organizzazione per
righe di una matrice
con R righe e C
colonne

2008

Architettura degli Elaboratori 1

Definizione di una matrice

La definizione di una matrice richiede di


specificare le seguenti informazioni:
28
Lindirizzo iniziale M
Il numero di righe R
Il numero di colonne C
La lunghezza L di ciascun elemento.
La definizione della matrice in figura pu
essere fatta con le seguenti direttive:
M: .DSB R*C*L

Architettura degli Elaboratori 1

2008

Accesso agli elementi di una matrice - 1


Per individuare un elemento si usano
due indici: uno di riga (i) e uno di
colonna (j).

28

Lindirizzo dellelemento M[i,j] dato da:


ind M[i,j] = M + (i*C+j)*L
Anche in questo caso conviene usare un
metodo di indirizzamento a due
componenti in cui lindirizzo base
costituito da M e loffset deve essere
calcolato (ad es. in un registro indice)
valutando lespressione (i*C+j)*L

2008

Architettura degli Elaboratori 1

Accesso agli elementi di una matrice - 2

Esempio:
elementi della matrice: word (L=2)
si voglia eseguire R0W M[i,j]
i sia contenuto in R1 e j in R2.

28

UMUL #C, R1
; i*C
ADDL R2, R1
; (i*C+j)
ASLL 1, R1
; (i*C+j)*2 (offset)
MOVW R0, M(R1)
per ottenere loffset comunque
necessario calcolare il prodotto i*C.
Architettura degli Elaboratori 1

2008

Matrice con array ausiliario di puntatori


Utilizzando un array ausiliario di puntatori, come in
figura, si evita il calcolo del prodotto i*C e laccesso alla
matrice si riconduce a 2 accessi ad array.

10

28

inizio 2a riga

inizio ulta riga


Accesso alle righe di
una matrice tramite un
vettore di puntatori
2008

Architettura degli Elaboratori 1

Accesso con array ausiliario di puntatori

11

Definizione della matrice M e dellarray ausiliario P:


M:
P:

.DSB R*C*L
.DCL M, M+C*L, M+2*C*L, , M+(R-1)*C*L

Con L=2, i in R1 e j in R2, il trasferimento R0W


pu ottenere cos:
ASLL 2, R1
MOVL P(R1), R1
ASLL 1, R2
ADDL R2, R1
MOVW R0, (R1)

Architettura degli Elaboratori 1

;
;
;
;
;

28

M[i,j] si

i*4 (gli elementi di P sono ptr)


P[i] R1 (inizio di riga i-esima)
j*2
(offset in riga i-esima)
P[i]+(j*2) (indirizzo di M[i,j])

2008

Accesso con array ausiliario di offset - 1

12

Al posto dellarray di puntatori P, meglio usare un


array ausiliario O che contenga gli offset di ciascuna
riga rispetto allindirizzo iniziale M:
M:
O:

28

.DSB R*C*L
.DCW 0, C*L, 2*C*L, , (R-1)*C*L

Mentre i puntatori dellarray P sono da 4 byte, gli offset


di O possono spesso essere da 2 o da 1 byte;
Un unico array O di offset pu essere utilizzato per
tutte le matrici dello stesso tipo (stesso numero di righe
e di colonne e stessa lunghezza degli elementi).

Architettura degli Elaboratori 1

Accesso con array ausiliario di offset - 2

2008

13

Usando larray O di offset, con L=2, i in R1 e j in R2, il


trasferimento R0W
M[i,j] si pu ottenere cos:
28
ASLL 1, R1
; i*2 (offset di O[i] in O)
MOVW O(R1), R1
; O[i] R1 (offset della riga i-esima)
ASLL 1, R2
; j*2 (offset nella riga i-esima)
ADDL R2, R1
; O[i]+(j*2) (offset di M[i,j])
MOVW R0, M(R1)
; R0W W[M+offset di M[i,j]]
Disponendo in un indirizzamento con reg. base e reg. indice:
ASLL 1, R1
; i*2 (offset di O[i] in O)
MOVW O(R1), R1
; O[i] R1 (offset della riga i-esima)
ASLL 1, R2
; j*2 (offset nella riga i-esima)
MOVW R0, M(R1, R2) ; R0W W[M+R1+R2]
Il metodo pu essere esteso al caso di una matrice Z di N
dimensioni (con N indici), usando N-1 array ausiliari i cui elementi
forniscono gli offset delle sottomatrici con K indici, nellarray
ausiliario con K+1 indici (con K=1..N-2), mentre larray con K=N-1
indici contiene gli offset nella matrice Z.
Architettura degli Elaboratori 1

2008

Liste LIFO (stack)

14

Definizione dellarea di
memoria di 4KB riservata ad
uno stack:
ST:

28

STL = 4096
.DSB STL
.DSB 1

Inizializzazione dello stack


pointer R7:
MOVL #ST, R7

Stack
Pointer
Indirizzi
crescenti
Organizzazione di uno stack

Operazione push di un
elemento lungo un word (R0W):
MOVW R0, -(R7)
Operazione pop:
MOVW (R7)+, R1
Architettura degli Elaboratori 1

Liste FIFO (coda) - 1

2008

15

Una lista FIFO in genere costituita da una struttura di


dati che prende il nome di buffer circolare:
28

POUT
PIN

OUT
IN

Organizzazione di un buffer circolare

Architettura degli Elaboratori 1

2008

Liste FIFO (coda) - 2

16

Nel PD32 le direttive per definire un buffer circolare


sono indicate nel seguente esempio:

28

L = 1
; lunghezza di un elemento
QL = 100 ; numero di elementi
QUE: DSB (QL-1)*L
LAST: DSB L
PIN: .DCL QUE ; puntatore inserzione
POUT: .DCL QUE ; puntatore estrazione
Agli indirizzi PIN e POUT, sono mantenuti
i puntatori usati per linserzione (IN) e
per lestrazione (OUT).
Inizialmente (coda vuota) essi puntano
entrambi al primo elemento della lista.
Architettura degli Elaboratori 1

PIN
POUT

IN
OUT

2008

Inserzione di un elemento nel buffer circolare

17

Inserzione di un elemento (il byte R0B)


28
MOVL PIN, R1
; puntatore per linserzione
MOVB R0, (R1)+
; inserzione
MOVL R1, PIN
; aggiornamento del puntatore
CMPL #LAST+L, R1 ; R1-(LAST+L) bit di condizione
JNC OK
; se C=0, R1 < LAST+L (R1 LAST)
; (nella sottrazione, C=0 se
; c un prestito)
MOVL #QUE, PIN
; altrimenti R1 LAST+L
; (R1 > LAST)
OK:

Architettura degli Elaboratori 1

2008

Estrazione di un elemento dal buffer circolare

18

Estrazione di un elemento (nel byte R0B)


28
MOVL POUT, R1
; puntatore per lestrazione
MOVB (R1)+, R0
; estrazione
MOVL R1, POUT
; aggiornamento del puntatore
CMPL #LAST+L, R1 ; R1-(LAST+L) bit di condizione
JNC OK1
; se C=0, R1 < LAST+L (R1 LAST)
; (nella sottrazione, C=0 se
; c un prestito)
MOVL #QUE, POUT ; altrimenti R1 LAST+L
; (R1 > LAST)
OK1:

Architettura degli Elaboratori 1

2008

Buffer circolare: offset anzich puntatori - 1


Il ripristino del valore iniziale dei puntatori,
quando questi superano LAST, si ottiene in modo
pi agile se lestensione del buffer pari ad una
potenza intera di 2 (2q).
In tal caso al posto dei puntatori si possono
usare gli offset relativi allinizio del buffer,
incrementati modulo 2q.
Questultima operazione pu essere effettuata
considerando solo i q bit meno significativi del
valore incrementato, che si possono isolare
eseguendo un AND con il valore 2q - 1.
Architettura degli Elaboratori 1

19

28

2008

Buffer circolare: offset anzich puntatori - 2

20

Esempio:
28

Definizione di un buffer circolare, avente una


estensione di 28=256 byte:
BQUE:
XIN:
XOUT:

.DSB 256
.DCB 0
.DCB 0

; offset iniziale di inserzione


; offset iniziale di estrazione

2008

Architettura degli Elaboratori 1

Buffer circolare: offset anzich puntatori - 3

21

Inserzione di un elemento (il byte R0B)


MOVB XIN, R1
ANDL #$FF, R1
MOVB R0, BQUE(R1)
ADDL #1, R1
MOVB R1, XIN

Architettura degli Elaboratori 1

; offset per linserzione


; azzera i 3 MSBy
; inserzione
; incremento delloffset
; aggiornamento delloffset
; (estrae da R1 solo il LSBy)

28

2008

Buffer circolare: offset anzich puntatori - 4

22

Estrazione di un elemento (nel byte R0B)


28

MOVB XOUT, R1
; offset per lestrazione
ANDL #$FF, R1
; azzera i 3 MSBy
MOVB BQUE(R1), R0 ; estrazione
ADDL #1, R1
; incremento delloffset
MOVB R1, XOUT
; aggiornamento delloffset
; (estrae da R1 solo il LSBy)

Architettura degli Elaboratori 1

2008

Buffer circolare pieno/vuoto

23

Le operazioni vanno precedute dalla verifica che il buffer


non sia gi pieno o, rispettivamente, vuoto.
Quando il buffer pieno si ha XIN = XOUT

28

(XIN, fatto il giro raggiunge XOUT dopo aver occupato lultimo


elemento libero del buffer).

Ma
Anche quando il buffer vuoto si ha XIN = XOUT
(XOUT, fatto il giro raggiunge XIN dopo aver estratto lultimo
elemento presente nel buffer).

La condizione XIN = XOUT non consente di distinguere


i due casi.
Conviene considerare pieno il buffer circolare
quando c un solo elemento libero.
Architettura degli Elaboratori 1

2008

Buffer circolare: verifica se pieno

24

Inserzione di un elemento (il byte R0B)


MOVB XIN, R1
ANDL #$FF, R1
MOVB R0, BQUE(R1)
ADDL #1, R1
CMPB XOUT, R1
JZ PIENA
MOVB R1, XIN
. . .
PIENA:
. . .

; offset per linserzione


; azzera i 3 MSBy
; elemento inserito comunque
; incremento delloffset
; se era lultimo libero
; allora la coda piena:
; XIN non viene aggiornato!
; aggiornamento di XIN
; inserzione avvenuta
; inserzione non avvenuta

Architettura degli Elaboratori 1

Buffer circolare: verifica se vuoto

28

2008

25

Estrazione di un elemento (nel byte R0B)


; offset per lestrazione
; azzera i 3 MSBy
; XIN=XOUT?
; si: la coda vuota,
; non si estrae
MOVB BQUE(R1), R0 ; estrazione
ADDL #1, R1
; incremento delloffset
MOVB R1, XOUT
; aggiornamento di XOUT
...
; estrazione avvenuta
VUOTA:
...
; estrazione non avvenuta
MOVB XOUT, R1
ANDL #$FF, R1
CMPB XIN, R1
JZ VUOTA

Architettura degli Elaboratori 1

28

2008

Liste concatenate

26

28

Ad ogni elemento di una lista concatenata (linked list)


associato un puntatore che individua lelemento successivo.
Gli elementi contengono un campo puntatore (4 byte) e
possono trovarsi ovunque in memoria.
- Nel PD32 le direttive con cui definire una lista
concatenata (inizialmente vuota) sono:
NIL = -1
HEAD: .DCL NIL
- Se R1 punta a un elemento, con listruzione:
MOVL (R1), R1
R1 punta allelemento successivo (e si percorre la lista).
2008

Architettura degli Elaboratori 1

Liste concatenate: inserzione

27

Esempio:
inserzione, a fine lista, di un elemento (puntato da R0)
MOVL #HEAD, R1
CERCA: MOVL (R1), R2
CMPL #NIL, R2
JZ ULTIMO
MOVL R2, R1
JMP CERCA
ULTIMO: MOVL R0, (R1)
MOVL #NIL, (R0)

Architettura degli Elaboratori 1

28

; puntatore iniziale
; campo indirizzo
; lultimo elemento?
; si, lultimo
; elemento successivo
; aggancio
; lelemento inserito
; ora lultimo
2008

Liste concatenate: estrazione

28

Esempio:
estrazione del primo elemento (puntatore in R0)

28

MOVL #HEAD, R1 ; puntatore iniziale


CERCA: MOVL (R1), R0
; puntatore allelemento
; da estrarre
CMPL #NIL, R0
; lista vuota?
JZ VUOTA
; si, non estrae
MOVL (R0), (R1)
; estrazione: il campo
; puntatore dellelemento
; estratto viene ricopiato
; in L[HEAD]
VUOTA:
Architettura degli Elaboratori 1

Liste concatenate: esercizi proposti


Gli esempi visti (inserzione alla fine, estrazione
dalla testa) corrispondono ad usare la lista con
modalit FIFO (coda);
Si propongono altri esercizi:

2008

29

28

1. inserzione e estrazione usando la lista con modalit


LIFO;
2. inserzione di un dato in una lista ordinata (va prima
individuato il punto in cui effettuare linserzione);
3. ricerca di un dato in una lista ordinata;
4. estrazione di un elemento da una lista ordinata, se
presente.
Architettura degli Elaboratori 1

2008

Alberi

30

Ciascun elemento della struttura comprende una lista di


puntatori ad altri elementi della struttura.
Gli elementi terminali hanno NIL nei campi puntatore.
Nel caso dellalbero binario:

Architettura degli Elaboratori 1

28

2008

Fine
04.a

Le Strutture di dati

Testo di rif.to:
[Congiu] 3.6.3 (pg. 111-112) - 5.1-5.2 (pg. 171179)

La attivazione di subroutine
05.a

Listruzione di chiamata a subroutine


Il passaggio dei parametri

La chiamata a subroutine

programma
16

sequenza di istruzioni
da eseguire in pi punti
(subroutine)
Il punto di ritorno al programma
ogni volta diverso: listruzione
successiva a quella di chiamata
(quella cui punta PC quando viene
eseguita listruzione di chiamata)

Pi soluzioni possibili ...


Architettura degli Elaboratori

2009

1a soluzione

Lindirizzo di ritorno viene salvato in una


locazione della memoria adibita a tale scopo,
ad esempio quella situata allindirizzo 0:
JSR PROC

; PC L[0], PROC PC

RET

; L[0] PC

16

Se la subroutine PROC ne chiamasse unaltra,


verrebbe perso lindirizzo di ritorno:
soluzione inaccettabile!
2009

Architettura degli Elaboratori

Realizzazione della 1a soluzione

Sequenze di microistruzioni con cui si potrebbero


realizzare le istruzioni di questa soluzione:
JSR PROC
fetch:
PROC TEMP
PC L[0]
TEMP PC
RET

fetch:
L[0] PC

Architettura degli Elaboratori

16

RPC=1, MA=1,
Z=2, MRD=1, WIR=1,
X2=1, S1=6, S2=0, XCI=0, OP=0, RA=1, WPC=1
RPC=1, MA=1,
X2=1, S1=6, S2=0, XCI=0, OP=0, RA=1, WPC=1
MRD=1, WT=1
0 bus interno, MA=1, RPC=1, MWR=1
RT=1, WPC=1
RPC=1, MA=1,
Z=2, MRD=1, WIR=1,
X2=1, S1=6, S2=0, XCI=0, OP=0, RA=1, WPC=1
0 bus interno, MA=1, MRD=1, WPC=1,
2009

2a soluzione

Lindirizzo di ritorno viene salvato nella prima locazione


di ciascuna subroutine, con la convenzione che le
istruzioni eseguibili siano collocate a partire dalla
locazione successiva:
JSR PROC
RET PROC

16

; PC L[PROC], PROC+4 PC
; L[PROC] PC

Questa soluzione consente alla subroutine PROC di


chiamarne unaltra;
ma se la subroutine PROC chiamasse se stessa
(direttamente o indirettamente), verrebbe perso
lindirizzo di ritorno: soluzione inaccettabile!
2009

Architettura degli Elaboratori

3a soluzione

Lindirizzo di ritorno viene salvato in un registro di CPU


anzich in una locazione di memoria:
JSR RX, PROC
RET RX

16

; PC RX, PROC PC
; RX PC

Questa soluzione consente alla subroutine PROC di


chiamarne unaltra, purch venga usato un registro
diverso;
la subroutine PROC pu chiamare se stessa (direttamente
o indirettamente), purch il contenuto del registro RX
venga salvato (ogni volta in un posto diverso).
Architettura degli Elaboratori

2009

Esempio 3a soluzione: il processore ARM


BL nome_subroutine
Listruzione BL (Branch-and-Link)
1. salva il PC (che punta alla istruzione successiva)
in R14 (indirizzo di ritorno),
2. carica nel PC lindirizzo della subroutine
(ci determina il salto).

16

R14 si chiama link register (si pu usare il simbolo LR)

Non esiste unistruzione apposita per il ritorno dalla


subroutine; si ottiene con listruzione:
MOV PC, R14
2009

Architettura degli Elaboratori

4a soluzione

Lindirizzo di ritorno viene memorizzato in uno stack


con unoperazione di push (ogni volta in un posto
diverso!):
JSR PROC
RET

16

; PC push, PROC PC
; pop PC

Questa soluzione consente alla subroutine PROC di


chiamarne unaltra, o anche se stessa (direttamente o
indirettamente).
Le subroutine realizzate con questa soluzione possono
essere rientranti: di esse pu essere in esecuzione pi di
una istanza (per poter chiamare ricorsivamente se
stessa una subroutine deve essere rientrante).
Architettura degli Elaboratori

2009

Il passaggio dei parametri

Si distinguono due tipi di parametri:


16
parametri di ingresso: dati passati alla subroutine;
parametri di uscita: risultati restituiti dalla subroutine
Il veicolo pi naturale e pi rapido per effettuare il
passaggio dei parametri costituito dai registri di CPU.
Esempio:
calcolo del modulo della differenza tra due numeri interi
in complemento a due.
Supponiamo di utilizzare i registri R0 e R1 come segue:
parametri di ingresso: R0 e R1
parametro di uscita: R1
2009

Architettura degli Elaboratori

Parametri nei registri: esempio


OP1:
OP2:
RIS:

MD:
POS:

. . .
.DSL 1
.DSL 1
.DSL 1
. . .
MOVL OP1, R0
MOVL OP2, R1
JSR MD
MOVL R1, RIS
. . .
SUBL R0, R1
JNN POS
NEGL R1, R1
RET

Architettura degli Elaboratori

;
;
;
;

area dati:
valori
dei
parametri

;
;
;
;

primo operando
secondo operando
chiamata a subroutine
risultato

;
;
;
;

differenza tra i par. di ingr.


se negativa
ne viene cambiato il segno
il parametro di uscita R1

16

2009

Passaggio dei parametri in memoria

10

Unaltra tecnica consiste nel collocare i parametri in


locazioni di memoria, associate ad esempio al programma
chiamante e situate subito dopo listruzione di chiamata
(in-line calling sequence).
Esempio:
il PC salvato nel registro R1 (3a soluzione);
tale registro usato dalla subroutine come registro base
per accedere ai parametri:

MDCS:

. . .
MOVL
MOVL
JSR
.DSL
.DSL
.DSL
MOVL

OP1, MDCS ;
OP2, MDCS+4 ;
R1, MD
1
;
1
;
1
;
MDCS+8, RIS ;

Architettura degli Elaboratori

colloca i parametri
nella in-line c.s.
primo parametro
secondo parametro
risultato
punto di ritorno
(continua ...)

2009

Parametri in memoria: esempio


Subroutine chiamata:
laccesso ai parametri (e al punto di ritorno) avviene
tramite indirizzamento con registro base:
MD:

POS:

MOVL 4(R1), R0
SUBL (R1), R0
JNN POS
NEGL R0, R0
MOVL R0, 8(R1)
JMP 12(R1)

Architettura degli Elaboratori

16

11

16

; accesso al 2 parametro
; accesso al 1 parametro

; deposito del risultato


; ritorno

2009

Passaggio dei parametri per indirizzo - 1


In alternativa possono essere passati, anzich i valori
dei parametri, gli indirizzi delle locazioni di memoria
ove quei valori sono contenuti:

MDCS:

...
MOVL #OP1, MDCS
MOVL #OP2, MDCS+4
MOVL #RIS, MDCS+8
JSR R1, MD
.DSL 1
.DSL 1
.DSL 1
. . .

;
;
;
;

2009

Passaggio dei parametri per indirizzo - 2


La procedura chiamata pu utilizzare lindirizzamento
indiretto di tipo pre-indexed (PD132):

POS:

MOVL @4(R1), R0
SUBL @(R1), R0
JNN
POS
NEGL R0, R0
MOVL R0, @8(R1)
JMP 12(R1)

Architettura degli Elaboratori

16

ind. 1 parametro
ind. 2 parametro
ind. del risultato
punto di ritorno

Architettura degli Elaboratori

MD:

12

13

16

; accesso al 2 parametro
; accesso al 1 parametro

; deposito del risultato


; ritorno

2009

Parametri per valore o per indirizzo?

14

parametri passati per indirizzo:


avendo a disposizione lindirizzo, la
subroutine pu accedere al valore originario
del parametro e modificarlo;

16

parametri passati per valore:


se alla subroutine viene passato il valore
(cio copia del valore) di un parametro,
eventuali modifiche apportate a questo
valore dalla subroutine non coinvolgono il
valore originario.
Architettura degli Elaboratori

2009

Disciplina di programmazione

15

Conviene che, dopo lesecuzione di una subroutine,


risulti modificato solo ci esplicitamente previsto
che la subroutine modifichi, cio i parametri di
uscita (poich questi restituiscono i risultati);
se la subroutine modificasse i valori originari dei
parametri di ingresso, questo sarebbe un effetto
collaterale indesiderato della sua esecuzione.
Per consentire alla subroutine di inserire i risultati
nei parametri di uscita e per evitare effetti
collaterali indesiderati bene che:
i parametri di ingresso siano passati per valore,
i parametri di uscita siano passati per indirizzo.
Architettura degli Elaboratori

16

2009

Esempio

16

Programma chiamante:

parametri di ingresso

...
RIS := MD(OP1, OP2);
...

Procedura chiamata:

16

parametro di uscita

function MD(x, y);


x := x - y;
if x < 0 then x := -x;
MD := x;
end

La procedura MD modifica x :

se OP1 fosse passato per indirizzo, risulterebbe


modificato anche OP1 (effetto collaterale indesiderato);
se OP1 passato per valore, le modifiche di x non hanno
effetto su OP1.

Architettura degli Elaboratori

2009

Fine
05.a

La attivazione di subroutine

Testo di rif.to:
[Congiu] 5.3 (pg. 179190)

Allocazione dinamica
e subroutine ricorsive

05.c

Allocazione dinamica della memoria


Allocazione di stack-frame

La rientranza

Una subroutine si dice rientrante se di essa pu iniziare


una nuova esecuzione mentre ancora in corso una sua
20
esecuzione precedente. La cosa pu accadere:
in seguito a una chiamata ricorsiva (diretta/indiretta)
in seguito a una interruzione (il processore passa ad
eseguire un altro programma che potrebbe chiamare la
medesima subroutine interrotta),
in un sistema multiprocessore (se la subroutine si trova
in memoria condivisa, pi di un processore pu iniziarne
la esecuzione).
Per essere rientrante una subroutine non deve alterare i
dati su cui stava operando ogni sua attivazione precedente
non terminata: quando questa proseguir la sua
esecuzione, deve trovare gli stessi valori che vi aveva
lasciato. I dati non fanno parte della subroutine, ma
dellistanza di esecuzione:
la subroutine fatta di solo codice (pure code).
Architettura degli Elaboratori

2009

Subroutine rientranti

Se ad ogni attivazione di una subroutine i dati su cui


essa opera sono allocati in un luogo diverso (ad es. nello
20
stack), allora la subroutine rientrante, cio ne pu
iniziare una nuova esecuzione mentre ancora in corso
una sua esecuzione precedente.
I dati che vanno allocati ogni volta in un posto diverso
sono:
i parametri di ingresso e di uscita passati alla subroutine
(anche lindirizzo di ritorno un parametro di ingresso),
i dati locali su cui la subroutine opera.

La soluzione comunemente adottata prevede che, al


momento di attivare una subroutine, venga allocata in
cima allo stack unarea (stack-frame) in cui si trovano
tutti i dati (parametri e dati locali) sui quali la
subroutine stessa operer. Questa soluzione si chiama
allocazione dinamica della memoria.

2009

Architettura degli Elaboratori

Allocazione dinamica della memoria


codice

dati
20

indirizzi
crescenti

fig. 5.1 Allocazione dinamica dei dati di una subroutine

Architettura degli Elaboratori

2009

Allocazione e rilascio di un frame

Allocazione di un nuovo
frame:

20

FP
push
SP
FP
SP-e
SP

Rilascio dellarea di
memoria allocata:
FP

pop

SP
FP
indirizzi
crescenti

2009

Architettura degli Elaboratori

Esempio di subroutine ricorsiva (HLL)

par. di uscita (per indirizzo)

20

par. di ingresso (per valore)


dati locali
chiamata ricorsiva

Come si comporta un compilatore?


Architettura degli Elaboratori

2009

main(): espansione in linguaggio assembly


Nota: main() non ha parametri, ma solo dati locali.
La traduzione in linguaggio assembly della istruzione di
dichiarazione di una subroutine fornisce le prime
istruzioni che essa esegue quando viene attivata (quelle
che allocano un nuovo frame in cima allo stack):
; int main()
main:
MOVL FP, -(SP)
MOVL SP, FP

;
;
;
;

20

stack: v. fig. 5.2-a


FP
push
SP
FP
stack: v. fig. 5.2-b
fig. 5.2-b

fig. 5.2-a

Indirizzi
crescenti
2009

Architettura degli Elaboratori

main(): allocazione dati locali nel frame


; int W, X, Y, Z;
ADDL #-16, SP

Architettura degli Elaboratori

;
;
;
;
;
;
;

stack: v. fig. 5.2-b


4 interi di 4 byte = 16 byte
W = -4(FP)
X = -8(FP)
Y = -12(FP)
Z = -16(FP)
stack: v. fig. 5.2-c

20

2009

main(): dati locali nel frame

20

indirizzi
crescenti

fig. 5.2-b

fig. 5.2-c

2009

Architettura degli Elaboratori

main(): rimozione del frame

20

MOVL FP, SP
MOVL (SP)+, FP
RET

Architettura degli Elaboratori

;
;
;
;
;
;
;

stack: v. fig. 5.2-c


FP SP
stack: v. fig. 5.2-b
ripristina FP precedente
stack: v. fig. 5.2-a
pop PC (ritorna al progr.
chiamante)

2009

main(): il frame rimosso dallo stack

10

20

indirizzi
crescenti

MOVL FP, SP

MOVL (SP)+, FP

2009

Architettura degli Elaboratori

main(): chiamata alla subroutine R()

11

; R(X, Y, &Z);
; inserzione parametri nello stack
; stack: v. fig. 5.2-c
MOVL 8(FP), -(SP)
; X push
MOVL 12(FP), -(SP)
; Y push
MOVL FP, R0
; diverso dal libro! (PD32)
ADDL #16, R0
; FP-16 (indirizzo di Z)
MOVL R0, -(SP)
; push
; chiamata alla subroutine
JSR R
ADDL #12, SP

Architettura degli Elaboratori

;
;
;
;
;
;

20

stack: v. fig. 5.2-d


PC push, R PC
stack: v. fig. 5.2-d
rilascia larea allocata per
i parametri
stack: v. fig. 5.2-c
2009

Chiamata a R(): situazione dello stack

12

20

indirizzi
crescenti

fig. 5.2-c

fig. 5.2-d

2009 12

Architettura degli Elaboratori

R(): allocazione del nuovo frame

13

La subroutine R() ha parametri e dati locali.


20

; void R(int I, int J, int *O)


R:
MOVL FP, -(SP)
MOVL SP, FP

Architettura degli Elaboratori

;
;
;
;
;
;
;

stack: v. fig. 5.3-a


push
FP
SP
FP
I = +16(FP)
J = +12(FP)
O = @+8(FP)
stack: v. fig. 5.3-b

2009

R(): nuovo frame allocato (solo la base)

14

20

indirizzi
crescenti

fig. 5.3-a

fig. 5.3-b

2009

Architettura degli Elaboratori

R(): allocazione dati locali nel frame


; int A, B, C;

ADDL #-12, SP

Architettura degli Elaboratori

15

20

;
;
;
;
;
;

stack: v. fig. 5.3-b


3 interi di 4 byte = 12 byte
A = -4(FP)
B = -8(FP)
C = -12(FP)
stack: v. fig. 5.3-c

2009

R(): dati locali nel frame

16

20

fig. 5.3-b

indirizzi
crescenti

fig. 5.3-c

2009

Architettura degli Elaboratori

R(): accesso ai parametri

17

; *O = I+J;
MOVL 16(FP), R0
ADDL 12(FP), R0
MOVL 8(FP), R1
MOVL R0, (R1)

Architettura degli Elaboratori

; stack: v. fig. 5.3-c


;I
; +J
; O
; risultato in O, cio in Z
; stack: v. fig. 5.3-c

20

2009

R(): chiamata ricorsiva

18

; if (A==0)
MOVL -4(FP), -4(FP) ; il valore di A
JNZ $1
; indirizzo generato dal compilatore
; R(A, B, &C);
/* chiamata ricorsiva*/
; stack: v. fig. 5.3-c
MOVL 4(FP), -(SP) ; A push
MOVL 8(FP), -(SP) ; B push
MOVL FP, R0
; diverso dal libro! (PD32)
ADDL #12, R0
; FP-12 (indirizzo di C)
MOVL R0, -(SP)
; push
; stack: v. fig. 5.3-d
JSR R
; PC push, R PC
; stack: v. fig. 5.3-d
ADDL #12, SP
; rilascia larea allocata per
; i parametri (stack: v. fig. 5.3-c)
$1:

20

2009

Architettura degli Elaboratori

Situazione dello stack

19

20

indirizzi
crescenti

fig. 5.3-c

Architettura degli Elaboratori

parametri
o dati locali

fig. 5.3-d

2009

R(): rimozione del frame

20

;
MOVL FP, SP
MOVL (SP)+, FP
RET

Architettura degli Elaboratori

;
;
;
;
;
;
;
;

stack: v. fig. 5.3-c


FP SP
stack: v. fig. 5.3-b
ripristina FP precedente
stack: v. fig. 5.3-a
pop PC (ritorna al programma
chiamante)
stack: v. fig. 5.2-d

20

2009

Fine
05.c

Allocazione dinamica e subroutine


ricorsive

ARM: stack e subroutine


05.d

Le istruzioni di accesso allo stack


Listruzione di chiamata a subroutine
Gestione degli stack frame

Istruzione di store multiplo (STM)

Le istruzioni LDR e STR operano su parole da 32-bit.


Il processore ARM in grado di trasferire, da o in memoria, un
qualsiasi sottoinsieme dei 16 registri con una singola istruzione.
Ad esempio, STM trasferisce in memoria copia di n registri:
STMIA r1, {r0, r2, r4}
; mem32[r1]
r0
; mem32[r1 + 4]
r2
; mem32[r1 + 8]
r4
I registri sono collocati in memoria a indirizzi crescenti/per indice.

r0
r1
r2
r3
r4

memoria

registri
indirizzo base
indirizzo base + 4
indirizzo base + 8

31

indirizzi

r0
r2
r4

STMIA r1, {r0, r2, r4}


Architettura degli Elaboratori

2009

Istruzione di load multiplo (LDM)

Il trasferimento opposto (da memoria a registri) fatto dalla


istruzione LDM. Ad esempio:
LDMIA r1, {r0, r2, r4}
; r0
mem32[r1]
; r2
mem32[r1+4]
; r4
mem32[r1+8]
Se nella lista di registri si include R15 (PC), listruzione comporta
anche un salto
r0
r1
r2
r3
r4

memoria

registri
indirizzo base
indirizzo base + 4
indirizzo base + 8

31

indirizzi

(r0)
(r2)
(r4)

LDMIA r1, {r0, r2, r4}


2009

Architettura degli Elaboratori

Forme diverse di LDM e STM

ci sono 4 forme diverse per ciascuna delle


istruzioni LDM e STM:
Increment-Before
Increment-After
Decrement-After
Decrement-Before

Architettura degli Elaboratori

31

LDMIB e STMIB
LDMIA e STMIA
LDMDA e STMDA
LDMDB e STMDB

2009

Aggiornamento dellindirizzo base

Nelle istruzioni precedenti il registro contenente


lindirizzo base non veniva modificato.
Per modificarlo si aggiunge ! dopo il simbolo del registro
LDMIA r1 ! , {r2-r9}

Load multiplo

;
;
;
;

31

r2
mem32[r1]
. . .
r9
mem32[r1+28]
r1
r1 + 32

Aggiorna il puntatore
I = incrementa lindirizzo base
A = (after) dopo averlo usato
Architettura degli Elaboratori

2009

Esempio duso di LDM-STM

Ad esempio per copiare 8 word (da 32 bit) da un posto


allaltro in memoria, si pu scrivere:

31

ADR r0, src_addr


;inizializza il ptr allarea sorgente
ADR r1, dest_addr ;inizializza il ptr allarea destinaz.
LDMIA r0!, {r2-r9} ;preleva 8 word dallarea sorgente
; e aggiorna r0
r0 + 32
STMIA r1, {r2-r9} ;copia gli 8 word nellarea destinaz.,
;(senza modificare r1)

Architettura degli Elaboratori

2009

4 modi diversi di realizzare uno stack

Ascending/Descending: lo stack pu crescere verso:


indirizzi crescenti
(A = ascending),
31
indirizzi decrescenti (D = descending)
Full/Empty: lo stack pointer pu puntare:
allultimo elemento con il dato in cima allo stack (F=full)
al primo elemento libero (E = empty)
(nel quale sar inserito il prossimo elemento con un push)
STMFA R13! {R0-R5}
LDMFA R13! {R0-R5}
STMFD R13! {R0-R5}
LDMFD R13! {R0-R5}
STMEA R13! {R0-R5}
LDMEA R13! {R0-R5}
STMED R13! {R0-R5}
LDMED R13! {R0-R5}

@
@
@
@
@
@
@
@

push in uno stack Full Ascending


pop da uno stack Full Ascending
push in uno stack Full Descending
pop da uno stack Full Descending
push in uno stack Empty Ascending
pop da uno stack Empty Ascending
push in uno stack Empty Descending
pop da uno stack Empty Descending
2009

Architettura degli Elaboratori

Relazione tra le due visioni di LDM/STM


Si possono usare indifferentemente gli mnemonici che fanno
riferimento al tipo di accesso o quelli che si riferiscono al tipo di
stack.
tipo di
tipo di
accesso
stack
Load (pop) con pre-incremento

LDMIB

LDMED

Load (pop) con post-incremento

LDMIA

LDMFD

Load (pop) con pre-decremento

LDMDB

LDMEA

Load (pop) con post-decremento

LDMDA

LDMFA

Store (push) con pre-incremento

STMIB

STMFA

Store (push) con post-incremento

STMIA

STMEA

Store (push) con pre-decremento

STMDB

STMFD

Store (push) con post-decremento

STMDA

STMED

Architettura degli Elaboratori

31

2009

Chiamata a subroutine nellARM (1 di 2)


...
BL SUB1
ADD R0, R1, R2
...
SUB1: ...
...
MOV PC, LR

chiamata

Architettura degli Elaboratori

@ programma chiamante
@ chiamata alla subroutine SUB1

31

ritorno

@ istruzioni della subroutine


@ ritorno al progr. chiamante

2009

Chiamata a subroutine nellARM (2 di 2)

BL nome_subroutine
Listruzione BL (Branch-and-Link) opera quanto segue: 31
1. Salva il PC (che punta alla istruzione successiva) in
R14 (indirizzo di ritorno).
2. Carica nel PC lindirizzo della subroutine
(ci determina il salto).
R14 si chiama link register (si pu usare il simbolo LR)
Non esiste unistruzione apposita per il ritorno dalla
subroutine; si ottiene con listruzione:
MOV PC, R14

Architettura degli Elaboratori

2009

Disciplina di programmazione

10

Poich lindirizzo di ritorno salvato in R14, prima di


chiamare unaltra subroutine necessario aver salvato R14.
Una buona disciplina di programmazione prevede che una
subroutine non modifichi i registri, se non quelli usati
esplicitamente per restituire i risultati (parametri di uscita).
Questo un esempio di applicazione del principio di
information hiding: nascondere al programma chiamante
i dettagli di cosa fa la subroutine al suo interno.
Per ottenere questi 2 obiettivi, conviene usare lo stack per:
salvare R14;
salvare il contenuto dei registri usati dalla subroutine
(che non siano usati per i parametri di uscita), prima di
modificarli;
ripristinare il contenuto di questi registri, prima di
ritornare al programma chiamante.

2009

Architettura degli Elaboratori

Salvataggi nello stack


BL SUB1
. . .
SUB1: STMFD r13!, {r14, r0-r2} ;push LR e i registri usati
. . .
;(r13 = stack pointer)
BL SUB2
;chiamata a una subroutine annidata
. . .
LDMFD r13!, {r14, r0-r2} ;pop LR e i registri usati
MOV pc, r14
;ritorno

r0
r1
r2
r14

r13
STMFD

r13!, {r14, r0-r2}

Architettura degli Elaboratori

11

31

alluscita da SUB1
indirizzi
memoria

alla attivazione di SUB1


indirizzi
memoria

r13

31

r0
r1
r2
r14

r13

r13
LDMFD

r13!, {r14, r0-r2}


2009

Annidamento delle subroutine

12

. . .
SUB1: STMFD r13!, {r14, r0-r2} ;push LR e i registri usati
. . .
SUB1 chiama unaltra subroutine SUB2.
posto che anche SUB2 salvi nello stack il suo link register (r14) e i
suoi registri usati, la situazione dello stack :
memoria

indirizzi

SP allinterno
di SUB2
SP allinterno
di SUB1
SP iniziale

r14 link reg. di SUB2

r14 link reg. di SUB1

stack
di SUB2
stack
di SUB1

conviene usare uno


stack frame

stack
2009

Architettura degli Elaboratori

Istruzioni per gestire uno stack frame


Come frame pointer si usa R11.
FP = R11
Allocazione di un frame:
SP = R13
STMFD SP!, {FP, LR}
LR = R14
MOV FP, SP
PC = R15
SUB SP, SP, #e ; e lestensione del frame
; (spesso multiplo di 4)
Rimozione di un frame e ritorno da subroutine:
e
MOV SP, FP
LDMFD SP!, {FP, PC} ; R14 va in R15!

13

31

R11 (FP)
R14 (LR)

indirizzi

SP

SP

FP

FP

Architettura degli Elaboratori

31

2009

Esempio di subroutine ricorsiva

14

Rivediamo lesempio di subroutine ricorsiva,


codificato in un linguaggio di alto livello (HLL),
per il quale abbiamo gi visto lespansione in
codice assembly per il PD32.

31

Esaminiamo ora, per il medesimo esempio, la


possibile espansione in codice assembly per il
processore ARM, operata da un compilatore che
segua le stesse convenzioni viste per il caso del
PD32.
2009

Architettura degli Elaboratori

Subroutine ricorsiva: HLL

15

par. di uscita (per indirizzo)

31

par. di ingresso (per valore)


dati locali
chiamata ricorsiva

Come si comporta un compilatore ARM?


Architettura degli Elaboratori

2009

main(): espansione in assembly per lARM

16

main() non ha parametri, ma solo dati locali.


La traduzione in linguaggio assembly ARM della istruzione di
dichiarazione di una subroutine fornisce le prime istruzioni che essa31
esegue quando viene attivata (quelle che allocano un nuovo frame in
cima allo stack):

@ int main() {
main:
@ stack: cfr. fig. 5.2-a
push
STMFD SP!, {FP, LR} @ FP, LR
MOV FP, SP
@ SP
FP
@ stack: cfr. fig. 5.2-b
LR (PCi-1)

Architettura degli Elaboratori

indirizzi
crescenti

2009

main(): allocazione dati locali nel frame


@ int W, X, Y, Z;
SUB SP, SP, #16

Architettura degli Elaboratori

@ stack: cfr. fig. 5.2-b


@ 4 interi di 4 byte = 16 byte
@ W = FP-4
@ X = FP-8
@ Y = FP-12
@ Z = FP-16
@ stack: cfr. fig. 5.2-c

17

31

2009

main(): dati locali nel frame

18

31

LR (PCi-1)

LR (PCi-1)

indirizzi
crescenti
Cfr. 5.2-b

Architettura degli Elaboratori

Cfr. 5.2-c

2009

main(): rimozione del frame


@}

19

@ stack: cfr. fig. 5.2-c


MOV SP, FP
@ FP SP
@ stack: cfr. fig. 5.2-b
LDMFD SP!, {FP, PC} @ ripristina FP precedente +
@ LR salvato PC (ritorna al
@ programma chiamante)
@ stack: cfr. fig. 5.2-a

Architettura degli Elaboratori

31

2009

main(): il frame rimosso dallo stack

20

31

LR (PCi-1)

indirizzi
crescenti

MOVL SP, FP

LDMFD SP!, {FP, PC}

Architettura degli Elaboratori

main(): chiamata alla subroutine R()

2009

21

@ R(X, Y, &Z)

@ stack: cfr. fig. 5.2-c


@ inserzione parametri nello stack
LDR R0, [FP, #-8]
@X
STMFD SP!, {R0}
@ push
LDR R0, [FP, #-12]
@Y
STMFD SP!, {R0}
@ push
SUB R0, FP ,#16
@ indirizzo di Z
STMFD SP!, {R0}
@ push
@ chiamata alla subroutine @ stack: cfr. fig. 5.2-d
BL
R
@ PC LR, R PC
@ stack: cfr. fig. 5.2-d
ADD SP, SP, #12
@ rilascia larea allocata per
@ i parametri
@ stack: cfr. fig. 5.2-c

Architettura degli Elaboratori

31

2009

Chiamata a R(): situazione dello stack

22

31

LR (PCi-1)

LR (PCi-1)

indirizzi
crescenti
Cfr. 5.2-d

Cfr. 5.2-c

2009

Architettura degli Elaboratori

R(): allocazione del nuovo frame

23

La subroutine R() ha parametri e dati locali.


31

@ void R(int I, int J, int *O) {


R:
STMFD SP!, {FP, LR}
MOV FP, SP

Architettura degli Elaboratori

@ stack: cfr. fig. 5.3-a


@ FP, LR
push
@ SP
FP
@ I = FP+16
@ J = FP+12
O = FP+8
@
@ stack: cfr. fig. 5.3-b
2009

R(): nuovo frame allocato (solo la base)


LR (PCi)

LR (PCi-1)

24

31

LR (PCi-1)

indirizzi
crescenti
Cfr. 5.3-a

Cfr. 5.3-b
2009

Architettura degli Elaboratori

R(): allocazione dati locali nel frame


@ int A, B, C;
SUB SP, SP, #12

Architettura degli Elaboratori

25

31

@ stack: cfr. fig. 5.3-b


@ 3 interi di 4 byte = 12 byte
@ A = FP-4
@ B = FP-8
@ C = FP-12
@ stack: cfr. fig. 5.3-c

2009

R(): dati locali nel frame

26

31

LR (PCi)

LR (PCi-1)

LR (PCi)

indirizzi
crescenti

Cfr. 5.3-b

LR (PCi-1)

Cfr. 5.3-c
2009

Architettura degli Elaboratori

R(): accesso ai parametri

27

@ *O = I+J;
LDR R0, [FP, #16]
LDR R1, [FP, #12]
ADD R0, R0, R1
LDR R1, [FP, #8]
STR R0, [R1]

Architettura degli Elaboratori

@ stack: cfr. fig. 5.3-c


@I
@J
@ I+J
@ O (indirizzo di Z)
@ risultato in O, cio in Z
@ stack: cfr. fig. 5.3-c

31

2009

R(): chiamata ricorsiva


@ if (A==0)
LDR R0, [FP, #-4]
CMP R0, #0
BNE $1
@ R(A, B, &C);
LDR R0, [FP, #-4]
STMFD SP!, {R0}
LDR R0, [FP, #-8]
STMFD SP!, {R0}
SUB R0, FP, #12
STMFD SP!, {R0}
BL R
ADDL SP, SP, #12
$1: . . .

28

@ il valore di A
@=0?
@ indirizzo $1 generato dal compilatore

31

@ stack: cfr. fig. 5.3-c


@A
@ push
@B
@ push
@ indirizzo di C
@ push
@ stack: cfr. fig. 5.3-d
@ PC LR, R PC
@ stack: cfr. fig. 5.3-d
@ rilascia larea allocata per i parametri
@ stack: cfr. fig. 5.3-c
2009

Architettura degli Elaboratori

Situazione dello stack

29

31

LR (PCi)

LR (PCi-1)

LR (PCi)

indirizzi
crescenti

LR (PCi-1)

* parametri
o dati locali

Cfr. 5.3-c
Architettura degli Elaboratori

Cfr. 5.3-d

2009

R(): rimozione del frame


@}
MOV

SP, FP

LDMFD SP!, {FP, PC}

30

@ stack: cfr. fig. 5.3-c


@ FP SP
@ stack: cfr. fig. 5.3-b
@ ripristina FP precedente +
@ LR salvato PC (ritorna
@ programma chiamante)
@ stack: cfr. fig. 5.2-d

Architettura degli Elaboratori

31

2009

Passaggio dei parametri

31

Se i parametri sono pochi conviene inserirli nei


registri, dopodich responsabilit della
subroutine salvarli nello stack, se necessario
(per poterli ripristinare o per essere rientrante).

31

Se i parametri sono molti se ne possono passare


alcuni nei registri, altri nello stack.
Cos fa, ad esempio, il compilatore C (come si
vedr pi avanti).

Architettura degli Elaboratori

2009

Fine
05.d

ARM: stack e subroutine

05.e

Architettura ARM
chiamata a subroutine
C. Fantozzi, A. Gardich
(revisione di S. Congiu)

Subroutine: supporto hardware


Istruzione di salto branch and link
BL{<cond>} <indirizzo>
Salva lindirizzo di ritorno in LR (R14)
Usa un indirizzamento auto-relativo:
32MB dalla posizione corrente

36

Ritorno:
non esiste una istruzione apposita
si ricopia in PC lindirizzo di ritorno
ad esempio: MOV PC, LR
Architettura degli Elaboratori 1

2008

Subroutine: e il resto?

Ci per cui non c supporto hw deve essere


gestito dal programmatore
Il programmatore deve dunque stabilire come:
passare i parametri dingresso,
ricevere i parametri duscita,
gestire le chiamate ricorsive,
allocare la memoria necessaria al
funzionamento della subroutine.

Architettura degli Elaboratori 1

36

2008

Subroutine: convenzioni

La gestione software delle subroutine basata


su convenzioni. Queste possono essere
arbitrarie purch:
non portino a incoerenza e perdita
dinformazione;
siano rispettate da tutti i programmatori:

36

sia da quelli che scrivono le subroutine,


sia da quelli che scrivono programmi che le usano

Architettura degli Elaboratori 1

2008

Convenzioni necessarie

indispensabile stabilire una convenzione sui parametri


di ingresso/uscita (interfaccia)
La nostra convenzione:
i parametri dingresso vengono passati nei registri,
a partire da R0;
se i parametri dingresso sono troppi, si usa lo stack;
i parametri duscita vengono passati nei registri, a
partire da R0;
tutti i registri che non sono usati per i parametri di
uscita devono rimanere inalterati (al termine della
subroutine devono contenere gli stessi valori che
avevano prima della sua chiamata)

36

2008

Architettura degli Elaboratori 1

Parametri in/out: esempio

int f(int *a, int b1, , int b20);

36

int i =f(array, x1, x2, , x20);


registri

R0

ind. di array

R1

x1

R2

x2

R3

x3

Architettura degli Elaboratori 1

memoria (stack)

SP

x4
x5
x6

x20
2008

Es 1: lunghezza di una stringa

Si vuole scrivere una subroutine che calcoli la


lunghezza di una stringa.

36

La stringa in memoria sia terminata dal codice di


controllo EOS (End Of String): byte nullo che
indica la line della stringa.
Subroutine strlen:
Ingresso: R0 puntatore alla stringa,
Uscita: R1 lunghezza della stringa.

2008

Architettura degli Elaboratori 1

Es 1: dati non inizializzati (.bss)

La subroutine fa uso di uno stack:


prevista unarea di memoria destinata allo stack, 36
nella sezione contenente i dati non inizializzati
(.bss):
lo stack di tipo FD (full descending): lo stack
cresce verso gli indirizzi pi bassi e lo stack pointer
viene fatto avanzare (decrementato) prima dei push;
il valore iniziale dello stack pointer SP (a stack
vuoto) lindirizzo miostack.
.bss
.bss
lostack:
lostack: .skip
.skip 2048
2048
miostack:
miostack:

Architettura degli Elaboratori 1

@
@ 2048
2048 byte
byte di
di stack
stack "privato"
"privato"

2008

Es 1: dati inizializzati (.data)

La stringa (di cui si vuol calcolare la lunghezza) pu


essere collocata nella sezione dei dati inizializzati
36
(.data), tramite lapposita direttiva (.ascii): in questo
modo la stringa viene caricata in memoria insieme con il
programma:
per calcolare la lunghezza della stringa, se ne
collocher in R0 lindirizzo (str1) e si chiamer la
subroutine strlen: la lunghezza verr restituita in R1.
str1:
str1:

.data
.data
.ascii
.ascii "Questa
"Questa stringa
stringa e'
e' lunga
lunga 36
36 caratteri"
caratteri"
.byte
0
@
EOS
(terminatore
.byte 0
@ EOS (terminatore di
di stringa)
stringa)
.align
@
allineamento
a
indirizzo
.align
@ allineamento a indirizzo di
di word
word
2008

Architettura degli Elaboratori 1

Es 1: inizializzazione

necessario impostare inizialmente:


il valore dello stack pointer (lindirizzo miostack),
il valore da inserire in R0 (param. di ingresso);
lambiente di programmazione usato prevede che la
prima istruzione da eseguire sia allindirizzo _start
le istruzioni sono collocate nella sezione .text:
.text
.text
_start:
_start:
LDR
LDR R13,
R13, =miostack
=miostack
LDR
LDR R0,
R0, =str1
=str1
BL
BL strlen
strlen
pippo:
pippo: BB pippo
pippo
Architettura degli Elaboratori 1

36

@
@ inizializza
inizializza SP
SP
@
@ puntatore
puntatore alla
alla stringa
stringa str1
str1
@
@ salta
salta alla
alla subroutine
subroutine
@
@ fine
fine programma
programma
2008

Es 1: subroutine strlen

10

la subroutine conteggia in R1 i caratteri fino a EOS escluso;


usa il registro R2 (ci mette il carattere da esaminare);
il contenuto di R2 viene prima salvato e, alla fine, ripristinato
strlen:
strlen:
STMFD
STMFD SP!,
SP!, {R2}
{R2}
MOV
MOV R1,
R1, #0
#0
loop:
loop:
LDRB
LDRB R2,
R2, [R0,
[R0, R1]
R1]
CMP
CMP R2,
R2, #0
#0
ADDNE
ADDNE R1,
R1, R1,
R1, #1
#1
BNE
BNE loop
loop
fine:
fine:
LDMFD
LDMFD SP!,
SP!, {R2}
{R2}
MOV
PC,
LR
MOV PC, LR

@
@ salva
salva R2
R2 sullo
sullo stack
stack
@
@ R0:
R0: ind.
ind. base
base della
della stringa
stringa
@
R1:
lunghezza
stringa
@ R1: lunghezza stringa
@
@ carica
carica in
in R2
R2 ilil byte
byte dall'ind.
dall'ind. R0+R1
R0+R1
@
@ e'
e' fine
fine stringa
stringa (EOS)?
(EOS)?
@
@ no:
no: conteggia
conteggia ilil carattere
carattere
@
@ esamina
esamina quello
quello successivo
successivo
@
@ ripristina
ripristina ii registri
registri usati
usati
@
fine
subroutine
@ fine subroutine

Architettura degli Elaboratori 1

Es 2: fattoriale
Si vuole scrivere una subroutine che calcoli il
fattoriale di un numero

n!

36

2008

11

36

n (n 1)! per n 0
1
per n 0

Ingresso: R0 contiene n
Uscita: R0 contiene n!
oppure 0 in caso di overflow
Architettura degli Elaboratori 1

2008

Es 2: dati e inizializzazione

12

stack: nella sezione dei dati non inizializzati (.bss):


.bss
lostack: .skip 2048
miostack:

36

@ 2048 byte di stack privato

necessario impostare inizialmente:


il valore dello stack pointer (lindirizzo miostack),
il valore di n da inserire in R0 (param. di ingresso):
_start:

pippo:

.text
LDR R13, =miostack
MOV R0, #6
BL fact
B pippo

@
@
@
@

inizializza SP
calcoleremo 6!=0x02D0
salta alla subroutine
fine programma
2008

Architettura degli Elaboratori 1

Es 2: subroutine fact
fact:

do_it:
ciclo:

fine:

CMP R0, #0
MOVEQ R0, #1
MOVEQ PC, LR
CMP R0, #12
BLS do_it
MOV R0, #0
MOV PC, LR

@ R0=0?
@ si: 0!=1
@ fine subroutine
@ 13! non ci sta in 32 bit
@ non c'e' overflow: procedi
@ c'e' overflow: poni R0=0
@ fine subroutine

STMFD SP!, {R1}


MOV R1, R0

@ salva R1 sullo stack


@N

SUBS R1, R1, #1


BEQ fine
MUL R0, R1, R0
B ciclo
LDMFD SP!, {R1}
MOV PC, LR

@
@
@
@
@
@

Architettura degli Elaboratori 1

13

36

R1=N-1
se R1=0 il ciclo e' finito
R0=R1*R0 = N*(N-1)
vai all'iterazione successiva
ripristina R1 dallo stack
fine subroutine
2008

Es 2: versione ricorsiva

14

versione ricorsiva della subroutine (rfact):


rfact:

CMP R0, #12


BLS do_it_r
MOV R0, #0
MOV PC, LR
do_it_r: CMP R0, #2
BHI fa
CMP R0, #0
MOVEQ R0, #1
MOV PC, LR
fa:
STMFD SP!, {R1,LR}
MOV R1, R0
SUB R0, R0, #1
BL do_it_r
MUL R0, R1, R0
LDMFD SP!, {R1,PC}

@
@
@
@
@
@
@
@
@
@
@
@
@
@
@

13! provoca overflow


no overflow: procedi
c'e' overflow: R0=0
fine subroutine
R0 e' = a 0, 1 o 2?
no: procede
R0=0?
si: 0!=1
altrimenti 1!=1 e 2!=2
salva R1 e LR
N in R1
N-1
calcola (N-1)! in R0
N!=N*(N-1)!
fine subroutine

Architettura degli Elaboratori 1

Convenzioni: stack frame


La nostra convenzione:
1. frame pointer (FP): registro R11;
2. vecchio valore di SP: salvato in R12 (IP);
3. FP, IP, LR, PC salvati in fondo al frame;
4. al di sopra: salvataggio di altri registri;
5. al di sopra: variabili locali;
6. al di sopra: memoria dinamica.

Architettura degli Elaboratori 1

36

2008

15

36

2008

Stack frame: struttura


SP

16

36

Memoria dinamica
Variabili locali
Registri salvati

FP
R12

FP=R11 (vecchio valore)


IP=R12 (vecchio SP)
LR (indirizzo di ritorno)
PC (della subroutine)
Parametri dingresso (alcuni)

Architettura degli Elaboratori 1

Convenzioni del compilatore C

1
2

2008

17

Uso dei registri da parte del compilatore C nelle


chiamate a subroutine:
36
R0 R1 R2 R3: usati per il passaggio dei primi 4
parametri (registri scratch),
R4 R5 R6 R7 R8 R9 R10: usati per le variabili locali
(valori salvati prima e ripristinati al termine della
subr.),
R11 (FP) frame pointer,
R12 (IP) (registro scratch),
R13 (SP) stack pointer,
R14 (LR) link register (ind. di ritorno al chiamante)
R15 (PC) program counter (della subroutine chiamata).
La struttura dello stack frame quella descritta nella
slide precedente.
Architettura degli Elaboratori 1

2008

Es 3: codice sorgente C
/* procedura ricorsiva
(vedi testo pg 182) */
void R(int I, int J, int *O) {
int A, B, C;
//...
A=newval();
//...
*O = I+J;
if (A>0) R(A, B, &C);
//...
}

18

int main() {
int W, X, Y, Z;
//...
R(X, Y, &Z);
//...
}
int newval() {
static int i=5;
return i--;
}

36

Seguono le istruzioni assembly generate dal compilatore C: la prima


versione senza alcuna ottimizzazione (gcc -O0)
2008

Architettura degli Elaboratori 1

Es 3: codice prodotto - 1
nota 1:il valore di IP (R12) salvato nel frame lo SP prima
dellallocazione del nuovo frame;
nota 2:spazio nel frame per 6 int: J, J, *O, A, B, C (6x4=24);
nota 3:in R0 il valore di newval; IP (R12) usato come scratch.
void R(int I, int J, int *O) {
int A,B,C;
100000: e1a0c00d mov
ip, sp
@ nota 1
100004: e92dd800 stmdb sp!, {fp, ip, lr, pc}
100008: e24cb004 sub
fp, ip, #4
@ new FP
10000c: e24dd018 sub
sp, sp, #24
@ nota 2
100010: e50b0010 str
r0, [fp, -#16] @ I
100014: e50b1014 str
r1, [fp, -#20] @ J
100018: e50b2018 str
r2, [fp, -#24] @ *O
indirizzi
codifica
istruzioni
//...
A=newval();
10001c: eb00001a bl
10008c
@ <newval>
100020: e1a0c000 mov
ip, r0
@ nota 3
100024: e50bc01c str
ip, [fp, -#28] @ A
//...
Architettura degli Elaboratori 1

19

36

allocazione nuovo frame

SP

FP

C
B
A
*O
J
I
FP
IP
LR
PC

FP-36
FP-32
FP-28
FP-24
FP-20
FP-16
nota 1

2008

Es 3: codice prodotto - 2
nota 4: il PC salvato nel frame non usato (individua il codice della
subroutine associata al frame: pu servire al debugger)
*O = I+J;
100028: e51b2018
10002c: e51b3010
100030: e51bc014
100034: e083c00c
100038: e582c000
if (A>0)
10003c: e51bc01c
100040: e35c0000
100044: da000004
R(A, B, &C);
100048: e24bc024
10004c: e51b001c
100050: e51b1020
100054: e1a0200c
100058: ebffffe8
//...

ldr
ldr
ldr
add
str

r2,
r3,
ip,
ip,
ip,

[fp, -#24]
[fp, -#16]
[fp, -#20]
r3, ip
[r2]

@
@
@
@
@

*O
I
J
I+J
->*O

ldr
cmp
ble

ip, [fp, -#28] @ A


ip, #0
@ 0x0
10005c
@<R+0x5c>

sub
ldr
ldr
mov
bl

ip, fp, #36


r0, [fp, -#28]
r1, [fp, -#32]
r2, ip
100000

@ &C
@ A
@ B
@ &C
@<R>

}
10005c: e91ba800 ldmdb fp, {fp, sp, pc}@v. fig.

36

SP

C
B
A
*O
J
I
FP
IP
LR
PC

FP
SP

FP-36
FP-32
FP-28
FP-24
FP-20
FP-16

FP
SP
PC
nota 4

in rosso leffetto di ldmdb


(rimozione del frame)
2008

Architettura degli Elaboratori 1

Es 3: codice prodotto - 3
int main() {
int W,X,Y,Z;
100060: e1a0c00d mov
100064: e92dd800
100068: e24cb004
10006c: e24dd010
//
...
R(X, Y, &Z);
100070: e24bc01c
100074: e51b0014
100078: e51b1018
10007c: e1a0200c
100080: ebffffde
//
...

stmdb
sub
sub

@ nuovo
@ frame ...
sp!, {fp, ip, lr, pc}
fp, ip, #4
@ nuovo FP
sp, sp, #16
@ 4 int

sub
ldr
ldr
mov
bl

ip, fp, #28


r0, [fp, -#20]
r1, [fp, -#24]
r2, ip
100000

21

36

ip, sp

@ &Z
@ X
@ Y
@ &Z
@<R>

allocazione nuovo
frame

SP

}
100084: e1a0000c mov
100088: e91ba800 ldmdb

Architettura degli Elaboratori 1

20

r0, ip
@ risultato
fp, {fp, sp, pc}@ rimuove
@ il frame

FP

Z
Y
X
W
FP
IP
LR
PC

FP-28
FP-24
FP-20
FP-16

2008

Es 3: codice prodotto - 4
int newval() {
10008c: e1a0c00d
100090: e92dd800
100094: e24cb004
static int i=5;
return i--;
100098: e59f3018
10009c:
1000a0:
1000a4:
1000a8:
1000ac:

e593c000
e1a0200c
e24cc001
e583c000
e1a0c002

22

mov ip, sp
@ nuovo frame ...
stmdb sp!, {fp, ip, lr, pc}
sub fp, ip, #4
@ nuovo FP
ldr

r3, [pc, #24]

ldr
mov
sub
str
mov

ip,
r2,
ip,
ip,
ip,

[r3]
ip
ip, #1
[r3]
r2

36

@ 1000b8 <newval+0x2c>
@ in R3 lindirizzo di i
@ valore attuale di i
@ decrementa i di 1
@ memorizza il nuovo val

}
1000b0: e1a0000c
1000b4: e91ba800
1000b8: 001001bc

mov r0, ip
@ risultato in R0
ldmdb fp, {fp, sp, pc} @ rimuove il frame
ldreqh r0, [r0], -ip @ non unistruzione:
@ il puntatore alla
@ variabile statica i,
@ situata in .data

Architettura degli Elaboratori 1

Es 3: ottimizzazione del codice

2008

23

interessante esaminare ora le ottimizzazioni


introdotte dal compilatore gcc,
36
opzione gcc O1
Confrontando il codice ottimizzato con quello
senza ottimizzazione (esaminato prima), si potr
constatare la maggior efficienza del codice
ottimizzato:
sia per la minor lunghezza del codice (meno
istruzioni),
sia per il minor tempo di esecuzione (accessi
alla memoria sostituiti da accessi a registri).
Architettura degli Elaboratori 1

2008

Es 3: codice ottimizzato - 1

24

i parametri I, J, *O e i dati locali A, B, C sono mantenuti nei


registri, anzich in memoria nello stack (accesso pi rapido); i
registri usati a questo scopo (r4-r7) vengono salvati nello
stack (e ripristinati al termine della procedura): I in r4, J in
r5, *O in r6, B in r7; A tenuto in r0 (registro scratch, che
non viene salvato), C (di cui usato un puntatore, nella
chiamata ad R) messo nello stack
void R(int I, int J, int *O) {
int A,B,C;
100000: mov ip, sp
@ nuovo frame ...
100004: stmdb sp!, {r4,r5,r6,r7,fp,ip,lr,pc}
100008: sub fp, ip, #4 @ nuovo FP
10000c: sub sp, sp, #4 @ spazio per C
100010: mov r4, r0
@ I
100014: mov r5, r1
@ J
100018: mov r6, r2
@ *O
//...
A=newval();
10001c: eb00000e
bl
10005c <newval> @ val r0

SP

FP

C
R4
R5
R6
R7
FP
IP
LR
PC

Architettura degli Elaboratori 1

Es 3: codice ottimizzato - 2
//...
*O = I+J;
100020: add r4,r4,r5
@ I+J (senza accessi in memoria)
100024: str r4,[r6]
@ ->*O
if (A>0)
100028: cmp r0,#0
@ in r0 A restituito da newval
10002c: ble 10003c
@<R+0x3c>
R(A, B, &C);
100030: mov r1,r7
@ B
100034: sub r2,fp,#32 @ &C
100038: bl
100000
@<R>
//...
}
10003c: ldmdb fp, {r4,r5,r6,r7,fp,sp,pc}
@ rimuove il frame

Architettura degli Elaboratori 1

36

FP-32
FP-28
FP-24
FP-20
FP-16

2008

25

36

2008

Es 3: codice ottimizzato - 3
I dati locali W,X,Y,Z sono mantenuti nei registri, anzich essere
collocati in memoria nello stack (cos laccesso pi rapido): X in r0,
Y in r1, Z (di cui usato un puntatore, nella chiamata ad R) messo
nello stack; W, che non usato, non occupa registri;
X e Y sono messi in r0 e r1, perch l servono come parametri
passati alla R; poich questi due registri sono scratch, non vengono
salvati nello stack.
int main() {
int W,X,Y,Z;
100040: mov ip, sp @ nuovo frame ...
100044: stmdb sp!, {fp, ip, lr, pc}
100048: sub fp, ip, #4 @ nuovo FP
10004c: sub sp, sp, #4 @ Z
//...
R(X, Y, &Z);
100050: sub r2, fp, #16 @ &Z
100054: bl
100000
@<R>
//...
}
100058: ldmdb fp, {fp, sp, pc}

SP

FP

Z FP-16
FP
IP
LR
PC

Es 3: codice ottimizzato - 4

27

newval una procedura semplice: non c bisogno


di allocare un frame.

Architettura degli Elaboratori 1

36

2008

Architettura degli Elaboratori 1

int newval() {
static int i=5;
return i--;
10005c: ldr r3, [pc, #16]
@
100060: ldr ip, [r3]
@
100064: mov r0, ip
@
100068: sub ip, ip, #1
@
10006c: str ip, [r3]
@
}
100070: mov pc, lr
@
100074: andeqs r0, r0, r8, ror
@
@

26

36

100074 <newval+0x18>
in R3 lindirizzo di i
valore attuale di i
decrementa i di 1
memorizza il nuovo valore di i
ritorna al programma chiamante
r1 @ non unistruzione:
il puntatore alla variabile
statica i, situata in .data

2008

Es 4: Codice Fiscale

28

Si vuole scrivere un programma che elimini le


vocali da una stringa, creando una sorta di
codice fiscale (le vocali eliminate vengano
messe alla fine, come indicato nellesempio)

Prima:

Quarantaquattro

Dopo:

Qrntqttruaaauao

Architettura degli Elaboratori 1

36

2008

Es 4: convenzioni

29

Parametri di ingresso
R0: indirizzo primo carattere della stringa
R1: lunghezza della stringa in byte

36

Parametri di uscita
R0: puntatore alla stringa del codice fiscale
R1: puntatore alla stringa delle vocali
eliminate
Stack frame: secondo le convenzioni di gcc
Architettura degli Elaboratori 1

2008

Es 4: sezioni .data e .bss

30

nella sezione dei dati inizializzati (.data) viene posta la


stringa da elaborare (str1) e la tabella (codvoc)
contenente i codici ASCII delle vocali:

codvoc:

36

.data
.align 0

@ Codici ASCII vocali:


.byte 0x41, 0x45, 0x49, 0x4F, 0x55
@ maiuscole
.byte 0x61, 0x65, 0x69, 0x6F, 0x75
@ minuscole
str1:.ascii "Quarantaquattro gatti in fila per tre con il resto di 2
.bss
.align 0
lostack: .skip 2048
miostack:

@ 2048 byte di stack "privato"

2008

Architettura degli Elaboratori 1

Es 4: inizializzazione

31

prima di chiamare la subroutine codfisc, viene


chiamata la subroutine strlen (vedi esempio 1),
che restituisce in R1 la lunghezza della stringa;
il puntatore a str1 viene passato, in R0, sia alla
strlen, sia alla codfisc.

36

.text
.global _start
_start:

_exit:

LDR R13,=miostack
LDR R0, =str1
BL strlen
BL codfisc
B _exit

Architettura degli Elaboratori 1

@ inizializza SP
@ lavoreremo su str1
@ in R1 la lunghezza
@ fine programma
2008

Es 4: subroutine vocale

32

utile una subroutine (vocale) che stabilisce se un carattere una


vocale confrontandolo con la tabella dei codici ASCII delle vocali, :
input: R0 contiene il carattere da esaminare
output: R0=0 se input una vocale, 0 altrimenti
vocale:

ciclovoc:

voc:
finevoc:

STMFD SP!, {R1-R3}


LDR R1, =codvoc
MOV R2, #0
MOV R3, #0
LDRB R3, [R1, R2]
CMP R0, R3
BEQ voc
ADD R2, R2, #1
CMP R2, #10
BLO ciclovoc
B finevoc
MOV R0, #0
LDMFD SP!, {R1-R3}
MOV PC, LR

@
@
@
@
@
@
@
@
@
@
@
@
@
@

salva R1-R3 sullo stack


R1 puntatore tab. delle vocali
R2 offset nella tabella
R3: registro di lavoro
carica una vocale dalla tabella
R0 contiene una vocale?
si: salta a voc
no: esamina elem. succ. in tab.
la tabella e' finita?
no: iterazione successiva
si: fine subroutine (R0 0)
una vocale: restituisce R0=0
ripristina i registri usati
fine subroutine
2008

Architettura degli Elaboratori 1

Es 4: subroutine codfisc - 1

33

Fase iniziale: la subroutine ricopia la stringa nella


memoria dinamica in cima allo stack (area gialla in
figura): il numero di word di questa mem. dinamica deve
quindi essere sufficiente a contenere la stringa:
codfisc:

MOV R12, SP
@ nuovo frame
STMDB SP!, {FP, R12, LR, PC}
SUB FP, R12, #4
@ nuovo FP
STMDB SP!, {R0-R7}
@ salvataggio reg.usati
@ R1=n.car. della str.
BIC R1, R1, #3
@ azzera i bit 0 e 1
ADD R1, R1, #4
@ aggiunge 4 (cos in
@ R1 c il multiplo
@ di 4 superiore)
SUBSP, SP, R1
@ spazio mem.dinamica
@ sufficiente per str.

36

SP
...

FP
Architettura degli Elaboratori 1

36

R0
R1
R2
R3
R4
R5
R6
R7
FP
R12
LR
PC

mem.
dinamica

FP-44
FP-40
FP-36
FP-32
FP-28
FP-24
FP-20
FP-16

2008

Es 4: subroutine codfisc - 2

34

Scansione 1: copia la stringa nello spazio di mem. dinamica del


frame e ne conta il n. di non-vocali (lunghezza del cod. fiscale):
36

LDR R1, [FP, #-40]


MOV R2, #0
MOV R3, #0
LDR R4, [FP, #-44]
MOV R5, SP
scan: LDRB R0, [R4, R3]
STRB R0, [R5, R3]
CMP R0, #0
ADDNE R2, R2, #1
ADD R3, R3, #1
CMP R1, R3
BHI scan

@
@
@
@
@

ripristina R1=lunghezza stringa


R2=lungh. codice fisc. (non-vocali)
R3=offset/indice del car.nella str.
R4=punt.re alla str.(R0 nel frame)
R5=punt.re alla str.in mem.dinam.

@
@
@
@
@
@
@
@

carica un carattere della str.


copia il car. nella mem. dinamica
BL vocale
il carattere e una vocale?
no: allora appartiene al cod.fiscale
incrementa loffset (car.successivo)
la str. e' finita?
no: esamina il carattere successivo
2008

Architettura degli Elaboratori 1

Es 4: subroutine codfisc - 3

35

Scansione 2: costruisce le stringhe codice fiscale e vocali:


LDR R1, [FP, #-44]
ADD R2, R1, R2
MOV R3, SP
MOV R4, #0
MOV R5, #0
MOV R6, #0
LDR R7, [FP, #-40]
build: LDRB R0, [R3, R6]

@
@
@
@
@
@
@
@
@
CMP R0, #0
@
LDRB R0, [R3, R6]
@
STRNEB R0, [R1, R4] @
ADDNE R4, R4, #1
@
STREQB R0, [R2, R5] @
ADDEQ R5, R5, #1
@
ADD R6, R6, #
@
CMP R7, R6
@
BHI build
@

Architettura degli Elaboratori 1

R1=puntatore alla stringa codice fiscale


R2=puntatore alla stringa delle vocali
R3=puntatore alla stringa in mem. dinam.
R4=offset nella stringa codice fiscale
R5=offset nella stringa delle vocali
R6=offset nella stringa in mem. dinam.
R7=lungh. stringa (R1 salvato nel frame)
car. dalla stringa nella mem.dinamica
BL vocale
il carattere e' una vocale?
(R0 modificato da vocale: va ricaricato)
no: ricopialo nel codice fiscale
e incrementa il relativo offset
si: ricopialo nella stringa delle vocali
e incrementa il relativo offset
carattere successivo
la stringa e' finita?
no: esamina il carattere successivo

36

2008

Es 4: subroutine codfisc - 4

36

Fase finale: sistemazione dei parametri d'uscita e


rimozione dello stack frame
fine: MOV R0, R1
MOV R1, R2

@
@
@
BIC R7, R7, #3
@
ADD R7, R7, #4
@
ADD SP, SP, R7
@
ADD SP, SP, #8
@
@
LDMIA SP!, {R2-R7}
@
LDMDB FP, {FP, SP, PC} @
@

Architettura degli Elaboratori 1

36

R0=punt.re alla stringa cod. fiscale


R1=punt.re alla stringa delle vocali
R7=num. di caratteri della stringa
azzera i bit 0 e 1
aggiunge 4 (multiplo di 4 superiore)
disalloca memoria dinamica
disalloca spazio R0-R1 (non vanno
ripristinati: parametri di uscita!
ripristina gli altri registri usati
riattiva il frame precedente e
ritorna al programma chiamante

2008

Fine
05.e

Architettura ARM
chiamata a subroutine

Architettura ARM - chiamata a subroutine


convenzioni del compilatore C (gcc)
05.e

S. Congiu

Convenzioni del compilatore C


Diverse versioni dei compilatori C possono
adottare convenzioni (leggermente) diverse.

Esercizio:
provare a compilare (e ad eseguire), nellambiente
di sviluppo del laboratorio, il programma C della
prossima slide (inserito, ad es. nel file es-c.c)

Architettura degli Elaboratori 1

2010

Esercizio: codice sorgente C (file es-c.c)


/* es. di procedura ricorsiva
derivato dal testo a pag.
182-183 */
void R(int I, int J, int *O) {
int A,B,C;
//...
A=newval();
//...
*O = I+J;
if (A>0)
R(A, B, &C);
//...
}

int main() {
int W,X,Y,Z;
//...
R(X, Y, &Z);
//...
}

int newval() {
static int i=5;
return i--;
}

Nota: la funzione newval stata inserita


per assegnare valori alla variabile A in R.

Architettura degli Elaboratori 1

2010

Esercizio: comandi di compilazione ecc.

arm-elf-gcc -O0 -S es-c.c

(lopzione S fa s che il compilatore si limiti a produrre


la traduzione assembly nel file es-c.s)
nel file es-c.s aggiungere allinizio :
.global _start
_start:

arm-elf-as --gdwarf-2 -o es-c.o es-c.s -a > es-c.lst


arm-elf-ld -g -Ttext 0x30000000 -o es-c es-c.o
arm-elf-objdump -D -S es-c.o > es-c.odump
arm-elf-objdump -D -S es-c > es-c.edump
arm-elf-size es-c > es-c.size
arm-elf-nm -a -l es-c > es-c.sym
Architettura degli Elaboratori 1

2010

Esercizio: esaminare i file prodotti


Ricostruire:
come viene usato la stack,
cosa e dove viene inserito nello stack-frame
...

Rifare lesercizio attivando lottimizzazione:


arm-elf-gcc O1 -S es-c.c
e constatare le differenze.
Architettura degli Elaboratori 1

2010

05.d

ARM: stack e subroutine

Le istruzioni di accesso allo stack


Listruzione di chiamata a subroutine
Gestione degli stack frame

Architettura degli Elaboratori

sequenza di istruzioni
da eseguire in pi punti
(subroutine)

Il punto di ritorno al programma


ogni volta diverso: listruzione
successiva a quella di chiamata
(quella cui punta PC quando viene
eseguita listruzione di chiamata)

Pi soluzioni possibili ...

31

2009

Prima Soluzione
Lindirizzo di ritorno viene salvato in una
locazione della memoria adibita a tale scopo,
ad esempio quella situata allindirizzo 0:

Se la subroutine ne chiamasse unaltra,


verrebbe perso lindirizzo di ritorno:
soluzione inaccettabile!

Architettura degli Elaboratori

31

2009

Seconda Soluzione

Lindirizzo di ritorno viene salvato nella prima


locazione di ciascuna subroutine, con la
convenzione che le istruzioni eseguibili siano
collocate a partire dalla locazione successiva:

31

2009

Questa soluzione consente alla subroutine di


chiamarne unaltra; ma se la subroutine
chiamasse se stessa, verrebbe perso lindirizzo
di ritorno: soluzione inaccettabile!

Architettura degli Elaboratori

Terza Soluzione

Lindirizzo di ritorno viene salvato in un


registro di CPU anzich in una locazione di
memoria:

31

2009

Questa soluzione consente alla subroutine di


chiamarne unaltra, purch venga usato un
registro diverso; la subroutine pu chiamare se
stessa (direttamente o indirettamente), purch
il contenuto del registro RX
venga salvato (ogni volta in un posto diverso).
Architettura degli Elaboratori

Quarta Soluzione

Lindirizzo di ritorno viene memorizzato in uno


stack (ogni volta in un posto diverso!):
31

2009

Questa soluzione consente alla subroutine di


chiamarne unaltra, o anche se stessa. Le
subroutine realizzate con questa soluzione
possono essere rientranti: di esse pu essere
in esecuzione pi di una istanza (per poter
chiamare ricorsivamente se stessa una
subroutine deve essere rientrante).
rchitettura degli Elaboratori

@ istruzioni della subroutine

@ ritorno al progr. chiamante

31

2009

ritorno

@ programma chiamante
@ chiamata alla subroutine SUB1

Chiamata a subroutine nellARM (1 di 2)


...
chiamata
BL SUB1
ADD R0, R1, R2
...
SUB1: ...
...
MOV PC, LR

Architettura degli Elaboratori

Chiamata a subroutine nellARM (2 di 2)

2009

BL nome_subroutine
Listruzione BL (Branch-and-Link) opera quanto segue: 31
1. Salva il PC (che punta alla istruzione successiva) in
R14 (indirizzo di ritorno).
2. Carica nel PC lindirizzo della subroutine
(ci determina il salto).
R14 si chiama link register (si pu usare il simbolo LR)
Non esiste unistruzione apposita per il ritorno dalla
subroutine; si ottiene con listruzione:
MOV PC, R14

Architettura degli Elaboratori

Passaggio dei Parametri

31

2009

Si distinguono due tipi di parametri:


parametri di ingresso: dati passati alla
subroutine;
parametri di uscita: risultati restituiti dalla
subroutine

Il veicolo pi naturale e pi rapido per


effettuare il passaggio dei parametri
costituito dai registri di CPU.

Architettura degli Elaboratori

Parameteri per valore o per indirizzo?

parametri passati per indirizzo:


avendo a disposizione lindirizzo, la
subroutine pu accedere al valore originario
del parametro e modificarlo;
parametri passati per valore:
se alla subroutine viene passato il valore
(cio copia del valore) di un parametro,
eventuali modifiche apportate a questo
valore dalla subroutine non coinvolgono il
valore originario.
Architettura degli Elaboratori

31

2009

La rientranza

10

2009

Una subroutine si dice rientrante se di essa pu iniziare


una nuova esecuzione mentre ancora in corso una sua
31
esecuzione precedente. La cosa pu accadere:
in seguito a una chiamata ricorsiva (diretta/indiretta)
in seguito a una interruzione (il processore passa ad
eseguire un altro programma che potrebbe chiamare la
medesima subroutine interrotta),
in un sistema multiprocessore (se la subroutine si trova
in memoria condivisa, pi di un processore pu iniziarne
la esecuzione).
Per essere rientrante una subroutine non deve alterare i
dati su cui stava operando ogni sua attivazione precedente
non terminata: quando questa proseguir la sua
esecuzione, deve trovare gli stessi valori che vi aveva
lasciato. I dati non fanno parte della subroutine, ma
dellistanza di esecuzione:
la subroutine fatta di solo codice (pure code).
Architettura degli Elaboratori

Subroutine rientranti

11

Se ad ogni attivazione di una subroutine i dati su cui


essa opera sono allocati in un luogo diverso (ad es. nello
31
stack), allora la subroutine rientrante, cio ne pu
iniziare una nuova esecuzione mentre ancora in corso
una sua esecuzione precedente.
I dati che vanno allocati ogni volta in un posto diverso
sono:

i parametri di ingresso e di uscita passati alla subroutine


(anche lindirizzo di ritorno un parametro di ingresso),
i dati locali su cui la subroutine opera.

2009

La soluzione comunemente adottata prevede che, al


momento di attivare una subroutine, venga allocata in
cima allo stack unarea (stack-frame) in cui si trovano
tutti i dati (parametri e dati locali) sui quali la
subroutine stessa operer. Questa soluzione si chiama
allocazione dinamica della memoria.

Architettura degli Elaboratori

dati

Allocazione dinamica della memoria


codice

indirizzi
crescenti

fig. 5.1 Allocazione dinamica dei dati di una subroutine

Architettura degli Elaboratori

12

31

2009

Allocazione e rilascio di un frame


Allocazione di un nuovo
frame:
FP push
SP FP
SP-e SP

Rilascio dellarea di
memoria allocata:
FP SP

pop FP

Architettura degli Elaboratori

indirizzi
crescenti

13

31

2009

Istruzione di store multiplo (STM)

registri

STMIA r1, {r0, r2, r4}

indirizzo base
indirizzo base + 4
indirizzo base + 8

r0
r2
r4

memoria

14

31

2009

indirizzi

Le istruzioni LDR e STR operano su parole da 32-bit.


Il processore ARM in grado di trasferire, da o in memoria, un
qualsiasi sottoinsieme dei 16 registri con una singola istruzione.
Ad esempio, STM trasferisce in memoria copia di n registri:
STMIA r1, {r0, r2, r4}
; mem32[r1] r0
; mem32[r1 + 4] r2
; mem32[r1 + 8] r4
I registri sono collocati in memoria a indirizzi crescenti/per indice.
r0
r1
r2
r3
r4

Architettura degli Elaboratori

Istruzione di load multiplo (LDM)

registri
indirizzo base
indirizzo base + 4
indirizzo base + 8

(r0)
(r2)
(r4)

memoria

15

31

2009

indirizzi

Il trasferimento opposto (da memoria a registri) fatto dalla


istruzione LDM. Ad esempio:
LDMIA r1, {r0, r2, r4}
; r0 mem32[r1]
; r2 mem32[r1+4]
; r4 mem32[r1+8]
Se nella lista di registri si include R15 (PC), listruzione comporta
anche un salto
r0
r1
r2
r3
r4

LDMIA r1, {r0, r2, r4}


Architettura degli Elaboratori

Forme diverse di LDM e STM

Increment-Before
Increment-After
Decrement-After
Decrement-Before

16

31

2009

LDMIB e STMIB
LDMIA e STMIA
LDMDA e STMDA
LDMDB e STMDB

ci sono 4 forme diverse per ciascuna delle


istruzioni LDM e STM:

Architettura degli Elaboratori

Aggiornamento dellindirizzo base

;
;
;
;

17

31

2009

r2 mem32[r1]
. . .
r9 mem32[r1+28]
r1 r1 + 32

Nelle istruzioni precedenti il registro contenente


lindirizzo base non veniva modificato.
Per modificarlo si aggiunge ! dopo il simbolo del registro
LDMIA r1 ! , {r2-r9}

Load multiplo

Aggiorna il puntatore

I = incrementa lindirizzo base


A = (after) dopo averlo usato
Architettura degli Elaboratori

Esempio duso di LDM-STM

Ad esempio per copiare 8 word (da 32 bit) da un posto


allaltro in memoria, si pu scrivere:

18

31

2009

ADR r0, src_addr


;inizializza il ptr allarea sorgente
ADR r1, dest_addr ;inizializza il ptr allarea destinaz.
LDMIA r0!, {r2-r9} ;preleva 8 word dallarea sorgente
; e aggiorna r0 r0 + 32
STMIA r1, {r2-r9} ;copia gli 8 word nellarea destinaz.,
;(senza modificare r1)

Architettura degli Elaboratori

4 modi diversi di realizzare uno stack

19

2009

@ push in uno stack Full Ascending


@ pop da uno stack Full Ascending
@ push in uno stack Full Descending
@ pop da uno stack Full Descending
@ push in uno stack Empty Ascending
@ pop da uno stack Empty Ascending
@ push in uno stack Empty Descending
@ pop da uno stack Empty Descending

Ascending/Descending: lo stack pu crescere verso:


indirizzi crescenti
(A = ascending),
31
indirizzi decrescenti (D = descending)
Full/Empty: lo stack pointer pu puntare:
allultimo elemento con il dato in cima allo stack (F=full)
al primo elemento libero (E = empty)
(nel quale sar inserito il prossimo elemento con un push)
STMFA R13! {R0-R5}
LDMFA R13! {R0-R5}
STMFD R13! {R0-R5}
LDMFD R13! {R0-R5}
STMEA R13! {R0-R5}
LDMEA R13! {R0-R5}
STMED R13! {R0-R5}
LDMED R13! {R0-R5}
Architettura degli Elaboratori

Relazione tra le due visioni di LDM/STM

Store (push) con post-incremento

Store (push) con pre-incremento

Load (pop) con post-decremento

Load (pop) con pre-decremento

Load (pop) con post-incremento

Load (pop) con pre-incremento

STMDB

STMIA

STMIB

LDMDA

LDMDB

LDMIA

LDMIB

tipo di
accesso

STMED

STMFD

STMEA

STMFA

LDMFA

LDMEA

LDMFD

LDMED

tipo di
stack

Si possono usare indifferentemente gli mnemonici che fanno


riferimento al tipo di accesso o quelli che si riferiscono al tipo di
stack.

Store (push) con pre-decremento

STMDA

20

31

2009

Store (push) con post-decremento


Architettura degli Elaboratori

Disciplina di programmazione

21

31

2009

Poich lindirizzo di ritorno salvato in R14, prima di


chiamare unaltra subroutine necessario aver salvato R14.
Una buona disciplina di programmazione prevede che una
subroutine non modifichi i registri, se non quelli usati
esplicitamente per restituire i risultati (parametri di uscita).
Questo un esempio di applicazione del principio di
information hiding: nascondere al programma chiamante
i dettagli di cosa fa la subroutine al suo interno.
Per ottenere questi 2 obiettivi, conviene usare lo stack per:
salvare R14;
salvare il contenuto dei registri usati dalla subroutine
(che non siano usati per i parametri di uscita), prima di
modificarli;
ripristinare il contenuto di questi registri, prima di
ritornare al programma chiamante.
Architettura degli Elaboratori

Salvataggi nello stack

alla attivazione di SUB1


indirizzi
memoria

r0
r1
r2
r14

r13!, {r14, r0-r2}

r13

r13

alluscita da SUB1
indirizzi
memoria

LDMFD

22

31

2009

r13!, {r14, r0-r2}

r0
r1
r2
r14

BL SUB1
. . .
SUB1: STMFD r13!, {r14, r0-r2} ;push LR e i registri usati
. . .
;(r13 = stack pointer)
BL SUB2
;chiamata a una subroutine annidata
. . .
LDMFD r13!, {r14, r0-r2} ;pop LR e i registri usati
MOV pc, r14
;ritorno

r13

r13
STMFD

Architettura degli Elaboratori

Annidamento delle subroutine

memoria

r14 link reg. di SUB2

r14 link reg. di SUB1


stack

stack
di SUB2
stack
di SUB1

23

31

2009

conviene usare uno


stack frame

indirizzi

. . .
SUB1: STMFD r13!, {r14, r0-r2} ;push LR e i registri usati
. . .
SUB1 chiama unaltra subroutine SUB2.
posto che anche SUB2 salvi nello stack il suo link register (r14) e i
suoi registri usati, la situazione dello stack :
SP allinterno
di SUB2
SP allinterno
di SUB1
SP iniziale

Architettura degli Elaboratori

Istruzioni per gestire uno stack frame

SP

24

31

2009

R11 (FP)
R14 (LR)

Come frame pointer si usa R11.


FP = R11
Allocazione di un frame:
SP = R13
STMFD SP!, {FP, LR}
LR = R14
MOV FP, SP
PC = R15
SUB SP, SP, #e ; e lestensione del frame
; (spesso multiplo di 4)
Rimozione di un frame e ritorno da subroutine:
e
MOV SP, FP
LDMFD SP!, {FP, PC} ; R14 va in R15!
SP

FP

indirizzi

FP
Architettura degli Elaboratori

Esempio di subroutine ricorsiva

Rivediamo lesempio di subroutine ricorsiva,


codificato in un linguaggio di alto livello (HLL),
per il quale abbiamo gi visto lespansione in
codice assembly per il PD32.

25

31

2009

Esaminiamo ora, per il medesimo esempio, la


possibile espansione in codice assembly per il
processore ARM, operata da un compilatore che
segua le stesse convenzioni viste per il caso del
PD32.
Architettura degli Elaboratori

dati locali

par. di ingresso (per valore)

par. di uscita (per indirizzo)

Subroutine ricorsiva: HLL

chiamata ricorsiva

26

31

2009

Come si comporta un compilatore ARM?


Architettura degli Elaboratori

main(): espansione in assembly per lARM

27

main() non ha parametri, ma solo dati locali.


La traduzione in linguaggio assembly ARM della istruzione di
dichiarazione di una subroutine fornisce le prime istruzioni che essa31
esegue quando viene attivata (quelle che allocano un nuovo frame in
cima allo stack):

LR (PCi-1)

2009

indirizzi
crescenti

@ int main() {
main:
@ stack: cfr. fig. 5.2-a
STMFD SP!, {FP, LR} @ FP, LR push
MOV FP, SP
@ SP FP
@ stack: cfr. fig. 5.2-b

Architettura degli Elaboratori

28

31

2009

@ stack: cfr. fig. 5.2-b


@ 4 interi di 4 byte = 16 byte
@ W = FP-4
@ X = FP-8
@ Y = FP-12
@ Z = FP-16
@ stack: cfr. fig. 5.2-c

main(): allocazione dati locali nel frame


@ int W, X, Y, Z;
SUB SP, SP, #16

Architettura degli Elaboratori

indirizzi
crescenti

main(): dati locali nel frame

LR (PCi-1)

Cfr. 5.2-b

Architettura degli Elaboratori

LR (PCi-1)

Cfr. 5.2-c

29

31

2009

main(): rimozione del frame

30

31

2009

@}
@ stack: cfr. fig. 5.2-c
MOV SP, FP
@ FPSP
@ stack: cfr. fig. 5.2-b
LDMFD SP!, {FP, PC} @ ripristina FP precedente +
@ LR salvatoPC (ritorna al
@ programma chiamante)
@ stack: cfr. fig. 5.2-a

Architettura degli Elaboratori

LDMFD SP!, {FP, PC}

main(): il frame rimosso dallo stack

LR (PCi-1)

MOVL SP, FP

Architettura degli Elaboratori

31

31

indirizzi
crescenti

2009

main(): chiamata alla subroutine R()

@ R(X, Y, &Z)
@ stack: cfr. fig. 5.2-c
@ inserzione parametri nello stack
LDR R0, [FP, #-8]
@X
STMFD SP!, {R0}
@ push
LDR R0, [FP, #-12]
@Y
STMFD SP!, {R0}
@ push
SUB R0, FP ,#16
@ indirizzo di Z
STMFD SP!, {R0}
@ push
@ chiamata alla subroutine @ stack: cfr. fig. 5.2-d
BL
R
@ PCLR, RPC
@ stack: cfr. fig. 5.2-d
ADD SP, SP, #12
@ rilascia larea allocata per
@ i parametri
@ stack: cfr. fig. 5.2-c
Architettura degli Elaboratori

32

31

2009

indirizzi
crescenti

LR (PCi-1)

Cfr. 5.2-d

33

31

2009

Chiamata a R(): situazione dello stack

LR (PCi-1)

Cfr. 5.2-c

Architettura degli Elaboratori

R(): allocazione del nuovo frame


La subroutine R() ha parametri e dati locali.

@ stack: cfr. fig. 5.3-a


@ FP, LR push
@ SP FP
@ I = FP+16
@ J = FP+12
@ O = FP+8
@ stack: cfr. fig. 5.3-b

@ void R(int I, int J, int *O) {


R:
STMFD SP!, {FP, LR}
MOV FP, SP

Architettura degli Elaboratori

34

31

2009

LR (PCi)

LR (PCi-1)

Cfr. 5.3-b

35

31

2009

indirizzi
crescenti

R(): nuovo frame allocato (solo la base)

LR (PCi-1)

Cfr. 5.3-a
Architettura degli Elaboratori

@ stack: cfr. fig. 5.3-b


@ 3 interi di 4 byte = 12 byte
@ A = FP-4
@ B = FP-8
@ C = FP-12
@ stack: cfr. fig. 5.3-c

R(): allocazione dati locali nel frame


@ int A, B, C;

SUB SP, SP, #12

Architettura degli Elaboratori

36

31

2009

LR (PCi)

LR (PCi-1)

indirizzi
crescenti

Cfr. 5.3-c

R(): dati locali nel frame

Cfr. 5.3-b
Architettura degli Elaboratori

LR (PCi)

LR (PCi-1)

37

31

2009

38

31

2009

@ stack: cfr. fig. 5.3-c


@I
@J
@ I+J
@ O (indirizzo di Z)
@ risultato in O, cio in Z
@ stack: cfr. fig. 5.3-c

R(): accesso ai parametri


@ *O = I+J;
LDR R0, [FP, #16]
LDR R1, [FP, #12]
ADD R0, R0, R1
LDR R1, [FP, #8]
STR R0, [R1]

Architettura degli Elaboratori

39

31

2009

@ stack: cfr. fig. 5.3-c


@A
@ push
@B
@ push
@ indirizzo di C
@ push
@ stack: cfr. fig. 5.3-d
@ PCLR, RPC
@ stack: cfr. fig. 5.3-d
@ rilascia larea allocata per i parametri
@ stack: cfr. fig. 5.3-c

@ il valore di A
@=0?
@ indirizzo $1 generato dal compilatore

R(): chiamata ricorsiva


@ if (A==0)
LDR R0, [FP, #-4]
CMP R0, #0
BNE $1
@ R(A, B, &C);
LDR R0, [FP, #-4]
STMFD SP!, {R0}
LDR R0, [FP, #-8]
STMFD SP!, {R0}
SUB R0, FP, #12
STMFD SP!, {R0}

BL R
ADDL SP, SP, #12
$1: . . .
Architettura degli Elaboratori

LR (PCi)

LR (PCi-1)

indirizzi
crescenti

Cfr. 5.3-d

Situazione dello stack

Cfr. 5.3-c
Architettura degli Elaboratori

LR (PCi)

LR (PCi-1)

40

31

* parametri
o dati locali

2009

SP, FP

41

31

2009

@ stack: cfr. fig. 5.3-c


@ FPSP
@ stack: cfr. fig. 5.3-b
@ ripristina FP precedente +
@ LR salvatoPC (ritorna
@ programma chiamante)
@ stack: cfr. fig. 5.2-d

R(): rimozione del frame


@}

MOV
LDMFD SP!, {FP, PC}

Architettura degli Elaboratori

Passaggio dei parametri

Se i parametri sono pochi conviene inserirli nei


registri, dopodich responsabilit della
subroutine salvarli nello stack, se necessario
(per poterli ripristinare o per essere rientrante).

42

31

2009

Se i parametri sono molti se ne possono passare


alcuni nei registri, altri nello stack.

Cos fa, ad esempio, il compilatore C (come si


vedr pi avanti).

Architettura degli Elaboratori

05.d

Fine

ARM: stack e subroutine

Testo di rif.to:
[Congiu] 6.1 (pg. 193199)

Memoria Cache
06.a

Memoria associativa
Cache completamente associativa
Cache a mappatura diretta
Cache set-associativa a n-vie
Cache nellXscale PXA-255

La memoria cache

Per rendere pi efficienti (pi rapidi) gli accessi alla RAM:


si interpone nel bus di memoria una memoria cache, ossia un
modulo costituito da memoria:
pi veloce della RAM (ad es. 7 ns, invece di 70 ns),
pi costosa della RAM,
di estensione ridotta (ad es. 512 Kbyte).

37

si copiano nella cache alcune porzioni della RAM e si


spera che il processore acceda proprio a quelle
porzioni della RAM: se va bene, laccesso 10 volte pi
veloce (ad es. 7ns anzich 70ns!)

Memoria centrale con memoria cache


Architettura degli Elaboratori

2010

Principio di localit

Localit temporale: se il processore accede a un elemento


in memoria, probabilmente vi acceder di nuovo presto.
37
Localit spaziale: se il processore accede a un elemento in
memoria, probabilmente in futuro acceder ad elementi ad
esso vicini.
Il principio di localit degli accessi alla memoria:
vale certamente per il fetch delle istruzioni (eccetto che
per le istruzioni di salto; ma se i salti sono allindietro, per
cicli iterativi di lunghezza non eccessiva, si fortunati!);
vale spesso anche nellaccesso ai dati (es. array, stack,
buffer circolari, );

poich le istruzioni e i dati si trovano in aree di memoria


diverse, spesso esistono due cache distinte:
instruction cache,
data cache.
Architettura degli Elaboratori

Cache unica per istruzioni e dati

2010

37

Architettura degli Elaboratori

2010

Cache separate per istruzioni e dati

37

Architettura degli Elaboratori

Organizzazioni della memoria cache


Sono possibili diverse organizzazioni della
memoria cache :
cache completamente associative,
cache a mappatura diretta,
cache set-associative a n vie.

Architettura degli Elaboratori

2010

37

2010

Cache completamente associativa

La memoria cache composta da un insieme di m blocchi


o linee (cache line), ciascuno comprendente l byte, che
contengono una copia del contenuto di altrettanti blocchi
situati in RAM:

37

Lestensione della cache m l byte (m ed l sono sempre


potenze intere di 2: m = 2p e l = 2q, con p e q interi positivi).
La cache comprende inoltre alcuni bit di controllo e una CAM.
2010

Architettura degli Elaboratori

La memoria associativa o CAM (1 di 2)


Con il termine memoria associativa, chiamata anche CAM
(Content Addressable Memory), si intende una memoria
in grado di effettuare, in parallelo, il confronto tra un
dato cercato e tutti i dati in essa contenuti.
La memoria restituisce gli indirizzi dei dati in essa
contenuti che siano uguali al dato cercato.
xyz
Dato cercato

abc

xyz

bcd

xyz
Architettura degli Elaboratori

37

Ad es. pu restituire una


stringa di bit:
gli 1 indicano le posizioni in
cui il dato stato trovato.
2010

La memoria associativa o CAM (2 di 2)


Nelle operazioni di lettura una memoria
associativa ha un comportamento simmetrico
rispetto alla RAM:

37

la RAM riceve un indirizzo e restituisce il dato


contenuto a quellindirizzo;
la CAM riceve un dato e restituisce lindirizzo (o gli
indirizzi) delle celle che contengono quel dato.

La ricerca del dato viene operata in parallelo


su tutti i registri della CAM: per gli scopi per
cui sono usate, le CAM devono essere molto
veloci e sarebbe inaccettabilmente lungo il
tempo necessario per una ricerca sequenziale.
Di conseguenza lhardware che realizza una
CAM molto complesso e molto costoso.

2010

Architettura degli Elaboratori

Blocchi della cache e indirizzi di RAM

Ciascuna delle m linee della cache destinata a


contenere copia del contenuto di un blocco di l byte
situato in RAM a partire da un indirizzo multiplo di l:
in questo modo, se N il numero di bit di un indirizzo di
memoria, gli indirizzi degli l byte di ciascun blocco (l=2q)
hanno gli N-q bit pi significativi uguali (TAG), mentre
i q bit meno significativi forniscono lindice di byte
allinterno del blocco

37

parte di indirizzo comune a tutti i byte di un blocco indice di byte


TAG
N-q bit
N bit

q bit

INDIRIZZO DI MEMORIA
Architettura degli Elaboratori

2010

Esempio
RAM
0
0

10
Blocco di l=26 byte
0
1
2

(m

CACHE

blocchi di l byte)

0
......

37

1
......

63

64

=29

511

128
2
192
3
256

.
.
.

l = 64 (16 long-word), q = 6 (l = 2q)


m = 512, p = 9 (m = 2p)
cache 64 512 = 32 Kbyte
indirizzo di RAM da 32 bit:
26 bit: TAG,
6 bit: indice di byte (063)

Architettura degli Elaboratori

2010

Gestione dei TAG: HIT/MISS

11

Quando un blocco di l byte viene copiato dalla RAM alla linea


k della cache, il TAG del blocco viene scritto nellelemento
della CAM associato alla linea k;
quando il processore genera un indirizzo di memoria, il campo
TAG viene ricercato nella CAM della cache:
se trovato (HIT ), laccesso si risolve (rapido) nella cache,
altrimenti (MISS ):
viene fatto laccesso alla RAM e, nello stesso tempo,
il blocco di RAM comprendente lindirizzo cercato
viene trasferito in una linea della cache (e il suo TAG
inserito nel corrispondente elemento della CAM);

37

Si sfrutta quindi il principio (empirico) di localit degli accessi


alla memoria: se il principio vero, gli accessi successivi al
primo si risolvono (rapidamente) nella cache.
Architettura degli Elaboratori

2010

Vantaggi delle cache

12

Esempio:
37

lo hit rate (% di hit su tutti gli accessi) sia 90%,


il tempo di accesso alla cache sia 7 ns,
il tempo di accesso alla RAM sia 70 ns,
su 10 accessi, 9 durano 7 ns, uno 70 ns;
il tempo di accesso medio risulta essere:
(9 7ns + 70ns)/10 = 13.3 ns
Con un costo aggiuntivo modesto, gli accessi alla memoria
sono stati sveltiti di un fattore maggiore di 5!
Una cache con un buon hit rate evita che il processore
debba rallentare quando accede alla memoria.
Architettura degli Elaboratori

HIT rate

2010

13

Lo HIT RATE quindi un indice della efficienza della cache :


lo hit rate aumenta se aumenta la dimensione della cache
(il numero NB per la dimensione LB dei blocchi): a parit di37
area di silicio occupata, se cresce NB diminuisce LB; il
progettista deve trovare un compromesso tra i due);
costo_CAM = fCAM(NB);
costo_cache = fcache(NB,LB)+fCAM (NB).
A parit di NB e LB, lo hit rate dipende da come si comporta il
programma:
se fa tanti salti e se i dati cui accede non sono raggruppati
in memoria, lo hit rate diminuisce;
se fa tanti cicli iterativi e se accede a dati contigui,
lo hit rate aumenta;
un compilatore potrebbe far s che il codice dei cicli
iterativi abbia indirizzo iniziale e lunghezza tali da poter
stare in un unico blocco della cache.
Architettura degli Elaboratori

2010

MISS: scelta del blocco da rimpiazzare


Quando, in seguito a un miss, necessario ricopiare
nella cache un nuovo blocco, normalmente (esaurito un
transitorio iniziale) necessario sovrascriverne uno
gi presente.
La politica con cui si sceglie il blocco da sovrascrivere
molto importante per lefficienza della cache.
Due criteri comunemente usati sono:
FIFO: si sovrascrive la linea contenente il blocco
che sta nella cache da pi tempo,
LRU (Least Recently Used): si sovrascrive la linea
che da pi tempo non subisce accessi
(si possono usare uno o pi dei bit di controllo
associati alla linea, per tener traccia del tempo
trascorso dallultimo accesso).
Architettura degli Elaboratori

37

2010

MISS: aggiornamento del blocco in RAM


Se il blocco selezionato per essere sovrascritto ha
subito accessi per scrittura mentre si trovava nella
cache (un bit di controllo, dirty bit, lo segnala), allora la
sua copia in RAM obsoleta:
prima di sovrascriverlo, il contenuto del blocco va
ricopiato in RAM (copy-back).
Un tecnica alternativa, usata per tenere aggiornate le
copie in RAM dei blocchi, consiste nelleffettuare tutte
le operazioni di scrittura sia nella cache sia anche in
RAM (write-through).
Con entrambe le tecniche, la scrittura in RAM pu
avvenire tramite un write buffer, ad accesso veloce, in
modo che il processore non debba attendere che il
trasferimento in RAM sia completato.
Architettura degli Elaboratori

14

15

37

2010

I bit di controllo della cache

16

Gi visti:

dirty bit (copy-back),

37

bit indicanti il tempo trascorso dallultimo


accesso (LRU).
Un altro bit di controllo utile:
bit di validit: indica se il blocco una copia
valida del corrispondente blocco in RAM (pu
essere invalidato in seguito a modifiche subite
da questultimo per trasferimenti DMA o in
sistemi multiprocessore).
Architettura degli Elaboratori

2010

Organizzazioni meno costose

17

costo_CAM = fCAM(NB),
costo_cache = fcache(NB,LB)+fCAM(NB),

37

fcache e fCAM sono ovviamente funzioni crescenti;

il costo_CAM incide molto sul costo


complessivo della cache;
riducendo la CAM si possono ottenere
soluzioni meno costose (e, ovviamente, meno
efficienti):
cache a mappatura diretta,
cache set-associative a n vie.

Architettura degli Elaboratori

2010

Cache a mappatura diretta

18

Quando un blocco dalla RAM viene copiato nella cache, la


posizione in cui viene collocato, anzich essere scelta
con tecniche pi o meno intelligenti (FIFO o LRU)
predeterminata:
la collocazione di un blocco nella cache data da:
- il suo indirizzo in RAM, modulo lestensione della cache.

37

In sostanza come se la RAM fosse divisa in pagine e


ciascuna pagina in blocchi:
le pagine di dimensione uguale a quella della cache,
i blocchi di dimensione uguale a quelli della cache,
lindice di un blocco allinterno della propria pagina
lindice della linea in cui sar caricato nella cache.
Architettura degli Elaboratori

Schema di cache a mappatura diretta

2010

19

37

Architettura degli Elaboratori

2010

Blocchi di cache e indirizzi di RAM

20

Gli indirizzi di memoria hanno ancora il seguente significato:

i q bit meno significativi: indice del byte nel blocco; 37


i rimanenti N-q bit : comuni a tutti i byte del blocco.
Questi ultimi sono ora cos ripartiti:
r bit meno significativi: indice k del blocco nella pagina,
N-q-r bit: TAG = indice della pagina nella RAM.
parte di indirizzo comune a tutti i byte del blocco k
indice di pagina
indice di blocco
indice di byte
k

TAG
N-q-r bit

N bit

r bit

q bit

INDIRIZZO DI MEMORIA
Architettura degli Elaboratori

2010

Gestione dei TAG: HIT/MISS


Quando il blocco di indice k viene copiato dalla RAM
nella k-esima linea della cache, lindice della pagina di
RAM cui il blocco appartiene (il TAG) viene scritto in un
registro della cache associato al blocco k.
Quando il processore genera un indirizzo di memoria:
gli r bit che forniscono lindice k del blocco, individuano la
posizione nella cache in cui si trova il blocco, se presente;
gli N-q-r bit pi significativi dellindirizzo (TAG) vengono
confrontati con il contenuto del registro della cache

21

37

associato alla linea k (1 solo confronto: niente CAM!)


se uguale (HIT), laccesso si risolve nella cache,
altrimenti (MISS), il blocco k-esimo nella cache appartiene ad
unaltra pagina, e allora:

viene effettuato laccesso alla RAM e,


contemporaneamente,
il blocco di RAM cercato viene trasferito nella linea k
della cache (e il suo TAG nel corrispondente registro)

Architettura degli Elaboratori

2010

Mappatura diretta: pro e contro

22

Pro:
non richiede una CAM:
37
organizzazione certamente meno costosa di quella
completamente associativa.
Contro:
il blocco da sovrascrivere predeterminato (non pu
essere scelto tra quelli che presumibilmente non servono
pi):
hit rate decisamente pi basso (minore efficienza).
possibile un compromesso tra costo ed efficienza.
Architettura degli Elaboratori

Cache set-associativa a n vie

2010

23

Un buon compromesso tra lefficienza della organizzazione


completamente associativa e il basso costo di quella a
37
mappatura diretta, si pu ottenere replicando n volte
questultima:
per ogni indice di blocco k, anzich esserci una sola linea
nella cache, ve ne sono n;
a ciascun set di n linee associata una CAM (di n
elementi) che contiene i TAG dei blocchi presenti nel set.
Come nellorganizzazione a mappatura diretta, la RAM
ancora divisa in pagine e ciascuna pagina in blocchi:
lindice di blocco individua il set in cui sar caricato
un blocco, di indice k, pu essere caricato in una
qualsiasi delle n linee nel k-esimo set.
Architettura degli Elaboratori

2010

Schema di cache set-associativa a n vie

24

Set-associativa a 2 vie
37

Architettura degli Elaboratori

2010

Gestione dei TAG: HIT/MISS


Quando il blocco di indice k viene copiato dalla RAM nel
k-esimo set della cache, il blocco da sovrascrivere, tra gli n del
set, pu essere scelto con politica FIFO o LRU; lindice della

25

37

pagina di RAM cui il nuovo blocco appartiene (TAG) viene scritto


nel corrispondente elemento della CAM.

Quando il processore genera un indirizzo di memoria:


gli r bit che forniscono lindice k del blocco, individuano il set
nella cache in cui si trova il blocco, se presente;
gli N-q-r bit pi significativi dellindirizzo (TAG) vengono
confrontati (in parallelo) con il contenuto della CAM:
se trovato (HIT), laccesso si risolve nella cache,

altrimenti (MISS):
viene effettuato laccesso alla RAM e, nello stesso tempo,
il blocco di RAM caricato viene trasferito in una delle n
linee del set (scelta con modalit FIFO o LRU) e il suo TAG
nel corrispondente elemento della CAM.

Architettura degli Elaboratori

2010

Confronti con le altre organizzazioni

26

La soluzione set-associativa,

rispetto alla organizzazione a mappatura diretta:


37
pi efficiente (hit rate maggiore): il blocco da
rimpiazzare non predeterminato, ma pu essere
scelto, tra quelli del set, con un criterio che renda
meno probabili i miss;
pi costosa: richiede una CAM per ciascun set;
rispetto alla organizzazione completamente associativa:
meno efficiente (hit rate inferiore): la scelta del
blocco da rimpiazzare non fatta tra tutti i blocchi
della cache, ma limitata a quelli di un set;
meno costosa: tante (piccole) CAM per ciascun set
costano meno di una CAM unica (grande).
un buon compromesso: la soluzione pi diffusa.
Architettura degli Elaboratori

2010

Livelli di cache

27

Spesso sono presenti pi livelli di cache:


una cache di 1 livello, ormai sempre integrata
nello stesso chip del processore, ad accesso
rapidissimo;
una cache di 2 livello, talvolta esterna al chip
del processore, ad accesso rapido;
a volte anche una cache di 3 livello.
Lo scopo di portare nella cache di 1 livello (pi
vicina al processore) ci cui il processore acceder
nellimmediato futuro, spostando in una cache meno
veloce (e meno costosa), ma pi veloce della RAM,
ci che forse servir pi avanti (in modo da limitare
le conseguenze negative dei miss ).
Architettura degli Elaboratori

37

2010

Gerarchia di memoria

28

Sfruttando il principio di localit:


si consente laccesso alla velocit della tecnologia pi cara,
37
si rende disponibile una grande memoria con tecnologia poco cara.
Processor
Control

On-Chip
Cache

Registers

Datapath

Second
Level
Cache
(SRAM)

Main
Memory
(DRAM)

Speed (ns): 1

10

100

Size (bytes): 100

Secondary
Storage
(Disk)

Tertiary
Storage
(Disk)

10,000,000 10,000,000,000
(10 ms)
(10 sec)
T
G

Cost:
Architettura degli Elaboratori

Cache nel chip Intel Xscale PXA 255


il chip contiene:
una instruction cache da 32-Kbyte,
una data cache da 32-Kbyte,
una mini-data cache da 2-Kbyte,

Architettura degli Elaboratori

2010

29

37

2010

PXA 255: instruction cache - 1

30

la instruction cache da 32-Kbyte,


set associativa a 32-vie

37

(32-way set associative cache);


ci sono 32 set, ciascuno contenente 32 blocchi (vie)
ciascun blocco (line) contiene 8 word da 32-bit (32
byte) pi un bit di validit.
la politica di rimpiazzo di tipo FIFO
(round-robin algorithm).

Architettura degli Elaboratori

PXA 255: instruction cache - 2

2010

31

37

Architettura degli Elaboratori

2010

PXA 255: data cache - 1

32

ci sono 2 data cache:

37

una data cache da 32 Kbyte


una mini-data cache da 2 Kbyte
associato alle 2 cache dati c inoltre:

un write buffer da 8 elementi, ciascuno di 16 byte;


che serve a disaccoppiare la velocit di esecuzione
delle istruzioni dalla lentezza degli accessi alla
memoria esterna.

Architettura degli Elaboratori

2010

PXA 255: data cache - 2

33

la data cache da 32-Kbyte,


set associativa a 32-vie

(32-way set associative cache);


32 set, ciascuno contenente 32 blocchi (vie)
ciascun blocco (line) contiene 8 word da 32-bit
(32 byte) pi un bit di validit,
ci sono 2 dirty bit per ciascun blocco, uno
associato ai primi 16 byte, laltro agli altri 16

37

la politica di rimpiazzo di tipo FIFO


(round-robin algorithm).
per laggiornamento dei blocchi in memoria, pu
essere impostata la politica copy-back oppure
quella write-through.
Architettura degli Elaboratori

2010

PXA 255: data cache - 3

34

37

Architettura degli Elaboratori

PXA 255: mini-data cache - 1

2010

35

la mini-data cache da 2-Kbyte,


set associativa a 2-vie
37
(2-way set associative cache);
ci sono 32 set, ciascuno contenente 2 blocchi (vie),
ciascun blocco (line) contiene 8 word da 32-bit (32
byte) pi un bit di validit,
ci sono 2 dirty bit per ciascun blocco,
uno associato ai primi 16 byte, laltro agli altri 16
la politica di rimpiazzo di tipo FIFO
(round-robin algorithm).
per laggiornamento dei blocchi in memoria, pu essere
impostata la politica copy-back oppure quella writethrough.

Architettura degli Elaboratori

2010

PXA 255: mini-data cache - 2

36

37

2010

Architettura degli Elaboratori

Cache nel chip Samsung S3C2440A


Il chip contiene:
una instruction cache da 16 Kbyte,
una data cache da 16 Kbyte.
Entrambe sono set-associative a n=64 vie.
Politica di rimpiazzo: round robin (cio FIFO).
Lunghezza di linea: 8 word (l=32 byte).
8 set da 64 x 32 = 2 Kbyte ciascuno
La D-cache supporta sia copy-back che write-through.
Il write buffer pu contenere fino a 16 word di dati e 4
distinti indirizzi.
INDIRIZZO DI MEMORIA:
indice di pagina

indice
di byte

TAG

indice
di set
k

24 bit

3 bit

5 bit

Architettura degli Elaboratori

32 bit

37

37

2010

Ls sigla PD32:
32 bit, 8 registri
e 1 mouse

Sire, tra 6 mesi


coster la met e
sar veloce il doppio

Fine
06.a

Memoria Cache

Testo di rif.to:
[Congiu] 6.2, 6.3 (pg. 200-208)

Gestione della memoria


06.b

Mapping and Management Unit (MMU)


Paginazione della memoria
Segmentazione della memoria
Memoria virtuale

La gestione della memoria

La gestione della memoria (effettuata dal S.O.


usando appositi accorgimenti presenti
nellhardware), consiste nel:
suddividere la memoria per consentire in
essa la presenza di pi processi (presupposto
indispensabile per usare in modo efficiente il
processore in un sistema multitasking),
effettuare la suddivisione della memoria in
modo efficiente, per farci stare il numero
maggiore possibile di processi (quanto
maggiore questo numero, tanto minore la
probabilit che la ready list sia vuota).
Architettura degli Elaboratori

53

2010

Tecniche di gestione della memoria

Le tecniche di gestione della memoria pi comuni


sono:
53
paginazione,
segmentazione,
paginazione con memoria virtuale,
segmentazione con memoria virtuale.

Architettura degli Elaboratori

2010

Paginazione

la memoria fisica viene divisa in blocchi


uguali, detti frame (o pagine fisiche), di
dimensioni spesso piccole (es: 4KB);
anche lo spazio di memoria indirizzato da
ciascun processo diviso in blocchi delle
medesime dimensioni, detti pagine
(o pagine logiche):

53

Lhardware che realizza questo meccanismo si


chiama MMU (Mapping and Management Unit).
Architettura degli Elaboratori

2010

Indirizzi logici

indirizzi fisici - 1

Gli indirizzi logici contenuti nel codice e nei


dati di un programma non individuano
53
direttamente indirizzi fisici della memoria;
deve allora esserci un meccanismo che
trasformi gli indirizzi presenti nel codice nei
corrispondenti indirizzi della memoria fisica.
il meccanismo che realizza la trasformazione
degli indirizzi logici in indirizzi fisici richiede:
la presenza di alcune funzioni fornite
dallhardware,
la presenza di alcune funzioni fornite dal SO
2010

Architettura degli Elaboratori

Indirizzi logici

indirizzi fisici - 2

Un modulo di MMU opera una trasformazione


degli indirizzi generati dal processore (indirizzi
logici): questi vengono mappati su indirizzi di
memoria (indirizzi fisici) che possono essere
diversi da quelli generati dal processore.

53

Storicamente, i primi sistemi di MMU avevano lo


scopo di consentire a processori con pochi bit di
indirizzo (ad es. 16 bit, con cui la memoria
indirizzabile era limitata a 64 Kbyte), di
accedere ad una memoria fisica pi estesa.
Architettura degli Elaboratori

2010

Esempio di semplice MMU

Problema: disponendo di una memoria fisica da 128 Kbyte e di 16


bit di indirizzo, trasformare gli indirizzi (logici) generati dal
processore (nel range 0 64K) in indirizzi fisici nel range
53
64K 128K, per accedere alla parte alta (seconda pagina) di
quella memoria.
La trasformazione da operare semplice: lindirizzo fisico si
ottiene aggiungendo un bit (il pi significativo) a quello logico;
questo bit seleziona la pagina cui si accede:
0 individua la prima pagina della memoria fisica
(range 0 64K);
1 individua la seconda pagina (range 64K 128K).
Se si aggiungessero q bit (pi significativi) si potrebbe accedere
ad una memoria fisica costituita da 2q pagine da 64 KByte.
I primi sistemi di MMU operavano questo tipo di semplice
trasformazione (indirizzo logico
indirizzo fisico) con il
meccanismo schematizzato nella prossima slide.
Architettura degli Elaboratori

Schema di semplice MMU

2010

53

Architettura degli Elaboratori

2010

Esempio

Indirizzi logici da n = 16 bit


Memoria logica indirizzabile:
216 = 64 KB
Memoria fisica: 220 = 1 MB
Indirizzi fisici da m = 20 bit
La memoria fisica ripartita
in 16 pagine da 64 KB
Bit da aggiungere: q = 4
Il registro di mappa fornisce
lindice della pagina fisica su
cui mappato lindirizzo logico
indirizzo logico:
indirizzo fisico:

Memoria
0

64K

64K

Indirizzi
logici
(0 64K)

128K

192K
MAP:

0010

256K

53

3
.
.
.

0111 1111 0011 1100


0010 0111 1111 0011 1100
2010

Architettura degli Elaboratori

MMU con pi registri di mappa

nello schema presentato finora, il modulo di MMU


contiene un solo registro di mappa (MAP);
di solito il modulo MMU contiene un insieme di registri
(PAGE TABLE):
con ci ripartito in pagine non solo lo spazio degli
indirizzi fisici, ma anche quello degli indirizzi logici:
page table

Trasformazione degli indirizzi logici


in indirizzi fisici

IPL

IPF
Architettura degli Elaboratori

53

offset

offset
2010

Campi dellindirizzo logico


page table

10

Trasformazione degli indirizzi logici


in indirizzi fisici

53

offset

IPL

IPF

offset

indirizzo logico:
i q bit pi significativi dellindirizzo logico forniscono
lindice i della pagina logica (IPL) cui lindirizzo appartiene;
i rimanenti (n - q) bit contengono loffset r di
quellindirizzo allinterno della pagina logica.
2010

Architettura degli Elaboratori

Campi dellindirizzo fisico


page table

11

Trasformazione degli indirizzi logici


in indirizzi fisici

IPL

IPF

53

offset

offset

lindirizzo fisico costituito da:


l bit (i pi significativi) che forniscono lindice f della pagina
fisica (IPF o frame #), che sostituiscono i q bit dellIPL;
(n - q) bit che contengono loffset r dellindirizzo fisico:
questo offset il medesimo specificato nellindirizzo logico
(le pagine logiche e quelle fisiche hanno lunghezza uguale)
lind. fisico si ottiene sostituendo lIPL (q bit) con lIPF (l
bit)
Architettura degli Elaboratori

2010

Trasformazione indirizzo logico


page table

fisico

Trasformazione degli indirizzi logici


in indirizzi fisici

IPL

IPF

12

53

offset

offset

lindice di pagina logica i individua li-esimo registro di


mappa, che contiene lindice f della pagina fisica (IPF);
questo IPF individua, tra le 2l pagine fisiche presenti,
quella in cui mappata li-esima pagina logica;
la trasformazione indirizzo logico
indirizzo fisico si
ottiene sostituendo i q bit dellIPL con gli l bit dellIPF,
estratti dall li-esimo registro di mappa:
2010

Architettura degli Elaboratori

MMU con page table


page table

13

Trasformazione degli indirizzi logici


in indirizzi fisici

IPL

IPF

53

offset

offset

se q < l (indirizzo logico pi corto di quello fisico):


allora la memoria fisica pi estesa di quella logica
(situazione comune in passato, quando i processori
avevano capacit di indirizzamento limitate);
se q > l (indirizzo logico pi lungo di quello fisico):
allora la memoria logica pi estesa di quella fisica
(situazione comune nei calcolatori attuali).
Architettura degli Elaboratori

2010

MMU: caso q < l

14

Si consideri il caso di un processore che genera indirizzi


(logici) da n = 16 bit (pu indirizzare 216 = 64 Kbyte);
53
la memoria fisica sia di 1 Mbyte (indirizzi fisici da m=20 bit):
si pu suddividere lo spazio degli indirizzi logici in 8
pagine;
allora lindice di pagina logica di 3 bit (q =3)
e la dimensione di ciascuna pagina di 64K/8 = 8 Kbyte;
8 Kbyte corrispondono ad un offset di 13 bit,
la memoria fisica risulta comprendere 1M/8K = 128 pagine,
lindice di pagina fisica di 7 bit (l =7),
la MMU ha una page table con 8 registri di mappa da 7 bit.
2010

Architettura degli Elaboratori

Caso q < l : indirizzo logico

fisico

15

page table
(8 registri)
0
15

IPL

2
3

12

IPF

3 bit
19

13 bit
12

IPF

7 bit

13 bit

53

indirizzo
logico
indirizzo
fisico

7
7 bit

impostando opportunamente il contenuto dei registri di


MMU nella page table, possibile mappare le 8 pagine
logiche su 8 qualsiasi delle 128 pagine fisiche.
Architettura degli Elaboratori

2010

Caso q < l : pagine logiche


memoria logica (64 KB)
0

page table
(8 registri)

5
7

1
126

45
106

7 bit

fisiche

16

memoria fisica (1 MB)


0
53

1
2
3

8 Kbyte

4
5
6
7

(8 pagine da 8 Kbyte)

.
.
126
127

Architettura degli Elaboratori

MMU: caso q > l

2010

17

Si consideri il caso di un processore che genera indirizzi


(logici) da n = 32 bit (pu indirizzare 232 = 4 Gbyte);
53
memoria fisica da 16 Mbyte (indirizzi fisici da m = 24 bit):
si pu suddividere lo spazio degli indirizzi logici in
pagine da 64 KByte,
allora il numero di pagine logiche 4G/64K = 64K,
lindice di pagina logica di 16 bit (q =16),
64 Kbyte corrispondono ad un offset di 16 bit,
la memoria fisica risulta comprendere
16M/64K = 256 pagine,
lindice di pagina fisica di 8 bit (l =8),
la MMU ha una page table con 64K registri di mappa da
8 bit.
Architettura degli Elaboratori

2010

Caso q > l : pagine logiche


memoria logica
(4 GB)

fisiche

page table
(64K registri)

18

memoria fisica
(16 MB)

71

254

184

53

64 Kbyte

254
255
64k-2

64k-2

64k-1

64k-1

Architettura degli Elaboratori

8 bit

2010

MMU: page table


Nel caso in cui il numero di pagine logiche sia elevato
(64K nellesempio precedente), non praticabile luso di
un modulo MMU con una page table delle dimensioni
necessarie a contenere tanti registri di mappa (interni al
chip) quante sono le pagine logiche ad essi associate.

19

53

In tal caso si pu adottare una soluzione che preveda di


collocare la page table in unarea protetta della
memoria centrale.
Il modulo MMU contiene solo un puntatore alla page
table associata al programma o al processo attivo.
Si osservi che, in questo modo, ogni accesso alla memoria
ne richiede due (uno alla page table per ottenere lIPF,
uno alla pagina fisica cercata): inconveniente piuttosto
grave, cui si pu rimediare con luso di una cache.
Architettura degli Elaboratori

2010

MMU: vantaggi della paginazione

20

Protezione (read only),


53
Rilocamento,
Frammentazione dello spazio libero in memoria
Protezione da interferenze tra programmi,
Comunicazione tra processi.

Architettura degli Elaboratori

2010

Protezione

21

Associando alcuni bit di controllo a ciascun


elemento della page table, possibile realizzare
nellhardware opportuni meccanismi di controllo
degli accessi alle pagine fisiche:
una pagina pu essere impostata come
read only,
ad una pagina pu essere consentito laccesso
solo se il processore opera in
modo supervisore,

Architettura degli Elaboratori

53

2010

Frammentazione dello spazio libero

22

Via via che alcuni programmi terminano la loro


esecuzione e liberano aree di memoria e altri vengono
caricati in memoria (nelle aree libere) per essere
eseguiti, se ogni programma necessita di unarea di
memoria contigua, dopo un po la situazione in memoria
sar quella indicata in figura:
P1
P6

?
P4
P7

P8

Architettura degli Elaboratori

Rilocamento

53

le aree libere (bianche) sono frammentate,


pur essendoci complessivamente spazio libero
sufficiente a contenerlo, il programma P8 non
pu essere caricato in memoria,
un MMU consentirebbe di caricare P8 nelle
pagine fisiche libere, ovunque queste si
trovino.

2010

23

Il programmatore non sa in quale posizione di memoria il


programma sar caricato quando verr eseguito;
la posizione effettiva dipende da:
53
quali e quanti altri moduli compongono il programma,
quali e quanti altri programmi saranno gi presenti in
memoria nel momento in cui esso verr caricato.
Inoltre, se larea di memoria occupata dal programma
durante lesecuzione, dovesse servire per altri scopi,
il programma pu dover essere temporaneamente
ricopiato su disco (swap),
successivamente, quando viene riportato in memoria
pu venir collocato in una posizione diversa (rilocato).
Il rilocamento reso facile dalla presenza di un modulo
MMU: lo spostamento di una pagina si pu ottenere
semplicemente modificando il registro della page table
che punta ad essa.
Architettura degli Elaboratori

2010

Protezione da interferenze

24

necessario impedire che un processo acceda a locazioni


di memoria di un altro processo (o del S.O.);
53
quando il S.O. decide di sospendere lesecuzione di un
programma e di passare ad eseguirne un altro, la
commutazione di contesto con cui ci pu essere fatto,
oltre alla sostituzione di PC, SR, registri, ecc. (previo
salvataggio, per consentirne il successivo ripristino), deve
prevedere anche la sostituzione (previo salvataggio) del
contenuto della page table;
cos ogni programma pu accedere solo alle proprie pagine
fisiche: qualsiasi indirizzo (logico) il processore generi,
viene mappato su una delle pagine fisiche associate al
programma stesso;
lhardware impedisce cos ad un programma di vedere le
pagine fisiche che contengono dati e istruzioni degli altri
programmi.
Architettura degli Elaboratori

2010

Comunicazione tra processi (condivisione)


a volte necessario consentire che processi
diversi accedano ad aree di memoria comuni
(ad es. dati comuni di processi cooperanti che
fanno parte del medesimo programma);
nel caso in cui un insieme di subroutine sia
utilizzato da pi processi, conviene che di esse
vi sia in memoria ununica copia (rientrante),
accessibile a tutti, piuttosto che averne tante
copie replicate per ciascun processo;
per consentire a pi processi di condividere
una pagina fisica sufficiente che il suo IPF
sia presente nella page table di ciascuno di
quei processi.
Architettura degli Elaboratori

25

53

2010

Esempio di paginazione

26

53

Il processo A ha 4 pagine; B ne ha 3, C ne ha 4, D ne ha 5;
3 pagine di D usano i frame liberati dallo swap-out di B.
Architettura degli Elaboratori

2010

Esempio di page table

27

53

contenuto delle page table dei 5 processi dellesempio


precedente, nella fase f.
le dimensioni delle pagine sono potenze di 2; ci semplifica
lhardware di gestione della memoria: lindice di pagina e
loffset sono forniti da due campi dellindirizzo:
Esempio (indirizzi da 20-bit, pagine da 4KB):
01010101 101101001110
primi 8 bit (01010101)
= indice di pagina
ultimi 12 bit (101101001110) = offset

Architettura degli Elaboratori

2010

Scopi della gestione della memoria

28

La gestione della memoria serve per consentire,


tra laltro:
una efficace organizzazione fisica della
memoria: gestendo con efficienza le pagine
fisiche e i trasferimenti di programmi (o di
alcune loro parti) da disco a memoria e
viceversa (gerarchia di memorie); ci si
ottiene con la paginazione;
una efficace organizzazione logica della
memoria: tale da rispecchiare la struttura in
moduli dei programmi.
Architettura degli Elaboratori

2010

Organizzazione logica

29

I programmi sono costituiti da moduli, che vengono


scritti e compilati separatamente;
per il programmatore il modo pi naturale di vedere la
memoria non uno spazio di indirizzi lineare (da 0 fino
allindirizzo massimo), ma costituito da tanti spazi di
indirizzi separati (uno per ciascun modulo);
se il SO e lhardware consentono di gestire in forma di
moduli gli indirizzi dei programmi e dei dati, allora
diventa facile:
associare ai diversi moduli diversi livelli di
protezione (read-only, execute-only, ),
organizzare la condivisione di moduli.
La tecnica pi appropriata per la gestione a moduli
degli indirizzi costituita dalla segmentazione.
Architettura degli Elaboratori

53

53

2010

Segmentazione

30

I moduli (segmenti) di un processo sono in genere di


dimensioni diverse,
c una lunghezza massima per i segmenti,
un indirizzo costituito da due parti: un indice di
segmento e un offset,
a ciascun processo associato un insieme di segmenti
(uno per ciascuno dei suoi moduli) e una segment table
contenente, per ciascuno dei suoi segmenti, le seguenti
informazioni:
lindirizzo iniziale del segmento (inserito dal SO
quando il segmento viene caricato in memoria),
la dimensione del segmento,
bit di controllo (presente, modificato, ),
bit di protezione (read only, permessi, ).

2010

Architettura degli Elaboratori

Indirizzo logico

indirizzo fisico

31

lindirizzo logico ha due componenti:


un indice di segmento IS e un offset OS,
lindice di segmento individua un elemento della
segment table da cui si estrae:
lindirizzo iniziale del segmento (IIS),
la dimensione del segmento (DS),
loffset OS viene confrontato con la dimensione DS:
se OS DS lindirizzo non valido ( eccezione),
se OS DS lindirizzo valido;
(se valido) lindirizzo fisico dato da IIS + OS
(indirizzo iniziale del segmento, estratto dalla segment
table, + loffset, estratto dallindirizzo logico).
Architettura degli Elaboratori

53

53

2010

Esempio di segmentazione

32

segm. A0
(codice di A)

segmento A1
(dati di A)

segm. B0
(cod. B)

segmento B1
(dati di B)

$250 Byte

$754 Byte

$236 Byte

$348 Byte

segment table
del processo A:

segment table
del processo B:

53

indice
segmento

indirizzo
iniziale

lunghezza
segmento

bit di
contr.

bit di
prot.

$0

$250

rx

$250

$754

pm

rw

indice
segmento

indirizzo
iniziale

lunghezza
segmento

bit di
contr.

bit di
prot.

$9A4

$236

rx

$BDA

$348

pm

rw
2010

Architettura degli Elaboratori

Esempio di uso della segment table

33

un indirizzo logico (da 20 bit) sia costituito da:


4 bit (indice di segmento) + 16 bit (offset);

53

pertanto ogni processo pu avere:

al massimo 16 segmenti,
la dimensione massima di un segmento di 64KB;

segment table
del processo A:

indice
segmento

indirizzo
iniziale

lunghezza
segmento

bit di
contr.

bit di
prot.

$0

$250

rx

$250

$754

pm

rw

indirizzo logico del processo A: 0001 0000011001001110


per ottenere il corrispondente indirizzo fisico:
indice di segmento = 1; offset = $064E (< $754: OK)
indirizzo fisico = $250 + $64E = $89E

Architettura degli Elaboratori

2010

Paginazione e segmentazione

34

Caratteristiche importanti:
gli indirizzi di memoria vengono tradotti in indirizzi
fisici durante lesecuzione, per cui i processi possono
subire swap (out e in) dalla memoria e occupare aree di
memoria diverse, in momenti diversi;
i diversi blocchi (pagine o segmenti) di un processo
possono essere collocati in aree non contigue della
memoria.
Conseguenza:
non necessario che tutti i blocchi (pagine o segmenti)
di un processo siano presenti in memoria durante
lesecuzione:
il S.O. pu caricare in memoria solo alcuni blocchi
(resident set)
Architettura degli Elaboratori

53

2010

Esecuzione di un programma

35

quando il processo P richiede un indirizzo che non si trova nel


resident set (memory fault):
viene generato un interrupt e interviene il S.O. che:
- pone il processo nello stato waiting,
- avvia la lettura da disco del blocco richiesto (swap in),
- manda in esecuzione un altro processo Q;

53

quando la lettura da disco del blocco richiesto completata:


viene generato un interrupt e interviene il S.O. che
- riporta il processo P nello stato ready;
a regime, quando la memoria fisica tutta occupata, la
lettura di un nuovo blocco in seguito a un memory fault,
richiede di:
scegliere (secondo una opportuna politica di rimpiazzo)
quale altro blocco deve essere rimpiazzato (swap out).
Architettura degli Elaboratori

2010

Memoria virtuale

36

Questo meccanismo si chiama sistema di memoria virtuale


e ha due conseguenze importanti:
53
il numero di processi presenti in memoria maggiore
(poich di ciascun processo presente in memoria solo il
resident set, ce pi memoria libera per altri processi);
ci induce maggior efficienza nelluso del processore
(pi processi ci sono in memoria, meno probabile che
non ce ne sia nessuno ready);
un singolo processo pu indirizzare pi memoria di
quella fisicamente disponibile (senza la necessit che il
programmatore utilizzi tecniche di overlay);
memoria virtuale = spazio di indirizzi di memoria (che
pu essere maggiore della memoria fisica presente)
disponibile a un processo.
Architettura degli Elaboratori

2010

Principio di localit

37

I sistemi di memoria virtuale funzionano in modo


efficiente in virt di un principio di localit verificato
empiricamente:
nel corso di un intervallo di tempo limitato, gli
indirizzi di memoria richiesti da un processo tendono
ad essere localizzati nelle medesime aree;
ci consente di fare previsioni abbastanza affidabili
su quali blocchi (pagine o segmenti) del processo
serviranno nel futuro (immediato);
una volta portato in memoria fisica un blocco, il
processo continuer ad accedere a quel blocco per un
po di tempo,
solo un accesso su N provoca un memory fault,
probabilit di page fault: pF = 1/N (0 pF 1),
il sistema tanto pi efficiente quanto maggiore N
(quanto minore pF).
Architettura degli Elaboratori

53

2010

Conseguenze dei page fault

38

Siano:
tA il tempo di accesso alla memoria centrale,
53
pF la probabilit di page fault,
tF il tempo necessario a gestire un page fault,
il tempo medio di accesso alla memoria, in presenza di page
fault :
tM = (1 - pF) tA + pF tF
tM = tA + pF (tF - tA)
Dati tA e tF (determinati dallHW), tM cresce linearmente con pF.
Nel caso sia tA = 60 ns, tF = 20 ms,
con pF = 10-3 (un page fault ogni 1000 accessi: N=1000),
il tempo medio : tM (ns) = 60 + 10-3 (20 106 - 60) 20060 ns e
il computer rallenta di pi di 300 volte.
Per contenere il rallentamento sotto il 10%, occorre un N >
3300000 (meno di 1 page fault / 3300000 accessi).
Architettura degli Elaboratori

Trashing

2010

39

In un sistema di memoria virtuale (M.V.):


pu accadere che il SO decida di rimpiazzare (swap out) 53
un blocco proprio poco prima che il processo cerchi di
accedervi,
in tal caso il blocco va riportato subito dopo in memoria
(swap in), con il conseguente swap out di un altro;
se questo succede troppo frequentemente, si parla di
trashing: il processore passa gran parte del suo tempo
ad eseguire swap, invece che ad eseguire le istruzioni dei
processi.
Il SO deve evitare che ci si verifichi.

Architettura degli Elaboratori

2010

Supporto fornito dallhardware

40

Affinch un SO possa realizzare un sistema di


memoria virtuale (MV), necessario che
53
nellhardware sia presente:
un meccanismo di paginazione,
o un meccanismo di segmentazione,
oppure entrambi;
sfruttando questi meccanismi il SO pu gestire i
trasferimenti delle pagine e/o dei segmenti tra
memoria centrale e disco;
lorganizzazione delle page table e delle segment
table va rivista per tener conto delle esigenze
del sistema di MV
2010

Architettura degli Elaboratori

Paginazione
ad ogni processo associata una page table,
lelemento di indice i nella page table corrisponde alla iesima pagina (dello spazio di indirizzi) del processo e
contiene:
lindice del frame (IPF) nella memoria fisica in cui
collocata la i-esima pagina del processo,
il suo indirizzo in memoria secondaria (ims),
alcuni bit di controllo:

41

53

P = pagina presente nella memoria fisica,


M = pagina modificata durante la permanenza in memoria
fisica (se non stata modificata non occorre ricopiarla su
disco in caso di rimpiazzo),
altri bit di protezione (sola lettura, sola esecuzione, accesso
riservato al S.O., )

elemento della page table:


P M
Architettura degli Elaboratori

IPF

ims
2010

Page table

42

le page table associate ai diversi processi hanno


dimensioni diverse (dipendono dalla dimensione del
processo),
alcuni processi sono molto grandi e, di conseguenza
hanno page table con molti elementi,
pertanto non si pu pensare che la page table sia
contenuta in registri appositi, ma va collocata in
memoria,
un registro (page table pointer) punta alla page table
attiva.

Architettura degli Elaboratori

Sistema con paginazione


(Page # = IPV)

53

2010

43

(Frame # = IPF)
53

Sistema paginato: traduzione di indirizzo virtuale in indirizzo fisico.


In caso di page fault, la pagina viene trasferita da disco in un frame della RAM,
il suo frame # viene inserito nellelem. della page table e la traduzione prosegue.
Architettura degli Elaboratori

2010

Page table per memoria virtuale

44

Per realizzare un sistema di memoria virtuale, agli


elementi della page table, oltre al bit che indica se la
pagina presente in memoria fisica (P/A = 1), va
associato anche lindirizzo dalla pagina in memoria
secondaria, usato per reperire la pagina in caso di page
fault (P/A = 0).

Architettura degli Elaboratori

2010

Translation lookaside buffer (TLB)

45

Usando la page table (tenuta in memoria) per trasformare


un indirizzo virtuale in un indirizzo fisico, c il problema
che ogni accesso alla memoria ne richiede almeno due:
uno per accedere alla page table;
uno per accedere al dato.
cos i tempi di accesso alla memoria raddoppiano!
per limitare questo effetto, si pu usare una cache veloce
in cui tenere gli elementi della page table usati pi di
recente; questa cache si chiama Translation Lookaside
Buffer (TLB) e ciascun suo elemento contiene:
un page # (IPV) (in memoria associativa: ricerca
parallela)
il corrispondente frame # (IPF) (frame che contiene la
pagina).
Architettura degli Elaboratori

53

53

2010

Translation lookaside buffer (TLB)

46

Per ridurre i tempi di accesso alla page table, possibile


collocare una sua porzione (corrispondente alle pagine 53
fisiche pi usate) in una memoria cache chiamata
Translation Lookaside Buffer (TLB):

Architettura degli Elaboratori

Uso del TLB

2010

47

dato un indirizzo virtuale (page #, offset), il page # (IPV)


viene cercato nella memoria associativa del TLB:
53
se trovato (hit), si estrae il corrispondente frame # (IPF)
e si costruisce lindirizzo fisico (frame #, offset);
se non c (miss), si accede alla page table (indice=page #):
se lelemento della page table indica che la pagina cercata
presente in un frame nella memoria fisica:
si costruisce lindirizzo fisico (frame #, offset),
si aggiorna il TLB inserendo lelemento trovato;

altrimenti si ha un page fault:

si
si
si
si

porta in un frame la pagina cercata (swap in),


aggiorna la page table (nuova pagina presente),
costruisce lindirizzo fisico (frame #, offset),
aggiorna il TLB inserendo il nuovo elemento.

Architettura degli Elaboratori

2010

Uso del TLB schema grafico

48

53

Uso del Translation Lookaside Buffer


Architettura degli Elaboratori

2010

Segmentazione
ad ogni processo associata una segment table,
lelemento di indice i nella segment table corrisponde
alla i-esimo segmento del processo e contiene:
lindirizzo base del segmento nella memoria fisica,
la lunghezza del segmento,
alcuni bit di controllo:

49

53

P = segmento presente nella memoria fisica,


M = segmento modificato durante la permanenza in memoria
fisica (se non stato modificato non occorre ricopiarla su
disco in caso di rimpiazzo),
altri bit di protezione (sola lettura, sola esecuzione, accesso
riservato al S.O., )

elemento della segment table:

indirizzo base lunghezza P M


Architettura degli Elaboratori

2010

Uso della segment table


indirizzo virtuale
segment #

50

indirizzo fisico

offset

(base + offset)

53

segment #

segment table

offset

seg. table ptr

base lungh.

HW di segmentazione

programma

segmento

memoria
2010

Architettura degli Elaboratori

Segmentazione e paginazione

51

Combinando segmentazione e paginazione si combinano i


vantaggi di entrambe:
la paginazione trasparente al programmatore, elimina la
frammentazione esterna, facilita la gestione della memoria,
la segmentazione visibile al programmatore, consente la
modularit, la protezione e la condivisione dei segmenti;

53

ad ogni processo associata una segment table,


ad ogni segmento associata una page table.
segment #

page #

offset

indirizzo virtuale

indirizzo base lunghezza P M

elemento della segment table

P M

elemento della page table

frame #

Architettura degli Elaboratori

ims

2010

Indirizzi virtuali

indirizzi fisici

52

a partire dallindirizzo virtuale:


segment # page #

offset

53

il segment # individua un elemento nella segment table


indirizzo base

lunghezza

P M

se offset > lunghezza: eccezione di address error;


(page # + indirizzo base) individua elem. nella page table
P M

frame #

ims

(frame #, offset) fornisce lindirizzo fisico:


frame #

indirizzo fisico

offset

2010

Architettura degli Elaboratori

Uso delle segment e page table

53

indirizzo virtuale
segment#

page#

offset

53

segment table
page #

segment #

programma

page
frame

frame #

base lungh.

HW di segmentazione

Architettura degli Elaboratori

page table

offset

seg tab
ptr

HW di paginazione

memoria
2010

Fine
06.b

Gestione della memoria

Testo di rif.to:
[Congiu] 7.17.5 (pg. 211239)

Sistemi di interruzione
07.a

Motivazioni
Funzioni minime presenti nellhardware
Gestione delle interruzioni
Sistemi efficienti di interruzione
Interruzioni software

Inefficienza del busy waiting

La programmazione delle operazioni di I/O,


effettuata ricorrendo ai cicli di attesa (busy
39
waiting) per rispettare i protocolli di I/O,
comporta un uso inefficiente del processore:
tanto pi inefficiente quanto pi lento il
dispositivo,
anzich eseguire ripetutamente un numero
elevatissimo di volte le istruzioni dei cicli di
attesa, il processore potrebbe impiegare quei
tempi di attesa per eseguire istruzioni pi utili
(ad es. durante unattesa di 10ms, potrebbero
venir eseguite pi di 100.000 istruzioni utili!).
Architettura degli Elaboratori 1

2008

Un sistema pi efficiente

per impiegare pi utilmente il tempo di CPU,


necessario disporre di un meccanismo che :
consenta al processore di passare ad
eseguire altre attivit, dopo aver avviato
uno dei passi del protocollo di I/O,
e che
preveda che sia il dispositivo a farsi parte
attiva per richiedere lintervento del
processore, inviando ad esso un apposito
segnale quando pronto per il passo
successivo del protocollo di I/O (richiesta
di servizio).
Architettura degli Elaboratori 1

Sistema di interruzione

39

2008

- a fronte di questo segnale il processore potr:


interrompere il programma in esecuzione,
39
passare ad eseguire la sequenza di istruzioni
richiesta dal protocollo di I/O
(questa sequenza di istruzioni si chiama:
routine di servizio della interruzione - RSI),
riprendere poi lesecuzione del programma
interrotto;
- questo segnale si chiama richiesta di interruzione
- il meccanismo che realizza questa possibilit si
chiama sistema di interruzione.
Architettura degli Elaboratori 1

2008

Problemi da risolvere

Per gestire correttamente questo meccanismo


di interruzione, necessario che vengano risolti
i seguenti problemi:
il salvataggio del contesto in cui sta
operando il programma che viene interrotto,
per poterlo poi ripristinare al termine
dellinterruzione;
il riconoscimento del dispositivo che ha
provocato linterruzione (identificazione
dellinterruzione);
lordinamento delle richieste di interruzione
secondo una gerarchia di priorit.
Architettura degli Elaboratori 1

2008

Salvataggio e ripristino del contesto

Il contesto costituito da tutto ci che caratterizza


lo stato di avanzamento dellesecuzione del programma
che sta per essere interrotto:
il registro program counter (PC),
i registri dellALU,
i registri che contengono le informazioni che
definiscono lo stato del processore,
al termine della interruzione, per far proseguire
correttamente lesecuzione del programma interrotto,
tutto il suo contesto va ripristinato;
si pu parlare anche di commutazione di contesto
(da quello del programma che viene interrotto a quello
della RSI e viceversa).
Architettura degli Elaboratori 1

39

39

2008

Accettazione di una interruzione

Una richiesta di interruzione pu essere


accettata dal processore (e dar luogo al
39
verificarsi di uninterruzione), solo al termine
della fase di execute di unistruzione e prima
del fetch dellistruzione successiva (durante
lesecuzione di una istruzione, non facilmente
definibile qual il contesto da salvare);
uninterruzione pu verificarsi solo se abilitata
da un apposito registro in cui definito lo stato
di interrompibilit del processore.
Architettura degli Elaboratori 1

2008

Commutazione del contesto

Quando si verifica uninterruzione, lhardware


deve effettuare la commutazione di almeno la
seguente porzione del contesto:
il registro PC,
il registro che definisce lo stato di
interrompibilit del processore;
la commutazione del resto del contesto pu
essere effettuata o dallhardware (pi veloce),
oppure dal software (pi lento) mediante
istruzioni di preambolo della routine di servizio.
Architettura degli Elaboratori 1

39

2008

Identificazione dellinterruzione - 1

Pi dispositivi possono generare richieste di


interruzione per ottenere il servizio del
processore;
ci comporta la presenza, in memoria centrale,
di tante routine di servizio quanti sono questi
dispositivi;
quando si verifica uninterruzione necessario
individuare il dispositivo che lha richiesta,
al fine di selezionare la RSI da attivare.

Architettura degli Elaboratori 1

2008

Identificazione dellinterruzione - 2

Lidentificazione del dispositivo che ha


provocato linterruzione pu essere fatta:
via software: eseguendo una sequenza di
istruzioni che esamini i dispositivi (polling) e,
individuato quello da servire, effettui un
salto alla corrispondente routine di servizio.
via hardware: prevedendo che il dispositivo,
oltre alla richiesta di interruzione, generi un
codice che ne permetta lidentificazione da
parte del processore;
la realizzazione hardware pi veloce di quella
software.
Architettura degli Elaboratori 1

39

39

2008

Gerarchia di priorit

10

Le richieste di interruzione provenienti da dispositivi con


esigenze di tempo reale pi critiche, devono essere
39
servite con priorit superiore alle altre;
lesigenza di distinguere la priorit delle richieste si
manifesta in due circostanze:
se sono contemporaneamente presenti pi richieste,
quando si verifica uninterruzione: vanno servite prima
quelle pi prioritarie;
quando viene richiesta (unaltra) interruzione durante
lesecuzione di una RSI: la RSI va interrotta solo se
la nuova richiesta pi prioritaria;
anche questo aspetto pu avere una soluzione hardware
(pi veloce), oppure software (pi lenta).
Architettura degli Elaboratori 1

Efficienza dei sistemi di interruzione

2008

11

un sistema di interruzione tanto pi efficiente


quanto minore il tempo che intercorre tra la 39
generazione di una richiesta di interruzione e
lesecuzione delle istruzioni che ne realizzano il
servizio;
lefficienza di un sistema di interruzione quindi
legata alla rapidit con cui il processore in
grado di intervenire, in seguito alla segnalazione
che un dispositivo pronto, per eseguire le
istruzioni richieste dal relativo protocollo di I/O;
lefficienza di un sistema di interruzione
particoloarmente importante nelle applicazioni
con esigenze di tempo reale critiche.
Architettura degli Elaboratori 1

2008

Un semplice sistema di interruzione

12

viene ora presentata una possibile realizzazione del


sistema di interruzione, nella quale lhardware si limita 39
a fornire le funzioni minime per risolvere i tre problemi
decritti;
la gran parte delle funzionalit richieste sono realizzate
dal software (tramite lesecuzione della routine di servizio,
o di un preambolo ad essa);
il sistema di interruzione che si ottiene sar molto
inefficiente;
in seguito si presenteranno possibili realizzazioni pi
efficienti, nelle quali la soluzione dei tre problemi indicati
assicurata dallhardware.
2008

Architettura degli Elaboratori 1

Generazione di richiesta di interruzione


la richiesta di interruzione (IRQ) ha origine dal
registro STATUS che, nellinterfaccia del dispositivo,
segnala quando esso pronto;
il registro IM consente di abilitare o disabilitare la
generazione di IRQ da parte del dispositivo;
il registro I consente al processore di accettare o
meno IRQ.

Architettura degli Elaboratori 1

elementi aggiunti)

13

39

2008

Pi richieste di interruzione

14

pi richieste di interruzione, provenienti da dispositivi


diversi, potrebbero venir raccolte da una porta OR ...

39

elemento aggiunto)

Schema con pi richieste di interruzione


2008

Architettura degli Elaboratori 1

Una sola linea di interruzione

15

ma meglio usare un collegamento wired OR (con porte


NAND open-collector), che richiede una sola linea IRQ:

39

elementi aggiunti)

Wired OR di richieste di interruzione


Architettura degli Elaboratori 1

2008

Funzioni minime fornite dallHW


Al verificarsi di una interruzione, lHW deve provvedere
almeno a:
1. commutare la sola porzione di contesto costituita
dai registri SR e PC:
push
SR
PC
push
2.commutare al valore 0 il registro I per impedire che si
verifichino altre interruzioni:
0
I
3.inserire, nel PC, lindirizzo della routine di servizio
(collocata, ad es a partire dallindirizzo 0)
0
PC
(in questo modo, tutte le interruzioni attivano la stessa
routine-preambolo, situata a partire da M[0])
Architettura degli Elaboratori 1

39

2008

Ritorno al programma interrotto

17

per ripristinare il contesto del programma


interrotto, lHW deve inoltre prevedere una
istruzione apposita:
RTI (return from interrupt)
che esegua le seguenti operazioni:
pop
PC
pop
SR

Architettura degli Elaboratori 1

16

39

2008

Al resto . . . deve provvedere il SW

18

la commutazione degli altri elementi del contesto


(registri, ) pu essere realizzata eseguendo apposite
istruzioni della RSI che verr attivata;
39
lidentificazione dellinterruzione si pu ottenere
collocando nella routine-preambolo (allindirizzo 0) una
sequenza di istruzioni che esamina lo stato dei dispositivi
(polling) per individuare quello da servire ed attivare la
RSI specifica;
lordine con cui vengono esaminati i dispositivi nella
sequenza di polling realizza il primo dei due aspetti della
gerarchia di priorit (la scelta della richiesta da servire
in presenza di richieste contemporanee);
il secondo aspetto (la interrompibilit) pu essere
realizzato inserendo nella RSI istruzioni che impostino
(previo salvataggio e successivo ripristino) lo stato dei
registri IM di tutti i dispositivi: IM=1 solo in quelli
considerati pi prioritari.
Architettura degli Elaboratori 1

2008

Organizzazione del SW

19

il servizio di una interruzione comprende lesecuzione della routinepreambolo e lesecuzione della RSI specifica; le operazioni che
devono essere eseguite sono:

Routine-preambolo:

39

completamento della commutazione del contesto,


identificazione dellinterruzione (polling),
attivazione della RSI specifica;

RSI specifica:

completamento della commutazione del contesto, compreso


leventuale nuovo stato di interrompibilit;
esecuzione delle operazioni richieste dal dispositivo
(protocollo di I/O); ci deve avere come effetto la
rimozione della IRQ;
ripristino di tutto il contesto salvato via software (anche
quello salvato dalla routine-preambolo);
esecuzione della istruzione RTI (con cui si ripristina il
contesto salvato dallHW).

Architettura degli Elaboratori 1

2008

Elementi HW per il sistema di interruzione

20

39

(
elementi aggiunti)

Architettura degli Elaboratori 1

Modulo di interfaccia con laggiunta


di una semplice logica di interrupt

2008

Istruzioni per il sistema di interruzione


Istruzioni I/O gi presenti nel PD32:
INz
disp, d
OUTz s, disp
START disp
JR
disp, addr
JNR disp, addr

; IORD=1
; IOWR=1
;0
STATUS, STARD=1
; if (READY=1) addr
PC
; if (READY=0) addr
PC

21

39

Istruzioni I/O aggiuntive per la gestione delle interruzioni:


CLEAR disp
SETIM disp
CLRIM disp
JIM
disp, addr
JNIM disp, addr
SETI
CLRI
RTI

Architettura degli Elaboratori 1

;0
STATUS
;1
IM
;0
IM
; if (IM=1) addr
; if (IM=0) addr
;1
I
;0
I
; pop
PC, pop

PC
PC
SR
2008

Identificazione dellinterruzione

22

lidentificazione si effettua via software interrogando, ad


uno ad uno (polling), i vari dispositivi, esaminandone i
39
segnali IMS e READY :

D2:
D3:
DN:
UFO:

JNIM DISP1, D2
;IMS[DISP1] = 1?
JR
DISP1, SERV1;si: se STATUS[DISP1] = 1
;attiva la RSI di DISP1
JNIM DISP2, D3
;no: esamina DISP2
JR
DISP2, SERV2
.
.
JNIM DISPN, UFO
JR
DISPN, SERVN
.
;interrupt non identificato

Architettura degli Elaboratori 1

2008

Esempio duso delle interruzioni

23

Si voglia ri-programmare lesempio dellacquisizione di


100 dati da un convertitore A/D (esempio gi visto),
utilizzando il meccanismo delle interruzioni;
le seguenti istruzioni impostano il puntatore AD1_P e il
contatore AD1_C, utilizzati dalla routine di servizio, e
avviano lacquisizione del primo dato inviando il comando
START:

39

...
MOV #TAB1, AD1_P ; valore iniziale del puntatore
MOV #100, AD1_C ; valore iniziale del contatore
START AD1
; comando che avvia lacquisizione
; del primo dato

Architettura degli Elaboratori 1

2008

Organizzazione dei dati in memoria

24

39

2008

Architettura degli Elaboratori 1

Sequenza di polling

25

Quando il primo dato pronto nel data buffer,


viene generata una richiesta di interruzione,
riconosciuta da una sequenza di polling in cui
presente listruzione:
...

39

; sequenza di polling

...
JR AD1, SAD1

...

Architettura degli Elaboratori 1

; attiva la routine SAD1


; se in AD1 READY=1

2008

La routine di servizio

26

Quando la RSI viene attivata, il dato pronto e pu essere acquisito


e messo in memoria senza cicli di attesa:
SAD1: PUSH
PUSH
MOVL
MOVL
INW

R0
R1
AD1_C, R0
AD1_P, R1
AD1, (R1)+

SUBL #1, R0
JNZ
NEXT
CLEAR AD1
JMP
NEXT: START
MOVL
MOVL
EXIT: POP
POP
RTI

EXIT
AD1
R0, AD1_C
R1, AD1_P
R1
R0

; salva i registri usati


;
; contatore
; puntatore
; trasferisce il dato in memoria e
; incrementa il puntatore
; decrementa il contatore
; era lultimo dato?
; s: rimuove la richiesta di interr.ne
; rendendo inattivo il dispositivo ...
; e ritorna al progr. interrotto
; no: avvia lacquisizione successiva
; aggiorna il contatore e ...
; il puntatore in memoria
; ripristina i registri usati
;
; ritorna al programma interrotto

Architettura degli Elaboratori 1

39

2008

Gerarchia di priorit

27

Con il semplice hardware descritto, possibile prevedere


anche una organizzazione del software tale da istituire
una gerarchia di priorit tra i dispositivi allo scopo di:
stabilire quale dispositivo debba essere servito per
primo, in caso di richieste contemporanee di
interruzione: ci si ottiene definendo lordine di
esame dei dispositivi nella sequenza di polling;
prevedere che una RSI possa essere a sua volta
interrotta da dispositivi pi prioritari: ci si ottiene:
1. impostando i valori opportuni nei registri IM dei
dispositivi:

39

IM=1 in quelli pi prioritari, che possono interrompere,


IM=0 in quelli che non devono poter interrompere;

2. strutturando la RSI nel modo indicato nella


prossima slide
Architettura degli Elaboratori 1

2008

RSI interrompibile

28

La struttura di una RSI che preveda di poter essere a


sua volta interrotta la seguente:
SERVI: .....
.....
.....
SETI
.....
.....
.....
CLRI
.....
RTI

;
;
;
;
;
;
;
;
;
;

commutazione del contesto


(compresi i valori dei registri IM
che stabiliscono il livello di
interrompibilit della routine).
abilitazione delle interruzioni,
servizio del dispositivo:
(qui la routine pu essere interrotta)
disabilitazione delle interruzioni
ripristino del contesto

Architettura degli Elaboratori 1

Sistemi di interruzione pi efficienti


sistemi di interruzione pi efficienti si
ottengono realizzando da hardware le
varie funzioni:
commutazione del contesto:
set multipli di registri;
identificazione delle interruzioni:
interrupt vettorizzati;
gerarchia di priorit:
linee di interruzione diverse.
Architettura degli Elaboratori 1

39

2008

29

39

2008

Set multipli di registri

30

se N sono i livelli di priorit, con N set di registri


dellALU (fisicamente distinti), si pu evitare di salvare
nello stack i registri usati dalla RSI;
quando si verifica una interruzione di livello i, si attiva il
set di registri i-esimo (associati a quel livello):
tutti i riferimenti ai registri vengono mappati sul
nuovo set,
il contenuto dei registri del set precedentemente
attivo rimane inalterato, senza bisogno di salvarli;
un esempio (anche se parziale) di set multipli di registri
si ha nel processore ARM, in cui di alcuni registri
esistono copie riservate per i diversi modi operativi :
SP e LR per i modi Supervisore,
R8 R12 per il modo Fast-Interrupt.

39

2008

Architettura degli Elaboratori 1

Schema per interrupt vettorizzati

31

39

(
Architettura degli Elaboratori 1

elementi aggiunti)
2008

Interrupt vettorizzati

32

al verificarsi di una interruzione, il processore genera il


segnale IACK=1, che attraversa, ad una ad una (daisy
chain), le interfacce dei vari dispositivi; la logica dello
schema fa s che:

39

il dispositivo che riceve IACK=1, se non sta generando una


IRQ, inoltra IACK=1 inalterato al dispositivo successivo;
il dispositivo che riceve IACK=1, se sta generando una
IRQ, inoltra IACK=0 al dispositivo successivo e invia sulle
linee dati il contenuto del registro IVN (Interrupt
Vector Number), codice che identifica il dispositivo;
il dispositivo che riceve IACK=0, inoltra comunque IACK=0
inalterato al dispositivo successivo;

pertanto al segnale IACK=1 generato dal processore


risponde (con il proprio IVN) uno e un solo dispositivo
tra quelli che stanno generando una IRQ: quello che
viene incontrato per primo nella daisy chain.
Architettura degli Elaboratori 1

Vettore di puntatori alle RSI - 1

2008

33

in un sistema di interrupt vettorizzati, il codice


IVN che il processore riceve in risposta al
39
segnale IACK=1 identifica il dispositivo e
consente di attivare direttamente la sua RSI;
ad esempio, supponendo che IVN sia da 8 bit
(max 256 dispositivi diversi), i puntatori
(ciascuno da 4 byte) alle 256 RSI potrebbero
essere collocati nel primo Kbyte della RAM
(vettore di puntatori alle RSI);
il puntatore alla RSI associata al dispositivo con
IVN = h va situato allindirizzo h 4 della RAM.
Architettura degli Elaboratori 1

2008

Vettore di puntatori alle RSI - 2

34

le operazioni eseguite dallhardware al


verificarsi di una interruzione, nel
39
sistema di interrupt vettorizzati
descritto, sono:
SR
push
PC
push
0
I
1
IACK
L[IVN 4] PC
e portano ad attivare immediatamente la
RSI del dispositivo da servire.
Architettura degli Elaboratori 1

2008

Linee di interrupt a priorit diverse - 1

35

39

Sistema di interrupt
con 4 livelli fisici di
priorit

Architettura degli Elaboratori 1

2008

Linee di interrupt a priorit diverse - 2


nello schema di figura vi sono 4 linee di interrupt (A,
B, C, D, in ordine di priorit decrescente);
la logica dello schema assicura che, in presenza di pi
richieste contemporanee su linee diverse, il
processore genera solo lIACKi sul livello della
richiesta pi prioritaria;

36

39

inoltre una richiesta di livello k pu interrompere una


RSI di una richiesta di livello inferiore;
a ciascuna linea possono essere collegati pi
dispositivi, con il medesimo livello di priorit: il
relativo segnale IACKi pu essere inviato in daisy chain
a tutti i dispositivi di quel livello: ci definisce un
ulteriore ordine di priorit allinterno di ciascun livello.
Architettura degli Elaboratori 1

2008

Interruzioni interne

37

oltre alle interruzioni provocate dai dispositivi


esterni, con le quali i dispositivi chiedono un
servizio al processore, ve ne sono altre, dette
interruzioni interne, che sono provocate da
eventi che si verificano allinterno del
processore;
vi sono due tipi di interruzioni interne:
le interruzioni provocate da eventi
eccezionali (trap),
le interruzioni software (system call).
Architettura degli Elaboratori 1

39

2008

Eventi eccezionali che generano trap


Hardware failure (parity error, ecc.),
Zero divide,

38

39

Istruzione illecita (violazione di privilegio),


Istruzione inesistente,
Accesso a word con indirizzo dispari,
Esecuzione con modalit trace,

Power failure,
Bus error,

Architettura degli Elaboratori 1

Interruzioni software

2008

39

le interruzioni software sono generate da apposite


istruzioni, il cui scopo solo quello di provocare una
39
interruzione;
realizzano il meccanismo di chiamata al sistema operativo
e, per questo, vengono chiamate anche system call;
rispetto alla modalit normale di richiamare le subroutine
per richiedere servizi, per quelli che implicano laccesso a
risorse critiche, che non devono essere accessibili ai
programmi utente, la system call realizza la necessaria
separazione tra il programma richiedente e il SO:
non necessario che nel programma sia specificato
lindirizzo della routine del SO da attivare ( bene che
non lo conosca e che non possa accedervi);
nel momento in cui viene eseguita una system call, il
programma perde il controllo del processore.
Architettura degli Elaboratori 1

2008

Fine
07.a

Sistemi di interruzione

24

Eccezioni in ARM
C.Fantozzi, M.Moro

Interruzioni o eccezioni?

In ARM si usa il termine eccezione (exception) 24


per indicare una generica interruzione, in una delle
tante diverse forme (esterna, software, ecc.)
possibili.
Nei manuali si parla quindi di interrupts and other
exceptions, exception modes, exception vector
e cos via.
Nel seguito useremo anche noi il termine
eccezione con questo significato.
Architettura degli Elaboratori

2010

ARM: gestione efficiente delle eccezioni

Il sistema di gestione delle eccezioni


24
dellarchitettura ARM realizza in hardware le
seguenti funzioni.
Commutazione del contesto:
set multipli per alcuni registri;
alcune eccezioni condividono lo stesso set.
Identificazione delle eccezioni:
eccezioni vettorizzate.
Gerarchia di priorit:
due linee di interruzione diverse.
Architettura degli Elaboratori

2010

Modi operativi

Modo di funzionamento non privilegiato


User (USR): modo utente

24

Modi di funzionamento privilegiato:


Gestione interruzioni esterne
IRQ (IRQ): gestione interruzioni
FIQ (FIQ): gestione veloce interruzioni

Gestione interruzioni interne - trap


Abort (ABT): gestione memoria
Undefined (UDEF): emulazione coprocessori

Gestione interruzioni interne system call


Supervisor (SVC): modo protetto
System (SYS): usa risorse di USR, ma senza limitazioni di
accesso
Architettura degli Elaboratori

2010

Modi operativi e set di registri

24

Architettura degli Elaboratori

Registri: richiami

2010

R0-R13: registri di uso generale


24

SP: stack pointer (R13)


LR: link register (R14)

Memorizza lindirizzo di ritorno da subroutine

PC: program counter (R15)


Punta allistruzione da eseguire

CPSR: Current Program Status Register


Contiene i bit di stato

SPSR: Saved Program Status Register


Copia di CPSR prima del cambio di modo

Architettura degli Elaboratori

2010

xPSR: bit utili


Bit 04
Bit 6
Bit 7

(M): modo operativo (7 attualmente previsti)


(F): fast IRQ on (=0) o off (=1)
(I): interruzioni on (=0) o off (=1)

Altri bit:
Bit 5
Bit 8
Bit 9
Bit 16-19
Bit 24
Bit 27
Bit 28-31

(T): Thumb instruction set off (=0) o on (=1)


(A): solo ARMv6 o superiore
(E): solo ARMv6 o superiore
(GE): solo ARMv6 o superiore
(J): solo ARMv5 o superiore
(Q): solo ARMv5 o superiore
(CNZV): bit di condizione

Architettura degli Elaboratori

Modo operativo (M): codifica

24

2010

24

Architettura degli Elaboratori

2010

Tabella dei vettori di eccezione


Indirizzo
0x00000000
0x00000004
0x00000008
0x0000000C
0x00000010
0x00000014
0x00000018
0x0000001C

Descrizione
Reset
Undefined Instruction (UDEF)
Software Interrupt (SWI)
Prefetch Abort (PABT)
Data Abort (DABT)
RISERVATO
Interrupt (IRQ)
Fast Interrupt (FIQ)

Modo
SVC
UDEF
SVC
ABT
ABT
IRQ
FIQ

24

2010

Architettura degli Elaboratori

Tabella dei vettori di eccezione

24

0x00000000
0x00000004
0x00000008
0x0000000C
0x00000010
0x00000014
0x00000018
0x0000001C

B 0x64
LDR PC, [PC, #0x14]
LDR PC, [PC, #0x14]
LDR PC, [PC, #0x14]
LDR PC, [PC, #0x14]
LDR PC, [PC, #0x14]
LDR PC, [PC, #0x14]
LDR PC, [PC, #0x14]

RST
UDEF
SWI
PABT
DABT
RES
IRQ
FIQ

Architettura degli Elaboratori

PC+8 + 0x14 = PC + 1C

Indirizzo della Routine di Servizio IRQ


0x18 + 0x1C = 0x34

2010

Priorit tra le eccezioni (ARMv4/v5)


Eccezione

Priorit

Reset

1 (maggiore)

Data Abort

FIQ

IRQ

Prefetch Abort

Undefined instruction,
SWI

6 (minore)

Architettura degli Elaboratori

10

24

2010

Eccezione: elaborazione

11

R14_<exception_mode> = PC
Salva PC in un LR che dipende dal nuovo modo e quindi dalleccezione

24

SPSR_<exception_mode> = CPSR
Salva CPSR in un SPSR che dipende anchesso dal nuovo modo
CPSR[4:0]= <identificativo eccezione>
Imposta il nuovo modo di processore
if <exception_mode> == (Reset or FIQ) then CPSR[6] = 1
Se reset o FIQ, disabilita FIQ
CPSR[7] = 1
Disabilita IRQ
PC = <exception hard vector>
Salta allopportuno vettore di eccezione
Architettura degli Elaboratori

2010

Eccezione: valore salvato per PC

12

Reset
Non prevedibile

24

Undefined Instruction, SWI, Prefetch Abort


Se PC0 lindirizzo dellistruzione che ha sollevato
leccezione, salva PC0 + 4
Data Abort
Se PC0 lindirizzo dellistruzione che ha sollevato
leccezione, salva PC0 + 8
IRQ, FIQ
Se PC0 lindirizzo della prossima istruzione del
codice interrotto, salva PC0 + 4
2010

Architettura degli Elaboratori

Eccezione: ritorno (1 di 2)

13

Occorre ripristinare PC e CPSR

24

Con una istruzione di elaborazione dati con


destinazione PC e bit S impostato, ad esempio
SUBS PC, R14, #4 @ R14_<excep_mode>-4 PC
@ SPSR_<excep_mode>

CPSR

Con una istruzione di caricamento multiplo (LDM)


dove nella lista dei registri presente PC, cosa che
provoca anche il ripristino di CPSR
Se nella ISR si usa lo stack, quello puntato da
SP_<excep_mode>
Architettura degli Elaboratori

2010

Eccezione: ritorno (2 di 2)
Reset
Segnale di reset

Non previsto un ritorno

Undefined Instruction
Codifica illegale

14

Prefetch Abort
Memory fault in fase di
(pre)fetch di unistruzione 24
SUBS PC, R14, #4

MOVS PC, R14

Data Abort
Memory fault in fase di
esecuzione di unistruzione

MOVS PC, R14

SUBS PC, R14, #4


(istruz. non rieseguita) o
#8 (istruz. rieseguita)

Software Interrupt
Istruzione SWI

IRQ
Interrupt esterno normale
SUBS PC, R14, #4

FIQ
Interrupt esterno veloce
SUBS PC, R14, #4
Architettura degli Elaboratori

2010

Samsung S3C2440A Interrupt Controller

15

Il processore S3C2440A possiede un Interrupt


24
controller (IC) interno in grado di gestire
richieste di interruzioni provenienti da una o pi
di 60 sorgenti interne (DMA, linea seriale, bus
IIC, ecc.). Alcune sorgenti sono or-ed prima di
arrivare allo IC. Vi possono anche essere alcune
sorgenti esterne collegate ad appositi pin.
Quando sono pendenti pi richieste di sorgenti
interne e/o esterne, lo IC genera una richiesta
IRQ o FIQ; la IRQ viene generata dopo una
opportuna fase di arbitraggio.
Architettura degli Elaboratori

2010

Sorgenti di interruzione

16

24

32 sorgenti di interruzione

Architettura degli Elaboratori

Sorgenti di interruzione (2)

2010

17

24

Sub-sorgenti sovrapposte
Architettura degli Elaboratori

2010

Registri dello IC

18

Lo IC ha 5 registri di controllo pi un registro di


24
offset
Source pending register (SRCPND) (32 bit)
Un bit risulta posto a 1 se pendente
lassociata richiesta di interruzione. La sua
routine di servizio deve azzerare quel bit per
rimuovere la causa di interruzione.
Interrupt mode register (INTMOD) (32 bit)
Un solo bit viene posto a 1 per indicare che la
relativa richiesta di interruzione va gestita
come FIQ. Le altre sono gestite in modo IRQ.
Architettura degli Elaboratori

2010

Registri dello IC (2)

19

Interrupt mask register (INTMSK) (32 bit)


Un bit posto a 1 mascherer la relativa
eventuale richiesta di interruzione che, se
pendente, rimarr tale senza produrre
lattivazione della corrispondente routine di
servizio (modo IRQ).
Priority register (PRIORITY) (21 bit)
Definisce la logica di priorit applicata
dallarbitraggio IRQ eseguito dallo IC (vedi
tabella successiva)
Architettura degli Elaboratori

24

2010

Registri dello IC (3)

20

Interrupt pending register (INTPND) (32 bit)


Al pi un bit pu essere a 1: esso il risultato
dellarbitraggio nel caso di interruzioni pendenti non
mascherate che generano IRQ. Quel bit esprime
linterruzione tra quelle pendenti che deve essere
servita con priorit. Il registro nullo se non vi sono
interruzioni pendenti o queste ultime sono tutte
mascherate. La RSI specifica dovrebbe poi azzerare
questo bit dopo aver azzerato il gemello in SRCPND.

Architettura degli Elaboratori

2010

Registri dello IC (4)

21

Interrupt offset register (INTOFFSET)


I suoi 5 bit meno significativi rappresentano
loffset (indice) del bit eventualmente impostato
in INTPND. Il registro pu essere valutato nella
ISR-preambolo (modo IRQ) per stabilire
velocemente linterruzione da servire e quindi il
salto alla RSI specifica.

Architettura degli Elaboratori

24

24

2010

Gestione della priorit IRQ

22

24

INTMSK

PRIORITY
INTMOD

In rosso sono evidenziati i 5 registri di controllo

Architettura degli Elaboratori

Gestione della priorit IRQ (2)

2010

23

24

Architettura degli Elaboratori

2010

Gestione della priorit IRQ (3)

24

Le impostazioni
fissano lordine di
priorit applicato
da ciascun arbitro
e se lordine
debba ruotare
automaticamente
dopo un servizio

24

2010

Architettura degli Elaboratori

Chiamata a sistema (SWI)

25

SWI{<cond>} <24_bit_immediate>
Il valore immediato collocato nella parola operativa
dellistruzione, da cui il sistema operativo lo legger.
SWI_RSI:
SWI_RSI:
STMFD
STMFD
LDR
LDR
BIC
BIC
CMP
CMP
LDRLE
LDRLE
BB
.WORD
.WORD
.WORD
.WORD
.. .. ..
.WORD
.WORD

SP!,
SP!, {R12,
{R12, ...}
...}
R12,
R12, [R14,
[R14, #-4]
#-4]
R12,
R12,
0xff000000
R12, R12, 0xff000000
R12,
R12, #MAXSVC
#MAXSVC
PC,
PC, [PC,
[PC, R12,
R12, LSL
LSL #2]
#2]
SVC_SCONOSCIUTO
SVC_SCONOSCIUTO
SVC0
SVC0
SVC1
SVC1

24

@
@ salva
salva alcuni
alcuni registri
registri
@
@ carica
carica la
la codifica
codifica di
di SWI
SWI
@
estrae
campo
immediato
@ estrae campo immediato
@
@ controllo
controllo range
range
@
@ salta
salta attraverso
attraverso la
la tabella
tabella

SVC<MAXSVC-1>
SVC<MAXSVC-1>

Architettura degli Elaboratori

2010

24

Fine
Eccezioni in ARM

Testo di rif.to:
[Congiu] 7.17.5 (pg. 211239)

Sistemi di interruzione
07.a

Motivazioni
Funzioni minime presenti nellhardware
Gestione delle interruzioni
Sistemi efficienti di interruzione
Interruzioni software

Inefficienza del busy waiting

La programmazione delle operazioni di I/O,


effettuata ricorrendo ai cicli di attesa (busy
39
waiting) per rispettare i protocolli di I/O,
comporta un uso inefficiente del processore:
tanto pi inefficiente quanto pi lento il
dispositivo,
anzich eseguire ripetutamente un numero
elevatissimo di volte le istruzioni dei cicli di
attesa, il processore potrebbe impiegare quei
tempi di attesa per eseguire istruzioni pi utili
(ad es. durante unattesa di 10ms, potrebbero
venir eseguite pi di 100.000 istruzioni utili!).
Architettura degli Elaboratori 1

2008

Un sistema pi efficiente

per impiegare pi utilmente il tempo di CPU,


necessario disporre di un meccanismo che :
consenta al processore di passare ad
eseguire altre attivit, dopo aver avviato
uno dei passi del protocollo di I/O,
e che
preveda che sia il dispositivo a farsi parte
attiva per richiedere lintervento del
processore, inviando ad esso un apposito
segnale quando pronto per il passo
successivo del protocollo di I/O (richiesta
di servizio).
Architettura degli Elaboratori 1

Sistema di interruzione

39

2008

- a fronte di questo segnale il processore potr:


interrompere il programma in esecuzione,
39
passare ad eseguire la sequenza di istruzioni
richiesta dal protocollo di I/O
(questa sequenza di istruzioni si chiama:
routine di servizio della interruzione - RSI),
riprendere poi lesecuzione del programma
interrotto;
- questo segnale si chiama richiesta di interruzione
- il meccanismo che realizza questa possibilit si
chiama sistema di interruzione.
Architettura degli Elaboratori 1

2008

Problemi da risolvere

Per gestire correttamente questo meccanismo


di interruzione, necessario che vengano risolti
i seguenti problemi:
il salvataggio del contesto in cui sta
operando il programma che viene interrotto,
per poterlo poi ripristinare al termine
dellinterruzione;
il riconoscimento del dispositivo che ha
provocato linterruzione (identificazione
dellinterruzione);
lordinamento delle richieste di interruzione
secondo una gerarchia di priorit.
Architettura degli Elaboratori 1

2008

Salvataggio e ripristino del contesto

Il contesto costituito da tutto ci che caratterizza


lo stato di avanzamento dellesecuzione del programma
che sta per essere interrotto:
il registro program counter (PC),
i registri dellALU,
i registri che contengono le informazioni che
definiscono lo stato del processore,
al termine della interruzione, per far proseguire
correttamente lesecuzione del programma interrotto,
tutto il suo contesto va ripristinato;
si pu parlare anche di commutazione di contesto
(da quello del programma che viene interrotto a quello
della RSI e viceversa).
Architettura degli Elaboratori 1

39

39

2008

Accettazione di una interruzione

Una richiesta di interruzione pu essere


accettata dal processore (e dar luogo al
39
verificarsi di uninterruzione), solo al termine
della fase di execute di unistruzione e prima
del fetch dellistruzione successiva (durante
lesecuzione di una istruzione, non facilmente
definibile qual il contesto da salvare);
uninterruzione pu verificarsi solo se abilitata
da un apposito registro in cui definito lo stato
di interrompibilit del processore.
Architettura degli Elaboratori 1

2008

Commutazione del contesto

Quando si verifica uninterruzione, lhardware


deve effettuare la commutazione di almeno la
seguente porzione del contesto:
il registro PC,
il registro che definisce lo stato di
interrompibilit del processore;
la commutazione del resto del contesto pu
essere effettuata o dallhardware (pi veloce),
oppure dal software (pi lento) mediante
istruzioni di preambolo della routine di servizio.
Architettura degli Elaboratori 1

39

2008

Identificazione dellinterruzione - 1

Pi dispositivi possono generare richieste di


interruzione per ottenere il servizio del
processore;
ci comporta la presenza, in memoria centrale,
di tante routine di servizio quanti sono questi
dispositivi;
quando si verifica uninterruzione necessario
individuare il dispositivo che lha richiesta,
al fine di selezionare la RSI da attivare.

Architettura degli Elaboratori 1

2008

Identificazione dellinterruzione - 2

Lidentificazione del dispositivo che ha


provocato linterruzione pu essere fatta:
via software: eseguendo una sequenza di
istruzioni che esamini i dispositivi (polling) e,
individuato quello da servire, effettui un
salto alla corrispondente routine di servizio.
via hardware: prevedendo che il dispositivo,
oltre alla richiesta di interruzione, generi un
codice che ne permetta lidentificazione da
parte del processore;
la realizzazione hardware pi veloce di quella
software.
Architettura degli Elaboratori 1

39

39

2008

Gerarchia di priorit

10

Le richieste di interruzione provenienti da dispositivi con


esigenze di tempo reale pi critiche, devono essere
39
servite con priorit superiore alle altre;
lesigenza di distinguere la priorit delle richieste si
manifesta in due circostanze:
se sono contemporaneamente presenti pi richieste,
quando si verifica uninterruzione: vanno servite prima
quelle con pi alta priorit;
quando viene richiesta (unaltra) interruzione durante
lesecuzione di una RSI: la RSI va interrotta solo se
la nuova richiesta ha pi alta priorit;
anche questo aspetto pu avere una soluzione hardware
(pi veloce), oppure software (pi lenta).
Architettura degli Elaboratori 1

Efficienza dei sistemi di interruzione

2008

11

lefficienza di un sistema di interruzione legata


alla rapidit con cui il processore in grado di 39
intervenire, in seguito alla segnalazione che un
dispositivo pronto, per eseguire le istruzioni
richieste dal relativo protocollo di I/O;
lefficienza di un sistema di interruzione
particolarmente importante nelle applicazioni con
esigenze di tempo reale critiche.

Architettura degli Elaboratori 1

2008

Un semplice sistema di interruzione

12

viene ora presentata una possibile realizzazione del


sistema di interruzione, nella quale lhardware si limita 39
a fornire le funzioni minime per risolvere i tre problemi
descritti;
la gran parte delle funzionalit richieste sono realizzate
dal software (tramite lesecuzione della routine di servizio,
o di un preambolo ad essa);
il sistema di interruzione che si ottiene sar molto
inefficiente;
in seguito si presenteranno possibili realizzazioni pi
efficienti, nelle quali la soluzione dei tre problemi indicati
assicurata dallhardware.
2008

Architettura degli Elaboratori 1

Generazione di richiesta di interruzione


la richiesta di interruzione (IRQ) ha origine dal
registro STATUS che, nellinterfaccia del dispositivo,
segnala quando esso pronto;
il registro IM consente di abilitare o disabilitare la
generazione di IRQ da parte del dispositivo;
il registro I consente al processore di accettare o
meno IRQ.

Architettura degli Elaboratori 1

elementi aggiunti)

13

39

2008

Funzioni minime fornite dallHW


Al verificarsi di una interruzione, lHW deve provvedere
almeno a:
1. commutare la sola porzione di contesto costituita
dai registri SR e PC:
SR push
PC push
2.commutare al valore 0 il registro I per impedire che si
verifichino altre interruzioni:
0 I
3.inserire, nel PC, lindirizzo della routine di servizio
(collocata, ad es a partire dallindirizzo 0)
0 PC
(in questo modo, tutte le interruzioni attivano la stessa
routine-preambolo, situata a partire da M[0])

14

39

2008

Architettura degli Elaboratori 1

Pi richieste di interruzione

15

pi richieste di interruzione, provenienti da dispositivi


diversi, potrebbero venir raccolte da una porta OR ...

39

elemento aggiunto)

Schema con pi richieste di interruzione


Architettura degli Elaboratori 1

2008

Ritorno al programma interrotto


per ripristinare il contesto del programma
interrotto, lHW deve eseguire le seguenti
operazioni:
pop PC
pop SR

Architettura degli Elaboratori 1

Al resto . . . deve provvedere il SW

16

39

2008

17

la commutazione degli altri elementi del contesto


(registri, ) pu essere realizzata eseguendo apposite
istruzioni della RSI che verr attivata;
39
lidentificazione dellinterruzione si pu ottenere
collocando nella routine-preambolo (allindirizzo 0) una
sequenza di istruzioni che esamina lo stato dei dispositivi
(polling) per individuare quello da servire ed attivare la
RSI specifica;
lordine con cui vengono esaminati i dispositivi nella
sequenza di polling realizza il primo dei due aspetti della
gerarchia di priorit (la scelta della richiesta da servire
in presenza di richieste contemporanee);
il secondo aspetto (la interrompibilit) pu essere
realizzato inserendo nella RSI istruzioni che impostino
(previo salvataggio e successivo ripristino) lo stato dei
registri IM di tutti i dispositivi: IM=1 solo in quelli
considerati a priorit maggiore.
Architettura degli Elaboratori 1

2008

Organizzazione del SW

18

il servizio di una interruzione comprende lesecuzione della routinepreambolo e lesecuzione della RSI specifica; le operazioni che
devono essere eseguite sono:

Routine-preambolo:

39

completamento della commutazione del contesto,


identificazione dellinterruzione (polling),
attivazione della RSI specifica;

RSI specifica:

completamento della commutazione del contesto, compreso


leventuale nuovo stato di interrompibilit;
esecuzione delle operazioni richieste dal dispositivo
(protocollo di I/O); ci deve avere come effetto la
rimozione della IRQ;
ripristino di tutto il contesto salvato via software (anche
quello salvato dalla routine-preambolo);
esecuzione della istruzione RTI (con cui si ripristina il
contesto salvato dallHW).
2008

Architettura degli Elaboratori 1

Elementi HW per il sistema di interruzione

19

39

(
elementi aggiunti)

Architettura degli Elaboratori 1

Modulo di interfaccia con laggiunta


di una semplice logica di interrupt

2008

Gerarchia di priorit

20

Con il semplice hardware descritto, possibile prevedere


anche una organizzazione del software tale da istituire
una gerarchia di priorit tra i dispositivi allo scopo di:
stabilire quale dispositivo debba essere servito per
primo, in caso di richieste contemporanee di
interruzione: ci si ottiene definendo lordine di
esame dei dispositivi nella sequenza di polling;
prevedere che una RSI possa essere a sua volta
interrotta da dispositivi prioritari: ci si ottiene:
1. impostando i valori opportuni nei registri IM dei
dispositivi:

39

IM=1 in quelli prioritari, che possono interrompere,


IM=0 in quelli che non devono poter interrompere;

2. strutturando la RSI nel modo indicato nella


prossima slide
Architettura degli Elaboratori 1

Sistemi di interruzione pi efficienti


sistemi di interruzione pi efficienti si
ottengono realizzando da hardware le
varie funzioni:
commutazione del contesto:
set multipli di registri;
identificazione delle interruzioni:
interrupt vettorizzati;
gerarchia di priorit:
linee di interruzione diverse.
Architettura degli Elaboratori 1

2008

21

39

2008

Set multipli di registri

22

se N sono i livelli di priorit, con N set di registri


dellALU (fisicamente distinti), si pu evitare di salvare
nello stack i registri usati dalla RSI;
quando si verifica una interruzione di livello i, si attiva il
set di registri i-esimo (associati a quel livello):
tutti i riferimenti ai registri vengono mappati sul
nuovo set,
il contenuto dei registri del set precedentemente
attivo rimane inalterato, senza bisogno di salvarli;
un esempio (anche se parziale) di set multipli di registri
si ha nel processore ARM, in cui di alcuni registri
esistono copie riservate per i diversi modi operativi :
SP e LR per i modi Supervisore,
R8 R12 per il modo Fast-Interrupt.

39

2008

Architettura degli Elaboratori 1

Schema per interrupt vettorizzati

23

39

(
Architettura degli Elaboratori 1

elementi aggiunti)
2008

Interrupt vettorizzati

24

al verificarsi di una interruzione, il processore genera il


segnale IACK=1, che attraversa, ad una ad una (daisy
chain), le interfacce dei vari dispositivi; la logica dello
schema fa s che:

39

il dispositivo che riceve IACK=1, se non sta generando una


IRQ, inoltra IACK=1 inalterato al dispositivo successivo;
il dispositivo che riceve IACK=1, se sta generando una
IRQ, inoltra IACK=0 al dispositivo successivo e invia sulle
linee dati il contenuto del registro IVN (Interrupt
Vector Number), codice che identifica il dispositivo;
il dispositivo che riceve IACK=0, inoltra comunque IACK=0
inalterato al dispositivo successivo;

pertanto al segnale IACK=1 generato dal processore


risponde (con il proprio IVN) uno e un solo dispositivo
tra quelli che stanno generando una IRQ: quello che
viene incontrato per primo nella daisy chain.
Architettura degli Elaboratori 1

Vettore di puntatori alle RSI - 1

2008

25

in un sistema di interrupt vettorizzati, il codice


IVN che il processore riceve in risposta al
39
segnale IACK=1 identifica il dispositivo e
consente di attivare direttamente la sua RSI;
ad esempio, supponendo che IVN sia da 8 bit
(max 256 dispositivi diversi), i puntatori
(ciascuno da 4 byte) alle 256 RSI potrebbero
essere collocati nel primo Kbyte della RAM
(vettore di puntatori alle RSI);
il puntatore alla RSI associata al dispositivo con
IVN = h va situato allindirizzo h 4 della RAM.
Architettura degli Elaboratori 1

2008

Vettore di puntatori alle RSI - 2

26

le operazioni eseguite dallhardware al


verificarsi di una interruzione, nel
39
sistema di interrupt vettorizzati
descritto, sono:
SR push
PC push
0
I
1
IACK
L[IVN
4]
PC
e portano ad attivare immediatamente la
RSI del dispositivo da servire.
Architettura degli Elaboratori 1

2008

Interruzioni interne

27

oltre alle interruzioni provocate dai dispositivi


esterni, con le quali i dispositivi chiedono un
servizio al processore, ve ne sono altre, dette
interruzioni interne, che sono provocate da
eventi che si verificano allinterno del
processore;
vi sono due tipi di interruzioni interne:
le interruzioni provocate da eventi
eccezionali (trap),
le interruzioni software (system call).
Architettura degli Elaboratori 1

39

2008

Eventi eccezionali che generano trap


Hardware failure (parity error, ecc.),
Zero divide,

28

39

Istruzione illecita (violazione di privilegio),


Istruzione inesistente,
Accesso a word con indirizzo dispari,
Esecuzione con modalit trace,

Power failure,
Bus error,

Architettura degli Elaboratori 1

Interruzioni software

2008

29

le interruzioni software sono generate da apposite


istruzioni, il cui scopo solo quello di provocare una
39
interruzione;
realizzano il meccanismo di chiamata al sistema operativo
e, per questo, vengono chiamate anche system call;
rispetto alla modalit normale di richiamare le subroutine
per richiedere servizi, per quelli che implicano laccesso a
risorse critiche, che non devono essere accessibili ai
programmi utente, la system call realizza la necessaria
separazione tra il programma richiedente e il SO:
non necessario che nel programma sia specificato
lindirizzo della routine del SO da attivare ( bene che
non lo conosca e che non possa accedervi);
nel momento in cui viene eseguita una system call, il
programma perde il controllo del processore.
Architettura degli Elaboratori 1

2008

Fine
07.a

Sistemi di interruzione

Testo di rif.to:
[Congiu] - 8.1-8.3 (pg. 241250)

08.a

DMA
Accesso Diretto alla Memoria
Motivazioni
Organizzazione dei trasferimenti DMA
Arbitraggio del bus di memoria
Trasferimento di un blocco di dati
Sistemi multiprocessore

Programmazione dellI/O: confronti

tempo di risposta = tempo trascorso tra listante in


cui il dispositivo diviene pronto (STATUS=1) e listante
in cui il processore inizia ad eseguire le istruzioni di
I/O richieste dal relativo protocollo;
programmazione con i cicli di attesa (busy waiting):
svantaggio: uso inefficiente del processore;
vantaggio: tempo di risposta minimo (1 istruzione);
programmazione tramite le interruzioni:
vantaggio: uso efficiente del processore;
svantaggio: ritardo nella risposta (necessit di
salvare il contesto, riconoscere linterruzione,
attivare la RSI, prima di poter eseguire le
istruzioni di I/O).
Architettura degli Elaboratori 1

13

2007

Limiti dellI/O tramite interruzioni

si consideri una RSI (routine di servizio delle


interruzioni) la cui esecuzione richieda 10 s;

13

tenendo presente il fatto che una RSI non pu


essere rientrante (per esserlo, ad ogni sua
attivazione dovrebbe operare su dati diversi;
invece opera sempre sugli stessi registri del
medesimo dispositivo),
e che, pertanto, non pu essere interrotta dal
medesimo dispositivo che ne ha provocato
lattivazione;

il periodo di tempo tra due trasferimenti


consecutivi non pu essere inferiore a 10 s.
Architettura degli Elaboratori 1

Limiti dellI/O tramite interruzioni

2007

velocit di trasferimento dati (data rate) = numero di dati


trasferiti in un secondo;
nellesempio precedente (RSI da 10 s) la massima
13
velocit di trasferimento dati consentita di 100
Kdati/secondo:
- se il dispositivo trasferisce dati a una velocit
superiore, il processore non riesce a starci dietro:
perdita di dati;
- se il dispositivo trasferisce dati alla massima velocit
consentita (100 Kdati/secondo), il processore impegna il
100% del suo tempo per gestire il trasferimento:
mentre dura il trasferimento dei dati, il processore
non fa altro;
- se il dispositivo trasferisce un dato ogni 12,5 s, alla
velocit di 80 Kdati/s: il processore impegna l80% del
suo tempo.
per gestire dispositivi con data rate superiori a 100
Kdati/s, il metodo delle interruzioni non va bene.
Architettura degli Elaboratori 1

2007

Accesso diretto alla memoria

per gestire dispositivi con data rate superiori a


100 Kdati/s, necessario usare il metodo
dellaccesso diretto alla memoria
(DMA Direct Memory Access);

13

si tratta di un diverso meccanismo di I/O: i dati


vengono trasferiti autonomamente dal dispositivo,
che accede direttamente alla memoria, senza
lintervento del processore;
come organizzare un meccanismo di questo tipo?

Architettura degli Elaboratori 1

Operazioni per trasferire un dato


il trasferimento di un blocco di dati da (o verso) un

2007

dispositivo esterno richiede che, ad ogni dato che viene


13
trasferito, siano effettuate le seguenti operazioni:
trasferimento del dato dal registro data buffer ad una
locazione di memoria (o viceversa);
incremento di un puntatore, in modo che punti alla
posizione da cui (o in cui) verr trasferito il dato
successivo;
aggiornamento di un contatore (di solito un decremento)
se il trasferimento gestito utilizzando le interruzioni,
queste operazioni sono realizzate dal processore con
lesecuzione di istruzioni inserite nella routine di servizio;
si tratta, per, di operazioni piuttosto semplici, che possono
essere eseguite da un hardware molto semplice (non serve
la complessit di un processore).
Architettura degli Elaboratori 1

2007

DMA controller

Lhardware che esegue quelle operazioni un DMA


controller ; esso affianca il dispositivo, come
rappresentato in figura:

13

Schema per i
trasferimenti via DMA

Architettura degli Elaboratori 1

2007

DMA controller

il DMA controller rappresentato in figura comprende

due registri:
13
CAR (Current Address Register), che contiene un
puntatore alla locazione di memoria da cui (o in cui)
verr trasferito il prossimo dato;
WC (Word Count), che funge da contatore e indica il
numero di dati che rimangono da trasferire;
il DMA controller accede alle linee del bus di memoria e
pu effettuare operazioni di lettura e scrittura;
poich le medesime linee del bus di memoria sono anche
usate dal processore, lhardware deve realizzare una
funzione di arbitraggio delle richieste di accesso al
bus: per evitare conflitti, laccesso al bus pu aver
luogo solo dopo aver ottenuto il consenso dellarbitro.
Architettura degli Elaboratori 1

2007

Trasferimento di un blocco di dati

Sequenza di eventi che controlla il trasferimento di un


blocco di dati con modalit DMA:
1. il processore invia nei registri CAR e WC associati al
dispositivo, le informazioni che definiscono il
trasferimento da effettuare (indirizzo dellarea di
memoria interessata dal trasferimento, numero di
dati del blocco da trasferire);
2. il processore invia il segnale START (con cui
comanda il trasferimento dellintero blocco di dati);
da questo momento in poi il processore non
interviene pi nel trasferimento dei singoli dati, che
viene operato autonomamente dal dispositivo e dal
DMA controller;

Architettura degli Elaboratori 1

13

2007

Trasferimento di un blocco di dati

3. quando il dispositivo pronto a trasferire un dato,


hanno luogo lo scambio di informazioni e le operazioni
indicate nel seguente schema:

13

4. quando lultimo dato del blocco stato trasferito, il


DMA controller genera una richiesta di interruzione,
che segnala al processore che il comando (di trasferire
lintero blocco di dati) stato eseguito.
Architettura degli Elaboratori 1

2007

Arbitraggio del bus

10

13

Il processore fa da arbitro e d la precedenza al (ai) DMA


Architettura degli Elaboratori 1

Sistemi multiprocessore

2007

11

Si visto come sia possibile, con una opportuna


logica di arbitraggio, consentire a qualcun altro (il 13
DMA controller) di accedere alla medesima
memoria cui accede il processore;
Questo qualcun altro potrebbe possedere un
hardware pi sofisticato di un DMA controller ed
essere anche un altro processore (con il proprio
PC, IR, ecc., in grado di eseguire le istruzioni di
un programma residente nella medesima memoria,
in parallelo a quello eseguito dal processore
principale).
Architettura degli Elaboratori 1

2007

Sistemi con processori ausiliari

12

Ci consente, ad esempio di affiancare alla CPU uno (o


pi) processori ausiliari, dedicati a funzioni specializzate
(gestione di grafica video, elaborazioni multimediali, );
spesso conviene che i processori ausiliari abbiano anche
una memoria locale (per ridurre il traffico su quella
condivisa).

13

Sistema multiprocessore
con PU Specializzati

MEMORIA
LOCALE

2007

Architettura degli Elaboratori 1

Sistemi multiprocessore simmetrici

13

In alcune circostanze risultano utili configurazioni con


processori paritetici, con cui si ottiene, oltre alla
maggior potenza di calcolo dovuta al parallelismo, anche
la possibilit di ripartire il carico in modo dinamico, una
buona tolleranza ai guasti,

13

Sistema multiprocessore
con PU Equivalenti

mem. loc.

mem. loc.

Architettura degli Elaboratori 1

mem. loc.
2007

Fine
08.a

DMA - Accesso Diretto alla Memoria

Testo di riferimento:
[Congiu] 9.1-9.3 (pg. 253264)

Tecniche di parallelismo, processori RISC


09.a

Pipelining
Altre tecniche di parallelismo
Processori superscalari
Caratteristiche dei processori RISC
Esempi di processori RISC

Fasi per elaborazione di un istruzione

IF (Instruction Fetch)
Lettura dell'istruzione da memoria, incremento PC
ID (Instruction Decode)
Decodifica istruzione e prelievo operandi da registri
EX (Execution)
Esecuzione dell'istruzione
MEM (Memory)
Accesso in memoria (scrittura o lettura, solo per certe
istruzioni
WB (Write Buffer)
Scrittura del risultato nel registro opportuno (register file)

Architettura degli Elaboratori

32

2009

Pipelining

Se le fasi sono eseguite da sezioni indipendenti di


hardware, possono essere tutte contemporaneamente
attive (su istruzioni diverse)

32

transitorio

Dopo il transitorio: istruzione completata ad ogni stadio


Architettura degli Elaboratori

Hardware in pi
Nuovi registri fra ogni stadio del pipeline per
memorizzare i risultati parziali di ogni ciclo.

Architettura degli Elaboratori

2009

32

2009

Evoluzione

32

Architettura degli Elaboratori

2009

Pipelining: esempio numerico

32

Se le 4 fasi sono eseguite da 4 sezioni indipendenti di


hardware, possono essere tutte 4 contemporaneamente
attive (su istruzioni diverse):

Da T3 in poi viene completata una istruzione ogni 20 ns.

Architettura degli Elaboratori

2009

Pipelining: vantaggi

Il tempo richiesto per lesecuzione di un


programma di N istruzioni con la tecnica del
pipelining descritta nella figura precedente
pari a:
TE = 80 + 20

32

(N - 1) ns

Senza pipeline il tempo necessario sarebbe:


TE = 80

N ns

Per N abbastanza grande, il pipeline riduce il


tempo di esecuzione di un fattore 4.
Architettura degli Elaboratori

2009

Pipelining: fattore di speed-up

Fattore di speedup SK: indica quanto pi veloce luso di un


pipeline rende lesecuzione di un programma (ovvero di quanto
viene ridotto il tempo di esecuzione), rispetto al caso in cui il
pipeline sia assente:

32

TK = tempo di esecuz. di N istruzioni con pipeline di k fasi,


T1 = tempo di esecuz. di N istruzioni senza pipeline;
fattore di speedup SK:
SK = T1/TK = (NkT ) / [kT + (N-1)T ] = Nk / (k+N-1 )
k = numero di fasi del pipeline,
T = tempo di esecuzione di una fase.
Per N grande, SK tende ad essere uguale a k.
quando k grande (> 8) il processore si dice superpipelined.
Architettura degli Elaboratori

2009

SuperPipeline

Incremento della lunghezza del pipeline per aumentare


la velocit di esecuzione del singolo stadio (riduzione tk)
Se lo stadio ALU ha una durata superiore rispetto agli
altri moduli, considero stadi ALU separati per ridurre il
tempo sprecato dagli stadi pi brevi
necessaria una unit di controllo pi complicata per
gestire il pipeline e gli inceppamenti

32

Intel Pentium 4 - superpipeline con 20 stadi

Architettura degli Elaboratori

2009

Inceppamento del pipeline

Il fattore di speedup Sk un valore teorico


raggiunto solo se il pipeline opera, a regime,
avviando sempre, ad ogni periodo del clock, una
nuova istruzione (e completandone una):
in realt il pipeline pu incepparsi (subire un
pipeline stall ) per problemi dovuti a:
accessi alla memoria (cache miss),
conflitti dei dati (data hazard),
conflitti di salto (branch hazard);
in conseguenza a questi stall, il fattore di
speedup si riduce.
Architettura degli Elaboratori

32

2009

Cache miss

10

Le fasi di fetch e di accesso a operandi/risultati hanno una


durata pari alle altre fasi (un periodo di clock), solo se gli
accessi alla memoria si risolvono nella cache (cache hit). 32
In caso di cache miss, loperazione pu richiedere 2 o 3
periodi di clock; di conseguenza il pipeline si inceppa
(subisce uno stall ) e lesecuzione delle istruzioni viene
ritardata, come indicato nel seguente diagramma temporale:

Architettura degli Elaboratori

Data hazard

2009

11

Data hazard (conflitto dei dati): si verifica quando gli


operandi di una istruzione sono i risultati dellistruzione 32
precedente;
in tal caso lesecuzione dellistruzione non pu procedere
e lesecuzione subisce un ritardo (pipeline stall) (di 2
periodi di clock nellesempio di figura):

Architettura degli Elaboratori

2009

Rimedi contro i data hazard


I data hazard possono essere evitati dal compilatore, con un
riordino delle istruzioni (per eseguire altre istruzioni prima
di quella cui servono i dati);
le conseguenze negative di un data hazard possono essere
ridotte dal processore, con la tecnica del by-pass (detta
anche data-forwarding): i risultati prodotti dallALU vengono
inoltrati allo stadio successivo del pipeline, in contemporanea
alla (e senza attendere la) loro memorizzazione:

Architettura degli Elaboratori

Branch hazard

12

32

2009

13

Branch hazard (conflitto dei salti): si verifica


nelle istruzioni di salto condizionato, quando
32
(prima di conoscere se il salto verr effettuato)
il pipeline viene alimentato con le istruzioni della
diramazione che non sar intrapresa;
in tal caso necessario:
svuotare il pipeline,
annullare gli effetti delle istruzioni che ne
hanno percorso indebitamente alcune fasi,
ri-alimentare il pipeline con le istruzioni
dellaltra diramazione.
Architettura degli Elaboratori

2009

Gestione dei branch hazard

14

Per gestire correttamente un branch hazard si pu:

ritardare il pipeline (stall): il pipeline non


viene alimentato fino a che, valutati gli
effetti dellistruzione precedente, (dai quali
spesso dipende la condizione di salto), la
diramazione da intraprendere risulta nota;
cos lesecuzione subisce sempre un ritardo;
cercare di evitare questo ritardo usando
tecniche di:

32

delayed branch (salto ritardato),


branch prediction (predizione del salto).

Architettura degli Elaboratori

Delayed branch

2009

15

La tecnica prevede che il processore esegua


comunque una ulteriore istruzione (successiva a 32
quella di salto) prima di intraprendere il salto;
il compilatore pu allora riordinare le istruzioni
in modo da collocarne una (da eseguire comunque)
dopo ogni istruzione di salto;
se non riesce a trovare una istruzione di questo
tipo, il compilatore inserisce, dopo listruzione di
salto, una NOP (comporta un ritardo, ma evita di
avviare lesecuzione di istruzioni che non devono
essere eseguite).
Architettura degli Elaboratori

2009

Branch prediction

16

La predizione dei salti (branch prediction) pu essere:


statica: stabilita dal compilatore: ad es. i salti
32
allindietro nelle iterazioni vengono (quasi) sempre
intrapresi;
dinamica: stabilita dal processore sulla base della
storia precedente (stimando che la prossima volta
venga intrapresa la diramazione presa pi volte in
passato);
il processore utilizza a questo scopo una cache veloce
contenente (su CAM) gli indirizzi delle istruzioni di salto
il PC viene confrontato con gli indirizzi nella CAM;
comunemente usata una di queste due organizzazioni:
BHT (Branch History Table), in cui ciascun elemento indica
solo se il salto va intrapreso oppure no;
BTB (Branch Target Buffer), che contiene anche, per ciascun
elemento, direttamente lindirizzo a cui saltare.

Architettura degli Elaboratori

Altre tecniche di parallelismo

2009

17

32

Superscalarit

Speculative execution
Out of order execution
VLIW (Very Long Instruction Word)
Register renaming
SIMD (Single Instruction Multiple Data)

Architettura degli Elaboratori

2009

Superscalarit

18

Le tecniche superscalari, che negli anni 60


erano usate solo nei supercomputer (> 1M$) sono
ora impiegate anche nei desktop, grazie al
numero elevato di transistor/chip reso possibile
dalla tecnologia di integrazione.
Il termine superscalare vuole indicare che
questa tecnica consente di andar oltre
laumento di velocit reso possibile dalla
riduzione di scala (delle dimensioni dei
componenti) nella tecnologia di integrazione dei
microprocessori.
Architettura degli Elaboratori

32

2009

Processori superscalari

19

Un processore superscalare usa pi di un pipeline, in


modo da poter avviare lesecuzione di pi istruzioni in
parallelo, quando le circostanze lo consentono.

32

Un processore superscalare con N pipeline


potenzialmente N volte pi veloce del suo equivalente
con pipeline singola.
La potenzialit di una CPU superscalare sfruttata
appieno solo se il codice che viene eseguito
caratterizzato da un alto grado di parallelismo a livello
di istruzioni (Instruction Level Parallelism - ILP);
altrimenti le prestazioni non differiscono molto da
quelle di una CPU tradizionale.

Architettura degli Elaboratori

2009

Prestazioni dei processori superscalari

20

In funzione delle caratteristiche del codice che


viene eseguito e del numero di pipeline,
lincremento di velocit ottenuto con la
superscalarit, rispetto ad una CPU con pipeline
singolo, ha valori comunemente compresi tra il
50% e il 500%;
per ottenere buone prestazioni molto
importante individuare le possibilit di ILP nel
codice che deve essere eseguito;
nei processori superscalari attuali, una porzione
significativa dellhardware (area di silicio) viene
usata a questo scopo.
Architettura degli Elaboratori

2009

Esempi storici di processori superscalari


Intel Pentium-I:
2-way superscalar (1993).
Sun SuperSPARC/Viking:
3-way superscalar (1993).
Intel Pentium-II/III:
5-way superscalar (1996-1999).
AMD Athlon/K7:
9-way superscalar (1999).

Architettura degli Elaboratori

32

21

32

2009

Speculative execution

22

Il termine esecuzione speculativa (speculative


execution) talvolta usato per indicare il fatto che il
processore esegue contemporaneamente, su 2 pipeline,
entrambi i flussi di istruzioni delle due diramazioni di
un salto condizionato, scartandone uno quando il valore
della condizione di salto divenuto noto;

32

lesecuzione speculativa comporta un notevole impiego


di risorse hardware, dal momento che vengono eseguiti
due flussi di istruzioni per raccogliere i risultati di uno
solo;
lIntel Pentium Pro/II/III un esempio storico di
processore con speculative execution.
Architettura degli Elaboratori

2009

Out of order execution

23

Per le istruzioni tra le quali non vi sono dipendenze,


non necessario che lesecuzione avvenga nello stesso
ordine con cui esse si trovano in memoria;
pu essere conveniente alterare questo ordine (out of
order execution) in modo da inserire lesecuzione di
queste istruzioni, prive di dipendenze, tra quelle che
presentano dipendenze, al fine di evitare inceppamenti
(stall ) dei pipeline;
lesecuzione fuori ordine consente di sfruttare
maggiormente i pipeline di un processore
superscalare;
per evitare incongruenze, i risultati prodotti dalle
istruzioni sono solitamente scritti (in memoria o nei
registri) secondo lordine originario delle istruzioni.
Architettura degli Elaboratori

32

2009

Very Long Instruction Word (VLIW)

24

La tecnologia VLIW, utilizzata in alcuni processori


superscalari, prevede che istruzioni (indipendenti) la cui
esecuzione pu essere avviata contemporaneamente
vengano raggruppate in una unica istruzione;
ciascuna istruzione VLIW specifica pertanto pi operazioni
da eseguire su distinti operandi da parte di pi pipeline;
responsabilit del compilatore individuare le possibilit di
ILP (parallelismo a livello di istruzioni) e raggruppare in
ununica VLIW le istruzioni indipendenti;
rispetto ai processori superscalari privi di VLIW, nei quali la
individuazione e lo sfruttamento dellILP compito dellHW,
quelli con VLIW hanno un hardware pi semplice;
le prestazioni di un processore VLIW dipendono fortemente
dalla qualit del compilatore.
Architettura degli Elaboratori

CPU tradizionale vs. VLIW

32

2009

25

32

Architettura degli Elaboratori

2009

Emulazione di CISC con VLIW

26

La tecnologia VLIW viene anche usata per emulare con


processori RISC le istruzioni di vecchi processori CISC
o RISC (backward compatibility);
per ottenere ci si usano metodi di traduzione dinamica,
con i quali le istruzioni CISC o RISC vengono tradotte in
una singola istruzione VLIW, via software, durante
lesecuzione;
per velocizzare la traduzione, i processori VLIW
mantengono in una cache veloce le traduzioni da
CISC/RISC a VLIW;
ovviamente la hit rate di questa translation cache molto
importante;
lIA-64 Itanium dellIntel e il Crusoe della Transmeta
sono due esempi di processori con tecnologia VLIW;
(chiamata EPIC - Explicit Parallel Instruction Computing da
Intel e code morphing da Transmeta).
Architettura degli Elaboratori

2009

Register renaming

27

Nellesecuzione fuori ordine delle istruzioni,


pu accadere che istruzioni indipendenti non
possano essere eseguite in parallelo perch
usano o modificano lo stesso registro.
Per sfruttare la possibilit di parallelismo
anche in questi casi, il processore pu essere
dotato di una gran quantit di registri cui
vengono assegnati i nomi dinamicamente, per
cui a due istruzioni che usano lo stesso registro
il processore pu assegnare due registri fisici
diversi (sistemando le cose alla fine).
Architettura degli Elaboratori

32

32

2009

Single Instruction Multiple Data (SIMD)


Una istruzione opera le medesime elaborazioni,
simultaneamente, su un insieme di dati.
Questa possibilit utile negli algoritmi di
elaborazione di immagini (le stesse
trasformazioni operate su tutti i pixel),
nellelaborazione dei segnali e, in generale, nelle
applicazioni multimediali.

28

32

Esempio:
istruzioni MMX (Multi Media Extension) e SSE
(Streaming SIMD Extension) nelle CPU x86.
Architettura degli Elaboratori

2009

CISC vs. RISC

29

CISC: Complex Instruction Set Computer


RISC: Reduced Instruction Set Computer
Per un programma di NI istruzioni, eseguito da un
processore che impiega in media CI periodi di clock (TC)
per eseguire una istruzione, il tempo di esecuzione TE :
TE = NI CI TC

32

Entrambe le architetture CISC e RISC perseguono lobiettivo


di ridurre i tempi di esecuzione dei programmi:

CISC cercando di ridurre NI (poche istruzioni


potenti, la cui esecuzione pu richiedere molti periodi
di clock CI);
RISC cercando di ridurre CI (molte istruzioni
semplici, eseguite velocemente, in pochi periodi di
clock CI).

Architettura degli Elaboratori

2009

CISC

30

La facilit con cui in un processore microprogrammato


si possono definire nuove istruzioni, ha portato a
32
processori dotati di istruzioni complesse, tali da
eseguire, con ununica istruzione, pi operazioni che
altrimenti richiederebbero pi istruzioni di macchina
(allo scopo di ridurre NI);
il risparmio di tempo ottenuto evitando le operazioni di
fetch di queste ultime pu essere decisamente pi
consistente del tempo richiesto per gli accessi,
ancorch numerosi, alla memoria di controllo;
questultima affermazione era vera fintanto che i
tempi di accesso alla RAM erano molto pi lunghi di
quelli per laccesso alla memoria di controllo.
Architettura degli Elaboratori

2009

RISC

31

Istruzioni con struttura il pi possibile uniforme, tale


da garantire che il loro prelievo e la loro esecuzione
avvengano in un numero costante e piccolo di periodi
di clock (lo scopo di ridurre CI );
istruzioni progettate per sfruttare bene i pipeline;
niente microcodice (responsabile della variet nel
numero di cicli di clock necessari per eseguire
istruzioni diverse);
il 20% delle istruzioni CISC svolge l80% del lavoro
(regola dell80/20): lobiettivo dei RISC di essere
capaci di eseguire solo questo 20% ma velocemente
(le operazioni eseguite dal rimanente 80% vengono
realizzate tramite combinazioni delle prime)
Architettura degli Elaboratori

32

2009

Caratteristiche dei processori RISC

32

Pochissime forme di indirizzamento utilizzate (spesso solo


quella diretta di registro e auto-relativa): le forme di
indirizzamento sofisticate richiedono word di estensione,
comportano istruzioni di diversa lunghezza e un numero
variabile di cicli di clock per la loro esecuzione;
accessi in memoria consentiti solo a pochissime istruzioni
(load e store);
un numero di registri elevato (per diminuire la necessit di
accedere alla memoria);
le istruzioni che accedono alla memoria richiedono un
periodo di clock e una fase di pipeline in pi: i rallentamenti
che ne derivano sono drasticamente ridotti dalla presenza
di memoria cache veloce ed efficiente;
anche lordinamento delle istruzioni (prodotto dai
compilatori) tale da evitare fenomeni di data hazard.
Architettura degli Elaboratori

Confronto RISC vs/ CISC

32

2009

33

32

Architettura degli Elaboratori

2009

Vantaggi dellimpostazione RISC

34

Il progresso tecnologico nella velocit delle RAM e nelle


memorie cache ha ridotto i tempi di accesso alla
32
memoria centrale e ha reso meno significativo
il vantaggio della microprogrammazione;
il progresso nelle tecniche di parallelismo dellhardware
ha portato ad usare meccanismi (pipeline, etc) che
producono risultati migliori se le istruzioni hanno tutte la
stessa lunghezza e vengono eseguite nello stesso numero
di periodi di clock;
il progresso nelle tecniche di ottimizzazione dei
compilatori ha portato a produrre codice che sfrutta
bene le risorse del processore che consentono il
parallelismo (registri, cache, pipeline, ).
Architettura degli Elaboratori

2009

CISC vs. RISC

35

Nonostante tutti i vantaggi dei RISC, il numero

di processori CISC esistenti al mondo almeno 32


1000 volte maggiore di quello dei processori
RISC;
gli embedded computer (negli elettrodomestici,
nelle automobili, nelle fotocopiatrici, etc.) hanno
quasi sempre un chip CISC al loro interno: la
potenza e le prestazioni dei processori RISC
semplicemente non servono in quelle applicazioni;
anche tra i calcolatori il numero di macchine con
istruzioni CISC almeno 20 volte superiore a
quello delle macchine con istruzioni RISC.
Architettura degli Elaboratori

2009

x86: CISC o RISC?

36

Larchitettura x86 di tipo CISC, ma allinterno

dei moderni processori x86 le unit di calcolo


eseguono istruzioni RISC (che consentono di
sfruttare le possibilit di parallelismo presenti
nellhardware);
le istruzioni di macchina CISC del programma da
eseguire vengono convertite dallhardware in
sequenze di istruzioni RISC (chiamate ops
dallIntel e R-ops dallAMD); sono queste ultime
ad essere effettivamente inviate ai pipeline.
Architettura degli Elaboratori

32

2009

Esempi di processori CISC

37

CISC:

32

Digital: VAX, PDP-11,


Intel: x86 (fino al Pentium),
Motorola: 68000.

CISC con conversione interna a RISC:


Intel: Pentium II/III/4, Core 2, Atom, Core i7
AMD: Athlon, K6, K8.

Architettura degli Elaboratori

2009

Esempi di processori RISC

38

RISC:
desktop e server:

32

Silicon Graphics: MIPS,


Sun Microsystems: SPARC,
Digital: Alpha,
Hewlett Packard: PA-RISC,
IBM e Motorola: PowerPC,
Intel: i860, i960.

embedded:
Advanced RISC Machines: ARM,
Hitachi: SuperH,
Mitsubishi: M32R,
Silicon Graphics: MIPS16.
Architettura degli Elaboratori

2009

Fine
09.a

Le architetture RISC

PXA255: concetti avanzati


10.a

C. Fantozzi, A. Gardich
(revisione di S. Congiu)

PXA255: il nucleo

33

Architettura degli Elaboratori 1

2007

PXA255: memorie cache

Uno dei principali colli di bottiglia nei moderni


calcolatori linadeguata velocit del sistema di
memoria
La presenza di cache fondamentale per
ottenere prestazioni elevate

33

Il processore PXA255 contiene:


una cache istruzioni da 32 KB
una cache dati da 32 KB
due mini cache e molteplici buffer
Architettura degli Elaboratori 1

Cache istruzioni

2007

32 set disponibili, associativa a 32 vie


33
Lunghezza di linea: 32 Byte
Dimensione totale: 32 32 32=32768 Byte (32 KB)
1 bit di parit e 1 valid bit per linea
Politica di rimpiazzo FIFO (round robin)
Meccanismo di locking di singole linee
Mini-Instruction cache di 2 KB
Architettura degli Elaboratori 1

2007

Cache istruzioni: figura

33

Architettura degli Elaboratori 1

Cache: effetto del locking

2007

33

Architettura degli Elaboratori 1

2007

Cache dati

32 set, associativa a 32 vie, 32 KB totali


1 valid, 1 parity e 2 dirty bit per linea 33
Politica di rimpiazzo FIFO (round robin)
Due strategie di aggiornamento memoria
Write-through: scrivi subito
Copy-back: aspetta rimozione linea
Meccanismo di locking di singole linee
Mini-Data cache di 2 KB
Architettura degli Elaboratori 1

Cache dati: figura

2007

33

Architettura degli Elaboratori 1

2007

Mini cache

Mini-Instruction cache (2 KB)


32 set, associativa a 2 vie, 32 byte/linea
33
Valori caricabili solo tramite JTAG
Usata nel debugging
Mini-Data cache (2 KB)
32 set, associativa a 2 vie, 32 byte/linea
Lunghezza di linea: 32 byte
Stessi bit, stesse politiche della cache dati
Nessun meccanismo di locking
Usata per collocarvi blocchi provenienti da zone di
RAM ove si trovano dati che cambiano spesso (stack
frame delle chiamate a procedure, dati streaming, ),
per evitare dannosi rimpiazzi (trash) nella cache dati.
Architettura degli Elaboratori 1

Mini-Data cache: figura

2007

33

Architettura degli Elaboratori 1

2007

Memoria: alte prestazioni

10

Fetch buffer (2 entry): riceve i 32 byte per una


linea di i-cache man mano che arrivano
33
Fill buffer (4 entry): raggruppa richieste di
lettura in memoria per le cache dati
Pend buffer (4 entry): cattura ulteriori
richieste per indirizzi gi nel fill buffer
Write buffer (8 entry da 16 byte): raggruppa
richieste di scrittura (con coalescing)
Prefetching (istruzione PLD <addr_mode2>):
suggerisce load in cache dati
Architettura degli Elaboratori 1

Gestione della memoria


MMU: indirizzamento virtuale e protezione
Alcuni bit decidono, tra laltro,
lutilizzo o meno di cache dati
il locking di una linea di cache
lutilizzo di write-through o di copy-back

2007

11

33

Registro PID: ulteriore remapping!


Translation Lookaside Buffer (TLB)
Uno per dati e uno per istruzioni
32 entry ciascuno, completamente associativi
Meccanismo di locking
Architettura degli Elaboratori 1

2007

MMU: page table

12

Ciascun elemento della page table contiene informazioni


per una regione (1 MB), oppure
33
per una pagina (1 KB, 4 KB o 64 KB)
Attributi associati a ciascun elemento:
indirizzo fisico
permessi di accesso per modo utente e modo
privilegiato
cacheable (bit C)
cacheable in mini-data cache (bit proprietari X e P)
bufferable (bit B)
coalescing
politica di allocazione - una scrittura causa linefill o no?
politica di scrittura (write-through, copy-back)
I/O
Architettura degli Elaboratori 1

PXA255: pipeline
3 diversi pipeline
7 o 8 stadi, 1 ciclo per stadio (di norma)
Ottimizzazione: uso del bypassing

Architettura degli Elaboratori 1

2007

13

33

2007

Main Execution pipeline


F1: fetch istruzione (stadio 1)
F2: fetch istruzione (stadio 2)
ID: decodifica istruzione
RF: lettura (e shift) degli operandi
X1: esecuzione (ALU)
X2: esecuzione (modifica dello stato)
XWB: scrittura del risultato

Architettura degli Elaboratori 1

Memory pipeline
D1: accesso alla cache dati (stadio 1)
D2: accesso alla cache dati (stadio 2)
DWB: scrittura del risultato
(copy-back della cache dati)

Architettura degli Elaboratori 1

14

33

2007

15

33

2007

MAC pipeline

16

M1: moltiplicazione (stadio 1)


M2: moltiplicazione (stadio 2)
Mx: moltiplicazioni successive
MWB: scrittura del risultato (non mostrato)

Architettura degli Elaboratori 1

33

2007

Pipeline: osservazioni

17

I tre pipeline possono essere occupati


simultaneamente (comportamento di tipo
superscalare)
I tre pipeline funzionano in maniera asincrona
Conclusione: le istruzioni possono completare
lesecuzione fuori ordine se non ci sono
dipendenze tra i dati

Architettura degli Elaboratori 1

33

2007

PXA255: Branch Target Buffer

18

Il PXA255 effettua una predizione dinamica basata sulla


storia passata di ciascuna istruzione di salto condizionato.
La storia memorizzata nel BTB (cache con 128 blocchi, a
mappatura diretta). Un elemento del BTB :

33

I bit [8:2] dellindirizzo dellistruzione di salto condizionato


individuano lelemento del BTB con il cui campo TAG si
confrontano i bit [31:9,1]: in caso di hit, gli history bit
forniscono la predizione e, se il salto viene intrapreso, il
target address fornisce lindirizzo a cui saltare.
Il bit 1 nel TAG e nel target address per compatibilit
con la modalit thumb (funzionamento a 16 bit).
Architettura degli Elaboratori 1

2007

BTB: stati possibili

19

La storia di un salto riassunta nei 4 possibili stati


rappresentati dai 2 history bit

33

La correttezza o meno di ogni previsione pu modificare lo


stato come rappresentato in figura.
Architettura degli Elaboratori 1

2007

Controller DMA - 1
16 canali indipendenti in 4 set
3 distinti livelli di priorit
Set 0: alta priorit
Set 1: priorit normale
Set 2 e 3: bassa priorit

20

33

Registri base per ciascun canale:


DSADR (DMA Source Address Register)
DTADR (DMA Target Address Register)
DCMD (DMA Command Register)
DCSR (DMA Control/Status Register)

Architettura degli Elaboratori 1

DMAC: diagramma a blocchi

2007

21

33

1 bit per canale


Architettura degli Elaboratori 1

2007

DMA Command Register

22

33

INCSRCADDR/INCTRGADDR:
incremento indirizzo sorgente/destinazione
STARTIRQEN/ENDIRQEN:
genera un interrupt allinizio/fine del trasferimento
ENDIAN: ordine di trasferimento byte
SIZE: byte per burst
LENGTH: numero byte da trasferire
Architettura degli Elaboratori 1

Controller DMA - 2
Un canale pu compiere pi operazioni,
specificate da una lista di descrittori

2007

23

33

DDADR: DMA Descriptor Address Register


I descrittori formano una lista concatenata
o anche un anello (descriptor ring)
Coerenza delle cache:
responsabilit del programmatore!
Architettura degli Elaboratori 1

2007

Contatori hardware
Due Performance Counter (32 bit)
Associabili a 2 eventi distinti
Contano le occorrenze degli eventi scelti

24

33

Un Clock Counter (CCNT, 32 bit)


Conta i cicli di clock che passano
Overflow in circa 10 secondi @400 MHz!
Accessibili tramite CP14, registri 0-3

Architettura degli Elaboratori 1

Contatori: eventi controllabili

2007

25

33

Architettura degli Elaboratori 1

2007

PXA255: coprocessori

26

CP0, CP14, CP15


Nel processore PXA255, CP14 e CP15
contengono registri di configurazione
Accesso (in modo supervisore!) con

33

MRC <coproc>,<opcode1>, <Rd>, <CRn>, <CRm>,<opcode2>


(move to Reg from CP)
MCR <coproc>,<opcode1>, <Rn>, <CRn>, <CRm>,<opcode2>
(move to CP from Reg)
LDC <coproc>, <CRd>, <addressing_mode>
STC <coproc>, <CRd>, <addressing_mode>
Architettura degli Elaboratori 1

Registri di CP15: sommario

2007

27

33

Architettura degli Elaboratori 1

2007

Registro utile di CP15

28

Control Register (CR1, opcode_2=0):


opzioni relative alla memoria

33

Bit 0: MMU disable/enable (0/1)


Bit 2: data cache disable/enable (0/1)
Bit 7: little/big endian (0/1)
Bit 11: BTB disable/enable (0/1)
Bit 12: instr. cache disable/enable (0/1)
Bit 13: exception vector relocation

2007

Architettura degli Elaboratori 1

Esempio di uso di CP15

29

Per accedere al registro:


istruzioni MRC (load) e MCR (store)
Il seguente codice abilita la cache dati (CP15,
registro 1, bit 2)

MCR
MCR p15,0,r0,c7,c10,4
p15,0,r0,c7,c10,4
MRC
MRC p15,0,r0,c1,c0,0
p15,0,r0,c1,c0,0
ORR
r0,r0,
ORR r0,r0, #4
#4
MCR
p15,0,r0,c1,c0,0
MCR p15,0,r0,c1,c0,0

Architettura degli Elaboratori 1

33

@
@attende
attendetermine
termineop.
op.corr.
corr.
@
@legge
leggeililControl
ControlRegister
Register
@
imposta
a
1
il
bit
@ imposta a 1 il bit22
@
@aggiorna
aggiornaControl
ControlRegister
Register

2007

Risparmio energetico

30

Run Mode: modo operativo normale


33

Idle Mode: clock fermo, stato preservato; risveglio


tramite interruzione
Sleep Mode: stato non completamente preservato;
alimentati solo i piedini di I/O
Turbo Mode: commutazione rapida (nanosecondi) tra 2
frequenze di clock preprogrammate

Architettura degli Elaboratori 1

Modi operativi
User (USR): modo utente
FIQ (FIQ): gestione veloce interruzioni
IRQ (IRQ): gestione interruzioni
Supervisor (SVC): modo protetto
Abort (ABT): per gestione memoria
Undefined (UND): emulaz. coprocessori
System (SYS): usa risorse di USR
ma senza limitazioni daccesso

Architettura degli Elaboratori 1

2007

31

33

2007

Note varie

32

Le istruzioni SWP e SWPB generano una


operazione di load+store atomica, permettendo
di gestire un semaforo

33

Usare se possibile MOV o MVN per caricare un


valore immediato: LDR pu generare un cache
miss o sporcare la cache dati
Per sfruttare al massimo la cache, le strutture
dati devono essere allineate ai 32 byte e avere
dimensione multipla di una linea di cache

Architettura degli Elaboratori 1

2007

Per approfondimenti

33

Intel XScale Core Developers Manual

(http://download.intel.com/design/intelxscale/27347302.pdf)

33

Intel XScale Microarchitecture for the


PXA255 Processor Users Manual
(http://int.xscale-freak.com/XSDoc/PXA255/27879601.pdf)

Intel PXA255 Processor Developers Manual


(http://www.xscale-freak.com/XSDoc/PXA255/27869302.pdf)

Liberamente scaricabili
Architettura degli Elaboratori 1

2007

Fine
10.a

PXA255: concetti avanzati

Testo di riferimento:
[Congiu] 10.1-10.5 (pg. 267291)

11.a

I programmi
Assembler e Linker
Produzione del software
Istruzioni, direttive,
simboli, ecc.

Processo di produzione del software


Analisi del problema
Progettazione del programma
Definizione dei moduli software
Progettazione singoli moduli
Documentazione
Scrittura del programma
Scrittura dei moduli
Traduzione e collaudo di ciascun modulo
Costruzione dellintero programma
Collaudo del programma
Architettura degli Elaboratori

37

2009

Sistema di sviluppo

Un programma Text Editor

37

Per la scrittura e la modifica del testo sorgente

Un programma Assemblatore
Traduce il testo sorgente in modulo oggetto

Un programma Linker
Costruisce il programma eseguibile

Un programma Debugger
Esegue il programma sotto controllo del
programmatore
2009

Architettura degli Elaboratori

Scrittura di un programma

37

Editing

Assembl.

Architettura degli Elaboratori

Collegam.
moduli

Collaudo

2009

La programmazione in linguaggio assembly


La traduzione in linguaggio macchina viene effettuata
da un programma assemblatore (assembler).

37

Risulta molto spesso naturale organizzare i diversi


moduli sorgente sotto forma di subroutine.
possibile costruire un programma in cui solo alcuni dei
moduli sono scritti in linguaggio assembler, essendosi
usato, per gli altri, un linguaggio ad alto livello.

Architettura degli Elaboratori

Valutazione costi ed efficienza

2009

37

Architettura degli Elaboratori

2009

Il programma assemblatore

37

Un modulo sorgente costituito da istruzioni di


due tipi:
le istruzioni di macchina,
le istruzioni per lassemblatore (direttive).
Architettura degli Elaboratori

2009

I simboli nel linguaggio assembly

La traduzione effettuata dallassemblatore consiste nel


sostituire i valori numerici al posto dei simboli con cui,
nelle istruzioni assembly, rappresentato il contenuto
dei vari campi delle istruzioni di macchina.

37

Oltre ai simboli propri del linguaggio assembly, in un


modulo sorgente sono generalmente presenti anche
altri simboli, introdotti dal programmatore:
simboli che rappresentano indirizzi di memoria;
simboli che rappresentano valori numerici che non
sono indirizzi.
Architettura degli Elaboratori

2009

I simboli del programmatore: esempi

Direttiva label:
LOOP:

. . .
. . .
MOVL (R0)+, (R2)
. . .
. . .

37

Direttiva di assegnazione:
. . .
. . .
MASK

$FF00

Architettura degli Elaboratori

Simboli: classificazione

2009

Simboli predefiniti

(codici operativi, registri di CPU, ecc.)

37

Simboli definiti dal programmatore


(indirizzi, costanti numeriche):

locali (visibili solo nel modulo corrente):

assoluti,
da rilocare (se il loro valore dipende dalla posizione del
codice in memoria);

globali (visibili anche in altri moduli):


assoluti,
da rilocare;

esterni (definiti in altri moduli sorgente).


Architettura degli Elaboratori

2009

Simboli: forward reference

10

In alcune circostanze indispensabile poter


usare un simbolo in punti del programma che
precedono quello in cui esso definito
(forward reference):

AVANTI:

37

. . .
. . .
JMP AVANTI
. . .
. . .
. . .
. . .

Architettura degli Elaboratori

2009

Risoluzione dei simboli

11

Per risolvere i forward reference,


lassemblatore opera in due passi:
Primo passo: lassemblatore scandisce le
istruzioni del modulo sorgente e prende in
considerazione le direttive di definizione dei
simboli;
Secondo passo: lassemblatore scandisce di
nuovo il modulo sorgente e gestisce le
occorrenze dei simboli, cio luso dei simboli,
per generare il codice sostituendo (ove
possibile) a ciascun simbolo il valore che esso
rappresenta.
Architettura degli Elaboratori

37

2009

Assemblatore: primo passo (1 di 4)

12

Definizioni dei simboli:


simboli predefiniti

37

Tabella dei simboli predefiniti (TSP)

ricerca del simbolo in TSP


Architettura degli Elaboratori

Assemblatore: primo passo (2 di 4)

2009

13

simboli locali
Tabella dei simboli locali (TSL)

(S, V, T)

37

TSL

Architettura degli Elaboratori

2009

Assemblatore: primo passo (3 di 4)

14

simboli globali
Tabella dei simboli globali (TSG)

(S, V, T)

37

TSG

Architettura degli Elaboratori

Assemblatore: primo passo (4 di 4)

2009

15

simboli esterni
Tabella dei simboli esterni (TSE)

(S, -)

37

TSE

Architettura degli Elaboratori

2009

Assemblatore: secondo passo (1 di 3)

16

Vengono esaminati i riferimenti ai simboli, cio


quei punti del modulo sorgente in cui i simboli
37
vengono usati.
In corrispondenza di ciascun riferimento
simbolico lassemblatore intraprende una ricerca
del simbolo nelle diverse tabelle per sostituirlo
con il valore (provvisorio per i simboli da
rilocare). I valori da rilocare vanno individuati,
ad es. inserendo un puntatore ad essi in
unapposita tabella che potremmo chiamare:
Lista degli Elementi da Rilocare (LER).
Per i simboli esterni la sostituzione non pu
essere effettuata ed demandata al linker.
Architettura degli Elaboratori

Assemblatore: secondo passo (2 di 3)


Si possono presentare i seguenti casi:
il
il
il
il

simbolo
simbolo
simbolo
simbolo

2009

17

37

tra quelli predefiniti,


locale,
globale,
esterno.

Architettura degli Elaboratori

2009

Assemblatore: secondo passo (3 di 3)


simbolo

18

azione

predefinito ricerca in TSP e inserzione del valore nel campo


corrispondente dellistruzione.
locale

ricerca in TSL e inserzione del valore nel campo


dellistruzione.
se valore da rilocare, aggiunta alla LER un
puntatore al valore inserito.

globale

ricerca in TSG e inserzione del valore nel campo


dellistruzione
se T= da rilocare, aggiunta alla LER un puntatore
al valore inserito.

esterno

ricerca in TSE e inserzione nellelemento della


TSE di un puntatore alla posizione in cui andr
inserito il valore associato al simbolo.

Architettura degli Elaboratori

Il modulo oggetto

37

2009

19

37

Architettura degli Elaboratori

2009

Il programma linker (1 di 2)

20

37

Architettura degli Elaboratori

2009

Il programma linker (2 di 2)

21

Per costruire il programma eseguibile, il linker:


1. valuta lestensione di memoria occupata da
ciascun modulo per stabilirne lindirizzo
iniziale;

37

2. tramite gli indici contenuti nelle LER


aggiorna, modulo per modulo, i valori da
rilocare sommando ad essi il valore
dellindirizzo iniziale del modulo stesso;
3. infine, risolve i riferimenti esterni.
Architettura degli Elaboratori

2009

Esempio: modulo 1

22

37

Architettura degli Elaboratori

Esempio: modulo 2

2009

23

37

Architettura degli Elaboratori

2009

Esempio: modulo 3

24

Preambolo della RSI (sequenza di polling):


.EXT

AD1, SAD1

JR
AD1, SAD1

37

; simboli esterni
; sequenza di polling
; attiva la routine SAD1
; se in AD1 READY=1

Architettura degli Elaboratori

Assemblaggio del modulo 1

2009

25

37

Architettura degli Elaboratori

2009

Listing del modulo 1

26

37

Architettura degli Elaboratori

Modulo oggetto 1 (1 di 2)

2009

27

37

Architettura degli Elaboratori

2009

Modulo oggetto 1 (2 di 2)

28

37

Architettura degli Elaboratori

Assemblaggio del modulo 2

2009

29

37

Architettura degli Elaboratori

2009

Listing del modulo 2

30

37

Architettura degli Elaboratori

Modulo oggetto 2 (1 di 2)

2009

31

37

Architettura degli Elaboratori

2009

Modulo oggetto 2 (2 di 2)

32

37

2009

Architettura degli Elaboratori

Assemblaggio del modulo 3

33

37

.EXT

Architettura degli Elaboratori

AD1, SAD1

JR AD1, SAD1

2009

Listing del modulo 3

34

37

Architettura degli Elaboratori

Modulo oggetto 3

2009

35

37

Architettura degli Elaboratori

2009

Programma eseguibile (1 di 2)

36

37

Architettura degli Elaboratori

Programma eseguibile (2 di 2)

2009

37

37

Architettura degli Elaboratori

2009

Fine
11.a

I programmi
Assemblatore e Linker