2P - Dipartimento di Informatica e Sistemistica

Parte VI
Istruzioni ed indirizzamento
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.1
Il livello ISA (Instruction Set Architecture)
• È il livello più basso a cui il microprocessore può essere
programmato
Nascode i dettagli della microarchitettura e mostra un
• ‘Nascode’
insieme di funzionalità a livello più elevato
• Microprocessori con microarchitetture sensibilmente
diverse possono apparire uguali a livello ISA
dell hardware si garantisce la
• Mascherando le variazioni dell’hardware
portabilità del software
• Può essere definita in documenti formali:
Es. SPARC e JVM
•
Può non esistere una definizione formale:
Es. IA-32,, AMD-64,, X86-64 e Intel 64
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.2
Programmazione a basso livello
• Costituisce il riferimento per coloro che scrivono i compilatori
(oppure che programmano in linguaggio macchina)
• Il programmatore deve poter ignorare i dettagli minuti
dell’hardware e ‘vedere’ il processore a livello funzionale
•
Caratteristiche fondamentali:
– Memoria: organizzazione e modalità di indirizzamento
– Registri: quali registri sono visibili al livello ISA e quali
funzioni hanno
– Indirizzamento: modalità con cui le istruzioni fanno
riferimento ai propri operandi
– Istruzioni: repertorio delle istruzioni macchina
– Modi di funzionamento: user mode e kernel mode
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.3
Modello della memoria
• Celle elementari: byte di 8 bit (16 con il codice UNICODE ?)
• Word: di 4 o 8 byte
• Allineamento delle word: non p
possono cominciare in
indirizzi qualsiasi
• Ordinamento dei caratteri: finale grande o finale piccolo
• Spazio degli indirizzi:
– Tipicamente
Ti i
t 232 0 264
– A volte separato istruzioni e dati
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.4
Registri
• Tutti i registri
g
visibili al livello ISA sono visibili anche al livello
della -architettura, ma non è vero il viceversa
• Registri general-purpose: servono per risultati intermedi e per
dati di uso molto frequente
• Registri special-purpose: hanno funzioni specifiche
• Registri visibili solo in kernel mode
• PSW (Program Status Word): registro che contiene una serie
di flag
fl relativi
l ti i all risultato
i lt t d
della
ll ALU ((ed
d altro):
lt )
– N: risultato Negativo
– Z:
Z risultato
i lt t Z
Zero
– V: oVerflow
– C:
C Carry
C
– A: Auxiliary carry
– P:
P Parità
P ità d
dell risultato
i lt t
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.5
Architetture a n bit
• Col architettura a n bit intendiamo un’architettura
un architettura in cui:
– i registri sono a n bit
– le unità funzionali (ALU e FPU) sono a n bit
– gli indirizzi di memoria sono ad n bit
16 da 16
• Col procedere livello di integrazione n è passato da 8 a 16,
a 32 e, più recentemente da 32 a 64, e in certi casi a 128.
g , evolve
• Una stessa architettura,, coll’evolvere della tecnologia,
aumentando il numero di bit
– L’architettura Intel nasce a 16 bit (1983), passa poi a 32 bit
(1993), ed infine a 64 bit (2005)
– L’architettura ARM nasce a 32 bit (1985) e passa poi a 64 bit
(2011)
– L’architettura SPARC di Sun nasce a 32 bit e passa poi a 64 bit
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.6
Perché aumentare il numero di bit?
Aumentando il numero di bit si hanno diversi vantaggi:
1. Aumenta lo spazio di indirizzamento: con n bit si indirizza
y
una memoria di 2n byte
2. Aumenta il parallelismo nei trasferimenti memoria/cache
e cache/cache tra livelli diversi
3. Aumenta la precisione: calcoli con operandi a n bit
parallelismo di alcune operazioni:
p
4. Aumenta il p
– un registro a 64 bit contiene 8 byte (invece di 4)
– confrontando due stringhe la velocità raddoppia
Il limite è dato dalla tecnologia di integrazione: registri più
grandi, cache più grandi, bus più grandi significano maggiore
p
sul chip
p ((ma al legge
gg di Moore ci assiste
superfice
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.7
L’architettura
L
architettura IA
IA-64
64 Itanium
• Il limite p
principale
p
dell’architettura IA-32 è stato lo spazio
p
di
indirizzamento: 232 = GB sono pochi per un server
• Intel sceglie inizialmente di saltare il fosso: abbandona la
vecchia architettura CISC al suo destino ed introduce una nuova
architettura RISC, completamente diversa e incompatibile
• Rinuncia
Ri
i cosìì all’asset
ll’
t storico
t i d
della
ll compatibilità
tibilità all’indietro
ll’i di t
• L’architettura I-64 Itanium viene presentata nel 2001
– Architettura
A hit tt
RISC sviluppata
RISC,
il
t iin collaborazione
ll b
i
con HP
– Molto innovativa ma non penetra il mercato consumer
Niente compatibilità all’indietro significa che devo buttare via
tutto il vecchio software
software. Situazione accettabile nel segmento
server, ma rifiutata dall’utente consumer
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.8
Architettura AMD
AMD-64
64
•
•
•
•
•
•
•
AMD è finora andata a rimorchio e ha prodotto processori a 32
bit completamente compatibili con la piattaforma Intel IA-32
Essi p
possono eseguire
g
lo stesso set di istruzioni, e q
quindi lo
stesso codice, anche se hanno soluzioni architetturali diverse
Ma con il passaggio ai 64 bit le strade divergono
AMD propone l’architettura AMD-64, a 64 bit ma basata su una
estensione IA-32, spesso indicata anche come x86-64, con i
processorii Opteron
O t
e Athlon-64
Athl
64
Si tratta della stessa architettura (IA-32) con le stesse istruzioni
e gli stessi registri
registri, ma allargati a 64 bit
È stata privilegiata la compatibilità all’indietro, replicando la scelta
fatta da Intel a su tempo nel passaggio da 8 a 16 e da 16 a 32 bit
AMD-64 è compatibile con il vecchio codice a 32 bit
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.9
Il ripensamento di Intel: X86
X86-64
64 (Intel 64)
•
Dopo
p varie smentite Intel ha dovuto seguire
g
la strada scelta dal
concorrente AMD
•
Per evitare l’umiliazione di chiamarla AMD-64 la ha pietosamente
p
chiamata X86-64 e poi Intel 64 (da non confondere con IA-64)
•
Come nel caso di AMD l’architettura Intel 64 può eseguire anche
codice a 32 bit (e lo fa anche troppo spesso!)
•
Già tutte le ultime serie di Pentium 4 (dal 2005 fino al 2011) sono
state chip a 64 bit
•
Gli utenti ne sono però spesso stati ignari: ci eseguivano sopra
codice a 32 bit, con sistemi operativi a 32 bit (e
( ancora lo fanno)
f
)
Molte applicazioni sono tuttora a 32 bit: vengono eseguite
correttamente ma non sfruttano bene la CPU
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.10
I vantaggi dei 64 bit
•
L’architettura a 64 bit ha molti vantaggi:
– Indirizzamento a 64 bit: salta il limite dei 4 GB
– Aritmetica intera e FP a 64 bit: maggiore precisione,
maggiore velocità (rispetto a simulazione a 32 bit)
– Istruzioni che operano su 8 caratteri invece di 4: raddoppia la
velocità nell’elaborazione di caratteri (una componente
essenziale del carico)
Il vantaggio si può sentire a due livelli:
− Esecuzione del codice del Sistema Operativo (se è a 64 bit)
− Esecuzione del codice delle applicazioni (se sono a 64 bit)
•
Il codice di sistema è parte essenziale del carico applicativo: la
gestione dell’I/O, la gestione dell’interfaccia grafica, e molto
altro, sono gestite da routine di sistema
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.11
Il coro delle voci bianche: i ‘castrati’
castrati di Windows
•
•
Ma allora cosa c’è
c è dentro i nostri PC?
•
•
Tuttavia ……. molto spesso c’è un sistema operativo a 32 bit;
•
Ciò non è vero per Linux, e più recentemente per Windows 7
A meno che non siano pezzi d’antiquariato, c’è un processore
a 64 bit
bit, spesso anche multicore
Colpevolmente, Microsoft ha continuato a distribuire i suoi
sistemi operativi nella versione a 32 bit anche sapendo che
erano destinati a piattaforme a 64 bit
Nelle case di molti, oltre a poveri gatti castrati vivono
anche
h PC castrati:
t ti non è d
detto
tt che
h siano
i
più
iù mansueti.
ti
(Comunque una pratica odiosa in entrambi i casi)
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.12
Registri dell’architettura
dell architettura IA
IA-32
32
Sono gli unici visibili al programmatore: in tutto 16 registri
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.13
Registri dell’architettura
dell architettura IA
IA-32
32 (2)
• EAX,, EBX,, ECX,, EDX: registri
g
(q
(quasi)) g
general-purpose
p p
a 32,16,8
, , bit:
– EAX: accumulatore
– EBX: puntatori a memoria
– ECX: controllo cicli
– EDX:
EDX estende
t d EAX a 64 bit nelle
ll di
divisioni
i i i e moltiplicazioni
lti li
i i
• ESI, EDI: puntatori (a stringhe)
• EBP: Base Pointer, punta alla base dello stack-frame
• ESP: Stack Pointer, punta alla cima dello stack
• EIP: Instruction Pointer
CS..GS:
GS: Registri di Segmento
Segmento, puntano ai 6 segmenti (tra i 16K) che
• CS
sono in uso
•
EFLAGS: Program
g
Status Word
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.14
X86-64:
X86
64: registri principali
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.15
X86-64:
X86
64: registri addizionali






•
•
•
Vengono aggiunti altri 8 registri general purpose: R8,..,R15
•
I registri XMM sono usati da particolari istruzioni vettoriali (SIMD)
Permettono di appoggiare risultati intermedi
Aggiunti altri 8 registri XMM: XMM8,..., XMM15 . XMM1,..., XMM7 erano
già presenti nelle ultime revisioni di IA-32.
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.16
X86-64:
X86
64: modi di funzionamento
Sono previsti due diversi modi di funzionamento, ciascuno con
diversi submode:
• Long
g mode: è il modo p
primario di funzionamento,, che sfrutta tutte
le feature dell’architettura. Al suo interno due submode:
– 64 bit mode: il µP esegue codice a 64 bit con indirizzi a 64 bit
– Compatibility mode: il µP esegue il codice del sistema
operativo a 64 bit e il codice applicativo a 32 bit
• Legacy mode: usato dai sistemi operativi a 32 bit. Al suo interno
i tre submode che erano presenti nell’architettura IA-32:
– Real
R l mode:il
d il µP
P sii comporta come il vecchio
hi 8088 eseguendo
d il
codice direttamente e senza controlli
– Virtual 8086 mode: il µP si comporta come l’8086
l 8086 ma intercetta
tutte le operazioni delicate (es. finestra DOS sotto Windows)
– Protected mode: il µ
µP vede completamente
p
l’architettura a 32 bit
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.17
X86-64:
X86
64: livelli di privilegio
Sono previsti quattro diversi livelli di privilegio, controllati da bit
nella PSW
• Livello 0: usato dal sistema operativo, ha accesso completo alla
macchina
• Livello 3: usato dai p
programmi
g
utente,, non g
gli consente l’accesso a
funzionalità critiche, e gli impedisce di mandare il µP in crash
• Livelli 1 e 2: usati raramente
• I livelli di privilegio sono la feature hardware sulla quale viene
costruito l’edificio
l edificio software della sicurezza del sistema
• I principi fondamentali sono:
– Solo il sistema operativo ha il controllo completo del sistema
– Il SO amministra le risorse e ne disciplina l’accesso
– Nessun programma applicativo deve poter danneggiare gli altri
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.18
Tipi di dati
X86 64
X86-64
ARM
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.19
Formato delle istruzioni
•
•
•
•
•
•
Lunghezza fissa o variabile
Lunghezza fissa semplifica la decodifica
Istruzioni corte riducono la banda di memoria necessaria al fetch
Con opcode è di k bit: al massimo 2k codici di istruzioni diversi
p indirizzi fanno riferimento sia alla memoria che ai registri
g
Campi
Complesse modalità di indirizzamento permettono di indirizzare
gli operandi
g
p
anche con p
pochi bit
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.20
Lunghezza delle istruzioni
•
•
•
•
Le istruzioni possono avere lunghezza fissa o variabile
La lunghezza fissa semplifica il fetch delle istruzioni
Una word può contenere una o più istruzioni
S le istruzioni hanno fformato variabile non c’è
Se
’è relazione
tra word e istruzioni
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.21
Espansione dei codici operativi
• Il numero di bit dedicati all’opcode
all opcode non è costante
• Un primo tipo di istruzioni ha un codice operativo corto
• Alcuni valori del codice segnalano che anche i bit
successivi ne fanno parte
• Alcuni dei campi indirizzo vengono sacrificati per consentire
l’espansione del codice:
Esempio
– Istruzioni a 3 indirizzi: opcode 4 bit
– Istruzioni a 2 indirizzi: opcode 8 bit
– Istruzioni a 1 indirizzo: opcode 12 bit
– Istruzioni a 0 indirizzi: opcode
p
16 bit
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.22
Espansione dei codici operativi (2)
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.23
Formato delle Istruzioni IA-32
• Lunghezza delle istruzioni molto variabile
• Uno dei due operandi è sempre un registro, l’altro può essere
sia un registro che in memoria
• MODE stabilisce la modalità di indirizzamento
• L
L’indirizzo
indirizzo di memoria è l’offset
l offset di un segmento,
segmento dipende
dall’opcode, dai registri usati e dal prefisso
l indirizzamento immediato: operando nell’istruzione
nell istruzione
• Possibile l’indirizzamento
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.24
Modalità di indirizzamento
• Immediato: il valore dell’operando
p
è nell’istruzione
• Diretto: l’istruzione contiene l’indirizzo di memoria completo
dell’operando
• Indiretto: l’indirizzo di memoria fornito contiene l’indirizzo
dell’operando
• A registro:
i t
sii specifica
ifi un registro
i t che
h contiene
ti
l’l’operando
d
(o che lo riceverà)
• Indiretto a registro: il registro specificato contiene ll’indirizzo
indirizzo
dell’operando
indirizzo è dato da una costante più il
• A registro indice: ll’indirizzo
contenuto di un registro
g
base: viene sommato a tutti g
gli indirizzi il contenuto
• A registro
di un registro
• A stack: l’operando è sulla cima dello stack (o ci deve andare)
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.25
Indirizzamento indiretto a registro
• Calcola la somma degli elementi di un array di 256 interi che
inizia all’indirizzo A
• Ciascun intero occupa 4 byte
• La somma viene accumulata in R1
all elemento corrente
• R2 punta all’elemento
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.26
Indirizzamento a registro indice
• Calcola l’OR
l OR di A[i] AND B[i] dove A e B sono due array
• R1 accumula l’OR degli AND
• R2 contiene l’indice
l indice corrente sugli array
• R3 contiene la costante 4096, per controllare la fine del loop
• R4 è utilizzato per appoggiare i singoli AND
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.27
Indirizzamento a stack
• La
L stack
t k è utilizzato
tili
t per:
– Appoggiare risultati intermedi
– Gestire le chiamate di procedura
– Calcolare espressioni aritmetiche
• Lo stack pointer SP punta all’elemento affiorante dello stack
• Operazioni
O
i i ffondamentali:
d
t li
– PUSH: aggiunge un elemento alla cima dello stack
– POP: preleva un elemento dalla cima dello stack
– Operazioni aritmetiche sui due elementi affioranti che
mettono al loro posto il risultato
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.28
Gestione dell
dell’I/O
I/O
• Un
Un’operazione
operazione di I/O consiste nel trasferimento di dati tra un
device di I/O e la memoria
• Tre modi fondamentali di gestire l’I/O
l I/O
A) I/O programmato con busy waiting
L CPU iinterroga
La
t
periodicamente
i di
t i di
dispositivi
iti i ((polling)
lli ) e
cicla a vuoto durante le attese (busy waiting)
B) I/O gestito
tit con interruzioni
i t
i i
La CPU avvia l’operazione di I/O e poi si dedica ad altro
fi a che
fino
h il d
device
i
non manda
d una iinterruzione
t
i
C) DMA (Direct Memory Access)
La CPU avvia l’operazione poi gestita interamente dal
controllore DMA
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.29
I/O programmato
• I controller hanno diverse porte che possono essere lette e
scritte dalla CPU
• Nei buffer vengono letti o scritti i caratteri scambiati con il
controller
• I registri
i t i di stato
t t contengono
t
bit che
h lla CPU controlla
t ll per
sapere se i dati sono disponibili, o possono essere scritti
• Dati i tempi dei dispositivi di I/O il busy waiting comporta un
notevole spreco della risorsa CPU
• Usato solo in sistemi molto semplici (o d’antiquariato)
d antiquariato)
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.30
I/O con interrupt
• Esempio: lettura da disco
p
di I/O scrivendo le
• La CPU avvia l’operazione
informazioni opportune nelle porte del controller
aC
CPU
U passa a
all’elaborazione
e abo a o e d
di u
un a
altro
o task
as
• La
• Il controller avvia e sovraintende allo svolgimento
dell’operazione
dell
operazione di I/O (posizionamento delle testine ecc.)
• Solo quando i dati sono disponibili il controller interrompe
la CPU
• La CPU è direttamente coinvolta nel trasferimento dei
dati tra controller, essa legge i dati e li copia in memoria
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.31
DMA (Direct Memory Access)
• La CPU programma il controller DMA specificando:
– Quanti byte trasferire
– Da quale device
– A che indirizzi
• Il controller gestisce l’intera operazione
• Il controller DMA può gestire più operazioni
contemporaneamente
t
t
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.32
Istruzioni
st u o X86-64
86 6
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
Istruzioni X86
X86-64
64
VI.33
(2)
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.34
Istruzioni X86
X86-64
64
(3)
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.35
Trap e interrupt
• La trap è una procedura automatica che viene iniziata da una
condizione eccezionale che si verifica durante l’esecuzione di
p g
un programma
• Le trap sono sincrone e dipendenti da quello che succede
sulla CPU, mentre le interruzioni sono asincrone e nascono
all’esterno della CPU
• Le trap si originano da test fatti a livello del microprogramma
• La gestione delle trap è affidata al trap handler ed è in tutto
simile a quella delle interrupt
• Esempi
E
i di ttrap:
– overflow e underflow
– violazione
i l i
di protezione
t i
– divisione per zero
– chiamata
hi
t di sistema
i t
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.36
Interruzioni: azioni HW
Q
Quando
l’interruzione si origina
g
e viene servita q
queste azioni
preliminari vengono svolte a livello hardware:
1)) Il controller g
genera l'interruzione
2) La CPU, quando è pronta a servirla, alza il segnale di
aknowledge
3) Quando il controller vede l’aknowledge risponde mettendo
sul bus il vettore di interruzione
4) La CPU legge e salva il vettore di interrupt
5) La CPU salva il PC (Program Counter) e la PSW (Program
Status word) sullo stack
6) La CPU individua,
individua per il tramite del vettore di interruzione
interruzione,
l’indirizzo iniziale della routine che serve l’interruzione e lo
carica nel PC
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.37
Interruzioni: azioni SW
Inizia ora l’esecuzione
l esecuzione della routine di servizio che svolge le
seguenti azioni:
7) Salva sullo stack i registri della CPU
8) Individua il numero esatto del device
9) Legge ttutti
tti i codici di stato ecc
ecc.
10) Gestisce eventuali errori di I/O
11) Legge (o scrive) i dati e incrementa i conteggi
12) Se necessario informa il device che il servizio
dell’interruzione è concluso
13) Ricarica tutti i registri salvati sullo stack
14) Esegue un’istruzione di RETURN FROM INTERRUPT
ripristinando lo stato della CPU precedente l’interruzione
Fondamenti di Informatica - Architetture di Elaborazione - prof. Silvio Salza - a.a. 2013-2014
VI.38