istre02-arch-w.ppt [modalità...
Transcript of istre02-arch-w.ppt [modalità...
12/03/2013
1
Real-Time Systems LaboratoryRETIS Lab
Giorgio Buttazzo
2.2. ArchitetturaArchitettura deldel calcolatorecalcolatoreComponenti principali
Sommario
Rappresentazione dell’informazione
Funzionamento del processore
Meccanismi per migliorare l’efficienza:− Prefetch, Cache, Interrupt, DMA− Problemi derivatiProblemi derivati
Linguaggio Assembler
Gestione di procedure
12/03/2013
2
CalcolatoreÈ una macchina complessa in grado di elaborareinformazioni secondo un programma prestabilito:
COMPUTERINPUTDATA
OUTPUTDATA
OGPROGRAM
Tipi di dati: caratteri, numeri, immagini,suoni, segnali elettrici, …
CalcolatoreTutto però deve essere trasformato in numeri binari(un computer elabora solo sequenze di 0 e 1):
COMPUTERINPUTDATA
OUTPUTDATA
Mondo binario
…00101 …11001
10100
D/Aconv.
A/Dconv.
PROGRAM
…10100…
COMPILER
12/03/2013
3
Perché in binario?
Vantaggi:Tolleranza al rumore
Basso consumoBasso consumo
5432
Volt
?
1
210
tempo
0 01
?0
Perché in binario?
Anche i neuroni del cervello comunicano secondo una logicabinaria, anche se nel dominio della frequenza:
sinapsi nucleo
Assone
spike
Assonedendriti
12/03/2013
4
Architettura HardwareBUS
Keyboardcontroller
Graphicsboard
Hard diskcontrollerCPU RAM
MemoriaprincipaleProcessore
Memoriadi massa
Periferiche e dispositivi di I/O
BUSInsieme di fili per comunicare dati (16, 32, o 64)Insieme di fili per comunicare indirizzi di memoria (16, 32, o 64)
Flusso datiCOMPUTER
BUS
CPU RAMKeyboardInterface
VideoInterface
⇒ Durante l’elaborazione, dati e programmi si trovano in RAM., p g
⇒ Le interfacce mascherano la complessità delle periferiche facendoleapparire alla CPU come una porzione di memoria (spazio di I/O):
Leggendo in appositi registri, la CPU preleva i dati di ingresso
Scrivendo in altri registri, la CPU spedisce i dati in uscita
12/03/2013
5
Architettura Software
Hardware
Sistema Operativo
ApplicazioniWord Excel Mathlab Editor Compiler New
mymyprogprog
Hardware
Sviluppo di un programma
Editor Linker File dilibreria
nome.c
Compiler Loader
Filesorgente
File
nome.exeFileeseguibile
nome.obj COMPUTER DebuggerFileoggetto
12/03/2013
6
Sistema OperativoGestisce l’hardware, mascherandone i dettagli e fornendouna serie di servizi per l’I/O:
Disco: file system (file e directory)Disco: file system (file e directory)Stampanti: code di stampaRete: E-mail, ftp, ssh
Carica i programmi da hard disk a RAM e ne controllal’esecuzione.
Fornisce meccanismi per la protezione delle informazioniFornisce meccanismi per la protezione delle informazioni.
Esegue comandi utente mediante un’interfaccia interattiva(Shell).
Realizza il meccanismo di timesharing per l’esecuzioneconcorrente di processi.
SchedulingQuando il software prevede più programmi da eseguire, ilsistema operativo decide come sequenzializzare la loroesecuzione attraverso lo scheduler.
P1 P2 P3
Lo scheduler ordina l’esecuzione dei processi grazie ad unalgoritmo di scheduling (ad esempio, in ordine di arrivo):
tempo
Questa tecnica genera lunghi tempidi attesa medi per i processi.
12/03/2013
7
TimesharingLa tecnica del timesharing consente di portare avanti piùprocessi simultaneamente, dando la percezione di unparallelismo virtuale (esecuzione concorrente).
P1 P2 P3
p ( )
Ogni processo sequenziale viene eseguito al più per unquanto temporale Q di lunghezza fissa (da 10 a 100 ms).
tempo
Questa tecnica è particolarmente indicataquando i processi hanno lunghi tempi diattesa per prelevare dati d’ingresso.
12/03/2013
8
Tutto in binarioPoiché tutta l’informazione deve essere trasformatain binario, è necessario trovare una codificaopportuna per ogni tipo di dato:opportuna per ogni tipo di dato:
Caratteri: ASCII, Extended ASCII, Unicode, UTF-8
Immagini: BMP, PNG, JPG, GIF, TIF
Numeri: Naturali (N): Codifica binaria semplice
Relativi (Z): Complemento a 2Relativi (Z): Complemento a 2
Reali (R): Floating Point (IEEE 754-1985)
La cosa più importante da sapere di una codifica è il numero di bit utilizzato e il range dei valori.
Numerazione posizionale
base: b cifre: αk ∈ [α(0), α(1), …, α(b-1)]valore cifre: 0, 1, …, b-1valore cifre: 0, 1, …, b 1
Peso cifra in posizione k: bk
La posizione delle cifre parte da 0e si incrementa da destra verso sinistra
Valore totale del numero: Σ αk bk-1
12/03/2013
9
Base 10
base: 10 cifre: αk ∈ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Peso cifra in posizione k: 10kPeso cifra in posizione k: 10
2 0 1 3Numero:
103 102 101 100Peso cifre:
2⋅1000 + 0⋅100 + 1⋅10 + 3⋅1Valore numero: 2⋅1000 + 0⋅100 + 1⋅10 + 3⋅1Valore numero:
= (2013)10
Base b ⇒ Base 10(α3 α2 α1 α0)bNumero:
b3 b2 b1 b0Peso delle cifre:
(n)10 = α3b3 + α2b2 + α1b1 + α0b0Valore numero:
(2 0 1 3)5Numero:
53 52 51 50Peso cifre: 5 5 5 5Peso cifre:
2⋅125 + 0⋅25 + 1⋅5 + 3⋅1Valore numero:
= (258)10
12/03/2013
10
Base 2
base: 2 cifre: αk ∈ [0, 1]
valore cifra in posizione k: 2kvalore cifra in posizione k: 2
1 1 0 1Numero:
23 22 21 20Valore cifre:
1⋅8 + 1⋅4 + 0⋅2 + 1⋅1Valore numero: 1⋅8 + 1⋅4 + 0⋅2 + 1⋅1Valore numero:
(1101)2 = (13)10
Metodo veloce:
1 0 1 1 0 0 1N
Base 2 ⇒ Base 10
1 0 1 1 0 0 164 32 16 8 4 2 1
Numero:Pesi:
+
(1011001)2 = (89)10
12/03/2013
11
Base 16 - esadecimale
base: 16cifre: αk ∈ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ]k
1 2 7Numero:
162 161 160Valore cifre:
1⋅256 + 2⋅16 + 7⋅1Valore numero:
10 11 12 13 14 15
1⋅256 + 2⋅16 + 7⋅1Valore numero:
(127)16 = (295)10
Base 16 - esadecimale
base: 16cifre: αk ∈ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ]k
B 0 ANumero:
162 161 160Valore cifre:
11⋅256 + 0⋅16 + 10⋅1Valore numero:
10 11 12 13 14 15
11⋅256 + 0⋅16 + 10⋅1Valore numero:
(B0A)16 = (2826)10
12/03/2013
12
La base 16 è comoda per esprimere i numeri binariin modo più compatto:
Base 2 ⇒ Base 16
Exa binario decimale
0 0000 01 0001 12 0010 23 0011 3
Exa binario decimale
8 1000 89 1001 9A 1010 10B 1011 11
4 0100 45 0101 56 0110 67 0111 7
C 1100 12D 1101 13E 1110 14F 1111 15
Base 2 ⇒ Base 16
In generale, un numero binario a 16 bit si esprimein esadecimale convertendo le cifre a gruppi di 4:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 0 1 0 0 1 0 1 1 1 0 0
dec. 3 10 5 12
exa 3 A 5 Cexa. 3 A 5 C
(0011101001011100)2 = (3A5C)16
12/03/2013
13
Base 16 ⇒ Base 2
Viceversa, un numero esadecimale si esprime inbinario convertendo ogni cifra su 4 bit:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
dec.
1 1 1 1
15
0 0 0 0
0
1 1 0 0
12
1 0 1 0
10
exa. F 0 C A
(F0CA)16 = (1111000011001010)2
Base 10 ⇒ Base b(n)10 = α3b3 + α2b2 + α1b1 + α0
r q÷ b
α0 α3b2 + α2b + α1
r q
α1 α3b + α2
r q÷ b
÷ b
(α3 α2 α1 α0)b α2 α3
r q
α3 0r q
÷ b
12/03/2013
14
Base 10 ⇒ Base 5(258)10 = (2013)5
r q÷ 5
3 51r q
1 10r q
÷ 5
r q÷ 5
(2 0 1 3)5 0 2r q
2 0r q
÷ 5
Codifica ASCIIÈ una codifica binaria a 7 bit, per cui può codificaresolo 27 = 128 caratteri:
carattere Valore binario Valore decimale
a 1100001 97
b 1100010 98
c 1100011 99
d 1100100 100
e 1100101 101
… … …
Le codifiche più moderne sono comunquecompatibili con ASCII sui primi 7 bit.
12/03/2013
15
Numeri Naturali (N)
Interi assoluti (senza segno): 0, 1, 2, 3, …
b [ ]
# bit Range Range
8 [0, 28‐1] [0, 255]
n bit [0, 2n]
16 [0, 216‐1] [0, 65.535]
32 [0, 232‐1] [0, 4.294.967.295]
Somma fra interi assolutiSe si lavora con variabili a 8 bit, si ha:
riporticarry riporticarry
0 0 0 1 1 0 0 0
0 0 1 1 1 0 0 1
(24)10
(57)10
+=
riporti
0 1 0 1 0 0 0 1
0 1 1 1 0 0 00
(81)10
carry
1 0 1 0 1 0 1 0
0 1 0 1 1 0 1 0
(170)10
(90)10
+=
riporti
0 0 0 0 0 1 0 0
1 1 1 1 0 1 01
(4)10
carry
carry = 0
Il risultato è rappresentabile su 8 bit
carry = 1
Il risultato NON è rappresentabile su 8 bit
12/03/2013
16
Numeri Relativi (Z)
Interi relativi (con segno): … ‐3, ‐2, ‐1, 0, 1, 2, 3, …
Codifica in complemento a 2:Codifica in complemento a 2:Il bit più significativo codifica il segno: 0 positivo
1 negativo
Il valore del numero è calcolato come segue:
N =(b7b6b5b4b3b2b1b0)2 se b7 = 0
– (b7b6b5b4b3b2b1b0 + 1)2 se b7 = 1
Numeri Relativi (Z)
Base 2 (su n bit) ⇒ Base 10
+ (X)2 se bn‐1 = 0(X)10 =
2 n 1
– ( X + 1)2 se bn‐1 = 1
(0 0 0 1 0 1 1)2 (11)10
(1 1 1 1 0 0 1)2
(–7)10– [(0 0 0 0 1 1 0)2 + 1]
12/03/2013
17
Numeri Relativi (Z)
Base 10 ⇒ Base 2 (su n bit)
(X10)2 se X ≥ 0(X)2 =
( 10)2
(|X|10)2 + 1 se X < 0
(15)10 (0 0 0 0 1 1 1 1)2
(–15)10 (0 0 0 0 1 1 1 1)2(1 1 1 1 0 0 0 0)2 + 1
(1 1 1 1 0 0 0 1)2
Numeri Relativi (Z)
Interi relativi (con segno): … ‐3, ‐2, ‐1, 0, 1, 2, 3, …
b [ ]
# bit Range Range
8 [‐27, 27‐1] [‐128, 127]
n bit [‐2n, 2n‐1]
16 [‐215, 215‐1] [32.768, ‐32.767]
32 [‐231, 231‐1] [2.147.483.648, ‐2.147.483.647]
12/03/2013
18
Somma fra interi relativiSe si lavora con variabili a 8 bit, si ha:
riporticarry riporticarry
0 0 0 1 1 0 0 0
1 1 1 1 0 0 0 1
(24)10
(-15)10
+=
riporti
0 0 0 0 1 0 0 1
1 1 1 0 0 0 01
(9)10
carry
0 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0
(80)10
(80)10
+=
riporti
1 0 1 0 0 0 0 0
1 0 1 0 0 0 00
(-96)10
carry
overflow = 1
Il risultato NON è rappresentabile su 8 bit
overflow = 0
Il risultato è rappresentabile su 8 bit
Numeri Reali (R)
Codifica Floating Point: ‐12.345 = ‐ 12345 x 10‐3
segno esponente
Precisione # bit segno mantissa esponente range
singola 32 1 23 8 ±2127
doppia 64 1 52 11 ±21023
segnomantissa
p
quadrupla 128 1 112 15 ±216383
12/03/2013
19
Memoria RAMIn un’architettura a 16 bit, la memoria è suddivisa in“celle” di 2 byte:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HIGH Byte LOW byteOgni cella ha:un indirizzo di 16 bit (pari) espresso in esadecimaleun contenuto di 16 bit
31C4
un contenuto di 16 bit
indirizzo HIGH byte = indirizzo cella
indirizzo LOW byte = indirizzo cella + 1
12/03/2013
20
Memoria RAM
Il contenuto della cella
Con 16 bit si possono indirizzare 216 byte = 64 K byte
1 Kbyte 210 byte 1024 byte
00000002000400060008
0 0 0 0 0 1 0 1
Il contenuto della celladi indirizzo 0000 è (5)10
1 Kbyte 2 byte 1024 byte
1 Mbyte 220 byte ≅ 106 byte1 Gbyte 230 byte ≅ 109 byte1 Tbyte 240 byte ≅ 1012 byte
U i di 64 Kb t è
0 0 0 0 0 0 0 0
⋅⋅⋅⋅
FFFCFFFE
⋅⋅⋅⋅
Una memoria di 64 Kbyte èformata da 215 celle, tutte diindirizzo pari
Memoria RAMLa memoria contiene due registri particolari:
MAR Memory Address RegisterMemoria RAM
000000020004
⋅⋅⋅
MAR
MBR Memory Buffer RegisterMemoria RAM
La RAM sa fare solo 2 operazioni:
1. Lettura di una cella:cerca la cella di indirizzo MAR escrive il contenuto in MBR
FFFCFFFE
⋅
MBR
scrive il contenuto in MBR.
2. Scrittura di una cellaprende il dato in MBR e lo scrivenella cella di indirizzo MAR(il vecchio contenuto è perso).
12/03/2013
21
Memoria RAMNOTA: non è possibile operare sul singolo bit, ma solo su
sul byte o sulla cella.
Dunque, non è possibile chiedere alla RAM di copiare ilcontenuto di una cella xxxx in una cella yyyy.
Tale operazione dev’essere fatta dalla CPU in due passi:
1. Si chiede alla RAM un’operazione di lettura della celladi indirizzo xxxx; il contenuto viene prelevato dal BUSdi indirizzo xxxx; il contenuto viene prelevato dal BUS.
2. Si chiede alla RAM un’operazione di scrittura, nellacella di indirizzo yyyy, passando sul BUS il contenutoprima prelevato.
CPULa CPU opera seguendo le istruzioni di unmicroprogramma e utilizza vari registri:
CPUAXBXCXDX
CPURegistri generali (AX, BX, CX, DX)Servono per fare conti.
IP (Instruction Pointer)contiene l’indirizzo della successiva istruzione da eseguire.
SP (Stack Pointer)IPSP
AH ALBH BLCH CLDH DL
+5V
ALU
SP (Stack Pointer)contiene l’indirizzo di una zona di memoria denominata STACK.
IR1‐IR2 (Instruction Registers)contengono il codice operativo dell’istruzione da eseguire.
SP
IR1IR2
F
+5V
reset
12/03/2013
22
CPUF (Flag Register)Contiene informazioni sulla correttezza del risultato relativo all’ultimaoperazione eseguita:
CPU7 6 011
OF SF ZF CF
CF (Carry Flag):CF = 1 indica che il risultato non è rappresentabile come intero assoluto.
ZF (Zero Flag):ZF 1 i di h il i l è l
CPUAXBXCXDX
IPSP
AH ALBH BLCH CLDH DL
+5V
ALU
ZF = 1 indica che il risultato è uguale a zero.
SF (Sign Flag):SF = 1 indica che il risultato è negativo.
OF (Overflow Flag):OF = 1 indica che il risultato non è rappresentabile come intero relativo.
SP
IR1IR2
F
+5V
reset
CPUALU (Arithmetic‐Logic Unit)Contiene dei circuiti specializzati per eseguire operazioni aritmetiche e logiche sui dati:
CPUCPUAXBXCXDX
IPSP
AH ALBH BLCH CLDH DL
+5V
ALU
Modi operativi
Supervisor mode− Sono ammesse tutte le istruzioni− usato per il sistema operativo
User mode− limitato set di istruzioni SP
IR1IR2
F
+5V
reset
limitato set di istruzioni(es. la disabilitazione degli interrupt è impedita ai programmi utente).
Switching− È possibile commutare da un modo
all’altro con speciali istruzioni.
12/03/2013
23
Fasi della CPUIl funzionamento della CPU può essere schematizzatonelle seguenti fasi:
Fase di RESET
Fase di FETCH
Fase di
HALT
SI
NO
Fase di ESECUZIONE
INDIRIZZAMENTO
Fase di RESETQuando si preme il tasto di reset, la CPU effettua leseguenti operazioni:
1. Chiede alla RAM di leggere il contenuto della celladi indirizzo 0000.
2. Scrive tale contenuto nel registro F.
3. Chiede alla RAM di leggere il contenuto della celladi indirizzo 0002.
4. Scrive tale contenuto nel registro IP.
5. Passa alla fase di FECTH.
12/03/2013
24
Fase di RESET
Affinché tutto vada bene,deve succedere che:
F ← #(0000)IP ← #(0002)deve succedere che:
le prime celle della RAMsiano di natura indelebile(non si cancellino quando sispegne il computer).
ROM
⋅
00000002
RAM
⋅⋅⋅⋅
la cella 0002 contengal’indirizzo della cella in cuirisiede la prima istruzione delprogramma da eseguire.
Fase di FETCH
FETCH istruzioneFETCH istruzione
DecodificaIstruzione
completa?NO
completa?
SI
12/03/2013
25
1. La CPU chiede alla RAM di leggere il contenuto dellacella il cui indirizzo è scritto nel registro IP.
Fase di FETCH
2. Scrive tale contenuto nel registro IR1.
3. Incrementa di 2 il registro IP.
4. Esamina il contenuto di IR1, per capire se l’istruzioneè completa.p
5. Se l’istruzione non è completa, torna al passo 1,memorizzando il contenuto ricevuto in IR2, altrimentipassa alla fase successiva.
In questa fase, la CPU calcola l’indirizzo degli operandi,secondo le modalità specificate nell’istruzione prelevata:
Fase di INDIRIZZAMENTO
modalità significato
Immediato L’operando (sorgente) è contenuto nella seconda cella dell’istruzione (dunque nel registro IR2).
Registro L’operando è contenuto in un registro specificato nell’istruzione.
Diretto L’operando è contenuto in una cella di memoria, il cui indirizzo è specificato nell’istruzione.
Indiretto L’operando è contenuto in memoria: l’indirizzo èscritto in un registro specificato nell’istruzione.
12/03/2013
26
Fase di ESECUZIONE1. La CPU esegue l’operazione indicata dall’istruzione
sugli operandi sorgenti prelevati.
2. Scrive il risultato nella cella (o nel registro)dell’operando destinatario indicato.
+ − x ÷ HALT⋅ ⋅ ⋅
Fase di HALT
Quando la CPU esegue l’istruzione HALT, fermal’esecuzione ed entra in uno stato di attesa, fino alsuccessivo segnale di RESET.
12/03/2013
27
RAM
0100 MOV AX, dato
Stato dei registri prima dellafase di FETCH:
Esempio
IP
010201040106
IR1 ← #(IP)IP ← IP + 2IR2 ← #(IP)
IR1IR2
0 2 0 0
00000000
0100
Fase di FETCH
0200
⋅⋅⋅⋅
AAAA
AX 0000
IP ← IP + 2
RAM
0100
Stato dei registri dopo lafase di FETCH:
MOV AX, dato
Esempio
IP
010201040106
IR1IR2
0104IR1 ← #(IP)IP ← IP + 2IR2 ← #(IP)
Fase di FETCH0 2 0 0
MOV AX, dato0 2 0 0
⋅⋅⋅⋅
0200 AAAA
AX 0000
IP ← IP + 2
12/03/2013
28
RAM
0100
Esegue l’istruzione sugli operandiindicati:
MOV AX, dato
Esempio
IP
010201040106
IR1IR2
0104
0 2 0 0
MOV AX, dato0 2 0 0
⋅⋅⋅⋅
0200 AAAA
AX AAAAoperando sorgente:
si trova in memoria all’indirizzo 0200
operando destinatario:è il i t AXè il registro AX
Operazione effettuata:copia il contenuto della cella di indirizzo 0200 (AAAA) nel registro AX
12/03/2013
29
CPU vs. RAM
CPU RAMKeyboard Video
BUS
Il processore è molto più veloce della RAM, per cui l’ideaè trovare qualcosa da fargli fare per ridurre i tempi diattesa dovuti ai vari accessi in RAM:
CPU RAMInterface Interface
attesa dovuti ai vari accessi in RAM:
Parallelizzare le fasi interne
Sfruttare accessi ripetuti agli stessi dati
Parallelizzare l’I/O
In molti processori, la fase di FETCH avviene in paralleloalle altre due fasi.
Pre-FETCH
i ff lMentre viene effettuata la fase di indirizzamento e di esecuzione, vengono prelevate altre istruzioni dalla RAM, in sequenza, fino a riempire una coda interna
Fase di RESET
Fase di FETCH
F di ESECUZIONE
Fase diINDIRIZZAMENTO
HALT
SI
NO
a riempire una coda interna (pre‐fetch queue).
Le singole istruzioni vengono poi prelevate dalla codainterna per le due fasi successive. Dopo un’istruzione disalto la coda viene azzerata.
Fase di ESECUZIONE
12/03/2013
30
La cache è una memoria interna al processore, nonvisibile al software, che memorizza dati che possonoessere recuperati più velocemente
Cache
essere recuperati più velocemente.
RAM
BUS
cache
CPU
Quando si ha bisogno di un dato, primalo si cerca in cache: se c’è lo si usa,altrimenti lo si prende dalla RAM e lo siricopia in cache per successivi usi.
Il meccanismo funziona in quanto spesso i programmiaccedono alle stesse zone di memoria (località), e moltopiù spesso in lettura: la scrittura peggiora le prestazioni, inquanto una modifica in RAM va ripetuta in cache.
Può essere effettuato in tre modalità diverse:
I/O da periferiche
1. Polling: la CPU interroga ripetutamente la perifericaper sapere se è pronta. Se è pronta trasferisce i dati,altrimenti continua a interrogarla.
2. Interrupt: la periferica invia un segnale quando èpronta a inviare/ricevere un dato. Nel frattempo ilprocessore può eseguire altre istruzioniprocessore può eseguire altre istruzioni.
3. DMA (Direct Memory Access): la periferica trasferiscei dati direttamente in RAM, affidando il controllo delBus al DMA Controller.
12/03/2013
31
PollingLa CPU entra in un ciclo di “attesa attiva” per attendereche la periferica sia pronta al trasferimento dati:
Esempio: conversione A/D analogico digitale
Start conversion
R d SR
Set channelA/D converter
CRSOC CHAN
EOC
Control Register MUX
⋅ ⋅ ⋅CR3‐CR0
CR15 ← 1
Read DR
Read SR
EOC = 1
YES
NO
SR
Data Register
EOC
Status Register
DR
ADC
PollingDurante l’attesa attiva, la CPU non può fare altro.
ciclo di attesa attiva
Start conversion
Read SR
EOC = 1NO
Set channel tempociclo di attesa attiva
Read DRYES
Tale soluzione può essere valida solo per dispositiviveloci, o se non c’è nient’altro da fare.
12/03/2013
32
InterruptLa periferica è più complessa e, quando è pronta atrasferire i dati, invia un segnale IRQ (interrupt request).Nel frattempo il processore può eseguire altre istruzioniNel frattempo il processore può eseguire altre istruzioni.
Appena riceve l’IRQ, la CPUesegue una routine dedicata dettaInterrupt Service Routine (ISR),interrupt handler o device driver,h ff il f i d i
BUS
CPUDevice
Controller
Periferica
IRQ
I‐ID
che effettua il trasferimento dati.
La ISR fa parte del sistema operativo e si trova in RAM adun indirizzo prefissato, rintracciabile attraverso un codice(Interrupt‐ID) anch’esso inviato dalla periferica.
Interrupt
Enable
P1 P2 Wait forinterrupt IRQ
Wait forinterrupt
ReadData
Interrupt
driver
P1
P2
ISR
A differenza del Polling, l’istruzione Wait_for_interruptnon è un’attesa attiva, ma sospende il processo fino alcompletamento dell’ISR. Nel frattempo, la CPU puòeseguire altri processi.
12/03/2013
33
Interrupt multipliLa CPU ha un solo pin di IRQ, per cui la gestione diinterrupt multipli è affidata ad un Interrupt Controller:
BUS
CPU
IRQ
I‐ID
InterruptController
RAM ⋅ ⋅ ⋅
IRQnIRQ1
device1
devicen
I vari IRQ hanno priorità diverse: p(IRQi) > p(IRQi+1).
L’esecuzione di una ISR può essere interrotta daun’altra a priorità maggiore.
CLI - STIAlcune operazioni non possono essere interrotte, per cuiesiste la possibilità di disabilitare/abilitare gli interrupt:CLI Clear Interrupts
P
Wait forinterrupt IRQ
CLI – Clear InterruptsSTI – Set Interrupts
CLI STI
Un IRQ che arriva ad interruzionidisabilitate viene memorizzato e haeffetto appena viene eseguita la STI:
driver
P1
P2
ISR
12/03/2013
34
Per gestire le interruzioni, le fasi della CPU si modificanocome segue:
Interrupt
Fase di RESET
Fase di FETCH
HALT
SI
NO Fase diAccettazione IRQ
SI
NO
∃ IRQ?
Fase di ESECUZIONE
Fase diINDIRIZZAMENTO
NOTA:
Un’istruzione non vienemai interrotta da un IRQ.
1. Salva il contenuto dei registri IP e SP nello STACK (per)
Fase di Accettazione IRQIn questa fase la CPU deve saltare alla routine ISR:
poi ritornare al punto successivo all’interruzione).
2. Preleva il codice I‐ID dalla periferica per trovare laroutine di servizio ISR (nuovi valori di IP e SP).
3. Carica in IP e SP i nuovi valori trovati.
NOTALo stato dei registri non viene salvato automaticamente,per cui la routine ISR, se utilizza dei registri, deve salvareil loro contenuto nello STACK e ripristinarlo al termine.
12/03/2013
35
Salto a ISR e ritorno
0100
RAMIP
salva AX
0306A B C
Get IID
stack← IPstack← SP
∃ IRQ?SI
NO
0102010401060108010A
⋅⋅⋅
03000302
⋅⋅⋅
Use AXUse BX
stack← AXstack← BX
ISR
salva
trova
salva
lavora
salva BXusa AX, BXripristina BXripristina AX
IRET
AB
IP ← f(IID)SP← g(IID)
Fase di FETCH
0302030403060308030A030C
BX← stackAX← stack
SP← stackIP ← stack
IRET
saltaripristina
ritorna
BCDEFG
Salto a ISR e ritorno
0100
RAMIP
salva AX
0100A B C
Get IID
stack← IPstack← SP
∃ IRQ?SI
NO
0102010401060108010A
⋅⋅⋅
03000302
⋅⋅⋅
Use AXUse BX
stack← AXstack← BX
ISR
salva BXusa AX, BXripristina BXripristina AX
IRET
AB
salva
trova
salva
lavora
IP ← f(IID)SP← g(IID)
Fase di FETCH
0302030403060308030A030C
BX← stackAX← stack
SP← stackIP ← stack
IRET
BCDEFG
saltaripristina
ritorna
12/03/2013
36
Salto a ISR e ritorno
0100
RAMIP
salva AX
010AA B C
Get IID
stack← IPstack← SP
∃ IRQ?SI
NO
0102010401060108010A
⋅⋅⋅
03000302
⋅⋅⋅
Use AXUse BX
stack← AXstack← BX
ISR
salva BXusa AX, BXripristina BXripristina AX
IRET
AB
salva
trova
salva
lavora
IP ← f(IID)SP← g(IID)
Fase di FETCH
0302030403060308030A030C
BX← stackAX← stack
SP← stackIP ← stack
IRET
BCDEFG
saltaripristina
ritorna
Salto a ISR e ritorno
0100
RAMIP
salva AX
0306A B C D E F G
Get IID
stack← IPstack← SP
∃ IRQ?SI
NO
0102010401060108010A
⋅⋅⋅
03000302
⋅⋅⋅
Use AXUse BX
stack← AXstack← BX
ISR
salva BXusa AX, BXripristina BXripristina AX
IRET
AB
salva
trova
salva
lavora
IP ← f(IID)SP← g(IID)
Fase di FETCH
0302030403060308030A030C
BX← stackAX← stack
SP← stackIP ← stack
IRET
BCDEFG
saltaripristina
ritorna
12/03/2013
37
DMASi usa per trasferire grosse quantità di dati (disco, rete).
L’interfaccia è ancora più complessa (una piccola CPU).Quando il buffer è pieno, comincia il trasferimento sulBUS direttamente con la RAM, senza coinvolgere la CPU.
Essendo il BUS unico, occorre impedire alla CPU di usareil BUS quando il dispositivo DMA trasferisce un dato.
BUSiò i f d i
CPU RAM DMAdevice
BUS
hold‐req
hold‐ack
Ciò viene fatto attraverso deisegnali di sincronizzazione:
hold‐req DMA chiede il BUS
hold‐ack la CPU acconsente
Problemi derivatiI meccanismi ora discussi migliorano le prestazioni medie,ma possono peggiorare i tempi di calcolo in casi particolari:
Prefetch: dopo un salto occorre invalidare la coda diprefetch.
Cache: se un dato non è nella cache (cache miss)occorre prelevarlo dalla RAM e scriverlo nellacache.cache.
Interrupt: l’interrupt introduce ritardi maggiori nei task.
DMA: i conflitti sul BUS costringono la CPU a cederedei cicli di lettura/scrittura alla periferica.
12/03/2013
38
Problemi derivatiLa conseguenza è che tali meccanismi migliorano i tempi dicalcolo minimi e medi, ma peggiorano i tempi massimi:
μsCmaxCavgCmin
distribuzionetempi di calcolo
senza meccanismi
μsCmaxCavgCmin
distribuzionetempi di calcolocon meccanismi
12/03/2013
39
Si dividono in:
Istruzioni Assembler
Istruzioni operative Eseguono operazioni sui− Aritmetiche
− Logiche
− Trasferimento
− Traslazione/Rotazione
I t i i di t ll
g pdati.
Istruzioni di controllo− Salto
− Gestione sottoprogrammi
− HALT
Determinano il flusso delprogramma in funzionedei risultati ottenuti.
Istruzioni Aritmetiche
Istruzione Operazione
ADD dest, sorg dest ← sorg + dest
SUB dest, sorg dest ← dest – sorg
INC dest dest ← dest + 1
DEC dest dest ← dest – 1
CMP op1, op2 F ← op1 – op2
NEG dest dest ← – dest
MUL sorg DX_AX ← AX ∗ sorg
DIV sorgAX ← quoz(DX_AX / sorg)DX ← resto(DX_AX / sorg)
12/03/2013
40
Istruzioni Logiche
Istruzione Operazione
AND dest, sorg dest ← sorg AND dest
OR dest, sorg dest← sorg OR dest
XOR dest, sorg dest ← sorg XOR dest
NOT dest dest ← NOT destNOT dest dest ← NOT dest
Istruzioni Operative
Istruzione Operazione
MOV dest, sorg dest ← sorg
PUSH sorg stack ← sorg
POP dest dest ← stack
IN AX, port AX ← port
OUT port, AX port ← AX
SHL dest, n Shift Leftl i
Trasferimento
SHL dest, n Shift Left
SHR dest, n Shift Right
ROL dest, n Rotate Left
ROR dest, n Rotate Right
Traslazione
Rotazione
12/03/2013
41
Modalità di Indirizzamento
Modalità Significato Esempio
Immediato Operando nell’istruzione MOV AX, 1234H
Registro Operando in un registro MOV AX, BX
Operando in memoria:Diretto Operando in memoria: indirizzo nell’istruzione
MOV AX, dato
Indiretto Operando in memoria: indirizzo in un registro
MOV AX, [BX]
Istruzioni di ControlloLe istruzioni di salto condizionato si usano dopo una CMP:
CMP AX, BX ; confronta AX con BXJE ind ; salta all’indirizzo ind se AX = BX
Istruzione Operazione
JMP ind salto incondizionato a ind
JE ind Jump if Equal
JLE ind Jump if Less or Equal
JE ind ; salta all indirizzo ind se AX BX
JG ind Jump if Greater
JGE ind Jump if Greater or Equal
JZ ind Jump if Zero
JNZ ind Jump if Not Zero
12/03/2013
42
Istruzioni di Controllo
Le seguenti istruzioni sono utilizzate per "saltare a" e"tornare da" un sottoprogramma:
Istruzione Operazione
CALL sub salta al sottoprogramma sub
RET ritorno dal sottoprogramma
Stack
Lo STACK è una zona della RAM che viene utilizzata per:Gestire i sottoprogrammiSalvare il contenuto dei registriAllocare le variabili locali delle procedure
Lo STACK è gestito con strategia Last‐In‐First‐Out (LIFO):l’ultimo dato inserito è il primo ad essere prelevato:
PUSH red inserisce nello stack il contenuto della celladi memoria di nome red
POP red preleva il contenuto dalla cella in cima allostack e lo mette in memoria nella cella red
12/03/2013
43
Stack
Registro SP (Stack Pointer)− Contiene in ogni istante l’indirizzo della cella di STACK in cui è stato
inserito l’ultimo dato. Si dice che SP punta sempre al TOP dello STACK.
PUSH sorg
SP ← SP – 2
Scrive il contenuto dell’operandosorgente nella cella puntata da SP
03000302030403060308
Stack
SP
inserito l ultimo dato. Si dice che SP punta sempre al TOP dello STACK.
RAM
0 3 0 6
54sorgente nella cella puntata da SP
POP dest
Legge il contenuto della cella puntata daSP e lo scrive nell'operando destinatario
SP ← SP + 2
030A030C030E0310031203140316
321
Stack− Se all'inizio SP contiene il valore 0310, dopo le seguenti
istruzioni la situazione è quella illustrata in figura:
1 PUSH 32
PUSH sorg
SP ← SP – 2
03000302030403060308
Stack
RAM0 3 0 C
1. PUSH 322. PUSH 153. PUSH 994. POP dato
SP
sorg → stack
POP dest
dest ← stack
SP ← SP + 2
030A030C030E0310031203140316
321599
dato 99
12/03/2013
44
SottoprogrammiUn sottoprogramma è una sequenza di istruzioni chepuò essere richiamata più volte all’interno di unprogramma con dati di volta in volta differenti:programma, con dati di volta in volta differenti:
Sottoprogramma
sub:
CALL sub
Programma principale
start:La gestione avvienemediante due istruzioni:
CALL salta al indirizzospecificato
RET
CALL sub
specificato
RET ritorna all’istruzionesuccessiva alla CALL
SottoprogrammiPer gestire correttamente un sottoprogrammaoccorre risolvere tre problemi:
1 T il tt hi t1. Trovare il sottoprogramma chiamato.2. Ritornare, dopo la sua terminazione,
all’istruzione successiva alla sua chiamata.3. Passargli i dati su cui operare.
Per tornare al punto giusto, prima di saltare occorresalvare l’indirizzo dell’istruzione successiva alla CALL.NOTA: durante la fase di esecuzione della CALL, tale
indirizzo è contenuto nel registro IP.
12/03/2013
45
Sottoprogrammi
CALL subS l ll STACK l’i di i d ll’i t i− Salva nello STACK l’indirizzo dell’istruzionesuccessiva alla CALL (PUSH IP).
− Salta all’indirizzo del sottoprogrammaspecificato (MOV IP, sub).
RETRET− Preleva l’indirizzo di ritorno dallo stack esalta a tale indirizzo (POP IP).
Chiamate annidateIl salvataggio nello stack permette di effettuarechiamate di sottoprogrammi annidati:
Stack
CALL sub1
Programmaprincipale
start:
Sottoprogr. 2
sub2:
Sottoprog. 1
sub1:
CALL sub2xxxx: yyyy: yyyySP
RETRET
yyyyxxxxyyyySP
12/03/2013
46
Chiamate annidateIl salvataggio nello stack permette di effettuarechiamate di sottoprogrammi annidati:
Stack
CALL sub1
Programmaprincipale
start:
Sottoprogr. 2
sub2:
Sottoprog. 1
sub1:
CALL sub2xxxx: yyyy:
RETRET
yyyy
SP
Passaggio dei parametriIl passaggio dei dati ad un sottoprogramma può avvenire:
1. Per mezzo dei registri della CPU;
2 Per mezzo dello STACK2. Per mezzo dello STACK.
In entrambi i casi, il programma chiamante deve:− copiare i parametri nei registri o nello STACK;
− effettuare la CALL al sottoprogramma;
− prelevare i risultati prodotti dai registri o dallo STACK.
Infine, un parametro può essere passato:Per valore: in tal caso il sottoprogramma non può modificare lavariabile in cui è contenuto il dato;
Per indirizzo: in questo caso il sottoprogramma può prelevaree modificare la variabile in cui è contenuto il dato.
12/03/2013
47
Passaggio con registri
Programma principale Sottoprogramma
MOV AX, dato1MOV BX, dato2CALL sommaMOV risu, CX
somma: MOV CX, AXADD CX, BXRET
La procedura somma siMOV risu, CXaspetta i dati in AX e BXe lascia il risultato in CX
Passaggio nello STACKQuesta tecnica è più generale poiché consente di passareun numero arbitrario di parametri.
Per usare questa tecnica il programma chiamante deve:
− Inserire nello STACK il valore o l’indirizzo dei parametri;
− Effettuare la CALL al sottoprogramma;
Ripulire lo STACK togliendo da esso i parametri inseriti− Ripulire lo STACK togliendo da esso i parametri inseriti(per far questo è sufficiente incrementare SP delnumero di byte occupati dai parametri).
12/03/2013
48
Passaggio nello STACK
Per usare questa tecnica il sottoprogramma deve:
Salvare i registri utilizzati nello STACK− Salvare i registri utilizzati nello STACK;
− Prelevare i parametri dallo STACK;
− Effettuare le operazioni sui dati;
− Depositare il risultato in memoria all’indirizzospecificato;
− Ripristinare il valore dei registri.
− Ritornare al programma chiamante (RET);