125
1 L'architettura di Von Neumann Architettura di riferimento dei moderni calcolatori digitali (anni '40) Descrive un calcolatore general purpose di tipo “stored program” Dati e programmi ospitati nella stessa memoria (principale) Un processore esegue programmi che elaborano dati Dispositivi I/O Implementazione di una macchina di Turing universale

Sistemi Operativi: Meccanismi - Lezione 03

Embed Size (px)

Citation preview

Page 1: Sistemi Operativi: Meccanismi - Lezione 03

1

L'architettura di Von Neumann• Architettura di riferimento dei moderni

calcolatori digitali (anni '40)• Descrive un calcolatore general purpose

di tipo “stored program”– Dati e programmi ospitati nella stessa

memoria (principale)– Un processore esegue programmi che

elaborano dati– Dispositivi I/O

• Implementazione di una macchina di Turing universale

Page 2: Sistemi Operativi: Meccanismi - Lezione 03

2

L'architettura di Von Neumann

Memoriaprincipale

M

Unità dicontrollo

U

Unitàaritmetico

logica

U

Accumulatore

A

Input

I

Output

O

Page 3: Sistemi Operativi: Meccanismi - Lezione 03

3

Limiti dell'architettura di base• Un solo dispositivo di ingresso-uscita• Un solo registro (accumulatore)• Componenti con velocità molto differenti

– necessità di sincronizzare la comunicazione

• Collo di bottiglia di Von Neumann:– la velocità di comunicazione

CPU/memoria è il fattore limitante

Page 4: Sistemi Operativi: Meccanismi - Lezione 03

4

Estensioni del modello diVon Neumann

• Utilizzo di bus per il collegamento e la comunicazione efficiente di molteplici periferiche

• Utilizzo di processori con caratteristiche migliori

• Trasferimento dati asincrono– Interruzioni– Direct Memory Access (DMA)

Page 5: Sistemi Operativi: Meccanismi - Lezione 03

5

BUS• Sottosistema deputato a trasferire dati

fra unità periferiche• Compiti:

– Fornire collegamenti di comunicazione fra periferiche e memoria/CPU

– Arbitrare l'accesso ai collegamenti di comunicazione

Page 6: Sistemi Operativi: Meccanismi - Lezione 03

6

BUS• Molteplici linee di comunicazione

– Address bus: trasporta gli indirizzi di accesso alla memoria

– Data bus: trasporta I dati dalla/alla memoria– Control bus: trasporta segnali di controllo

• Master (active) device: può iniziare azioni di trasferimento

• Slave (passive) device: ascolta le richieste– Comando: CPU master, disk slave– Trasferimento dati: disk master, memoria

slave• La memoria non può mai essere master!

Page 7: Sistemi Operativi: Meccanismi - Lezione 03

7

Architettura con BUS

CPU

C

Memoriaprincipale

M

Unità I/O

U

Unità I/O

U

Address bus

Data bus

Control bus

Page 8: Sistemi Operativi: Meccanismi - Lezione 03

8

BUS sincrono: lettura

CLK

ADDR

DATA

RD/WR

ENABLE

1. La CPU (master) scrive l'indirizzodi memoria sulla linea ADDR

A1

Page 9: Sistemi Operativi: Meccanismi - Lezione 03

9

BUS sincrono: lettura

CLK

ADDR

DATA

RD/WR

ENABLE

2. La CPU imposta ad 1il segnale RD

A1

Page 10: Sistemi Operativi: Meccanismi - Lezione 03

10

BUS sincrono: lettura

CLK

ADDR

DATA

RD/WR

ENABLE

3. La CPU aspetta un ciclo1-0-1 su ENABLE prima di leggere DATA

A1

Page 11: Sistemi Operativi: Meccanismi - Lezione 03

11

BUS sincrono: lettura

CLK

ADDR

DATA

RD/WR

ENABLE

4. Nel frattempo, la memoria (slave) riconosceil suo indirizzo in ADDR e scrive il valore suDATA

A1

D1

Page 12: Sistemi Operativi: Meccanismi - Lezione 03

12

BUS sincrono: lettura

CLK

ADDR

DATA

RD/WR

ENABLE

3. La CPU legge il valore su DATA

A1

D1

Page 13: Sistemi Operativi: Meccanismi - Lezione 03

13

Tipologie di BUS comuni (IBM PC)• Seriali (USB, SATA), paralleli (ATA, SCSI)• Sincroni, asincroni• Di sistema (processor-memory)

– Front-side bus• Di I/O (periferica-memoria):

– ISA, EISA, PCI, PCI-Express, USB, Firewire, AGP

• Bridge (interconnessione bus diversi)• Backside (processore-cache L2)

Le periferiche si collegano ad un canale del bus!

Page 14: Sistemi Operativi: Meccanismi - Lezione 03

14

Unità periferiche

• Controllore: è un circuito elettronico responsabile del trasferimento dati periferica-buffer locale– gestione di un buffer di memoria locale– gestione di un insieme di registri

speciali♦registri di stato♦registri di comando

• Periferica = Controllore + attuatore (meccanico, ottico, elettromagnetico)

Page 15: Sistemi Operativi: Meccanismi - Lezione 03

15

Esempio di periferica

Disco SCSI

Page 16: Sistemi Operativi: Meccanismi - Lezione 03

16

BUS e periferiche

Alloggiamenti (slot) BUS PCI Scheda PCI

Page 17: Sistemi Operativi: Meccanismi - Lezione 03

17

La scheda madre

Page 18: Sistemi Operativi: Meccanismi - Lezione 03

18

La scheda madre

Page 19: Sistemi Operativi: Meccanismi - Lezione 03

19

Il processore (Intel): registri• Presenza di svariati registri (16, 32, 64 bit)• Registri general purpose:

– EAX, EBX, ECX, EDX• Instruction pointer:

– EIP• Stack pointer:

– ESP, EBP• Stato (overflow, segno, riporto):

– EFLAGS

Page 20: Sistemi Operativi: Meccanismi - Lezione 03

20

Il processore (Intel): memoria• Uso di svariate cache velocissime (L1, L2) per

ridurre l'effetto del collo di bottiglia di Von Neumann– memorie associative: TLB

• Due modelli di memoria possibili:– Flat model ( un solo unico grande blocco)– Segmentato (ciascun processo ha a

disposizione un proprio blocco di memoria)• Modalità di indirizzamento:

– Registro (mov eax, ecx)– Immediato (mov eax, 26)– Registro diretto (mov eax, [esp])– Spiazzamento (mov eax, [esp + 4])

Page 21: Sistemi Operativi: Meccanismi - Lezione 03

21

Il processore (Intel): istruzioni• Modello set istruzioni

– CISC: poche istruzioni, complesse– RISC: molte istruzioni, semplici

• Flusso istruzioni superscalare:– due pipeline a cinque stadi (Pentium)

♦1 generica, l'altra per op. su interi– Fetch: prelievo opcode istruzione– Decode: decodifica istruzione– Operand fetch: prelievo operando– Instruction execution: esecuzione istruzione– Write back: scrittura del risultato

Page 22: Sistemi Operativi: Meccanismi - Lezione 03

22

Il processore (Intel): parallelismo• Hyperthreading:

– una copia della circuiteria per l'esecuzione delle istruzioni

– più copie dei registri general purpose e di controllo

– esecuzione simultanea di codice su dati diversi

• Multi-core:– presenza di più miniprocessori con cache L1

(detti core)– unica cache L2 condivisa fra i vari core

Page 23: Sistemi Operativi: Meccanismi - Lezione 03

23

Il processore (Intel): Pentium

Page 24: Sistemi Operativi: Meccanismi - Lezione 03

24

Il processore (Intel): Pentium

Il processore

Lo schema architetturale

La ventola di raffreddamento(CPU fan)

Page 25: Sistemi Operativi: Meccanismi - Lezione 03

25

Meccanismi trasferimento dati• Sistemi time-sharing e multiprogrammati• Meccanismi per la sovrapposizione di:

– operazioni CPU– operazioni I/O

• Meccanismi sofisticati di trasferimento dati:– basati su interruzioni– basati su DMA

Page 26: Sistemi Operativi: Meccanismi - Lezione 03

26

Trasferimento dati nei vecchi sistemi• Trasferimento dati controllato da CPU• Nessuna sovrapposizione CPU – I/OEsempio: stampa dati dalla memoria

1.Controlla se stampante è pronta a ricevere il carattere successivo

2.Se non è pronta, torna al passo 1.3.Se è pronta, controlla se è necessario

stampare un altro carattere4.Se c'è un altro carattere, torna al passo 1.5.Se non ci sono altri caratteri->FINE

Page 27: Sistemi Operativi: Meccanismi - Lezione 03

27

Trasferimento dati nei vecchi sistemi

• Busy waiting:– la CPU controlla costatemente lo stato

relativo all'I/O, mantenendosi attiva– Conseguentemente, la CPU non può

intraprendere alcuna altra operazione– spreco di potenza di calcolo– Soluzione: sistema di I/O basato sulle

interruzioni

Page 28: Sistemi Operativi: Meccanismi - Lezione 03

28

Trasferimento dati basato su interruzioni

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

Page 29: Sistemi Operativi: Meccanismi - Lezione 03

29

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

1. La CPU carica i registri di comandoidonei all'interno del controllore econtinua l'esecuzione normale delprogramma.

Page 30: Sistemi Operativi: Meccanismi - Lezione 03

30

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

2. Il controllore esamina il contenuto deiregistri di comando per decidere l'opera-zione da intraprendere (ad es., read).

?

Page 31: Sistemi Operativi: Meccanismi - Lezione 03

31

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

3. Il controllore pilota il trasferimento deidati dalla periferica opportuna al bufferdi dati locale.

Page 32: Sistemi Operativi: Meccanismi - Lezione 03

32

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

4. La periferica trasferisce i dati versoil buffer locale nel controllore.

Page 33: Sistemi Operativi: Meccanismi - Lezione 03

33

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

5. Al termine del trasferimento, ilcontrollore segnala la presenza deidati tramite una interruzione.

Page 34: Sistemi Operativi: Meccanismi - Lezione 03

34

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

6. La CPU interrompe ciò che stavafacendo e trasferisce il controllo ad unalocazione fissa: procedura di serviziodella interruzione.

Page 35: Sistemi Operativi: Meccanismi - Lezione 03

35

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

7. La procedura di servizio dell'interruzionetrasferisce i dati dal buffer locale delcontrollore alla memoria principale.

Page 36: Sistemi Operativi: Meccanismi - Lezione 03

36

Trasferimento dati basato su interruzioni: esempio

CPU

Controllore di memoria

memoria

controlloreunitàdischi

controlloredi lettoreschede

controlloreunitànastri

7. Terminato il trasferimento dati inmemoria, la CPU riprende i calcoliinterrotti.

Page 37: Sistemi Operativi: Meccanismi - Lezione 03

37

Vettore delle interruzioni• Una procedura di gestione per ciascuna

classe di controllori• Dove sono memorizzati gli indirizzi delle

procedure di controllo?• Vettore delle interruzioni: vettore degli

indirizzi delle procedure di controllo– indicizzato da:

♦un numero di dispositivo♦un identificatore della linea di interruzione

(IRQ)– memorizzato nelle prime locazioni di

memoria

Page 38: Sistemi Operativi: Meccanismi - Lezione 03

38

Nesting delle interruzioni• Nei primi sistemi basati su interruzioni, durante la

gestione di una interruzione le altre interruzioni vengono disabilitate

– evitare che più interrupt identiche possano operare sugli stessi dati

• Le architetture più sofisticate permettono l'esecuzione annidata (nesting) delle interruzioni

– assegnazione di priorità alle diverse interruzioni

– interruzioni di priorità superiore vengono servite prima, anche in presenza di una interruzione di priorità inferiore

– in quest'ultimo caso, vengono disabilitate tutte le interruzioni di priorità inferiore a quella in esecuzione

Page 39: Sistemi Operativi: Meccanismi - Lezione 03

39

Eccezioni• Eccezione: interruzione generata dal

software condizioni anomale– divisione per zero– accesso alla memoria non valido

• Trap: procedura di servizio associata ad una eccezione

Page 40: Sistemi Operativi: Meccanismi - Lezione 03

40

Salvataggio degli indirizzi di ritorno• Poichè l'esecuzione di codice può essere

interrotta in maniera asincrona, è necessario salvare l'indirizzo di ritorno

• Indirizzo di ritorno: indirizzo successivo all'ultima istruzione eseguita prima della interruzione

Page 41: Sistemi Operativi: Meccanismi - Lezione 03

41

Salvataggio degli indirizzi di ritorno• Indirizzo di ritorno memorizzato su una

pila (stack, ESP) di sistema• Lo stack contiene una sequenza di stack

frame (EBP)– indirizzo di ritorno, valore di alcuni registri

della CPU, parametri di ingresso e di uscita

• Al termine della procedura di servizio della interruzione:– valore dei registri CPU viene ripristinato– esecuzione riprende da indirizzo di ritorno

Page 42: Sistemi Operativi: Meccanismi - Lezione 03

42

Uso dello stack: un esempio• Si supponga di avere un programma che

esegue la funzione DrawSquare(), che a sua volta esegue la funzione DrawLine()

void DrawLine( ... ) {

...

}

void DrawSquare( ... ) {

DrawLine(...);

}

int main() {

DrawSquare( ... );

}

Page 43: Sistemi Operativi: Meccanismi - Lezione 03

43

Uso dello stack: un esempio• Quando DrawSquare() è in esecuzione (prima di

invocare DrawLine()), lo stack delle chiamate si presenta nel modo seguente:

Var. localiDrawSquare()

Ind. Ritorno

ParametriDrawSquare()

Stack frameDrawSquare() Frame pointer

Stack pointer

Page 44: Sistemi Operativi: Meccanismi - Lezione 03

44

Uso dello stack: un esempio• Quando DrawLine() è in esecuzione, lo stack delle

chiamate si presenta nel modo seguente:

Var. localiDrawLine()

Ind. Ritorno

ParametriDrawLine()

Var. localiDrawSquare()

Ind. Ritorno

ParametriDrawSquare()

Stack frameDrawSquare()

Stack frameDrawLine()

Stack pointer

Frame pointer

Page 45: Sistemi Operativi: Meccanismi - Lezione 03

45

Uso dello stack: un esempio• Quando DrawSquare() ritorna in esecuzione (dopo la

chiamata a DrawLine()), lo stack delle chiamate si presenta nel modo seguente:

Var. localiDrawSquare()

Ind. Ritorno

ParametriDrawSquare()

Stack frameDrawSquare() Frame pointer

Stack pointer

Page 46: Sistemi Operativi: Meccanismi - Lezione 03

46

Uso dello stack sull'INTEL• Si prenda il sorgente prova.c allegato

– lo si compili: gcc -o prova prova.c– Si generi l'assembly: gcc -S prova.c

• In alternativa, si disassembli prova:– objdump –disassemble prova

(comprende gli stub della glibc)• Si apra il file prova.s• File suddiviso in “sezioni”

– Sezione: area di memoria deputata a contenere codice, dati, quant'altro

– Ciascuna sezione ha una etichetta (label) che la contraddistingue

Page 47: Sistemi Operativi: Meccanismi - Lezione 03

47

Uso dello stack sull'INTEL• Conoscenza necessaria dell'assembly x86• movl: copia un valore a 32 bit da un

registro/memoria ad un altro registro/memoria• pushl: inserisci un valore nello stack• popl: rimuovi un valore dallo stack• addl/subl: aggiunge/sottrae un valore a 32 bit da

un registro/memoria ad un altro registro/memoria• leave: toglie il valore del frame pointer dallo stack• ret: ritorno da funzione• leal: carica indirizzo effettivo• andl: and bit a bit (allinea a multipli di 16)• call: chiamata a subroutine

Page 48: Sistemi Operativi: Meccanismi - Lezione 03

48

Chiamata a funzione• Viene effettuata una push di tutti gli argomenti,

dall'ultimo al primo

• Viene effettuata una chiamata alla funzione

• f(a, b); diventa:– pushl a– bushl b– call f

Page 49: Sistemi Operativi: Meccanismi - Lezione 03

49

Scheletro funzione• Lo scheletro di una tipica funzione in

Assembly è il seguente– salvataggio valore corrente frame pointer– impostazione frame pointer a stack pointer

corrente (1)– creazione spazio per le variabili locali (2)– backup registri da preservare (3)– corpo della funzione (4)– restore registri da preservare (5)– rilascia spazio legato alle variabili locali (6)– ripristina il valore precedente di frame pointer

(7)– Return (8)

Page 50: Sistemi Operativi: Meccanismi - Lezione 03

50

Scheletro funzione (Assembly)pushl %ebpmovl %esp, %ebpsubl $N, %esppushl %ebxpush %esi...popl %esipopl %ebxmovl %ebp, %esppopl %ebpret

(1)(1)(2)(3)(3)(4)(5)(5)(6)(7)(8)

(2) Nei sistemi Intel, lo stackcresce verso gli indirizzipiù bassi!

Page 51: Sistemi Operativi: Meccanismi - Lezione 03

51

Impatto delle istruzioni sullo stack

Stack frameprecedente

F

EBP

E

ESP

E

Prima della chiamata f(a, b);

Page 52: Sistemi Operativi: Meccanismi - Lezione 03

52

Impatto delle istruzioni sullo stack

Stack frameprecedente

F

EBP

E

ESP

E

pushl apushl b

ab

Page 53: Sistemi Operativi: Meccanismi - Lezione 03

53

Impatto delle istruzioni sullo stack

Stack frameprecedente

F

EBP

E

pushl apushl bcall f

ab

ESP

E

vecchio EIP

Page 54: Sistemi Operativi: Meccanismi - Lezione 03

54

Impatto delle istruzioni sullo stack

vecchio EBP

pushl %ebp

Stack frameprecedente

F

EBP

E

ab

ESP

E

vecchio EIP

Page 55: Sistemi Operativi: Meccanismi - Lezione 03

55

Impatto delle istruzioni sullo stack

vecchio EBP

pushl %ebpmovl %esp, %ebp

Stack frameprecedente

F

EBP

E

ab

ESP

E

vecchio EIP

Page 56: Sistemi Operativi: Meccanismi - Lezione 03

56

Impatto delle istruzioni sullo stack

ESP

E

pushl %ebpmovl %esp, %ebpsubl $N, %esp

var. loc. 1var. loc. 2

...

.

var. loc. N/4

vecchio EBP

Stack frameprecedente

F

ab

vecchio EIPEBP

E

Page 57: Sistemi Operativi: Meccanismi - Lezione 03

57

Impatto delle istruzioni sullo stack

ESP

E

pushl %ebpmovl %esp, %ebpsubl $N, %esppushl %ebxpush %esi

EBX

E

ESI

var. loc. 1var. loc. 2

...

.

vecchio EBP

Stack frameprecedente

F

ab

vecchio EIPEBP

E

var. loc. N/4

Page 58: Sistemi Operativi: Meccanismi - Lezione 03

58

Impatto delle istruzioni sullo stackpushl %ebpmovl %esp, %ebpsubl $N, %esppushl %ebxpush %esi... (corpo funzione)

ESP

E

EBX

E

var. loc. 1var. loc. 2

...

.

vecchio EBP

Stack frameprecedente

F

ab

vecchio EIPEBP

E

var. loc. N/4

ESI

Page 59: Sistemi Operativi: Meccanismi - Lezione 03

59

Impatto delle istruzioni sullo stackpushl %ebpmovl %esp, %ebpsubl $N, %esppushl %ebxpush %esi...popl %esipopl %ebx

var. loc. 1var. loc. 2

...

.

vecchio EBP

Stack frameprecedente

F

ab

vecchio EIPEBP

E

var. loc. N/4 ESP

E

Page 60: Sistemi Operativi: Meccanismi - Lezione 03

60

Impatto delle istruzioni sullo stackpushl %ebpmovl %esp, %ebpsubl $N, %esppushl %ebxpush %esi...popl %esipopl %ebxmovl %ebp, %esp

vecchio EBP

Stack frameprecedente

F

EBP

E

ab

ESP

E

vecchio EIP

Page 61: Sistemi Operativi: Meccanismi - Lezione 03

61

Impatto delle istruzioni sullo stackpushl %ebpmovl %esp, %ebpsubl $N, %esppushl %ebxpush %esi...popl %esipopl %ebxmovl %ebp, %esppopl %ebp Stack frame

precedente

F

EBP

E

ab

ESP

E

vecchio EIP

Page 62: Sistemi Operativi: Meccanismi - Lezione 03

62

Impatto delle istruzioni sullo stackpushl %ebpmovl %esp, %ebpsubl $N, %esppushl %ebxpush %esi...popl %esipopl %ebxmovl %ebp, %esppopl %ebpret

Stack frameprecedente

F

EBP

E

ESP

E

L'istruzione ret estrae dallo stackil solo indirizzo di ritorno, e non iparametri a e b. Nella realtà,l'indirizzo iniziale dello stackviene salvato e ripristinato.

Il valore di ritorno della funzioneviene scritto nel registro %eax.

Page 63: Sistemi Operativi: Meccanismi - Lezione 03

63

Espressioni notevoli• 16(%ebp): terzo parametro della funzione

• 12(%ebp): secondo parametro della funzione

• 8(%ebp): primo parametro della funzione

• 4(%ebp): vecchio instruction pointer

• 0(%ebp): vecchio frame pointer

• -4(%ebp): prima variabile locale

• -8(%ebp): seconda variabile locale

• -12(%ebp): terza variabile locale

Page 64: Sistemi Operativi: Meccanismi - Lezione 03

64

Programmed I/O• Tecnica originaria di trasferimento dati• Il trasferimento avviene tramite funzioni

assembler (in()/out()) eseguite dal processore

• Il processore aspetta il risultato della chiamata, senza poter fare altro

• Utilizzata nei dischi IDE/ATA

Page 65: Sistemi Operativi: Meccanismi - Lezione 03

65

Direct Memory Access (DMA)• Problema: una periferica ad alta velocità

può generare una miriade di interruzioni– CPU costantemente impegnata a trasferire

dati in memoria

• Soluzione: trasferire blocchi di dati ad ogni interruzione senza ricorrere all'ausilio della CPU

Page 66: Sistemi Operativi: Meccanismi - Lezione 03

66

Direct Memory Access (DMA)• Direct Memory Access• Il controllore del dispositivo trasferisce

l'intero buffer di dati direttamente in memoria– device driver del dispositivo attiva il DMA

impostando alcuni registri del controllore– nessun intervento da parte della CPU

durante la copia– un'interruzione per buffer dati, non per byte

Page 67: Sistemi Operativi: Meccanismi - Lezione 03

67

Interruzioni ed I/O• Due modalità di richieste di I/O

– richieste bloccanti– richieste non bloccanti

• Modalità bloccante: il controllo torna al programma utente solo dopo che l'I/O è stato completato– al più un I/O completato alla volta

• Modalità non bloccante: il controllo torna al programma utente immediatamente– più richieste di I/O concorrenti

Page 68: Sistemi Operativi: Meccanismi - Lezione 03

68

Interruzioni ed I/O• Come fare a mantenere traccia di più

richieste di I/O simultanee (caso non bloccante)?

• Tabella di stato dei dispositivi– ogni elemento della tabella indica:

♦il tipo di dispositivo♦l'indirizzo del dispositivo♦lo stato del dispositivo (attivo, inattivo,off)

– più richieste per un dato dispositivo♦ogni elemento della tabella di stato può

essere una lista

Page 69: Sistemi Operativi: Meccanismi - Lezione 03

69

Interruzioni ed I/O

dispositivo: lettore di schede 1stato: inattivo

dispositivo: stampante 3stato: attivo

dispositivo: unità a dischi 1stato: inattivo

dispositivo: unità a dischi 2stato: inattivo

dispositivo: unità a dischi 3stato: attivo

...

richiesta perstampante 3indirizzo: 38546lunghezza: 1372

richiesta perunità a dischi 3file: xxxoperazione: readindirizzo: 43046lunghezza: 20000

...

Page 70: Sistemi Operativi: Meccanismi - Lezione 03

70

Interruzioni ed I/O1. Programma esegue richiesta I/O

2. Richiesta viene accodata alla lista del dispositivo opportuno nella tabella di stato

3. Periferica elabora la richiesta

4. Una interruzione segnala il completamento

5. Device driver identifica il dispositivo relativo

6. Viene scandita la lista del dispositivo

7. Viene aggiornata la struttura associata alla richiesta

8. Un programma stava attendendo quei dati? Se sì, viene attivato.

9. Altrimenti, si ripristina lo stato precedente all'interruzione

Page 71: Sistemi Operativi: Meccanismi - Lezione 03

71

Interruzioni ed I/O

• I sistemi di I/O più sofisticati permettono di ricevere dati prima di essere richiesti dal programma– esempio tipico: scrittura veloce su tastiera

• In questo caso, nella lista del dispositivo non risulta alcuna richiesta da parte di programmi

• Vanno utilizzati ulteriori buffer per memorizza-re dati in attesa che un programma li richieda– un buffer per ciascun dispositivo di input

Page 72: Sistemi Operativi: Meccanismi - Lezione 03

72

Meccanismi di protezione• In un sistema multiprogrammato, un

programma potrebbe erroneamente modificare arbitrariamente altre locazioni di memoria

• Molti errori vengono rilevati dall'hardware– es. tentativo di eseguire istruzione illegale

• Cosa succede se l'errore non è rilevabile dall'hardware?– es. accesso da parte di un programma a dati

del SO• Serve un meccanismo di protezione della

memoria

Page 73: Sistemi Operativi: Meccanismi - Lezione 03

73

Modalità operativa duale• Modalità duale: vengono previste due

modalità di funzionamento della macchina.– modo utente– modo monitor (supervisor)

• All'hardware della macchina viene aggiunto un bit: bit modo– 0->monitor (operazione effettuata dal SO)– 1->utente (operazione effettuata da utente)

Page 74: Sistemi Operativi: Meccanismi - Lezione 03

74

Modalità operativa duale• Ogni volta che si presenta una interruzione, si

passa in modo monitor:bit modo = 0

• Prima di ripassare il controllo al programma utente, viene impostato il modo utente:bit modo = 1

• Alcune istruzioni, dette privilegiate, possono essere eseguite solo in modo monitor

• Se si tenta di eseguire una istruzione privile-giata in modo utente, viene sollevata una eccezione: istruzione illegale

Page 75: Sistemi Operativi: Meccanismi - Lezione 03

75

Protezioni hardware• Un programma utente può danneggiare il

funzionamento del SO nei seguenti modi:– emettendo istruzioni di I/O illegali– accedendo a porzioni di memoria nel SO– rifiutando il rilascio della CPU

• E' necessario impedire ciascuna di tali operazioni maligne

Page 76: Sistemi Operativi: Meccanismi - Lezione 03

76

Protezioni hardware• Accessi a porzioni di memoria del SO

– per ciascun programma si definisce un intervallo di indirizzi legali accedibili

– utilizzo di due registri CPU:♦registro base: contiene l'indirizzo più

basso accessibile al programma♦registro limite: contiene l'ampiezza

dell'intervallo degli indirizzi– la CPU verifica che qualunque indirizzo

generato dall'utente rientri nell'intervallo– indirizzo fuori intervallo->eccezione– i registri base e limite sono caricati tramite

istruzioni privilegiate

Page 77: Sistemi Operativi: Meccanismi - Lezione 03

77

Protezioni hardware• Esecuzione di istruzioni di I/O illegali

– tutte le istruzioni di I/O vengono rese privilegiate

– gli utenti possono eseguire I/O solamente attraverso il sistema operativo

– OSS.: un programma che entra in monitor mode potrebbe sovrascrivere il vettore delle interruzioni ed eseguire codice arbitrario

– occorre allora proteggere il vettore delle interruzioni e le procedure di servizio

– in realtà, viene protetto l'intero SO– tecnica usata nella protezione: spazi di

indirizzamento seperati per SO ed utenti

Page 78: Sistemi Operativi: Meccanismi - Lezione 03

78

Protezioni hardware

monitor

job 1

job 2

job 3

job 4

0

256000

300040

420940

880000

1024000

300040

120900

registro base

registro limite

Page 79: Sistemi Operativi: Meccanismi - Lezione 03

79

Protezioni hardware• Rifiuto del rilascio della CPU

– viene introdotto un timer che interrompe l'esecuzione della CPU dopo un intervallo di tempo prestabilito

– Il timer è incrementato da un clock di sistema ad intervalli regolari

– quando scade il timer, viene generata una interruzione che trasferisce l'esecuzione ad un altro programma

– timer ragionevolmente piccolo->time sharing♦intervallo->quanto di tempo

Page 80: Sistemi Operativi: Meccanismi - Lezione 03

80

Protezione nei processori Intel• Ottenuta tramite molteplici componenti

elettronici• Protezione dall'uso esclusivo di CPU:

– Programmable Interval Timer• Protezione da accessi invalidi alla memoria:

– Segmentazione della memoria, privilege levels

• Protezione da esecuzione istruzioni illegali:– Privilege levels, execution rings

Page 81: Sistemi Operativi: Meccanismi - Lezione 03

81

Programmable Interval Timer• Timer programmabile integrato nel circuito che

gestisce il Southbridge (I8253, I8254)• Tre contatori ad alta precisione:

– timeout ACPI (protocollo gestione risparmio energetico)

– Interruzioni sul singolo processore; serve per bilanciare le interruzioni equamente in sistemi SMP (APIC)

– Time Stamp Counter (Pentium); un registro a 64 bit che conta il numero di colpi di clock dall'ultimo reset

• Frequenza aggiornamento contatori: da 18.2Hz a 1MHz

Page 82: Sistemi Operativi: Meccanismi - Lezione 03

82

Programmable Interval Timer• Diverse modalità di esecuzione

– Conteggio a 0– Generazione di impulsi periodici (quanto di

tempo)– Generazione di onde quadre

• Al termine di ogni evento, viene generata una interruzione hardware (IRQ 0)

Page 83: Sistemi Operativi: Meccanismi - Lezione 03

83

Gestione della memoria negli Intel• L'architettura Intel fornisce due meccanismi

per accedere alle celle di memoria di un calcolatore: segmentazione e paginazione

• Segmentazione:– la memoria è vista come un insieme di aree

(segmenti), ciascuna con un proprio scopo (codice, dati, stack)

– è facile controllare se un processo sta accedendo ad un indirizzo che gli compete oppure no (basta controllare che l'indirizzo generato stia all'interno di uno dei segmenti di competenza del processo)

Page 84: Sistemi Operativi: Meccanismi - Lezione 03

84

Gestione della memoria negli Intel• L'architettura Intel fornisce due meccanismi

per accedere alle celle di memoria di un calcolatore: segmentazione e paginazione

• Paginazione:– la memoria viene vista a blocchi di 4KB

(pagine)– Permette il caricamento efficiente di programmi

da disco (“per pezzi”)– permette una condivisione raffinata ed

efficiente di zone di memoria comuni– permette l'implementazione della memoria

virtuale

Page 85: Sistemi Operativi: Meccanismi - Lezione 03

85

I diversi tipi di indirizzi• L'architettura Intel passa per diversi formati di

indirizzi intermedi, prima di poter prelevare fisicamente il dato dalla RAM

• Questi formati sono il prodotto dei meccanismi di segmentazione e paginazione

• Tre formati:– Indirizzi logici– Indirizzi lineari– Indirizzi fisici

Page 86: Sistemi Operativi: Meccanismi - Lezione 03

86

Indirizzi logici• La memoria del calcolatore può essere vista

come un insieme di porzioni di memoria piccole, dedicate ad un ben specifico scopo (segmenti)– Codice, dati, stack

• Un indirizzo logico di memoria identifica una cella di memoria nel seguente modo:– Identificatore di segmento (segment

selector)– Offset all'interno del segmento

• L'indirizzo logico (detto anche far pointer) è una coppia (selector, offset)– 0000:00401000

Page 87: Sistemi Operativi: Meccanismi - Lezione 03

87

Indirizzi logici

Memoria principale

Segmento codice/bin/bash

Segmento dati/bin/bash

Segmentselector

offsetCella di memoria

Segmento stack/bin/bash

Page 88: Sistemi Operativi: Meccanismi - Lezione 03

88

Registri di segmentazione• Dove vengono memorizzate le coppie

(selector, offset) degli indirizzi logici?• L'architettura Intel mette a disposizione

svariati registri segmento (segment registers)– Indicano con QUALE segmento lavorare– ss: stack segment– cs: code segment– ds, es, fs, gs: data segment

• L'offset è memorizzato nei registri indirizzo classici (EIP, ESI, EDI)

• movl $42, %fs:(%eax)

Page 89: Sistemi Operativi: Meccanismi - Lezione 03

89

Indirizzi lineari• Sono la rappresentazione “classica” della

memoria• La memoria viene vista come un array

gigantesco di 2^n celle, indirizzabile tramite interi da 0 a 2^n-1

• Un indirizzo lineare è un intero da 0 a 2^n-1 che punta alla cella di memoria corrispondente

Page 90: Sistemi Operativi: Meccanismi - Lezione 03

90

Indirizzi lineariMemoria principale

Indirizzolineare

Cella di memoria

0

2^n-1

Page 91: Sistemi Operativi: Meccanismi - Lezione 03

91

Indirizzi fisici• Sono simili strutturalmente agli indirizzi lineari

– Corrispondenza 1:1• Non è detto che abbiano gli stessi valori• Nel caso in cui sia attiva la paginazione:

– traduzione indirizzo lineare-indirizzo fisico• Nel caso in cui NON sia attiva la paginazione:

– Gli indirizzi lineari sono usati direttamente sulla linea ADDRESS del Northbridge, che ci connette al front side bus

Page 92: Sistemi Operativi: Meccanismi - Lezione 03

92

Schema traduzione indirizzi• Da dove parto? Da un indirizzo logico

espresso nella forma (selector, offset) dove:– selector è ottenibile da un segment register– offset è un valore costante/contenuto di un

registro• Dove devo arrivare? Alla generazione di un

indirizzo fisico da scrivere sul bus

Indirizzo logico

T

Indirizzo fisico

Page 93: Sistemi Operativi: Meccanismi - Lezione 03

93

Schema traduzione indirizzi• Il modulo di traduzione degli indirizzi cambia

forme diverse a seconda della modalità di lavoro della CPU– Real mode: 286 sempre, 386 e superiori nella

fase iniziale del processo di avvio (fino all'avvio di /sbin/init)

– Protected mode: 386 e superiori• Da cosa nasce la diversità?

– Il 286 NON ha la paginazione– Il 286 ha registri a 16 bit, il 386 e superiori ce

li hanno da 32 bit

Page 94: Sistemi Operativi: Meccanismi - Lezione 03

94

Traduzione indirizzi: real mode1.Supponiamo di dover eseguire l'istruzione

JMP 0x60252.La CPU legge il segment register cs e lo

interpreta come l'identificatore del segmento3.L'identificatore viene trasformato in un

“indirizzo di partenza del segmento” tramite una moltiplicazione x 16 (shift logico a sinistra di 4 bit)

4.Viene sommato l'offset5. Il risultato è l'indirizzo lineare; l'indirizzo

lineare coincide con l'indirizzo fisico (no paging)

Page 95: Sistemi Operativi: Meccanismi - Lezione 03

95

Traduzione indirizzi: real mode

IstruzioneJMP 0x6025

I

Registro CS0x1000

R

Offset0x6025

O

Indirizzofisico 0x16025

Northbridge

N

Front sidebus

F

RAM

R

CS * 16+ offset

C

Page 96: Sistemi Operativi: Meccanismi - Lezione 03

96

Traduzione indirizzi: protected mode• In modalità protetta, il segment selector non è

più un numero intero, bensì l'indice di un segment descriptor in una tabella

• Segment descriptor: struttura dati di 8 byte contenente tutte le informazioni necessarie a descrivere un segmento– Base address: indirizzo lineare a 32 bit

indicante la locazione iniziale del segmento– Limit: specifica la lunghezza del segmento– DPL: Descriptor Privilege Level (0-3), descrive il

privilegio minimo per accedere al descrittore

• I segment descriptor acceduti più frequentemente sono mantenuti in una cache

Page 97: Sistemi Operativi: Meccanismi - Lezione 03

97

Traduzione indirizzi: protected modeSegment descriptor

Base (24-31)

B

4 byte

4 byte Base (0-15)

B

Limit(16-19)

L

Limit (0-15)

L

Base (16-23)

B

DPL

D

01531

63 47 32

Page 98: Sistemi Operativi: Meccanismi - Lezione 03

98

Traduzione indirizzi: protected mode• I descrittori di segmento sono memorizzati in

due tabelle distinte: global descriptor table (GDT) e local descriptor table (LDT)– 64KB, 8192 entry da 8 byte

• Global Descriptor Table: contiene descrittori di interesse “globale”– Descrittori di aree di memoria contenenti LDT,

Task State Segment, Call Gate

• Local Descriptor Table: contiene descrittori di interesse “locale”– Ne esiste una per ciascun programma in

esecuzione

Page 99: Sistemi Operativi: Meccanismi - Lezione 03

99

Traduzione indirizzi: protected mode• Ciascuna CPU/core ha un registro gdtr

contenente l'indirizzo iniziale della GDT• Per scegliere un segmento, bisogna caricare

un segment register con un segment selector (analogamente a quanto visto in real mode)

• La differenza sta nel diverso formato del segment selector:– Index: identificatore intero del segmento

utilizzato (13 bit, 8192 segmenti possibili)– TI: bit che identifica in quale tabella è

memorizzato il segmento (0: GDT, 1: LDT)– RPL: Requested Privilege Level (0-3), descrive il

privilegio con cui si sta accedendo al descrittore

Page 100: Sistemi Operativi: Meccanismi - Lezione 03

100

Traduzione indirizzi: protected mode

2 byte Index (3-15)

I

TI

T

0215

Segment selector

RPL

R

13

Page 101: Sistemi Operativi: Meccanismi - Lezione 03

101

Traduzione indirizzi: protected mode1. Supponiamo di dover eseguire l'istruzione

JMP 0x08048393 (32 bit)2. La CPU legge il segment selector dal segment

register cs3. Controllo privilegi4. Tramite il bit TI, viene identificata la tabella

(ad es. GDT) in cui il relativo segment descriptor è memorizzato

5. Si individua l'indirizzo del segment descriptor= gdtr + index * 8

6. Si estrae il base address dal segment descriptor7. Si aggiunge l'offset8. Il risultato è l'indirizzo lineare

Page 102: Sistemi Operativi: Meccanismi - Lezione 03

102

Traduzione indirizzi: protected mode

IstruzioneJMP 0x08048393

I

Offset0x08048393

O

Indirizzolineare 0x08048393

Al sistema dipaginazione

A

Index: 14

I

0

0

3

3

Index * 8+ gdtr

I

CS

gdtr

g

GDT

Segmentdescriptor

S

Base address: 0

B

Base address+ offset

B

Page 103: Sistemi Operativi: Meccanismi - Lezione 03

103

Traduzione indirizzi: protected mode• Meccanismo di segmentazione complesso• I SO moderni tentano di evitarlo, limitando il

numero di segmenti generati• Il kernel di Linux usa 4 segmenti:

– __KERNEL_CS: kernel code segment, base=0, limit=4GB, DPL=0

– __KERNEL_DS: kernel data segment, base=0, limit=4GB, DPL=0

– __USER_CS: user code segment, base=0, limit=4GB, DPL=3

– __DATA_CS: user data segment, base=0, limit=4GB, DPL=3

Page 104: Sistemi Operativi: Meccanismi - Lezione 03

104

Traduzione indirizzi: protected mode• Due segmenti distinti per kernel code e user

code, con DPL diversi– Possibilità di proteggere il kernel da accessi

involontari/maliziosi fatti da user space!

• Un solo segmento di codice in ciascun mode– Il meccanismo di segmentazione si alleggerisce

• Flat memory model– Linux, Windows (da NT in poi)

Page 105: Sistemi Operativi: Meccanismi - Lezione 03

105

Traduzione indirizzi: protected mode• Non abbiamo mica finito; dall'indirizzo lineare

occorre arrivare all'indirizzo fisico!• Meccanismo di paginazione; la memoria viene

vista a blocchi di 4KB• Ciascun blocco può puntare a:

– memoria RAM fisica– blocchi su un filesystem (memory mapping)– area di swap (virtual memory)

• La traduzione indirizzo lineare-contenuto avviene per mezzo di una tabella: page table– Array (in memoria centrale) contenente gli

indirizzi fisici iniziali (32 bit) di ciascuna pagina– Indirizzo iniziale nel registro di controllo CR3

Page 106: Sistemi Operativi: Meccanismi - Lezione 03

106

Traduzione indirizzi: protected mode• Un indirizzo lineare (0-4GB) viene suddiviso in

due porzioni– I primi 20 bit rappresentano l'indice alla page

table– Gli ultimi 12 bit rappresentano l'offset

dell'indirizzo fisico all'interno della pagina fisica

numero di pagina p offset di pagina d

n-m bit m bit

Dimensione di una pagina: 2n unità di indirizzamentoDimensione dello spazio di indirizzi logici: 2m

n=20, m=12

Page 107: Sistemi Operativi: Meccanismi - Lezione 03

107

Traduzione indirizzi: protected mode

Indirizzolineare

p d

indirizzo lineare

tabella delle pagine

f

f d

indirizzo fisico

RAMSchema paginazione

CR3+

Page 108: Sistemi Operativi: Meccanismi - Lezione 03

108

Traduzione indirizzi: protected mode• Se la pagina richiesta non è presente in

memoria centrale, si genera una eccezione: page fault– La routine di servizio preleva la pagina da

memoria secondaria

• Per accedere ad una locazione di memoria occorre:– accedere alla tabella delle pagine, per trovare

l'indirizzo fisico a partire da quello logico– accedere all'indirizzo fisico

• In realtà, ogni accesso alla memoria diventano due accessi alla memoria!– inefficienza

Page 109: Sistemi Operativi: Meccanismi - Lezione 03

109

Traduzione indirizzi: protected mode• Si usa una memoria associativa hardware,

detta Translation Lookaside Buffer– accesso del tipo: chiave->valore– la memoria associativa trova il valore in

tempo costante– dimensione della memoria associativa molto

ridotta• Il TLS mantiene in cache le porzioni più

accedute della tabella delle pagine

Page 110: Sistemi Operativi: Meccanismi - Lezione 03

110

Traduzione indirizzi: protected modeSchema paginazione

con TLB

Indirizzolineare

p d

indirizzo lineare

tabella delle pagine

f

f d

indirizzo fisico

TLB

RAM

CR3

+

Page 111: Sistemi Operativi: Meccanismi - Lezione 03

111

Traduzione indirizzi: protected mode• Le moderne CPU Intel sono corredate con

Physical Address Extension (PAE)– Schema di paginazione a tre livelli– Presenti su Pentium Pro e successivi– Supporto per indirizzare fino a 64GB, senza

cambiare le dimensioni della tabella di pagina e dei blocchi di pagina

– Abilitabile impostando il bit 5 del registro di controllo CR4

• Idea di base: trasformare indirizzi lineari a 32 bit in indirizzi fisici a 36 bit

Page 112: Sistemi Operativi: Meccanismi - Lezione 03

112

Traduzione indirizzi: protected mode• Il registro CR3 punta ad una piccola Page

Directory Pointer Table di 4 elementi• Ciascun elemento della Page Directory Pointer

Table è una Page Directory• Ciascun elemento della Page Directory è una

Page Table• Il contenuto di un indirizzo lineare viene

suddiviso in tante porzioni, al fine di identificare l'indirizzo fisico finale

Page 113: Sistemi Operativi: Meccanismi - Lezione 03

113

Traduzione indirizzi: protected mode• I bit 31,30 dell'indirizzo lineare sono l'indice

alla Page Directory Pointer Table• I bit 29,...,21 dell'indirizzo lineare sono l'indice

alla Page Directory• I bit 20,...,12 dell'indirizzo lineare sono l'indice

alla Page Table• I bit 11,...,0 dell'indirizzo lineare sono l'offset

all'interno della Page Table

Page 114: Sistemi Operativi: Meccanismi - Lezione 03

114

Traduzione indirizzi: protected mode

Indirizzo lineare

Schema paginazione multilivello-PAE

31 24 23 16 15 8 7 0

Dir pointer

Dir pointer

Dir pointer

Dir pointer

CR3

PDPT Pagedirectory

...

64 bitPD entry

...

Pagetable

...

64 bitPT entry

...

...

4KBpage

...

RAM

+

Page 115: Sistemi Operativi: Meccanismi - Lezione 03

115

Livelli di privilegio• Meccanismo per difendersi da

istruzioni/accessi alla memoria illegali causati da:– malfunzionamenti hardware– comportamenti maliziosi

• La CPU è dotata di 4 modi di utilizzo, disposti “ad anello”– Ring 3: applicazioni utente– Ring 2: device driver– Ring 1: device driver, hypervisor– Ring 0: codice kernel

Page 116: Sistemi Operativi: Meccanismi - Lezione 03

116

Livelli di privilegio

Page 117: Sistemi Operativi: Meccanismi - Lezione 03

117

Livelli di privilegio• Un SO “normale” utilizza solamente i livelli di

privilegio 0 (kernel) e 3 (user)– Passaggio automatico tra codice eseguito per

conto del kernel e codice applicativo

• Il ring 1 viene usato nel contesto della virtualizzazione– Xen (dom-1)

Page 118: Sistemi Operativi: Meccanismi - Lezione 03

118

Livelli di privilegio• Alcune istruzioni macchina (inw()/outw()) sono

permesse solamente in ring 0– Scrittura diretta sui dispositivi non è possibile

se non quando si esegue codice di kernel!– Ovviamente, se il codice del kernel è scritto

male, ogni sorta di danno può accadere

• I livelli di privilegio sono utilizzati anche per controllare i permessi di accesso ai selettori

• I segment selector contengono dei bit di permesso che possono essere controllati durante il processo di accesso al segmento

Page 119: Sistemi Operativi: Meccanismi - Lezione 03

119

Livelli di privilegio

Data segment selector

Index (3-15) TI

0215

RPL

13

Code segment selector

Index (3-15) TI

0215

CPL

13

CPL: Current Privilege Level (livello di priviligio concui è eseguito il codice del segmento)RPL: Request Privilege Level (livello di privilegio concui si sta tentando di accedere al segmento dati)

Page 120: Sistemi Operativi: Meccanismi - Lezione 03

120

Livelli di privilegio• Come avviene il controllo dei permessi sul

segmento?• Si estrae il valore CPL dal code segment selector• Si estrae il valore RPL dal data segment selector• Si identifica il segment descriptor usando il campo

Index del data segment selector• Si estrae il valore DPL dal segment descriptor• Si calcola il privilegio più debole fra codice e

richiesta: max(CPL, RPL)• Se max(CPL, RPL) <= DPL, allora l'accesso viene

garantito• Altrimenti, viene generata una eccezione di tipo

General protection fault

Page 121: Sistemi Operativi: Meccanismi - Lezione 03

121

Livelli di privilegio

Segment descriptor

DPL

Index

Data Segment descriptordei dati da caricare in memoria

RPLTI

Code segment register

CPL

max(CPL,RPL)<=DPL?

True: segmentload

False: GPF

Page 122: Sistemi Operativi: Meccanismi - Lezione 03

122

Page 123: Sistemi Operativi: Meccanismi - Lezione 03

123

Page 124: Sistemi Operativi: Meccanismi - Lezione 03

124

Page 125: Sistemi Operativi: Meccanismi - Lezione 03

125