Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Sistemi Operativi] C'è deadlock o no?

    Ciao,

    Avrei un dubbio riguardo questa situazione:
    http://img856.imageshack.us/img856/9233/asdsv.png

    In questa situazione c'è deadlock per qualche processo tra quelli? Oppure nessuno?
    Secondo quello che ricordo di sistemi operativi se non c'è un ciclo non c'è deadlock, ma qui non sono certo che non ci siano cicli.
    Inoltre so che il deadlock dipende da tante situazione quali lo scheduling, le logiche del programma, le applicazioni etc... quindi in questo caso si può dire se ci sono processi in deadlock sicuramente o se ci sono processi che sicuramente NON sono in deadlock oppure non è possibile stabilirlo?

    Grazie

  2. #2
    Ciao,
    Il deadlock avviene quando si forma un ciclo di attesa tra le varie transazioni che cercano di usare le stesse risorse. Questo pero' dipende dal tipo di restrizioni imposte dal gestore delle transazioni. Se il sistema che devi analizzare fa uso del concetto "two phase locking" questo significa che le seguenti regole vengono applicate:

    Ogni transazione mantiene tutti i propri LOCK sulle varie risorse finche non esegue l'istruzione COMMIT.

    Le regole dei lock sono le seguenti (basate su 2 transazioni T1, T2 e una risorsa A):

    1. Risorsa A non ha Lock: T1, T2 possono richiedere un Read Lock (RL) o Write Lock(WL), senza attesa
    2. T1 possiede un R lock su risorsa A: T2 puo' richiedere un R Lock ma deve aspettare prima di ricevere un W Lock
    3. T1 possiede W lock su risorsa A: T2 deve aspettare che T1 finisce prima di poter richiedere un R, W lock.

    Il deadlock avviene quando T1 e' in attesa che T2 rilasci i propri lock, e allo stesso tempo, T2 e' in attesa che T1 rilasci i propri lock. In questo caso nessuna delle 2 transazioni puo' concludere visto che c'e' un ciclo di attesa tra di loro. Un esempio pratico:

    T1: RL(A) (T1 possiede read lock su risorsa A)
    T2: RL(B)
    T1: WL(B) (a questo punto, T1 deve aspettare che T2 esegua il COMMIT visto che T2 possiede un Read Lock su risorsa B)
    T2: WL(A) (T2 richiede Write Lock su risorsa A, ma T1 possiede un Read Lock, percio' T2 deve aspettare che T1 esegua il COMMIT prima di poter procedere)

    Il deadlock accade quando T2 richiede WL(A): T1 aspetta per T2 ma T2 non puo procedere perche aspetta per T1, questo e' un ciclo.

    Ti consiglio di cercare un po' di esempi su "wait-for-graphs", "transaction deadlock" e "resource allocation graphs".

    Riguardo alla situazione che hai postato, non capisco la differenza tra i rettangoli grigi e quelli neri? Cosa rappresentano le frecce rivolte verso le transazioni (possesso di un Write lock?) e quelle rivolte verso le risorse?

    Spero di essere stato d'aiuto!

  3. #3
    Originariamente inviato da Beavey
    Ciao,
    Il deadlock avviene quando si forma un ciclo di attesa tra le varie transazioni che cercano di usare le stesse risorse. Questo pero' dipende dal tipo di restrizioni imposte dal gestore delle transazioni. Se il sistema che devi analizzare fa uso del concetto "two phase locking" questo significa che le seguenti regole vengono applicate:

    Ogni transazione mantiene tutti i propri LOCK sulle varie risorse finche non esegue l'istruzione COMMIT.

    Le regole dei lock sono le seguenti (basate su 2 transazioni T1, T2 e una risorsa A):

    1. Risorsa A non ha Lock: T1, T2 possono richiedere un Read Lock (RL) o Write Lock(WL), senza attesa
    2. T1 possiede un R lock su risorsa A: T2 puo' richiedere un R Lock ma deve aspettare prima di ricevere un W Lock
    3. T1 possiede W lock su risorsa A: T2 deve aspettare che T1 finisce prima di poter richiedere un R, W lock.

    Il deadlock avviene quando T1 e' in attesa che T2 rilasci i propri lock, e allo stesso tempo, T2 e' in attesa che T1 rilasci i propri lock. In questo caso nessuna delle 2 transazioni puo' concludere visto che c'e' un ciclo di attesa tra di loro. Un esempio pratico:

    T1: RL(A) (T1 possiede read lock su risorsa A)
    T2: RL(B)
    T1: WL(B) (a questo punto, T1 deve aspettare che T2 esegua il COMMIT visto che T2 possiede un Read Lock su risorsa B)
    T2: WL(A) (T2 richiede Write Lock su risorsa A, ma T1 possiede un Read Lock, percio' T2 deve aspettare che T1 esegua il COMMIT prima di poter procedere)

    Il deadlock accade quando T2 richiede WL(A): T1 aspetta per T2 ma T2 non puo procedere perche aspetta per T1, questo e' un ciclo.

    Ti consiglio di cercare un po' di esempi su "wait-for-graphs", "transaction deadlock" e "resource allocation graphs".

    Riguardo alla situazione che hai postato, non capisco la differenza tra i rettangoli grigi e quelli neri? Cosa rappresentano le frecce rivolte verso le transazioni (possesso di un Write lock?) e quelle rivolte verso le risorse?

    Spero di essere stato d'aiuto!
    ti ringrazio per l'aiuto, allora le frecce verso un processo significa che quel processo possiede quell'istanza di risorsa, mentre le frecce di un processo verso una risorse significano che quel processo Vuole quella risorsa.
    Nel mio caso comunque non ci sono concetti di "two phase locking" esplicitati che ho considerato.
    Spero tu possa fare chiarezza sul mio esempio grazie.

  4. #4
    Allora, analizzando questo caso in particolare, non sembra ci sia un deadlock:

    R1 -> P3, P1
    R2 -> P1
    R3 -> P2

    P2, P3 aspettano per risorsa R2 'posseduta' da P1.

    P2 -> P1
    P3 -> P1

    P1 non e' in attesa che le risorse possedute da P2, P3 si liberino, percio' non c'e' deadlock.

    Analizzando la situazione in piu dettaglio, il diagramma potrebbe rappresentare una delle seguenti:
    1. P1 possiede un Read Lock su risorsa R2 (percio le frecce di attesa di P2, P3 rivolte verso R2 rappresentano per forza un write lock)
    2. P1 possiede un Write Lock su risorsa R2 (le freccie di attesa di P2, P3 potrebbero rappresentare Read o Write lock).

    In ogni caso, P2 e P3 entrambi aspettano che la risorsa R2 perda i Lock posseduti da P1. Visto che P1 NON sta aspettando per nessuna risorsa tenuta da P2, P3, non c'e' un ciclo di attesa, quindi non c'e' deadlock.

    Se la prossima istruzione fosse, ad esempio: P1 richiede Write Lock su R1, allora P1 dovrebbe attendere per P3 (che possiede un lock su risorsa R1). In questo caso, si formerebbe un ciclo di attesa tra P1 e P3, ovvero un deadlock.

  5. #5
    perfetto ho risolto tutti i miei dubbi, sei stato molto chiaro ed asaustivo.

    Grazie mille!

  6. #6
    Se ti puo' essere d'aiuto, qui c'e' il link ad un corso in inglese di 'Concurrency' insegnato al dipartimento di ingegneria di cambridge:
    Vedi sezione Concurrency sotto 3F6: Software Engineering and Design

    http://www.gatsby.ucl.ac.uk/~turner/teaching.html

    EDIT: ci sono anche 'esercizi di esempio'

  7. #7
    perfetto ancora grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.