|
@@ -0,0 +1,42 @@
|
|
|
|
+# Piattaforme e Software per la rete - lezione 6
|
|
|
|
+#### William Fornaciari
|
|
|
|
+###### 4 April 2016
|
|
|
|
+## Deadlock
|
|
|
|
+Il __deadlock__ è la condizione in cui ognuno dei due agenti aspetta le *risorse*
|
|
|
|
+dell'altro.
|
|
|
|
+Una __risorsa__ è qualunque cosa (hardware o software) a cui si può accedere
|
|
|
|
+in mutua esclusione, es: una stampante, una licenza, una memoria...
|
|
|
|
+Le risorse possono essere:
|
|
|
|
+- __Preemptable__: la risorsa può essere sospesa senza grossi problemi (es: stampante)
|
|
|
|
+- __Non Preemptable__: la risorsa non può essere sospesa (es: software ABS)
|
|
|
|
+
|
|
|
|
+Il __busy waiting__ consiste nell'aspettare la risorsa *non pronta* in modo bloccante,
|
|
|
|
+può essere comodo far svegliare il processo dal sistema operativo o da un timer, ma
|
|
|
|
+non è detto che questa funzione sia disponibile, può essere necessario implementarla
|
|
|
|
+a mano.
|
|
|
|
+
|
|
|
|
+Le condizioni per avere un deadlock sono:
|
|
|
|
+- Mutua esclusione nell'utilizzo della risorsa
|
|
|
|
+- Hold & Wait, process holding resources can request new ones.
|
|
|
|
+- No preemption, resources taken can be reseased only from the user.
|
|
|
|
+- Circular wait: must exists between processes.
|
|
|
|
+
|
|
|
|
+Approcci per risolvere i deadlock:
|
|
|
|
+- Ignore: usato in sistemi general purpose, normalmente sovradimensionati
|
|
|
|
+- Detection and recovery:
|
|
|
|
+- Prevention: Eliminare una delle 4 precondizioni dei deadlock
|
|
|
|
+- Avoidance: Algoritmi per gestire allocazione delle risorse, molto difficile.
|
|
|
|
+
|
|
|
|
+Per rompere un loop posso aprire gli archi o togliere uno dei nodi.
|
|
|
|
+
|
|
|
|
+Un __demone__ è un processo a cui viene ucciso il padre e quindi viene ereditato
|
|
|
|
+da init.
|
|
|
|
+
|
|
|
|
+Uno __spooler__ consiste in un demone che gestisce in modo esclusivo ad esempio
|
|
|
|
+una stampante, e appena gli viene inviato un file da stampare, esso lo manda in
|
|
|
|
+stampa.
|
|
|
|
+Una politica __FIFO__ per la gestione della coda di stampa è adeguata.
|
|
|
|
+
|
|
|
|
+__Distributed deadlock detection__
|
|
|
|
+Viene inviato un messaggio che contiene informazioni su risorsa attesa e chi la attende,
|
|
|
|
+se il messaggio torna al mittente con il proprio ID, allora è stato rilevato un ciclo.
|