istre02-arch-w.ppt [modalità...

48
12/03/2013 1 Real-Time Systems Laboratory RETIS L ab Giorgio Buttazzo 2. 2. Architettura Architettura del del calcolatore calcolatore Componenti principali Sommario Rappresentazione dell’informazione Funzionamento del processore Meccanismi per migliorare l’efficienza: Prefetch, Cache, Interrupt, DMA Problemi derivati Problemi derivati Linguaggio Assembler Gestione di procedure

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);