Deadlock
Deadlock的四條件:
Mutual exclusion: Resource同時間只能被一個process使用
Hold and wait
No preemption
Circular wait
使用mutex lock(?)的時候就有可能造成deadlock,例如說講義用pthread_mutex_t創建了兩個mutex,並在兩個thread互相要求對方的資源(mutex)同時用pthread_mutex_lock鎖定mutex。
用graph的方式來表達process和resource之間的關係,稱之為resource allocation graph。一種resource可能有多個instance,要求它的process可以取用其中任意一個instance。
這個graph中可能含有cycle但沒有deadlock,deadlock要在所有instance都處在(不同)cycle的情況下才會發生。
系統處理deadlock的方法有三: 讓deadlock從來不會發生,或在進入deadlock之後recover,或是假裝deadlock不存在。
Deadlock prevention: 讓DL的四個要件的其中一項不會發生即可。
讓mutual exclusion不發生: Mutual exclusion對nonsharable resource來說是必要的。
讓hold and wait不發生: 必須確保process在request resource時不會hold其他某些resource。但是這需要process在request時其resource必須都已經被allocated,或者是request時沒有任何resource,這樣會造成low resource utilization!
讓no preemption不發生: 如果持有某些resource的process要求某些無法立即分配給它的resource,那麼它即立刻釋放所有持有的resource。Preempted resource(什麼資源?)則被加入process(哪個process)等待的resource list中。Process只會在它舊的資源和需要的資源都可以使用時才會重啟。
讓circular wait不發生: Total ordering
Deadlock avoidance:
Deadlock的四條件:
Mutual exclusion: Resource同時間只能被一個process使用
Hold and wait
No preemption
Circular wait
使用mutex lock(?)的時候就有可能造成deadlock,例如說講義用pthread_mutex_t創建了兩個mutex,並在兩個thread互相要求對方的資源(mutex)同時用pthread_mutex_lock鎖定mutex。
用graph的方式來表達process和resource之間的關係,稱之為resource allocation graph。一種resource可能有多個instance,要求它的process可以取用其中任意一個instance。
![]() |
| 一個有deadlock情況的resource allocation graph。 |
系統處理deadlock的方法有三: 讓deadlock從來不會發生,或在進入deadlock之後recover,或是假裝deadlock不存在。
Deadlock prevention: 讓DL的四個要件的其中一項不會發生即可。
讓mutual exclusion不發生: Mutual exclusion對nonsharable resource來說是必要的。
讓hold and wait不發生: 必須確保process在request resource時不會hold其他某些resource。但是這需要process在request時其resource必須都已經被allocated,或者是request時沒有任何resource,這樣會造成low resource utilization!
讓no preemption不發生: 如果持有某些resource的process要求某些無法立即分配給它的resource,那麼它即立刻釋放所有持有的resource。Preempted resource(什麼資源?)則被加入process(哪個process)等待的resource list中。Process只會在它舊的資源和需要的資源都可以使用時才會重啟。
讓circular wait不發生: Total ordering
Deadlock avoidance:

留言
張貼留言