Vous êtes sur la page 1sur 8

Algoritmo del banchiere

Tratta risorse multiple


Ogni processo deve dichiarare il numero massimo di risorse necessarie
Se un processo richiede una risorsa, se non è disponibile rimane in attesa
Dopo che un processo ha ottenuto tutte le risorse necessarie, le deve rilasciare in un
tempo finito
L'algoritmo è stato proposto da Dijkstra (1965) imita il comportamento di un banchiere nei
confronti delle richieste dei clienti
Ad ogni cliente è concesso un certo numero di unità di credito (per esempio 1000 €) (cioè
le risorse finanziarie Massime necessarie per portare a conclusione i rispettivi affari) Lo
stato del sistema è la quantità di credito Usato ad ogni istante
Complessivamente le risorse necessarie sarebbero 22 unità, ma il banchiere ne ha a
disposizione solamente 10
Nome U M
Davide 0 7
Uno stato si dice sicuro se esiste una
sequenza di altri stati che porta tutti i Carlo 0 4
clienti ad ottenere prestiti fino al loro
massimo credito (e quindi terminare) Barbara 0 5
È uno stato sicuro?
Sì perché con due unità Anna 0 6
Carlo può portare a termine i
suoi affari (liberando quindi Disponibili 10
quattro unità, ...)

Nome U M N
Davide 4 7 3
Carlo 2 4 2
Barbara 1 5 4
Anna 1 6 5
Disponibili 2

Secondo Esempio
Non è uno stato sicuro perché nessun cliente riesce a portare a termine i suoi affari

Nome U M N
Davide 4 7 3
Carlo 2 4 2
Barbara 2 5 3
Anna 1 6 5
Disponibili 1

Una richiesta viene evasa solo se porta in uno stato ancora sicuro altrimenti il processo
deve attendere
L'algoritmo descritto è applicabile ad un sistema con una singola risorsa multipla, ma può
essere generalizzato al caso di un sistema complesso con molte classi di risorse
L'algoritmo del banchiere soffre del solito problema: presuppone una conoscenza
completa del sistema
È comunque un punto di partenza per risolvere i casi concreti

Risorse multiple: 5 Risorse


Dati: allocazione corrente, massima allocazione, risorse disponibili
– Occorre calcolare le risorse necessarie

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 10 10 1 21 22 0 11 12
P2 0 00 01 2 13 12 2 13 11
P3 0 11 11 0 12 12 0 01 01
P4 0 01 00 1 11 22 1 10 22
Disponibili 1 01 01

L’unico processo che può ottenere tutte le risorse che gli servono è P3

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 10 10 1 21 22 0 11 12
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12 0 12 12 0 00 00
P4 0 01 00 1 11 22 1 10 22
Disponibili 1 00 00

Quando il processo P3 termina le rilascia e le risorse disponibili aumentano


Processi Corrente Massima Necessaria
ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 10 10 1 21 22 0 11 12
P2 0 00 01 2 13 12 2 13 11
P3 0 00 00 0 12 12 0 00 00
P4 0 01 00 1 11 22 1 10 22
Disponibili 1 12 12

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 10 10 1 21 22 0 11 12
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12
P4 0 01 00 1 11 22 1 10 22
Disponibili 1 1212

P1 può terminare

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 2122 1 21 22 0 00 00
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12
P4 0 01 00 1 11 22 1 10 22
Disponibili 1 01 0 0

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 21 22
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12
P4 0 01 00 1 11 22 1 10 22
Disponibili 2 2 2 22

P4 può avanzare

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 21 22
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12
P4 1 11 2 2 1 11 22 0 0 000
Disponibili 1 1 2 00

P4 può terminare

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 21 22
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12
P4 1 11 22
Disponibili 2 23 22

P2 può terminare

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 21 22
P2 2 13 12 2 13 12
P3 0 12 12
P4 1 11 22
Disponibili 0 10 11

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 1 01 00 2 02 13 1 01 13
P1 1 21 22
P2 2 13 12
P3 0 12 12
P4 1 11 22
Disponibili 2 23 23
Processi Corrente Massima Necessaria
ABCDE ABCDE ABCDE
P0 2 02 13 2 02 13
P1 1 21 22
P2 2 13 12
P3 0 12 12
P4 1 11 22
Disponibili 2 22 1 0

P0 può terminare

Disponibili 32423

Se esiste una sequenza in cui tutti i processi ottengono tutte le risorse


necessarie, allora il sistema è in uno stato sicuro

Esempio non risolvibile

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 2 01 00 2 02 13 0 01 13
P1 1 10 10 1 21 22 0 11 12
P2 0 00 01 2 13 12 2 13 11
P3 0 11 11 0 12 12 0 01 01
P4 0 01 00 1 11 22 1 10 22
Disponibili 0 01 01

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 2 01 00 2 02 13 0 01 13
P1 1 10 10 1 21 22 0 11 12
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12 0 12 12 0 00 00
P4 0 01 00 1 11 22 1 10 22
Disponibili 0 12 02
Processi Corrente Massima Necessaria
ABCDE ABCDE ABCDE
P0 2 01 00 2 02 13 0 01 13
P1 1 2122 1 21 22 0 00 00
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12 0 12 12
P4 0 01 00 1 11 22 1 10 22
Disponibili 1 22 22

Processi Corrente Massima Necessaria


ABCDE ABCDE ABCDE
P0 2 01 00 2 02 13 0 01 13
P1 1 2122 1 21 22
P2 0 00 01 2 13 12 2 13 11
P3 0 12 12 0 12 12
P4 1 11 22 1 11 22 0 00 00
Disponibili 1 23 22

Non è più possibile portare a termine nessuno dei due processi

Esercizio N 1

Verificare se e possibile che tutti i processi possano terminare,


specificando un possibile ordine di terminazione (anche parziale),
e la situazione delle risorse disponibili dopo la terminazione di
ciascun processo.

Esercizio N 2
Dato il seguente stato dei processi A, B, C, D, E dire e quali processi sono in
stallo. Motivare la risposta.
Risorse esistenti: [8,3,6,7]
Risorse Assegnate Risorse necessarie
R1 R2 R3 R4 R1 R2 R3 R4
Processo A 2 0 0 4 2 0 2 3
Processo B 2 1 2 1 0 2 1 1
Processo C 0 0 1 1 2 1 0 1
Processo D 1 0 2 1 0 1 1 0
Processo E 1 2 0 0 2 0 1 0

Soluzione:

Si applica l’algoritmo del banchiere. Il vettore delle risorse disponibili è


[2,0,1,0]
1. Il processo E può terminare, il vettore delle risorse disponibili diventa:
[3,2,1,0]
2. Il processo D può terminare, il vettore delle risorse disponibili diventa:
[4,2,3,1]
3. Il processo C può terminare, il vettore delle risorse disponibili diventa:
[4,2,4,2]
4. Il processo B può terminare, il vettore delle risorse disponibili diventa:
[6,3,6,3]
5. Il processo A può terminare, il vettore delle risorse disponibili diventa:
[8,3,6,7]
Quindi il sistema non è in stallo.

Esercizio N 3
Si consideri un sistema dotato di 5 risorse (R,S,T,U,V) seriali, non
prerilasciabili, contese da cinque processi (A,B,C,D,E). Supponiamo che il
sistema allochi le risorse disponibili al primo processo che le richiede e che la
sequenza di richieste sia:
A richiede R
A richiede S
C richiede T
A richiede T
B richiede R
E richiede U
D richiede V
C richiede U
E richiede R
D richiede T

Dopo l’ultima richiesta il sistema è in deadlock


In caso affermativo dire quali sono i processi la cui terminazione forzata
permetterebbe di far terminare correttamente il maggior numero di processi.
In caso negativo dire quale ulteriore richiesta porterebbe il sistema in
deadlock.
Rappresentare lo stato del sistema con il grafo di holt e motivare la risposta.

Soluzione:
Il sistema è in deadlock, infatti c’è un ciclo A, T, C, U, E, R, A che coinvolge A,
C, E.
Inoltre sono in deadlock anche D che attende su T (occupato da C) e B che
attende su R (occupato da A)
Sarebbe sufficiente far terminare uno qualsiasi tra A, C o E.
Terminare B o D non elimina il deadlock.

Esercizio N 4
Data la situazione schematizzata nelle tabelle seguenti, quante istanze della
risorsa R1 devono essere disponibili affinché il sistema sia safe?
(Commentare la scelta)
processi max ris. richieste
P1 211 422
P2 310 422
P3 130 161
P4 011 211
risorse disponibili
R1 R2 R3
X 1 1

Soluzione
Innanzitutto è possibile notare che per essere sicuri di terminare P2 o P3
occorrerebbe liberare delle risorse R2 ed R3, ad esempio terminando P1 o
P4.
Per essere in grado di terminare sicuramente P4 occorrono 2 risorse R1.
Per essere in grado di terminare sicuramente P1 occorrono 2 risorse R1, 1
risorsa R2 (disponibile), 1 risorsa R3 (disponibile).
Dunque perché il sistema sia safe occorrono almeno 2 risorse R1 disponibili.