那時候的銀行家演算法 處理計算機思索避免問題

2021-07-24 18:46:59 字數 1244 閱讀 8299

銀行家演算法:二維**解決方法

銀行家演算法是一種最有代表性的避免死鎖的演算法。在避免死鎖方法中允許程序動態地申請資源,但系統在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統進入不安全狀態,則分配,否則等待。為實現銀行家演算法,系統必須設定若干資料結構。

要解釋銀行家演算法,必須先解釋作業系統安全狀態和不安全狀態。安全序列是指乙個程序序列是安全的,如果對於每乙個程序pi(1≤i≤n),它以後尚需要的資源量不超過系統當前剩餘資源量與所有程序pj (j < i )當前占有資源量之和。

安全狀態

如果存在乙個由系統中所有程序構成的安全序列p1,…,pn,則系統處於安全狀態。安全狀態一定是沒有死鎖發生。

不安全狀態

不存在乙個安全序列。不安全狀態不一定導致死鎖。

在作業系統課程中遇到了要處理「銀行家演算法」的問題,參考了網上的一些介紹,發現用**處理的方法很簡單方便,並且也容易用**去實現。

我們可以建立乙個**:每列資料表示每次交易各個參與者的限額。這個**第一列列出銀行家和客戶數目,每發生一次交易,增加一列,同時將銀行家和發生交易的客戶的限額減小。直到銀行家的限額小於某個客戶的限額時,交易不能繼續進行。我們可以從**中分析得到哪個申請可以被允許,哪個要被掛起,如果能分配成功則全部的請求允許,否則便發生死鎖。如下圖所示:

下面用這種方法去解決實際的問題,例如在下面這道系統分析員的考試題目:

作業系統分配資源時的乙個重要考慮是避免死鎖的發生.若系統中有同類資源 16 個,由四個程序 p1 、p2 、p3 和 p4 共享該資源。已知 p1 、p2 、p3 、p4 所需的資源總數分別為 8 、5 、9 、6 。各程序請求資源的次序如下表,若系統採用銀行家演算法為它們分配資源,那麼_____依次申請分配會使系統進入不安全狀態。

a(3,4)   b(3,5)   c(4,5)   d(5,6)

我們按照提到的方案建立下面這個**:

分析:從圖中可以看出,當銀行家允許客戶3的請求後,銀行家擁有的資源只有1個,這時銀行家只能滿足客戶2的請求,所以第4個和第5個資源請求會被銀行家掛起,然後第6個資源請求(客戶2)會被允許。只能等到p2結束執行釋放資源後,銀行家才會允許接下來的其他請求,在這種分配情況下系統不會發生死鎖。

不過,如果在允許客戶3的請求後,接著允許請求4或請求5,但請求4和請求5需要的不止乙個資源,這時系統就會進入死鎖狀態。

所以答案選擇c。

這只是理論上的分析,接下來要用**去模擬下銀行家演算法的具體分配工作。

銀行家演算法

我們可以把作業系統看作是銀行家,作業系統管理的資源相當於銀行家管理的資金,程序向作業系統請求分配資源相當於使用者向銀行家貸款。為保證資金的安全,銀行家規定 1 當乙個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客 2 顧客可以分期貸款,但貸款的總數不能超過最大需求量 3 當銀行家現有的...

銀行家演算法

銀行家演算法 banker s algorithm 是乙個避免死鎖 deadlock 的著名演算法,是由艾茲格 迪傑斯特拉在1965年為t.h.e系統設計的一種避免死鎖產生的演算法。它以銀行借貸系統的分配策略為基礎,判斷並保證系統的安全執行。就像我們從銀行貸快一樣,首先銀行會考慮到我們有沒有償還能力...

銀行家演算法

死鎖是作業系統層面的乙個錯誤,是程序死鎖的簡稱,最早在 1965 年由 dijkstra 在研究銀行家演算法時提出的,它是計算機作業系統乃至整個併發程式設計領域最難處理的問題之一。事實上,計算機世界有很多事情需要多執行緒方式去解決,因為這樣才能最大程度上利用資源,才能體現出計算的高效。但是,實際上來...