銀行家演算法

2023-01-16 13:36:05 字數 3928 閱讀 5394

作業系統課程設計報告

院 (系): 電腦科學與工程學院

專業班級

學生學號

指導教師

2023年 12月

目錄摘要1)

緒論1)

1、 需求分析1)

1.1銀行家演算法的提出1)

1.2 銀行家演算法設計思想1)

1.3銀行家演算法設計分析2)

2、概要設計3)

2.1主要的常量變數4)

2.2演算法中用到的資料結構的說明8)

2. 3演算法中用到的函式8)

2.4 銀行家演算法8)

2.5流程圖9)

3、詳細設計13)

4. 除錯與測試8)

4.1測試資料8)

4.2.測試的結果9)

5、結論10)

參考文獻10)

附錄11)

摘要 在多道作業系統中,可以利用多個程序併發執行來改善系統資源利用率,提高系統的吞吐量,但也可能發生人們不想看到的危險——死鎖。為了解決這個問題,人們引入了多種機制處理死鎖問題。本文主要介紹了作業系統如何運用銀行家演算法和安全性演算法避免死鎖的產生。

同時運用j**a程式語言模擬計算機內部資源分配的過程。讓讀者對銀行家演算法有更深刻的認識。

關鍵字:死鎖銀行家演算法安全性演算法資源分配

1.需求分析.

1.1銀行家演算法的提出

本次課程設計主要解決的問題是死鎖的避免。

死鎖:是指多個程序因競爭資源而造成的一種僵局,若無外力作用,這些程序將永遠不能再向前推進。

避免死鎖是在不破壞死鎖產生的四個必要條件,在資源的動態分配中,防止程序進入可能發生死鎖的不安全狀態。

根據此原理,dijkstra 於2023年提出了乙個經典的避免死鎖的演算法----銀行家演算法(banker』s algorithm)。

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

所以通過編寫乙個模擬動態資源分配的銀行家演算法程式,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態等重要概念,並掌握避免死鎖的具體實施方法.

1.2 銀行家演算法設計思.想

我們可以把作業系統看作是銀行家,作業系統管理的資源相當於銀行家管理的資金,程序向作業系統請求分配資源相當於使用者向銀行家貸款。

為保證資金的安全,銀行家規定:

(1) 當乙個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客;

(2) 顧客可以分歧貸款,但貸款的總數不能超過最大需求量;

(3) 當銀行家現有的資金不能滿足顧客尚需的貸款數額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間裡得到貸款;

(4) 當顧客得到所需的全部資金後,一定能在有限的時間裡歸還所有的資金.   作業系統按照銀行家制定的規則為程序分配資源,當程序首次申請資源時,要測試該程序對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當程序在執行中繼續申請資源時,先測試該程序已占用的資源數與本次申請的資源數之和是否超過了該程序對資源的最大需求量。

若超過則拒絕分配資源,若沒有超過則再測試系統現存的資源能否滿足該程序尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要推遲分配。

安全狀態:所謂安全狀態,是指系統能按某種程序順序(p1, p2, …,pn)(稱〈p1, p2, …, pn〉序列為安全序列),來為每個程序pi分配其所需資源,直至滿足每個程序對資源的最大需求,使每個程序都可順利地完成。如果系統無法找到這樣乙個安全序列,則稱系統處於不安全狀態。

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

銀行家演算法是一種最有代表性的避免死鎖的演算法。

1.3銀行家演算法設計分析

1,銀行家演算法中的資料結構

1)可利用資源向量**ailable:這是乙個含有m個元素的陣列,其中的每乙個元素代表一類可利用的資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和**而動態地改變。如果**ailable[j]=k,則表示系統中現有rj類資源k個。

2)最大需求矩陣max:這是乙個n×m的矩陣,它定義了系統中n個程序中的每乙個程序對m類資源的最大需求。如果max[i,j]=k,則表示程序i需要rj類資源的最大數目為k。

3)分配矩陣allocation:這也是乙個n×m的矩陣,它定義了系統中每一類資源當前已分配給每一程序的資源數。如果allocation[i,j]=k,則表示程序i當前已分得rj類資源的數目為k。

4)需求矩陣need:這也是乙個n×m的矩陣,用以表示每乙個程序尚需的各類資源數。如果need[i,j]=k,則表示程序i還需要rj類資源k個,方能完成其任務。顯然:

need[i,j]=max[i,j]-allocation[i,j]

設requesti是程序pi的請求向量,如果requesti[j]=k,表示程序pi需要k個rj型別的資源。當pi發出資源請求後,系統按下述步驟進行檢查:

1)如果requesti[j]≤need[i,j],便轉向步驟2;否則認為出錯,因為它所需要的資源數已超過它所宣布的最大值。

2)如果requesti[j]≤**ailable[j],便轉向步驟(3);否則,表示尚無足夠資源,pi須等待。

3)系統試探著把資源分配給程序pi,並修改下面資料結構中的數值:

**ailable[j]∶=**ailable[j]-requesti[j]; allocation[i,j]∶=allocation[i,j]+requesti[j]; need[i,j]∶=need[i,j]-requesti[j];

4)系統執行安全性演算法,檢查此次資源分配後,系統是否處於安全狀態。若安全,才正式將資源分配給程序pi,以完成本次分配;否則,將本次的試探分配作廢,恢復原來的資源分配狀態,讓程序pi等待。

3,安全性演算法

1.設定兩個向量:

①向量work: 它表示當前狀態下,系統可提供給程序繼續執行所需的各類資源數目,在執行安全演算法開始時,其初值work=**ailable;

②finish: 它表示系統是否有足夠的資源分配給該程序,使之執行完成。初始令finish[i]=false; 當有足夠資源分配給程序時再令finish[i]=true。

2.從程序集合中找到乙個能滿足下述條件的程序:

①finish[i]=false;

②need[i,j]≤work[j] 若找到,執行步驟3,否則,執行步驟4

3.當程序pi獲得資源後,可順利執行,直至完成,並釋放出分配給它的資源,故應執行上述步驟:

work[j]=work[j]+allocation[i,j];

finish[i]=true;

go to step2;

4.若所有程序的finish[i]=true都滿足,則表示系統處於安全狀態。否則,系統處於不安全狀態。

2、概要設計

2.1主要的常量變數.

struct yinhang

;int **ailable[20];

2. 2主要模組(函式)

void main();

2.3演算法中用到的資料結構的說明

1. 可利用資源向量**ailable,它是乙個含有number個元素的陣列,其中的每乙個元素代表一類可利用的資源的數目,其初始值是系統中所配置的該類全部可用資源數目。其數值隨該類資源的分配和**而動態地改變。

如果p[i].**ailable[j]=k,標是系統中現有rj類資源k個。

2. 最大需求陣列,這是乙個具有n個程序的陣列,它定義了系統中n個程序中的每乙個程序對number類資源的最大需求。如果a[i].

max[j]=k,表示程序i需要rj類資源的最大數目為k。

3. 分配陣列allocation,這是乙個具有n個程序的陣列,它定義了系統中的每類資源當前一分配到每乙個程序的資源數。如果p[i].

allocation[j]=k,表示程序i當前已經分到rj類資源的數目為k。allocation i表示程序i的分配向量,有陣列allocation的第i行構成。

銀行家演算法

實驗2 銀行家演算法 2學時 一 實驗目的 理解銀行家演算法,掌握程序安全性檢查的方法及資源分配的方法。二 實驗內容 編寫程式實現銀行家演算法,並驗證程式的正確性。三 實驗要求 編制模擬銀行家演算法的程式,並以下面給出的例子驗證所編寫的程式的正確性。例子 某系統有a b c d 4類資源共5個程序 ...

銀行家演算法

include include include define m 5 define n 3 define false 0 define true 1 m個程序對n類資源最大資源需求量 int max m n 系統可用資源數 int ailable n m個程序對n類資源最大資源需求量 int all...

銀行家演算法 鄭金

姓名 學號班級 一 摘要 死鎖會引起計算機工作僵死,因此作業系統中必須防止。本實驗讓我們獨立的使用高階語言編寫和除錯乙個系統動態分配資源的簡單模擬程式,了解死鎖產生的條件和原因,並採用銀行家演算法有效地防止死鎖的發生,以加深對課堂上所講授的知識的理解。二 關鍵字 可利用資源向量 ailable 最大...