Architettura degli Elaboratori
Livello di Architettura dellinsieme distruzioni
dott. Francesco De Angelis
[Link]@[Link]
[Link]
Scuola di Scienze e Tecnologie - Sezione di Informatica
Universit of Camerino
Maggio 2011
1 / 100
Outline
1
Introduzione
Panoramica del livello ISA
Tipi di dati
Formati delle istruzioni
Indirizzamento
Tipi di istruzioni
Controllo del flusso
2 / 99
Introduzione
3 / 99
Introduzione
Il livello ISA
il livello ISA si trova tra il livello 1 e il livello 3
rappresenta linterfaccia tra hardware e software:
i programmi di alto livello non sono eseguiti direttamente
dallhardware, ma vengono tradotti in programmi in linguaggio
ISA
la traduzione `e adata a programmi detti traduttori
4 / 99
Introduzione
i programmi vengono scritti in linguaggi di alto livello
vengono tradotti in un formato intermedio comune (livello
ISA) dai compilatori
il programma ISA pu`o essere eseguito dal livello sottostante
5 / 99
Panoramica del livello ISA
Il livello ISA pu`
o essere definito come loutput di un compilatore.
Per produrre codice di livello ISA `e necessario conoscere:
il modello di memoria
il numero e il tipo di registri
i tipi di dati e di istruzioni
Linsieme di tutte queste informazioni permette di definire il livello
ISA.
In eetti, i dettagli implementativi (per esempio, pipeline) sono
fondamentali per migliorare le prestazioni. Pertanto, non `e sempre
vero che la separazione tra i livelli sia sempre netta come dovrebbe
essere.
6 / 99
Panoramica del livello ISA
Specifiche del livello ISA
Per alcune architetture il livello ISA `e specificato mediante un
documento formale di definizione. Un tale documento, di solito,
contiene:
parti normative: che impongono alcuni requisiti
parti informative: che aiutano nella comprensione
Non tutti i produttori rilasciano il documento di definizione del
livello ISA, specie quelli che non vogliono agevolare la concorrenza.
7 / 99
Panoramica del livello ISA
Modalit`
a kernel e modalit`
a utente
Il livello ISA esegue le istruzioni di tutti i programmi:
quelle del sistema operativo
quelle dei programmi applicativi
Alcune istruzioni, per motivi di progettazione del sistema operativo,
non devono essere accessibili ai normali programmi applicativi.
Pertanto, la maggior parte dei processori `e dotata di due modalit`a
di esecuzione:
modalit`a kernel
modalit`a utente
Si ha una transizione dalla modalit`a utente alla modalit`a kernel
quando il programma esegue istruzioni particolari, per esempio di
interazione con i processi, la memoria o il file system.
8 / 99
Modelli di memoria
Tutti i computer suddividono la memoria in celle indirizzate in
modo consecutivo. La dimensione pi`
u comune `e di 8 bit, a
causa del fatto che i caratteri ASCII occupano 7 bit (pi`
u 1 bit
di parit`a).
In genere i byte vengono raggruppati in parole di 4 byte (32
bit) o 8 byte (64 bit): molte architetture esigono che le parole
siano allineate, nel senso che le parole possono iniziare agli
indirizzi 0, 4, 8, ... ma non agli indirizzi 1, 3, 5, ...
Per esempio, il Pentium 4 utilizza indirizzi fisici di 36 bit, gli
ultimi 3 dei quali sono sempre nulli. Pertanto, il Pentium 4
non pu`
o prelevare parole non allineate!
9 / 99
Modelli di memoria
Il processore 8088 aveva un bus dati di 1 byte, e pertanto non
soriva di problemi di allineamento
Se un programma del Pentium 4 legge una parola di 4 byte a
partire dallindirizzo 7, dovr`a:
1
2
3
4
leggere la parola da 0 a 7
leggere la parola da 8 a 15
estrarre i 4 byte di interesse
concatenarli nel giusto ordine
10 / 99
Modelli di memoria
Molti processori a livello ISA dispongono di un solo spazio
degli indirizzi (intervallo 0 - 232 byte, oppure 0 - 264 byte)
Esistono invece architetture che separano gli spazi degli
indirizzi dei dati da quelli delle istruzioni. Questa scelta
presenta dei vantaggi:
con 32 bit `e possibile indirizzare 232 byte di memoria istruzioni
e 232 byte di memoria dati
le scritture avvengono soltanto nello spazio degli indirizzi dei
dati, quindi il sistema `e pi`
u sicuro
11 / 99
Semantica della memoria
Di norma, unistruzione LOAD eseguita dopo unistruzione
STORE e sullo stesso indirizzo, restituisca il valore appena
memorizzato
questo non `e vero se le micro-istruzioni vengono riordinate!!!
Questo problema ha molte possibili soluzioni:
una rigida serializzazione delle richieste di accesso a memoria
nessuna garanzia sullordine di esecuzione delle operazioni;
spetta al compilatore sincronizzare le operazioni ISA di accesso
alla memoria con la sequenza delle micro-istruzioni
soluzioni intermedie, in cui lhardware blocca accessi a
memoria che possono generare dipendenze RAW o WAR
12 / 99
Registri
Al livello di micro-architettura sono stati studiati i registri
alcuni di essi sono visibili al livello ISA, con vari compiti:
controllare lesecuzione del programma
contenere risultati temporanei
altri compiti
I registri visibili al livello ISA possono essere classificati come:
registri specializzati (Program Counter, Stack Pointer)
registri di uso generale
i registri di uso generale non sono sempre intercambiabili
13 / 99
Registri
Oltre ai registri del livello ISA, esiste un numero di registri
specializzati visibile soltanto in modalit`a kernel: possono
essere impiegati soltanto dal sistema operativo
il registro di flag o PSW, Program Status Word `e una via
di mezzo tra modalit`a kernel e modalit`a utente. Contiene vari
bit necessari alla CPU, tra cui:
N, posto a 1 dopo un risultato negativo
Z, posto a 1 dopo un risultato nullo
V, posto a 1 in caso di overflow
C, posto a 1 in caso di riporto
A, posto a 1 in caso di riporto oltre il terzo bit
P, posto a 1 se il risultato `e pari
i codici di condizione contenuti nel PSW sono importanti
perche impiegati nelle istruzioni di confronto e di salto
condizionato.
14 / 99
Istruzioni
Evoluzione storica
Il Pentium 4 `e frutto dellevoluzione di molte generazioni di
processori. Il suo ISA mantiene un completo supporto per le
architetture:
8086
8088
che a loro volta ricordano i processori:
8080
8008
4004
8086 e 8088 erano macchine a 16 bit eettivi (8088 utilizzava
un bus dati a 8 bit)
80286, a 16 bit, presentava un maggiore spazio degli indirizzi,
che per`
o non erano accessibili linearmente, ma come 16384
segmenti da 64kB
15 / 99
Istruzioni
Evoluzione storica /2
80386 fu la prima macchina a 32 bit, il cui ISA `e noto come
IA-32
sostanzialmente invariato in tutti i processori successivi:
80486
Pentium
Pentium Pro
Pentium II
Pentium III
Pentium 4
Celeron
Xeon
Pentium M
Centrino
eccezioni notevoli sono le istruzioni MMX, SSE, SSE2 (per
scopi multimediali)
16 / 99
Istruzioni
Modalit`
a operative
Pentium 4 `e dotato di tre modalit`a operative:
modalit`
a reale: tutte le modifiche introdotte dopo l8088
vengono disattivate
modalit`
a virtuale 8086: che permette di eseguire i
programmi dell8088 in modo protetto (la macchina `e
controllata da un sistema operativo). Quando in Windows
viene aperta una finestra MS-DOS, il programma la esegue in
modalit`a virtuale 8086
modalit`
a protetta: il Pentium 4 si comporta come tale. Sono
previsti 4 livelli di privilegi, controllati dal PSW:
livello
livello
livello
livello
0:
1:
2:
3:
modalit`
a kernel
utilizzato raramente
utilizzato raramente
modalit`
a utente
17 / 99
Istruzioni
Gestione della memoria
la memoria `e divisa in 16384 segmenti, ognuno indirizzabile da
0 a 232 1
la maggior parte dei sistemi operativi non sfrutta questa
possibilit`a, supportando soltanto un segmento
questo equivale a considerare una memoria lineare di 232 byte
ogni byte dello spazio degli indirizzi `e direttamente accessibile
una parola `e lunga 32 bit
le parole sono memorizzate in formato little-endian
18 / 99
Istruzioni
Registri
Il Pentium 4 ha registri a 32 bit
i registri EAX, EBX, ECX, EDX
sono di uso generale, anche se:
EAX `e il registro aritmetico
principale
EBX contiene puntatori a
indirizzi di memoria
ECX viene utilizzato nei cicli
EDX viene utilizzato nelle
moltiplicazioni e divisioni
Ognuno di essi pu`o essere
utilizzato come registro a 16 bit
(AX, BX, ...)
oppure come registro a 8 bit
(AH, AL, BH, BL, ...)
19 / 99
Istruzioni
Registri /2
ESI e EDI vengono utilizzati per
operazioni hardware di
manipolazione di stringhe:
ESI contiene lindirizzo della
stringa sorgente
EDI contiene lindirizzo della
stringa destinazione
EBP (frame pointer) svolge
funzioni analoghe a LV in IJVM
ESP `e il puntatore allo stack
i registri CS - GS sono registri di
segmento
EIP (Extended Instruction
Pointer) `e il program counter
EFLAGS `e analogo a PSW
20 / 99
Tipi di dati
Introduzione
Gli instruction set presentano istruzioni per la manipolazione
dei dati mediante operazioni
le operazioni necessitano che i dati siano in un formato ben
preciso
per ogni tipo di dato esiste un formato di rappresentazione
i tipi di dati si possono dividere in due categorie: numerici e
non numerici
21 / 99
Tipi di dati
numerici: servono per rappresentare numeri con segno o
senza segno
alcune architetture supportano entrambi i formati
di solito sono supportati anche i numeri in virgola mobile, per
la rappresentazione di numeri decimali
alcune architetture supportano anche il formato BCD (Binary
Coded Decimal), in cui ogni cifra decimale viene
rappresentata con 4 bit
non numerici per la rappresentazione di:
caratteri e stringhe
puntatori (indirizzi)
booleani, che possono assumere soltanto due valori (vero o
falso).
22 / 99
Tipi di dati
Dati booleani
Per i dati booleani potrebbe essere suciente un bit, che per`o
non `e direttamente indirizzabile; per questo motivo si
memorizzano invece in un byte
un valore booleno viene memorizzato in un bit soltanto nel
caso di array booleani, strutture di 4 parole dette bitmap
che possono contenere 32 valori booleani
23 / 99
Tipi di dati
Dati numerici di Pentium 4 e UltraSPARC III
24 / 99
Formati delle istruzioni
Introduzione
Unistruzione si compone di varie parti:
un codice operativo (opcode)
la provenienza degli operandi
la destinazione dei risultati
le istruzioni sono rappresentate come sequenze di bit
su alcune macchine le istruzioni hanno tutte la stessa
lunghezza:
la decodifica si semplifica
ma si ha uno spreco di spazio
25 / 99
Formati delle istruzioni
Diversi formati di istruzioni
In generale, unistruzione pu`o contenere zero o pi`
u indirizzi:
a
b
c
d
nessun indirizzo
1 indirizzo
2 indirizzi
3 indirizzi
26 / 99
Formati delle istruzioni
Progettazione del formato delle istruzioni
La scelta dei formati delle istruzioni dipende da molti elementi:
la lunghezza delle istruzioni
n istruzioni di 16 bit occupano met`a dello spazio di n istruzioni
di 32 bit
istruzioni pi`
u corte possono essere pi`
u dicili da decodificare
istruzioni pi`
u corte richiedono meno banda nel trasferimento
da/verso la memoria (e la cache)
lestendibilit`
a futura del set di istruzioni
maggiore il numero di bit dedicato allopcode, maggiore la
possibilit`a di estensioni future, minore il numero di bit dedicato
agli indirizzi
il numero di bit dedicati agli indirizzi
27 / 99
Formati delle istruzioni
Progettazione del formato delle istruzioni - campi indirizzi
Unistruzione pu`o indirizzare dati di dimensione variabile, per
esempio:
un intero di 4 byte
un carattere di 1 byte
bisogna quindi decidere se dividere la memoria in byte o in
parole (per esempio, di 4 byte)
dividendo la memoria in byte si ottiene una migliore
risoluzione di memoria:
`e possibile indirizzare un singolo carattere
lo si pu`o manipolare direttamente, cio`e senza indirizzare
unintera parola
dividendo la memoria in parole di 4 byte `e possibile
risparmiare 2 bit di indirizzi:
ottenere indirizzi pi`
u corti
ottenere istruzioni pi`
u corte
incrementare lo spazio di indirizzamento
28 / 99
Formati delle istruzioni
Codice Operativo espandibile
Data unistruzione lunga (n + k) bit composta da:
un indirizzo di n bit
un codice operativo di k bit
`e possibile codificare 2k istruzioni e indirizzare 2n celle di
memoria. In alternativa, `e possibile considerare:
k 1 bit di codice operativo
n + 1 bit per lindirizzo
ottenendo cos` un numero di operazioni dimezzato e un
numero di indirizzi doppio rispetto allesempio precedente. Al
contrario, si possono considerare:
k + 1 bit di codice operativo
n 1 bit per lindirizzo
raddoppiando il numero di operazioni e dimezzando il numero
di indirizzi.
La possibilit`a di operare sul numero dei bit del codice
operativo (e di conseguenza degli indirizzi) `e noto come
codice operativo espandibile.
29 / 99
Formati delle istruzioni
Codice Operativo Espandibile
Si consideri una macchina con istruzioni a 16 bit e gli indirizzi a 4
bit:
Si supponga di avere la seguente situazione:
15 istruzioni con 3 operandi
14 istruzioni con 2 operandi
31 istruzioni con 1 operando
16 istruzioni con 0 operandi
30 / 99
Formati delle istruzioni
Codice Operativo Espandibile
1 Bisogna rappresentare 15
istruzioni con 3 operandi
Con 3 indirizzi da 4 bit
ciascuno, il codice operativo pu`o
essere lungo al massimo 4 bit
tramite 4 bit si possono
rappresentare fino a 16 opcode
(0000, 0001, ..., 1110) ...
... pi`
u lultima combinazione
(1111) che viene interpretata
come indicazione che lopcode si
trova nei bit [8-15]
31 / 99
Formati delle istruzioni
Codice Operativo Espandibile
2 Bisogna rappresentare 14
istruzioni con 2 operandi
i primi 4 bit sono settati a 1
i bit [8-11] ospitano le
combinazioni 0000, 0001, ...,
1101
le due ultime combinazioni
(1110 e 1111) vengono
interpretare come indicazione
che lopcode si trova nei bit
[4-15]
32 / 99
Formati delle istruzioni
Codice Operativo Espandibile
3 Bisogna rappresentare 31
istruzioni con 1 operando
i 7 bit pi`
u significativi sono tutti
settati a 1
i 5 bit [4-8] contengono 31
combinazioni (0000 0, 0000 1,
..., 1111 0) ...
... pi`
u lultima (1111 1) che
viene interpretata come
indicazione che lopcode si trova
nei bit [0-15]
33 / 99
Formati delle istruzioni
Codice Operativo Espandibile
3 Bisogna rappresentare 16
istruzioni con 0 operandi
i primi 12 bit sono tutti settati a
1
gli ultimi 4 contengono le 16
possibili combinazioni (0000,
0001, ..., 1111)
34 / 99
Formati delle istruzioni
Pentium 4
Le istruzioni del Pentium 4 non seguono regole generali
tranne che: nelle istruzioni con due operandi, al pi`
u uno dei
due deve trovarsi in memoria
gli operandi possono quindi essere due registri oppure un
registro e una locazione di memoria
35 / 99
Formati delle istruzioni
Pentium 4
i codici operativi sono espandibili, ma secondo regole
complesse
la lunghezza delle istruzioni viene determinata soltanto dopo
la decodifica del codice operativo
36 / 99
Indirizzamento
Introduzione
Lindirizzamento `e il modo mediante il quale si specifica dove
trovare gli operandi da utilizzare nellambito di unistruzione.
Sono disponibili varie tecniche di indirizzamento:
indirizzamento immediato
indirizzamento diretto
indirizzamento a registro
indirizzamento a registro indiretto
indirizzamento indicizzato
indirizzamento indicizzato esteso
indirizzamento a stack
37 / 99
Indirizzamento
Indirizzamento immediato
Si tratta del modo pi`
u semplice: nel campo riservato allindirizzo
delloperando, listruzione contiene loperando stesso.
listruzione contiene gi`a il valore delloperando
non `e necessario indicare alcun indirizzo
Per esempio:
MOV R1, #3
indica di caricare nel registro R1 il valore numerico 3
Lindirizzamento immediato fornisce un solo operando per volta,
spesso costante e di piccole dimensioni.
38 / 99
Indirizzamento
Indirizzamento diretto
Loperando viene specificato tramite il suo indirizzo completo
di memoria
Listruzioni acceder`a pertanto sempre alla stessa locazione di
memoria: il contenuto pu`o variare, ma non la locazione
viene utilizzato soltanto per le variabili globali il cui indirizzo `e
noto in fase di compilazione
39 / 99
Indirizzamento
Indirizzamento a registro
Nel campo riservato allindirizzo delloperando, listruzione
specifica un registro
si tratta di una tecnica molto utilizzata, in quanto i registri
sono ad accesso veloce
Nellesempio:
MOV R1, #3
viene utilizzato lindirizzamento a registro per il primo
operando
40 / 99
Indirizzamento
Indirizzamento a registro indiretto
In questo caso lindirizzo delloperando `e contenuto nel
registro
un indirizzo utilizzato in questo modo si chiama puntatore
Per esempio:
MOV R1, (R2)
significa: aggiungere a R1 il contenuto della locazione di
memoria il cui indirizzo `e contenuto in R2
questa tecnica di indirizzamento `e molto utile nel caso in cui
si debba accedere a parole di memoria con indirizzi consecutivi
41 / 99
Indirizzamento
Indirizzamento a registro indiretto / Esempio
Si vuole eseguire la somma dei 1024 elementi di un array A:
1
in R1 viene posto il valore zero
in R2 viene posto lindirizzo
dellarray A
in R3 viene posto lindirizzo
della prima parola dopo A
si somma al contenuto di R1 il
valore puntato dallindirizzo
contenuto in R2
si aggiunge 4 al contenuto di R2
si confronta R2 con R3
se R2 < R3 il ciclo non `e finito
42 / 99
Indirizzamento
Indirizzamento indicizzato
In IJVM le variabili locali (indicate mediante un numero intero
progressivo) sono riferite mediante uno spiazzamento rispetto
a LV
Lindirizzamento indicizzato si ha quando si specifica un
registro pi`
u uno spiazzamento
Per esempio:
MOV R1, 4(R2)
significa: copia su R1 la parola di memoria il cui indirizzo si
ottiene sommando 4 allindirizzo contenuto in R2
43 / 99
Indirizzamento
Indirizzamento indicizzato / Esempio
44 / 99
Indirizzamento
Indirizzamento indicizzato esteso
Lindirizzo di memoria `e calcolato sommando il contenuto di
due registri pi`
u un oset opzionale
un registro si chiama base e laltro indice
Per esempio:
MOV R4, (R2 + R5)
significa: copia su R4 la parola di memoria il cui indirizzo si
ottiene sommando il contenuto di R2 al contenuto di R5
45 / 99
Indirizzamento
Indirizzamento a stack
ai fini della decodifica, `e meglio avere istruzioni corte
`e ancora meglio avere operandi impliciti, e listruzione
limitata al codice operativo
il che richiede la presenza di uno stack, come nellistruzione
IADD di IJVM in cui le operazioni da compiere sono:
POP di due operandi dalla cima dello stack
somma degli operandi
PUSH del risultato in cima allo stack
le operazioni con stack sono equivalenti allimpiego della
Notazione Polacca Inversa, o RPN (Reverse Polish
Notation)
46 / 99
Notazione Polacca Inversa
Consiste nello scrivere gli operatori dopo gli operandi e non
tra di essi
Per esempio:
(a + b) c = ab + c
a + b c = abc +
a b + c = ab c+
a b + c d = ab cd +
(a + b)/(c d) = ab + cd /
a b/c = ab c/
((a + b) c + d)/(e + f + g ) = ab + c d + ef + g + /
47 / 99
Notazione Polacca Inversa
Esempio
48 / 99
Codici operativi e modalit`a di indirizzamento
Non tutte le modalit`a di indirizzamento sono utilizzabili con
qualsiasi codice operativo
lideale sarebbe se il compilatore potesse scegliere di volta in
volta quale modalit`a sia migliore
Lindirizzamento del Pentium 4 `e piuttosto complesso, sono
supportate le modalit`a:
immediata
diretta
a registro
a registro indiretto
una speciale per gli array
ma non si possono applicare in tutte le situazioni
49 / 99
Codici operativi e modalit`a di indirizzamento
il byte MODE definisce la modalit`a di indirizzamento:
uno degli operandi `e specificato in combinazione dai campi
MOD e R/M
laltro `e sempre un registro, indicato dal campo REG
50 / 99
Tipi di istruzioni
Introduzione
Le istruzioni del livello ISA possono essere suddivise nelle seguenti
categorie:
istruzioni di trasferimento dati
istruzioni binarie
istruzioni unarie
confronti e salti condizionati
invocazioni di procedura
istruzioni di ciclo
istruzioni di Input/Output
51 / 99
Tipi di istruzioni
Istruzioni di trasferimento dati
Le istruzioni di trasferimento dati (a tutti gli eetti, copia)
permettono di copiare dati da una locazione di memoria ad
unaltra (oppure da/verso un registro). Le motivazioni per tale
operazioni sono:
copiare i dati da una locazione ad unaltra
preparare i dati per un uso eciente (alcune istruzioni
richiedono che i dati si trovino su un registro)
Le tipologie di trasferimento sono:
da memoria a memoria
da memoria a registro
da registro a registro
da registro a memoria
52 / 99
Tipi di istruzioni
Istruzioni di trasferimento dati / 2
Alcune architetture hanno una sola istruzione per i 4 tipi di
trasferimento
altre ne hanno una per ogni tipo di trasferimento
altre ne hanno tre:
LOAD per trasferire da memoria a registro
STORE per trasferire da registro a memoria
MOVE per i trasferimenti tra registri
le istruzioni di trasferimento richiedono che si specifichi (pi`
uo
meno esplicitamente) la quantit`a di informazione da trasferire:
di norma, si trasferisce una sola parola
in alcune architetture `e possibile avviare trasferimenti di pi`
u
parole
53 / 99
Tipi di istruzioni
Istruzioni binarie
Le istruzioni binarie producono un risultato a partire dalla
combinazione di due operandi (ADD, SUB, AND, OR, MULT,
DIV, ...):
la funzione AND `e molto importante anche per lestrazione di
bit da una parola. LAND tra una parola e una maschera
specificata permette di isolare una porzione interessante della
parola originaria, per esempio:
A = 1011 0111
B = 0000 1111
A AND B = 0000 0111
54 / 99
Tipi di istruzioni
Istruzioni binarie
Unapplicazione della funzione OR consiste
nellimpacchettamento di bit in una parola, per esempio:
A = 1011 0111
B = 0000 1111
A AND B = 0000 0111
C = 1001 0000
(A AND B) OR C = 1001 0111
55 / 99
Tipi di istruzioni
Istruzioni unarie
Le operazioni unarie richiedono in ingresso un operando e
restituiscono un risultato, per esempio:
lo shift, in cui i bit che fuoriescono vengono persi
la rotazione, in cui i bit che fuoriescono da destra riappaiono
a sinistra (e viceversa)
La dierenza tra le due operazioni `e mostrata nellesempio:
10110111 A
01011011 shift di A verso destra di 1 bit
11011011 rotazione di A verso destra di 1 bit
56 / 99
Tipi di istruzioni
Istruzioni unarie / 2
Lo shift `e utilizzato per le operazioni di moltiplicazione e
divisione per potenze di 2
lo shift `e spesso impiegato per accelerare operazioni
aritmetiche. Per esempio, il calcolo di 18 n, con n intero
positivo, pu`
o essere pensato come 16 n + 2 n. 16 n si
ottiene mediante lo shift verso sinistra di 4 bit, 2 n mediante
lo shift verso sinistra di 1 bit. Loperazione di moltiplicazione
viene quindi ottenuta mediante:
due shift
unaddizione
57 / 99
Tipi di istruzioni
Istruzioni unarie / 3
Le operazioni di rotazioni sono utili per impacchettare e
spacchettare sequenze di bit:
se si vuole esaminare una parola bit a bit, `e suciente
esaminare il bit di segno (il primo bit) e successivamente
ruotare di 1 bit per volta. Dopo avere esaminato tutti i bit, la
parola avr`a esattamente la forma originaria
a dierenza dello shift, la rotazione non comporta perdita di
informazione
58 / 99
Tipi di istruzioni
Istruzioni unarie / 4
Alcune operazioni unarie sono cos` frequenti che gli ISA
forniscono istruzioni specifiche per il loro svolgimento veloce:
linizializzazione a zero di una variabile, tramite loperazione
CLR
lincremento/decremento di una variabile di ununit`a (INC e
DEC)
lopposto di un numero (che d`a 0 quando sommato al
numero), NEG
59 / 99
Tipi di istruzioni
Confronti e salti condizionati
E necessario, nel corso dei programmi, esaminare il contenuto dei
dati e modificare la sequenza di esecuzione delle istruzioni a
secondo del risultato dellesame. Esistono delle istruzioni che:
esaminano una condizione
se la condizione `e vera eettuano un salto
se la condizione non `
e vera passano allistruzione successiva
Condizioni spesso usate sono:
lo stato di uno dei bit di PSW (overflow, riporto, ...)
il confronto con zero di un operando
il confronto tra due operandi
60 / 99
Tipi di istruzioni
Confronti e salti condizionati / 2
Il confronto tra due operandi (A e B) pu`o essere implementato in
diversi modi:
con unistruzione a 3 operandi: A, B e lindirizzo a cui
saltare
con unistruzione di confronto che registra il risultato su PSW,
seguita da una seconda istruzione che in base al valore del bit
del PSW eettua o meno il salto
E importante, nel confronto tra numeri, specificare se debba
essere con o senza segno.
61 / 99
Tipi di istruzioni
Invocazioni di procedura
Gli ISA prevedono, di norma, unistruzione per linvocazione di una
procedura (subroutine, funzione, metodo, ...):
una subroutine `e un insieme di istruzioni che pu`o essere
invocata da diversi punti di un programma
quando una subroutine ha terminato la propria esecuzione,
restituisce il controllo al programma chiamante che riprende
lesecuzione dallistruzione successiva alla chiamata
a tale scopo, lindirizzo di ritorno deve essere trasmesso alla
procedura o memorizzato per il recupero successivo:
in una locazione fissa di memoria (pessima idea)
in un registro
nello stack
62 / 99
Tipi di istruzioni
Invocazioni di procedura / 2
La ricorsione (una subroutine che invoca se stessa) pu`o
essere:
diretta, la routine A invoca se stessa
indiretta, la routine A invoca la routine B, che invoca C, che
invoca A
la memorizzazione dellindirizzo di ritorno in una locazione
fissa di memoria impedisce la ricorsione
in alternativa, `e possibile registrare lindirizzo di ritorno nella
prima parola della procedura (impedisce la ricorsione)
la ricorsione viene resa pi`
u dicile memorizzando lindirizzo di
ritorno in un registro
la soluzione migliore `e la memorizzazione nello stack
63 / 99
Tipi di istruzioni
Istruzioni di ciclo
E frequente dover eseguire lo stesso frammento di codice un certo
numero di volte. Di solito `e presente un contatore che viene
incrementato (o decrementato) ad ogni iterazione del ciclo: il
contatore viene esaminato con una certa condizione ed
eventualmente il ciclo viene arrestato. Un ciclo pu`o essere
implementato in due modi diversi:
ciclo con verifica della condizione in testa
ciclo con verifica della condizione in coda
64 / 99
Tipi di istruzioni
Istruzioni di ciclo / 2
a) verifica in coda
b) verifica in testa
65 / 99
Tipi di istruzioni
Istruzioni di Input/Output
Sono disponibili tre tipologie di istruzioni per la gestione dellI/O:
I/O programmato con attesa attiva (busy waiting)
I/O interrupt driven (guidato dagli interrupt)
I/O con DMA (Direct Memory Access)
66 / 99
Tipi di istruzioni
Istruzioni di Input/Output - busy waiting
Viene utilizzato nei computer pi`
u economici e nei sistemi real
time
`e prevista una sola istruzione per linput e una sola per
loutput
ogni istruzione impiega due registri:
un registro di stato
un registro per i dati (buer)
67 / 99
Tipi di istruzioni
Istruzioni di Input/Output - busy waiting / 2
Se esiste una relazione diretta tra I/O e memoria (I/O
mappato in memoria), i registri vengono acceduti e modificati
mediante le normali operazioni STORE e LOAD
altrimenti esistono speciali operazioni
queste trasferiscono i dati, un carattere per volta, da/verso il
dispositivo
i registri di stato indicano:
un carattere deve essere letto (in input)
il dispositivo `e pronto per leggere un carattere (in output)
68 / 99
Tipi di istruzioni
Istruzioni di Input/Output - busy waiting / 3
Si consideri il caso della lettura di un dato da tastiera:
quando la tastiera inserisce un carattere nel buer setta il bit
7 del registro di stato
la CPU:
controlla lo stato del bit 7 del registro di stato
se il bit 7 vale 1:
legge il carattere dal buer
resetta il bit 7
la CPU entra in un ciclo dal quale esce soltanto quando
termina il flusso di caratteri da tastiera
69 / 99
Tipi di istruzioni
Istruzioni di Input/Output - busy waiting / 4
Durante questo ciclo, la CPU rimane attiva (busy waiting ) e
non pu`
o eseguire altre operazioni
il principale problema di questo schema `e rappresentato
dallimpiego costante della CPU
una soluzione `e costituita dallimpiego di interrupt per il
risveglio della CPU
70 / 99
Tipi di istruzioni
Istruzioni di Input/Output - interrupt driven
La CPU avvia il dispositivo di I/O e richiede un interrupt alla
conclusione delle attivit`a
questo equivale a settare il bit INTERRUPT ABILITATI nel
registro del dispositivo (in AND con il bit di PRONTO)
lo svantaggio `e che questa tecnica richiede la gestione di un
interrupt per ogni carattere trasferito
71 / 99
Tipi di istruzioni
Istruzioni di Input/Output - DMA
La soluzione al problema della gestione dellI/O consiste nel
tornare allI/O programmato
lelaborazione `e adata per`o ad un controllore specializzato
dellI/O, il DMA (Direct Memory Access)
72 / 99
Tipi di istruzioni
Istruzioni di Input/Output - DMA / 2
Il chip DMA contiene almeno 4 registri:
indirizzo di memoria di inizio lettura/scrittura
numero di byte (o parole) da trasferire
identificativo (numero) di dispositivo
direzione dei dati (da/verso il dispositivo)
73 / 99
Tipi di istruzioni
Istruzioni di Input/Output - DMA / 3
Esempio: trasferire 32 byte dallindirizzo di memoria 100 al
dispositivo 4. Sequenza delle operazioni del controller DMA:
richiede laccesso in lettura al
byte 100 di memoria
eettua una richiesta di I/O al
dispositivo 4 per la scrittura
incrementa di 1 il suo registro
dindirizzo e decrementa di 1 il
registro contatore
...
quando il registro contatore si
azzera, la scrittura `e
completata
viene segnalato il
completamento delle
operazioni tramite un segnale
di interrupt
74 / 99
Tipi di istruzioni
Istruzioni di Input/Output - DMA / 4
Con il DMA la CPU non si occupa dellI/O, ma non `e del
tutto libera
il DMA ha un accesso prioritario al bus, quindi la CPU rimane
comunque in attesa
la sottrazione di cicli di bus alla CPU `e detto cycle stealing
la CPU `e comunque agevolata dalla mancata gestione di un
interrupt per ogni carattere
75 / 99
Controllo del flusso
Introduzione
Il normale flusso lineare di esecuzione delle istruzioni viene alterato
da:
salti condizionati e incondizionati
invocazioni a procedura
coroutine
trap
interrupt
76 / 99
Controllo del flusso
Salti condizionati e incondizionati
GOTO statement considered harmful
programmazione strutturata
77 / 99
Controllo del flusso
Procedure
Le procedure conferiscono struttura ai programmi, ma ...
ai fini del flusso delle esecuzioni sono da considerare
esattamente come un salto ...
salvo il fatto che, alla fine di una procedura, il controllo torna
allistruzione successiva allinvocazione
78 / 99
Procedure
La torre di Hanoi
Sono dati 3 pioli
sul primo piolo sono impilati dei dischi, tutti diversi fra loro
per spostare tutti i dischi da un piolo allaltro `e necessario
spostare i dischi:
uno per volta
senza mai appoggiare un disco su un altro disco di diametro
minore
79 / 99
Procedure
La torre di Hanoi / 2
La soluzione al problema di spostare n dischi dal piolo 1 al piolo 3:
spostarne prima n-1 dal piolo
1 al piolo 2
il disco rimanente viene
spostato dal piolo 1 al piolo 3
i dischi restanti vengono infine
spostati dal piolo 2 al piolo 3
80 / 99
Procedure
La torre di Hanoi / 4
La soluzione pu`
o essere implementata mediante una procedura che
permette di spostare n dischi dal piolo i al piolo j:
towers(n, i, j)
81 / 99
Procedure
La torre di Hanoi / 5
La chiamata towers(3, 1, 3) implica tre chiamate:
towers(2, 1, 2), che a sua volta implica:
towers(1, 1, 3)
towers(1, 1, 2)
towers(1, 3, 2)
towers(1, 1, 3)
towers(2, 2, 3), che a sua volta implica:
towers(1, 2, 1)
towers(1, 2, 3)
towers(1, 1, 3)
82 / 99
Procedure
La torre di Hanoi / 6
Vengono utilizzati due registri:
SP (Stack Pointer )
FP (Frame Pointer ), punta alla prima variabile locale del
frame del metodo attivo in analogia al registro LV di IJVM
83 / 99
Procedure
La torre di Hanoi / 7
a) Linvocazione towers(3, 1, 3) provoca:
il PUSH dei parametri (n = 3, i = 1, j = 3)
il PUSH dellindirizzo di ritorno
il PUSH del vecchio FP
listanziazione della variabile locale k
84 / 99
Procedure
La torre di Hanoi / 8
b) La procedura controlla il valore di n e, verificato che vale 3:
assegna k
eettua la chiamata towers(2, 1, 2)
cio`e la procedura ricomincia dallinizio
85 / 99
Procedure
La torre di Hanoi / 9
c) La chiamata towers(2, 1, 2):
invoca towers(1, 1, 3)
la procedura verifica che n = 1
eettua lo spostamento del disco dal piolo 1 al piolo 3
la procedura rientra e ripristina FP e SP
86 / 99
Procedure
La torre di Hanoi / 10
d) Dopo il rientro, la procedura prosegue:
invoca towers(1, 1, 2)
viene aggiunto un nuovo frame allo stack
87 / 99
Procedure
La torre di Hanoi / 11
e) Viene visualizzata una nuova riga di risultato
...
e la procedura continua
88 / 99
Procedure
La torre di Hanoi / 12
La porzione di codice che provvede a:
salvare il vecchio valore di FP
impostare il nuovo valore di FP
incrementare SP per listanziazione delle variabili locali
prende il nome di prologo della procedura (procedure
prolog ).
Il codice che, alluscita della procedura, provvede a ripulire lo
stack si chiama invece epilogo della procedura
`e fondamentale che prologo ed epilogo siano pi`
u veloci
possibile
Pentium 4 implementa due funzioni dedicate, ENTER e LEAVE,
per ottimizzare queste fasi.
89 / 99
Procedure
Coroutine
Normalmente, `e possibile
distinguere in modo netto
tra procedura chiamante e
procedura chiamata
la dierenza deriva
dallasimmetria nel
rapporto tra le due
procedure:
la procedura chiamata
inizia sempre la sua
esecuzione dallinizio
la procedura chiamante
prosegue dallistruzione
successiva alla
chiamata
90 / 99
Procedure
Coroutine / 2
Pu`
o essere utile, in alcune
situazioni, disporre di un
rapporto simmetrico
alla seconda invocazione
della procedura chiamata,
lesecuzione non
ricomincia dallinizio, ma
dallistruzione successiva
allultima istruzione
eseguita in precedenza
due procedure che
operano in questo modo
si chiamano coroutine
il loro utilizzo `e limitato
alla simulazione di
esecuzioni parallele in
91 / 99
Procedure
Trap
Una trap (Trappola) `e una chiamata automatica eettuata al
verificarsi di determinate situazioni anomale:
overflow
underflow
violazioni di protezione
codici operativi non definiti
la divisione per zero
...
al verificarsi di una trap, il controllo dellesecuzione viene
assunto da un gestore di trap, che esegue le istruzioni del
caso, per esempio la stampa di un messaggio di errore o la
terminazione del programma
92 / 99
Procedure
Trap / 2
Una trap pu`
o essere implementata a livello di
microarchitettura:
il microprogramma pu`
o verificare lo stato del bit di overflow
in parallelo allesecuzione del programma
se viene asserito il bit di overflow, il program counter carica
listruzione del trap manager
93 / 99
Procedure
Interrupt
Gli interrupt sono variazioni al normale flusso di esecuzione di
un programma dovuti, molto spesso, alla sezione di I/O:
per esempio, il programma richiede unazione a un dispositivo e
di essere avvisato tramite interrupt appena lazione termina
come le trap, gli interrupt trasferiscono il controllo
dellesecuzione ad un gestore specializzato
al termine della gestione dellinterrupt, il gestore deve
preoccuparsi di restituire il controllo al programma,
ripristinando il valore precedente di tutti i registri
la dierenza principale tra una trap e un interrupt risiede nel
fatto che una trap `e sincrona al programma, mentre gli
interrupt sono asincroni
94 / 99
Procedure
Interrupt / 2
Esempio: un computer deve scrivere sullo schermo una riga di
caratteri.
il software di sistema memorizza in un buer i caratteri da
scrivere
viene inizializzata una variabile globale ptr che punta allinizio
del buer
viene assegnata ad una variabile globale count il numero di
caratteri da scrivere
si verifica che il terminale sia pronto
se pronto, viene inviato il primo carattere
il carattere viene visualizzato e viene lanciato linterrupt
95 / 99
Procedure
Interrupt / 3
Le azioni hardware che adesso hanno luogo sono:
1
2
3
4
5
il controllore del dispositivo attiva una linea di interrupt sul
bus per segnalare la richiesta di utilizzo
appena possibile, la CPU attiva sul bus un segnale di ack
appena ricevuta la conferma, il controllore del dispositivo invia
un intero di identificazione (vettore di interrupt)
la CPU preleva il vettore di interrupt e lo salva
la CPU eettua il PUSH del program counter e del PSW sullo
stack
la CPU utilizza il vettore di interrupt per identificare il nuovo
program counter e il PSW
96 / 99
Procedure
Interrupt / 4
Le azioni software sono invece:
1
3
4
5
6
7
la routine di servizio dellinterrupt ISR (Interrupt Service
Routine) memorizza sullo stack tutti i registri
poiche il vettore di interrupt non `e univoco (viene condiviso da
tutti i dispositivi dello stesso tipo) `e necessario leggere alcuni
registri di dispositivo
viene letta ogni altra informazione relativa allinterrupt
vengono aggiornate le variabili ptr e count fino a quando la
visualizzazione non `e completa
viene segnalato al dispositivo che linterrupt `e stato gestito
vengono ripristinati tutti i registri memorizzati
viene eseguita listruzione RETURN FROM INTERRUPT
97 / 99
Procedure
Interrupt / 5
Possono sorgere problemi quando un interrupt interrompe il
gestore di un altro interrupt
esistono due possibili soluzioni:
ogni routine di interrupt pu`o disabilitare eventuali interrupt
successivi
a ogni dispositivo viene assegnata una priorit`a
la seconda soluzione, ottimale, richiede per`o che tutti gli
interrupt siano trasparenti, ovvero che al loro termine
lesecuzione riprenda esattamente dallo stato precedente
linterruzione.
98 / 99
Procedure
Interrupt / 6
Un esempio di gestione degli interrupt con meccanismo di
priorit`a:
99 / 99
Riferimenti
[TAN] 5 - Livello di architettura dellinsieme distruzioni
NOTA: Le slide sono tratte dalle slide degli scorsi anni e da diverse fonti
disponibili in rete presso altre universit e libri di testo.
Questopera stata rilasciata sotto la licenza Creative Commons Attribuzione-Non
commerciale-Condividi allo stesso modo 2.5 Italia. Per leggere una copia della
licenza visita il sito web [Link] o
spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
100 / 100