銀行家演算法

2021-09-22 13:30:30 字數 1448 閱讀 9842

銀行家演算法

(banker's algorithm)是乙個避免死鎖(deadlock)的著名演算法,是由艾茲格·迪傑斯特拉在2023年為t.h.e系統設計的一種避免死鎖產生的演算法。它以銀行借貸系統的分配策略為基礎,判斷並保證系統的安全執行。

就像我們從銀行貸快一樣,首先銀行會考慮到我們有沒有償還能力,比如說張三想通過貸款來收藏**,李四想搞養殖業,銀行家就要考慮到**一直走下滑曲線,把錢貸給張三賠的話,張三十有**賠了,直接導致張三還不起貸款,因此不能貸給張三。然而目前養殖業收益較好而且日後一定時期**穩定,銀行家就會決定把錢貸給李四。

例項:

分析:第一次申請是給p1程序分配6個資源,總的資源就剩餘16-6=10,各程序現在需要的資源分別為:8-6=2,5,9,6。剩下的10個資源無論分配給p1,p2,p3還是p4都能使4個程序順利完成,因此第一次申請不會是系統進入不安全狀態。

第二次申請給p2程序分配4個資源,剩餘資源為16-6-4=6,各程序現在需要資源分別為:8-6=2,5-4=1,9,6。剩餘的6個資源可以分配給p1,p2,p4。只要有程序結束就會釋放其占有的資源,因此第二次申請也不會對系統造成威脅。

第三次申請給p3程序分配5個資源,剩餘資源為:16-6-4-5=1,各程序現在需要資源分別為:8-6=2,5-4=1,9-5=4,6。剩餘的乙個資源可以分配給p2,p2程序完成過就能釋放5個資源供其他程序完成。所以第三次申請也不會對系統造成威脅。

第四次申請給p4程序分配1個資源,剩餘資源為:16-6-4-5-1=0,各系統現在需要資源分別為:8-6=2,5-4=1,9-4=5,6-1=5。剩餘0個資源但四個程序都沒得到滿足,都在請求資源的同時誰都不會釋放資源。所以第四次申請會使系統造成死鎖。

假如不申請第四次,直接申請第五次給p1程序分配1個資源,剩餘資源為:16-6-4-5-1=0,各系統現在需要資源分別為:8-6-1=1,5-4=1,9-4=5,6。同樣剩餘0個資源但四個程序都沒得到滿足,都在請求資源的同時誰都不會釋放資源。所以第五次申請也會使系統造成死鎖。

在第四次和第五次申請不成功的情況下,申請第六次給p2分配1個資源,剩餘資源為:16-6-4-5=0,各系統現在需要資源分別為:8-6=2,5-4-1=0,9-4=5,6。但是p2程序這時候需要的資源已經能夠得到滿足,因此p2程序結束後可以釋放5個資源供其他程序使用。所以第六次申請也不會對系統造成威脅。

答案:

作業系統

按照銀行家制定的規則為程序分配資源,當程序首次申請資源時,要測試該程序對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當程序在執行中繼續申請資源時,先測試該程序本次申請的資源數是否超過了該資源所剩餘的總量。若超過則拒絕分配資源,若能滿足則按當前的申請量分配資源,否則也要推遲分配。

銀行家演算法

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

銀行家演算法

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

銀行家演算法

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