Processi e Thread

34
1 Processi e Thread • Processi • Thread • Meccanismi di comunicazione fra processi (IPC) • Problemi classici di IPC • Scheduling • Processi e thread in Unix • Processi e thread in Windows

description

Processi e Thread. Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi e thread in Windows. Comunicazioni fra processi/thread. - PowerPoint PPT Presentation

Transcript of Processi e Thread

Page 1: Processi e Thread

1

Processi e Thread

• Processi• Thread• Meccanismi di comunicazione fra processi (IPC)• Problemi classici di IPC• Scheduling• Processi e thread in Unix• Processi e thread in Windows

Page 2: Processi e Thread

2

Comunicazioni fra processi/thread

• Processi/thread eseguiti concorrentemente hanno bisogno di interagire per comunicare e sincronizzarsi :– scambiare dati

– utilizzare correttamente strutture dati condivise

– eseguire azioni nella sequenza corretta

• Molti meccanismi proposti • Per semplicità ci riferiremo sempre ai processi

– maccanismi simili sono disponibili per i thread

Page 3: Processi e Thread

3

Comunicazioni fra processiRace Condition

(Interferenza, gara, corsa critica)

Due processi accedono alla memoria condivisa contemporaneamente

l’esito dipende dall’ordine in cui vengono eseguiti gli accessi

Page 4: Processi e Thread

4

Sezioni/Regioni Critiche (1)

Regione Critica : porzione di un processo che accede a strutture dati condivise

– punti potenziali di interferenza

Obiettivo : fare in modo che le regioni critiche di due processi non vengano mai eseguite contemporaneamente (mutua esclusione)

Page 5: Processi e Thread

5

Sezioni/Regioni Critiche (2)

4 condizioni per assicurare la mutua esclusione un solo processo per volta esegue la sezione critica non viene fatta nessuna assunzione sulla velocità

relativa dei processi nessun processo che sta eseguendo codice esetrno

alla sezione critica può bloccare un altro processo nessun processo attende indefinitamente di entrare

nella sezione critica

Page 6: Processi e Thread

6

Sezioni/Regioni Critiche (3)

Mutua esclusione con sezioni critiche

Page 7: Processi e Thread

7

Mutua Esclusione con attesa attiva (busy waiting) (1)

• Attenzione: il processo e' in stato “running” ma e' in busy waiting (loop)

Page 8: Processi e Thread

8

Mutua Esclusione con attesa attiva (busy waiting) (2)

• Disabilitare le interruzioni– impedisce che un altro processo vada in

esecuzione– non utilizzabile in modo utente– utilizzabile per poche istruzioni in modo kernel– non risolve il problema se il sistema ha più di

una CPU

Page 9: Processi e Thread

9

Mutua Esclusione con attesa attiva (busy waiting) (3)

• Soluzioni software– alternanza stretta– soluzione di Peterson

• Soluzioni hardware-software– l’istruzione TSL

Page 10: Processi e Thread

10

Mutua Esclusione con attesa attiva (3)Alternanza stretta (1)

Una soluzione non soddisfacente per il problema della ME– 0 può bloccare 1 quando si trova fuori dalla SC

Processo 0 Processo 1

Page 11: Processi e Thread

11

Mutua Esclusione con attesa attiva (3)Alternanza stretta (2)

Garantisce la proprieta' di mutua esclusione

MA HA DUE PUNTI DEBOLI:

a) i due processi devono osservare un'alternanza stretta per l'uso della sezione critica

la velocita' di esecuzione e' data dal processo piu' lento

Page 12: Processi e Thread

12

Mutua Esclusione con attesa attiva (3)Alternanza stretta (2)

Garantisce la proprieta' di mutua esclusione

MA HA DUE PUNTI DEBOLI:

a) i due processi devono osservare un'alternanza stretta per l'uso della sezione critica

la velocita' di esecuzione e' data dal processo piu' lento

b) se un processo fallisce, l'altro viene bloccato per sempre

Page 13: Processi e Thread

13

Mutua Esclusione con attesa attiva (4)

Soluzione di Peterson (semplificata) 1981

Page 14: Processi e Thread

14

Mutua Esclusione con attesa attiva (5)

Ingresso ed uscita dalla sezione critica utilizzando l’istruzione TSL (TEST AND SET LOCK)

TEST & SET LOCK TSL RX, LOCK RX<= (LOCK) LOCK <= #1

Page 15: Processi e Thread

15

Soluzioni senza attesa attivaLe primitive Sleep e Wakeup (1)

• Idea di base : un processo viene bloccato finché non è in grado di entrare nella sezione critica (in modo da non sprecare cicli di CPU)

• Due primitive realizzate come system call– sleep() :: blocca il processo che la invoca (P va in stato

“BLOCCATO”)

– wakeup(P) :: sveglia il processo P

Page 16: Processi e Thread

16

Le primitive Sleep e Wakeup (2)

Sol. errata al problema del produttore–consumatore (con race condition)

Page 17: Processi e Thread

17

Semafori Dijkstra (1965) (1)• Problema con sleep e wakeup : una wakeup non

utilizzata immediatamente viene persa• Dijkstra (1965): due o piu' processi possono cooperare

attraverso semplici segnali in modo che un processo si fermi ad una locazione ben precisa finche' non riceve un segnale specifico

• Semafori : variabili intere– contano il numero di wakeup pendenti

– il valore è 0 se non ci sono wakeup pendenti e > 0 altrimenti

Page 18: Processi e Thread

18

Semafori (2)

• Due operazioni atomiche (= non interrompibili) standard Up e Down (P e V)– down(S) [riceve segnale]

• se S > 0 allora S= S – 1 ed il processo continua l’esecuzione

• se S==0 il processo viene bloccato senza completare la primitiva (il processo viene aggiunto alla lista dei processi in attesa al semaforo e poi viene invocato lo scheduler)

– up(S) [trasmette segnale]

• se S > 0 allora S= S + 1

• se S==0 e ci sono processi in attesa di completare la down su quel semaforo, uno di questi viene svegliato (viene messo nello stato di pronto) e S rimane a 0, altrimenti S viene incrementato

Page 19: Processi e Thread

19

Semafori (3)• Ogni risorsa e' protetta da un semaforo. Quando un

semaforo viene creato gli viene assegnato un numero che denota quanti utilizzi concorrenti della risorsa sono ammessi

• Semafori binari (per mutua eclusione)MUTEX (MUTual EXclusion)

per protezione risorse

mutex=1; inizializzato a 1

processo

...

down (&mutex)

<regione critica>

up (&mutex)

....

Page 20: Processi e Thread

20

Semafori (4)

Soluzione del Produttore/Consumatore con semafori

mutex

sincroniz-zazione

Page 21: Processi e Thread

21

Semafori (5)Schema di cosa accade nei livelli bassi dell’OSquando viene rilevata una interruzione

1. Salvataggio PC, PSW e qualche RG sulla pila (hw)2. L’interrupt vector viene caricato nel PC (hw)3. Salvataggio delle info sullo stack e di tutti i registri nella tabella dei processi (assembler)4. L’SP punta a una nuova pila (assembler)

5. Esecuzione del gestore delle interru-zioni (C)6. Esecuzione dello scheduler per decidere il nuovo processo da eseguire (C)7. Caricamento dei registri e di tutte le informazioni relative al nuovo processo da eseguire (assembler)

MODELLO A SEMAFOROsemaphore s=0;processo P (device driver)starts i/o device;down (s); si blocca.....interrupt handler~~> interruptup (s); P pronto

Page 22: Processi e Thread

22

Monitor (1)• Oggetti (Strutture dati + procedure per accedervi)• Mutua esclusione nell’esecuzione delle procedure• Variabili di Condizione + wait() e signal()• wait(X)

– sospende sempre il processo che la invoca in attesa di una signal(X)

• signal(X)– sveglia uno dei processi in coda su X

– se nessun processo è in attesa va persa

– deve essere eseguita solo come ultima istruzione prima di uscire dal monitor (il processo svegliato ha l’uso esclusivo del monitor)

Page 23: Processi e Thread

23

Monitor (2)

Un esempio di monitor

Page 24: Processi e Thread

24

Monitor (3)

• Schema di soluzione Produttore/Consumatore – ad ogni istante solo una procedura del monitor è in esecuzione– il buffer ha N posizioni

procedure

pseudo-Pascal

Page 25: Processi e Thread

25

Scambio Messaggi (1)• Non richedono accesso a supporti di

memorizzazione comune• primitive base

– send(destination,&msg)– receive(source, &msg)

• decine di varianti, nel nostro caso : – la receive blocca automaticamente se non ci sono

messaggi– i messaggi spediti ma non ancora ricevuti sono

bufferizzati dal SO

Page 26: Processi e Thread

26

Scambio Messaggi (2)

Sol. Produttore/Consumatore con N messaggi

send (destination, & message) receive(source, &message)

Page 27: Processi e Thread

27

I filosofi a cena (1)

• I filosofi mangiano e pensano

• Per mangiare servono due forchette

• Ogni filosofo prende una forchetta per volta

• Come si può prevenire il deadlock

Dijkstra (1965)

Page 28: Processi e Thread

28

I filosofi a cena (2)

Una falsa soluzione al problema dei filosofi

Page 29: Processi e Thread

29

I filosofi a cena (3)

Una falsa soluzione al problema dei filosofi

<---down (mutex);

<--up(mutex);

Page 30: Processi e Thread

30

I filosofi a cena (4)

Una soluzione corretta al problema (parte 1)

L N R5 1 21 2 32 3 43 4 54 5 1

“%” = modulo

Page 31: Processi e Thread

31

I filosofi a cena (5)

Una soluzione corretta al problema (parte 2)

(int i)

libera il sxlibera il dx

(int i)

Page 32: Processi e Thread

32

Il problema dei lettori e scrittori

Una soluzione al problema dei lettori e scrittori (1971)

Page 33: Processi e Thread

33

Il barbiere sonnolento (1)

Page 34: Processi e Thread

34

Il barbiere sonnolento (2)

Soluzione al problema del barbiere.