lesson_06.md 1.9 KB

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.