Search Header Logo
Semafori

Semafori

Assessment

Presentation

Computers

11th Grade

Medium

Created by

Emanuela Giaconi

Used 2+ times

FREE Resource

31 Slides • 15 Questions

1

media

TPSI

I semafori

2

media
media

3

Open Ended

Che cos'è l'interferenza e che situazione si genereano in caso in cui accada? (come sono i processi tra loro?)

4

media

Premessa: quando è necessario
sincronizzare?

Si possono verificare casi di interferenza nel caso di processi interagenti


siano essi in competizione, cioè che chiedono l’uso di una risorsa comune
riusabile e di molteplicità finita per i propri
scopi

siano in cooperazione per raggiungere un obiettivo comune

5

media
media

Premessa: quando è necessario
sincronizzare?

Possiamo classificare in quattro gruppi la

casistica di situazioni possibili e per ogni
gruppo indicare l’azione che è
necessario effettuare

6

media

Premessa: quando è necessario
sincronizzare?

Noi ci occuperemo di:

situazioni in cui la competizione tra i processi

ci porta a interferenze che possono provocare
situazioni inaccettabili e che quindi devono
essere gestite con la mutua esclusione
casi in cui i processi collaborano e quindi

devono scambiarsi informazioni attraverso
aree di memoria condivisa e con accesso
regolato da meccanismi di sincronizzazione

7

Open Ended

Che cosa sono la mutua esclusione e la sezione critica?

8

media

Premessa: quando è necessario
sincronizzare?

Il frammento di programma che utilizza la

risorsa R che deve essere gestita in mutua
esclusione si dice sezione critica o regione
critica rispetto alla risorsa R

è necessario garantire che un processo

acceda alla risorsa da solo

esegua la sezione critica con la certezza di

essere l’unico utilizzatore che volta per volta
esegue il codice che utilizza la risorsa

9

media

Premessa: quando è necessario
sincronizzare?

La sezione critica viene gestita in modo:

un processo che deve accedere a una regione

critica deve chiedere l’autorizzazione
se la risorsa fosse libera il gestore ne assicura

un uso esclusivo per tutta la durata
dell’elaborazione
se la risorsa fosse occupata il gestore ne

impedisce l’accesso gestendo la richiesta, per
esempio, con una coda di attesa

10

media

Premessa: quando è necessario
sincronizzare?

quando un processo termina di utilizzare

una risorsa deve effettuare operazioni per
rilasciarla in modo che possa essere
utilizzata dagli altri processi

11

media

Premessa: quando è necessario
sincronizzare?

Con apposite primitive che regolino l’accesso e

il rilascio della risorsa si garantisce che:
la risorsa o è libera oppure è utilizzata da un solo

processo (condizione di mutua esclusione);
i processi devono sempre poter accedere alla

risorsa richiesta e portare a termine il proprio lavoro
(condizione di fairness);
i processi non devono avere cicli di ritardo non

necessari che possano rallentare l’accesso alla
regione critica da parte di un altro processo.

12

media
media

Premessa: quando è necessario
sincronizzare?

I meccanismi che permettono di regolare l’accesso alla
regione critica risolvendo di fatto il problema della mutua
esclusione sono essenzialmente tre:
gli spin lock (o semafori binari);
P(S) & V(S) ovvero i semafori di Dijkstra;
i monitor.

13

media

Semafori di basso livello e spin lock()

Il primo meccanismo che analizziamo è quello

che associa a ogni risorsa una variabile x

in base al suo valore assume il seguente

significato:
x = 1 risorsa libera, cioè nessun processo la sta

utilizzando
x = 0 risorsa occupata da un processo

14

media
media

Semafori di basso livello e spin lock()

Il flag fa la funzione di un semaforo:

x = 1 semaforo verde, è possibile accedere
alla risorsa;
x = 0 semaforo rosso, la risorsa è occupata
ed è necessario mettersi in attesa che si
liberi.

15

media
media
media
media
media

Semafori di basso livello e spin lock()

Allocazione di una risorsa: lock() o P()

16

media
media
media
media

Semafori di basso livello e spin lock()

Rilascio di una risorsa unlock() o V():

La primitiva unlock() deve semplicemente modificare il

valore del semaforo da rosso a verde:

La mutua esclusione si ottiene facendo precedere la lock(x)

a una sezione critica e facendola seguire da una unlock().

17

media
media
media

Semafori di basso livello e spin lock()

Problema della indivisibilità

Per come abbiamo scritto l’istruzione di lock()
potrebbe verificarsi situazione di interleaving

18

media
media

Semafori di basso livello e spin lock()

Problema della indivisibilità

Per evitare questa situazione è necessario rendere
indivisibile l’esecuzione delle istruzioni della funzione
lock(x): la soluzione potrebbe essere quella di
disabilitare le interruzioni all’inizio e al termine di
questa funzione in modo che diventi ininterrompibile.

19

media
media
media

Semafori di basso livello e spin lock()

Problema della indivisibilità

Analogo problema potrebbe verificarsi per interleaving
anche sulla primitiva di unlock(x):

20

media
media

Semafori di basso livello e spin lock()

Problema della indivisibilità

Riscriviamo le due primitive utilizzando
queste due nuove istruzioni:

21

media
media
media

Semafori di basso livello e spin
lock()

22

media
media
media

Semafori di basso livello e spin
lock()

23

Multiple Select

In un semaforo binario a seconda del valore di x abbiamo

1

x=1 risorsa libera

2

x=0 risorsa libera

3

x=1 risorsa occupata

4

x=0 risorsa occupata

24

Multiple Choice

L'istruzione TestAndSet(x):

1

Modifica il valore di un bit in modo ininterrompibile

2

Modifica il valore di un byte in modo ininterrompibile

3

Modifica il valore di x in modo ininterrompibile

4

Tutte le affermazioni precedenti sono valide, dipende dall'applicazione

25

Multiple Choice

L'istruzione TestAndSet(x)

1

risolve il problema dell'attesa attiva

2

risolve il problema della starvation

3

risolve il problema dell'interleaving

4

non risolve nessun problema

26

Multiple Choice

Se la mancanza di sincronizzazione provoca danni trascurabili, la miglior strategia è ignorare il problema

1

Vero

2

Falso

27

Multiple Choice

La serializzazione può essere ottenuta introducendo cicli di ritardo

1

Vero

2

Falso

28

Multiple Choice

L'istruzione di lock su uno spin può generare una situazione di attesa attiva

1

Vero

2

Falso

29

Multiple Choice

Per evitare situazioni di interleaving l'istruzione di lock si esegue a interruzioni disabilitate

1

Vero

2

Falso

30

Multiple Choice

La primitiva di unlock(x), essendo una sola istruzione, non richiede interruzioni disabilitate

1

Vero

2

Falso

31

Multiple Choice

Le primitive P(S) e V(S) non necessitano di essere indivisibili in quanto sono atomiche

1

Vero

2

Falso

32

Multiple Choice

La P(S) su un semaforo rosso sospende il processo e lo mette in coda

1

Vero

2

Falso

33

Multiple Choice

La V(S) su un semaforo verde mette il semaforo a rosso senza sospendere il processo

1

Vero

2

Falso

34

Multiple Choice

Diversi processi possono accedere alla stessa area di memoria, e se un processo sta eseguendo una test-and-set, nessun altro processo può iniziare un'altra test-and-set finché il primo processo non ha terminato la propria

1

Vero

2

Falso

35

Multiple Choice

TestandSet e disabilitazione degli interrupt hanno lo scopo di creare sezioni critiche

1

Vero

2

Falso

36

media

Semafori di Dijkstra

Dijkstra ha proposto due primitive che

permettono la soluzione di qualsiasi
problema di interazione fra processi:
la primitiva P(S), che riceve in ingresso un numero

intero S non negativo (semaforo), che viene
utilizzata per accedere alla risorsa
la primitiva V(S), che riceve anch’essa in ingresso

un numero intero S non negativo (semaforo), che
viene utilizzata per rilasciare la risorsa

37

media
media
media
media

Semafori di Dijkstra

Introduciamo quindi un nuovo tipo di dato:

dove vi (vi≥0) è il valore iniziale

il valore 0 corrisponde al rosso

38

media
media

Semafori ferroviari

39

media
media

Semafori di Dijkstra

Lo schema a blocchi delle due istruzioni è:

40

media
media
media

Semafori di Dijkstra

La pseudocodifica:

41

media

Semafori di Dijkstra

Un processo che esegue una P(S) può

avanzare solo se trova S > 0
altrimenti deve accodarsi per attendere

passivamente una V(S)

Un processo che esegue una V(S), se non

esistono processi in attesa dentro la coda, ha
come unico effetto quello di incrementare S
altrimenti risveglia uno dei processi che attendono

nella coda:

42

media
media

La realizzazione delle due primitive è:

Semafori di Dijkstra

43

media

Semafori binari vs semafori di
Dijkstra

I semafori di Dijkstra vengono anche chiamati

semafori generalizzati (o a conteggio) per
distinguerli dai semafori binari

In letteratura si trovano spesso i nomi down(S)

e up(S) per indicare rispettivamente P(S) e
V(S)
l’istruzione P(S) decrementa di 1 il valore del

semaforo ->down(S)
l’istruzione V(S) invece la incrementa ->up(S)

44

media
media

Semafori binari vs semafori di
Dijkstra

Molteplicità di una risorsa

I semafori a conteggio vengono utilizzati per

controllare l’accesso a una risorsa disponibile
in un numero finito di esemplari

45

media
media
media

46

media
media
media
media

TPSI

I semafori

Show answer

Auto Play

Slide 1 / 46

SLIDE