死結

安全狀態(safe state)

再想想那家謹慎的銀行。安全狀態是一種局面:無論發生什麼,經理都有一個可行的計畫,能依某種順序滿足每個人而永不卡住——就像知道即使所有客戶都要求動用全額信用額度,你也能一個接一個地付清、把錢收回、再付下一個。你不是保證一切會順利,而是保證「存在」一條順利的路徑。這種保證可完成的局面就是安全狀態。

精確地說,一個狀態是安全的,若存在至少一種所有行程的排序——一條「安全序列」P1、P2、……、Pn——使得對每個 Pi,它仍可能請求的資源都能由目前可用的資源「加上」序列中排在它前面的行程所持有的資源(那些會先完成並釋放)來滿足。換句話說,你可以讓 P1 取得其最大需求、完成、釋放一切;這釋放的量足夠讓 P2 照做;如此一路往下。沒有這種序列的狀態就是不安全。避免的全部要點,就是只在批准後狀態仍安全時才放行請求。

誠實而常被誤解的一點:不安全不等於已死結。安全狀態保證不會發生死結。不安全狀態卻「不」保證死結——那些行程或許仍會走運,永遠不發出會困住自己的那組請求。但作業系統不能靠運氣,所以避免把不安全視為禁區。因此避免是保守的:它可能拒絕某請求、讓行程等待,即使在那一次特定執行中其實不會真的發生死結。安全是「無死結」的充分條件,而非「必然失敗」的描述。

共十二台磁帶機。P0 最多需 10(持有 5)、P1 最多需 4(持有 2)、P2 最多需 9(持有 2),尚有 3 台空閒。安全序列:P1 還需 2(3 台空閒夠用)-> 完成、釋放 4(空閒 7);P0 還需 5 -> 完成、釋放 10(空閒 12);P2 還需 7 -> 完成。這樣的順序存在,所以狀態安全。

安全狀態至少存在一種讓每個行程都能完成的順序。

安全蘊含無死結,但不安全並不蘊含死結——它只表示死結已變得可能。避免禁止不安全狀態,因此可能過度謹慎,拒絕一個其實沒問題的請求。

又称
safe sequence安全序列