一組相互競爭系統資源或進行通訊的程序間的「永久」阻塞,涉及兩個或多個程序之間對資源需求的衝突。
程序請求資源(其中黑色圓圈表示資源數,n個黑圓表示該資源有n個):
程序占有資源
將第乙個圖轉化為資源分配圖:
形成封閉的程序鏈,由於每個程序都占有鏈中下乙個程序所需要的資源(程序2占有程序1所需要的資源b),也就形成迴圈等待
乙個資源一次只能被乙個程序使用,其他程序不能訪問已分配給其他程序的資源。
(資源a被程序1占用時,程序2不能訪問資源a)
乙個程序等待其他程序釋放資源時,會繼續占有已經分配的資源
(程序2等待程序1釋放資源a,在等待期間會一直占有資源b)
不能強行搶占其他程序已占有的資源
(程序2不可以搶程序1的資源a,只能乖乖等它釋放)
存在乙個封閉的程序鏈,使得每個程序至少占有此鏈中下乙個程序所需要的乙個資源
(前三個為必要不充分條件)
間接的死鎖預防:防止前三個條件必要條件中之一
直接的死鎖預防:防止迴圈等待的發生
這是不可能的
程序要不一次性請求完所有需要的資源,要不阻塞(乙個資源都不獲取)直到滿足其請求的條件。
方法低效:
1.程序可能會長時間阻塞,部分不需要同時使用多種資源的程序也會阻塞
如程序2需要資源a、b,資源a被占有,則程序2被阻塞直到資源a被釋放。若程序2目前只需要資源b完成部分工作,此時它仍然會被阻塞。
2.分配給乙個程序的資源可能會長期不被使用,導致該資源不能被其他程序使用
程序2請求到了資源a、b,但目前程序2只使用b,導致a有長期的空閒時間,同時程序1頁被一直阻塞
存在問題:
乙個程序不會事先知道所需要的資源
方法1:占有某些資源的程序進一步請求資源時被拒,則釋放其已經占有的資源
方法2:程序1需要乙個被程序2占用的資源時,作業系統幫程序1將該資源搶占(要求程序優先順序不同)
以上方法在資源狀態可以容易儲存和恢復的情況下才實用
定義資源型別的線性順序,程序只能按順序請求資源。如程序p需要資源1、2、3(該數字為資源編號),則要按照123的順序請求。舉例:
程序p占有資源1,請求資源3;程序q占有資源3,請求資源1;因此導致死鎖。但按照順序請求,程序q會先請求資源1,所以不會出現已經占有資源3的情況。
方法同樣低效
允許三個必要條件,通過判斷是否導致死鎖來作出選擇。
方法1:如果乙個程序的請求會導致死鎖,則不啟動
方法2:如果乙個程序增加的資源請求會導致死鎖,則不允許分配
只有對任何資源,都滿足所有當前程序的最大請求量加上新的程序請求時,才啟動新的程序。如資源1有三個,程序a、b各請求1個,新程序c請求2個,則拒絕啟動程序c。
資源拒絕分配策略——銀行家演算法
策略就是在四個程序中找出乙個安全的執行序列,讓乙個程序繼續獲取資源且完成後釋放資源,再讓下乙個程序獲取資源且完成後釋放資源......
因此先由p2請求剩餘需要的資源,結束後釋放資源
然後再找滿足的程序如p1或p4......
故其安全序列為p2 p1 p3 p4(序列不唯一,能滿足就好)
取消所有死鎖程序(作業系統最常採用方法)
連續取消死鎖程序直到不再死鎖(每次取消,要檢測是否仍死鎖)
連續搶占資源直到不再死鎖(每次取消,要檢測是否仍死鎖)
把死鎖回滾到之前的檢查點並重新啟動所有程序(要求系統中構造回滾和重啟機制)
時間規劃求最少面試官
公司正在組織集中面試,每場面試需要乙個面試官,現在以陣列的形式給出了每場面試的開始時間和結束時間的時間安排表 si,ei si ei 為避免面試衝突,請問至少需要多少位面試官,才能滿足這些面試安排。示例 1 輸入 0,30 5,10 15,20 輸出 2 示例 2 輸入 7,10 2,4 輸出 1 ...
面試官感悟
其實之前也面試過幾個人,但都是零星的跟著別人一起,我也只是偶爾詢問一兩句就結束了。昨天這是一場真正的大型招聘會,而且面試也是相當規範,面對的還是社招。對於我這種初出茅廬來說,這是第一次真正接觸參與的一場招聘會,想起要面那些比自己工作年限還長的人,心裡很沒底,有點小擔心和緊張的。當然一整天下來也算體驗...
面試官問題
解釋一些壓縮感知理論 壓縮感知是一種全新的訊號採集和恢復理論,它打破了傳統的奈奎斯特取樣定律,可以從更少的觀測訊號訊號中重建出高質量的原始訊號。其基本思想是,當訊號是稀疏或可壓縮時,我們可以通過乙個隨機測量矩陣將高維訊號投影到低維空間,再通過乙個求解優化問題高概率的恢復原始訊號。解釋一下壓縮感知磁共...