# Deadlock prevention * 確保四個條件中至少有一個條件不符合,這樣就能防止deadlock發生 * 打破 Mutual Exclusion * 無法打破,除非是shared-memory例如唯讀檔(read-only files) * 打破 Hold and wait * Protocol 1: 能在開始執行前先得到所有資源的process才可以持有這些資源 * Protocol 2: 要再申請資源前,要先釋放手中所有資源 * 低資源利用率 * 可能某些資源在最後process要完成前才需要使用,卻從process開始時就佔著了 * 可能會發生starvation * 需要熱門資源的process可能一直等不到 * 打破 No Preemption * Protocol 1: 如果有process持有某資源並要求其他無法馬上取得的資源,則他所持有的資源會被其他process搶走 * Protocol 2: 如果有process請求某資源,他們可以被存取那就給他 * 如果不行存取,看是不是有人在等這個資源,如果是,插隊 * 如果資源不可取得也不是被waiting process持有,則進去waiting state,同時其他process可以搶奪它的資源 * 用在容易儲存和恢復狀態的資源,如記憶體、暫存器 * 打破 Circular wait * process需要按照資源編號(一個一對一函數F)遞增方式來申請資源 * process一開始可以請求任意資源R~i~,在這之後,process只能請求編號大於R~i~的 * 只能請求R~j~,F(R~j~) > F(R~i~) * 如此一來有最大的編號資源的process無法存取最低編號的資源,不會有circuit wait的狀況發生 --- ##### last edit > [name=dot] [time=Tue, Jul 28, 2020 9:44 PM] [HOME PAGE](/bKDZoNkrT9SOBnTvY_aj2Q?edit) :warning: {%hackmd theme-dark %} ###### tags: `OS` `CSIE`