死結

系統資源模型(system resource model)

在我們能仔細推理死結之前,需要一幅簡單而誠實的圖像,說明電腦系統在共享什麼、怎麼共享。把它想成一座圖書館。館內有各種「類型」的東西(自習室、投影機、某些書),每一種類型又有若干「實例」(圖書館可能有三台一模一樣的投影機)。要使用任何一個都得遵循固定的循環:你先「請求」一個,「使用」一陣子,然後「釋放」它。如果你要的那種東西所有實例都被借走,你就得等。這座小圖書館正是作業系統理論對資源所採用的模型。

形式上,系統有一組資源類型——稱為 R1、R2、R3——而每個類型 Ri 各有若干個相同、可互換的實例(例如四台等效的印表機,或一個有五張通行證的計數號誌)。行程只能透過三種操作來使用資源。請求(request):向作業系統索取一個實例;若沒有空閒的,行程就阻塞直到有實例可用。使用(use):在獲准的實例上操作(印一頁、寫入已上鎖的檔案)。釋放(release):把實例交還,讓其他人能用。作業系統負責記帳——哪些實例空閒、哪個行程持有哪個、誰在等——通常記在一張系統表裡。一把互斥鎖就是恰好只有一個實例的資源類型。

這個模型刻意抽象,好讓同一套推理同時適用於印表機、記憶體、鎖、檔案、資料庫列。它最誠實之處在「實例」這個詞:一種資源類型只有一個實例還是有很多個,會徹底改變對死結的判斷。對單一實例的類型,等待的環一定是死結;對多實例類型,環只是一個「警訊」——別的持有者可能釋放出多餘的實例,把大家都解開。請牢記這個區別;這正是為何有些死結偵測是精確的,有些只是提示性的。

request(printer); ……用它列印…… ; release(printer)。若系統有三台相同的印表機且三台都在用,第四個呼叫 request(printer) 的行程就會阻塞,直到任一持有者呼叫 release。

請求/使用/釋放循環,搭配同一資源類型的多個可互換實例。

每種資源類型的實例數量不是枝節——它決定了一個等待環究竟是必然的死結(單一實例),還是只是有可能(多實例)。

又稱
resource-request model資源請求模型