Sei sulla pagina 1di 100

Architettura degli Elaboratori

Livello di Architettura dellinsieme distruzioni


dott. Francesco De Angelis
francesco.deangelis@unicam.it
http://francescodeangelis.org
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 http://creativecommons.org/licenses/by-nc-sa/2.5/it/ o
spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

100 / 100

Potrebbero piacerti anche