sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-45-25.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-45-25.png differ
sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-46-12.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-46-12.png differ
sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-50-42.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-50-42.png differ
sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-51-09.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-51-09.png differ
sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-51-41.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-51-41.png differ
sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-58-26.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_11-58-26.png differ
sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_12-00-48.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_12-00-48.png differ
sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_12-11-48.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_risorse_deadlock_2026-03-11_12-11-48.png differ
sistemi/s02/gestione_risorse_deadlock.md
... ...
@@ -0,0 +1,109 @@
1
+## Algoritmo del banchiere
2
+
3
+- un algoritmo per evitare lo stallo sviluppato da Dijkstra (1965)
4
+- il nome deriva dal metodo utilizzato da un ipotetico banchiere di provincia che gestisce un gruppo di clienti a cui ha concesso del credito; non tutti i clienti avranno bisogno dello stesso credito simultaneamente
5
+
6
+### Descrizione
7
+
8
+- un banchiere desidera condividere un capitale (fisso) con un numero (prefissato) di clienti
9
+ - per Dijkstra l'"unità di misura" erano fiorini olandesi
10
+- ogni cliente specifica in anticipo la sua necessità massima di denaro
11
+ - che ovviamente non deve superare il capitale del banchiere
12
+- i clienti fanno due tipi di transazioni
13
+ - richieste di prestito
14
+ - restituzioni
15
+- il denaro prestato ad ogni cliente non può mai eccedere la necessità massima specificata a priori
16
+- ogni cliente può fare richieste multiple, fino al massimo importo specificato
17
+- una volta che le richieste sono state accolte e il denaro è stato ottenuto deve garantire la restituzione in un tempo finito
18
+
19
+### Metodo di funzionamento
20
+
21
+Il banchiere deve essere in ogni istante in grado di soddisfare tutte le richieste dei clienti, o concedendo immediatamente il prestito oppure comunque facendo loro aspettare la disponibilità del denaro in un tempo finito
22
+
23
+#### Dati
24
+
25
+- N: num clienti
26
+- IC: capitale iniziale
27
+- c_i: limite di credito del cliente i (c_i <=IC)
28
+- n_i = c_i-p_i credito residuo del cliente i
29
+- COH= IC - $\sum_{i=1}^N p_i$ saldo di cassa
30
+
31
+#### Definzione: Stato SAFE
32
+
33
+sia s una permutazione dei valori 1...N
34
+
35
+- Esempio: N=4 s=1,2,3,4,2
36
+- indichiamo con s(i) l'iesmia posizione della sequenza
37
+
38
+si calcoli il vettore avail come segue
39
+
40
+$$
41
+avail[1]= COH
42
+avail[j+1] = avail[j] + p_{s(j)}
43
+$$
44
+
45
+con $j=1...N-1$
46
+
47
+Nota: lo stato UNSAFE è condizione necessaria ma non sufficiente per avere deadlock (i.e., un sistema in uno stato UNSAFE può evolvere senza procurare alcun deadlock)
48
+
49
+![gestione_risorse_deadlock_2026-03-11_11-45-25](assets/imgs/gestione_risorse_deadlock_2026-03-11_11-45-25.png)
50
+
51
+![gestione_risorse_deadlock_2026-03-11_11-46-12](assets/imgs/gestione_risorse_deadlock_2026-03-11_11-46-12.png)
52
+
53
+sembra un deadlock ma il realta' il proc 3 ha ricevuto tutti i "soldi" che doveva ricevere e questo significa che puo darli indietro. La sequenza 3,2,1,4,5 esegue tutti i prestiti a compimento
54
+
55
+#### Regola pratica (per il banchiere a singola valuta)
56
+
57
+lo stato SAFE può essere verificato usando la sequenza che ordina in modo crescente i valori di ni.
58
+nfatti, se esiste una sequenza di verificare la safety di uno stato, sicuramente anche la sequenza che ordina i valori di ni consente di fare altrettanto
59
+![gestione_risorse_deadlock_2026-03-11_11-50-42](assets/imgs/gestione_risorse_deadlock_2026-03-11_11-50-42.png)
60
+
61
+#### Esempio stato unsafe
62
+
63
+![gestione_risorse_deadlock_2026-03-11_11-51-09](assets/imgs/gestione_risorse_deadlock_2026-03-11_11-51-09.png)
64
+
65
+![gestione_risorse_deadlock_2026-03-11_11-51-41](assets/imgs/gestione_risorse_deadlock_2026-03-11_11-51-41.png)
66
+
67
+### Banchiere multivaluta
68
+
69
+#### Dati
70
+
71
+![gestione_risorse_deadlock_2026-03-11_11-58-26](assets/imgs/gestione_risorse_deadlock_2026-03-11_11-58-26.png)
72
+
73
+#### Definizione stato SAFE
74
+
75
+![gestione_risorse_deadlock_2026-03-11_12-00-48](assets/imgs/gestione_risorse_deadlock_2026-03-11_12-00-48.png)
76
+
77
+Problema:
78
+
79
+- la regola di ordinare i processi secondo i valori di ni non è applicabile
80
+- l'ordine può essere in generale diverso fra le diverse valute gestite dal banchiere
81
+
82
+Soluzione:
83
+
84
+- si può creare la sequenza procedendo passo passo aggiungendo un processo a caso fra quelli completamente soddisfacibili
85
+- ovvero, al passo j si sceglie quelli per cui ns(j) ≤ avail[j]
86
+
87
+### Teorema
88
+
89
+Se durante la costruzione della sequenza s si giunge ad un punto in cui nessun processo risulta soddisfacibile, lo stato non è SAFE, i.e. non esiste alcuna sequenza che consenta di soddisfare tutti i processi
90
+
91
+Dimostrazione per assurdo:
92
+
93
+supponiamo che lo stato sia SAFE, ovvero che esista la sequenza che consente di soddisfare tutti i processi
94
+
95
+sia C la sequenza interrotta e C' la sequenza che porta allo stato SAFE
96
+![gestione_risorse_deadlock_2026-03-11_12-11-48](assets/imgs/gestione_risorse_deadlock_2026-03-11_12-11-48.png)
97
+
98
+## ALgoritmo dello struzzo
99
+
100
+nascondere la testa sotto la sabbia, ovvero fare finta che i deadlock non si possano mai verificare
101
+
102
+Motivazioni:
103
+
104
+- dal punto di vista ingegneristico, il costo di evitare i deadlock può essere troppo elevato
105
+
106
+Nota:
107
+
108
+- è la soluzione più adottata nei sistemi Unix
109
+- è usata anche nelle JVM