操作系統實驗報告-吳致遠_第1頁
操作系統實驗報告-吳致遠_第2頁
操作系統實驗報告-吳致遠_第3頁
操作系統實驗報告-吳致遠_第4頁
操作系統實驗報告-吳致遠_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、操作系統課程設計報告設計題目:銀行家算法學院:信息科學與工程姓名:吳致遠學號:0919140208 班級: 物聯網工程1402班 銀行家算法分析、設計與實現設計目的:增強學生對計算機操作系統基本原理、基本理論、基本算法的理解提高和培養學生的動手能力一、 設計理論描述本設計的目的是通過編寫和調試一個系統動態分配資源的簡單模擬程序,觀察死鎖產生的條件,并采用適當的算法,有效地防止和避免死鎖地發生。要求如下:(1) 模擬一個銀行家算法;(2) 初始化時讓系統擁有一定的資源;(3) 用鍵盤輸入的方式申請資源;(4) 如果預分配后,系統處于安全狀態,則修改系統的資

2、源分配情況;(5) 如果預分配后,系統處于不安全狀態,則提示不能滿足請求,設計的主要內容是模擬實現動態資源分配。同時編寫和調試一個系統動態資源的簡單模擬程序,觀察死鎖產生的條件,并使用適當的算法,有效的防止和避免死鎖的發生。銀行家算法. 顧名思義是來源于銀行的借貸業務,一定數量的本金要應多個客戶的借貸周轉,為了防止銀行加資金無法周轉而倒閉,對每一筆貸款,必須考察其是否能限期歸還。在操作系統中研究資源分配策略時也有類似問題,系統中有限的資源要供多個進程使用,必須保證得到的資源的進程能在有限的時間內歸還資源,以供其他進程使用資源。如果資源分配不得到就會發生進程循環等待資源,則進程都無法繼

3、續執行下去的死鎖現象。把一個進程需要和已占有資源的情況記錄在進程控制中,假定進程控制塊PCB其中“狀態”有就緒態、等待態和完成態。當進程在處于等待態時,表示系統不能滿足該進程當前的資源申請。“資源需求總量”表示進程在整個執行過程中總共要申請的資源量。顯然,每個進程的資源需求總量不能超過系統擁有的資源總數, 銀行算法進行資源分配可以避免死鎖.二、算法描述及數據結構模型 1.銀行家算法: 設進程i提出請求Requestn,則銀行家算法按如下規則進行判斷。 (1)如果Requestn>Needi,n,則報錯返回。 (2)如果Requestn>Available,則進程i進入等待資源狀態,

4、返回。 (3)假設進程i的申請已獲批準,于是修改系統狀態: Available=Available-Request Allocation=Allocation+Request Need=Need-Request(4)系統執行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統恢復原狀,進程等待。 2.安全性檢查 (1)設置兩個工作向量Work=Available;FinishM=False(2)從進程集合中找到一個滿足下述條件的進程, Finish i=False Need<=Work 如找到,執行(3);否則,執行(4) (3)設進程獲得資源,可順利執行,直至完成,從而釋放資源。

5、 Work=Work+Allocation Finish=True GO TO 2 (4)如所有的進程FinishM=true,則表示安全;否則系統不安全。 3.數據結構#define False 0#define True 1int Max100100=0;/各進程所需各類資源的最大需求int Avaliable100=0;/系統可用資源char name100=0;/資源的名稱int Allocation100100=0;/系統已分配資源int Need100100=0;/還需要資源int Request100=0;/請求資源向量int temp100=0;/存放安全序列int Work1

6、00=0;/存放系統可提供資源int M=100;/作業的最大數為100int N=100;/資源的最大數為100void showdata()/顯示資源矩陣三、源代碼 #include "stdafx.h"#include<iostream>#include<string.h>#include<stdio.h>using namespace std;#define False 0#define True 1int Max100100 = 0 ;/各進程所需各類資源的最大需求int Avaliable100 = 0 ;/系統可用資源cha

7、r name100 = 0 ;/資源的名稱int Allocation100100 = 0 ;/系統已分配資源int Need100100 = 0 ;/還需要資源int Request100 = 0 ;/請求資源向量int temp100 = 0 ;/存放安全序列int Work100 = 0 ;/存放系統可提供資源int M = 100;/作業的最大數為100int N = 100;/資源的最大數為100void showdata()/顯示資源矩陣int i, j;cout << "系統目前可用的資源Avaliable:" << endl;for

8、(i = 0;i<N;i+)cout << namei << " "cout << endl;for (j = 0;j<N;j+)cout << Avaliablej << " "/輸出分配資源cout << endl;cout << " Max Allocation Need" << endl;cout << "進程名 "for (j = 0;j<3;j+) for (i = 0;i<

9、;N;i+)cout << namei << " "cout << " "cout << endl;for (i = 0;i<M;i+) cout << " " << i << " "for (j = 0;j<N;j+)cout << Maxij << " "cout << " "for (j = 0;j<N;j+)cout <<

10、; Allocationij << " "cout << " "for (j = 0;j<N;j+)cout << Needij << " "cout << endl;int changdata(int i)/進行資源分配int j;for (j = 0;j<M;j+) Avaliablej = Avaliablej - Requestj;Allocationij = Allocationij + Requestj;Needij = Needij - Reques

11、tj;return 1;int safe()/安全性算法int i, k = 0, m, apply, Finish100 = 0 ;int j;int flag = 0;Work0 = Avaliable0;Work1 = Avaliable1;Work2 = Avaliable2;for (i = 0;i<M;i+) apply = 0;for (j = 0;j<N;j+) if (Finishi = False&&Needij <= Workj) apply+;if (apply = N) for (m = 0;m<N;m+)Workm = Wor

12、km + Allocationim;/變分配數Finishi = True;tempk = i;i = -1;k+;flag+;for (i = 0;i<M;i+) if (Finishi = False) cout << "系統不安全" << endl;/不成功系統不安全return -1;cout << "系統是安全的!" << endl;/如果安全,輸出成功cout << "分配的序列:"for (i = 0;i<M;i+) /輸出運行進程數組cout &l

13、t;< tempi;if (i<M - 1) cout << "->"cout << endl;return 0;void share()/利用銀行家算法對申請資源對進行判定char ch;int i = 0, j = 0;ch = 'y'cout << "請輸入要求分配的資源進程號(0-" << M - 1 << "):"cin >> i;/輸入須申請的資源號cout << "請輸入進程 " &l

14、t;< i << " 申請的資源:" << endl;for (j = 0;j<N;j+)cout << namej << ":"cin >> Requestj;/輸入需要申請的資源for (j = 0;j<N;j+) if (Requestj>Needij)/判斷申請是否大于需求,若大于則出錯cout << "進程 " << i << "申請的資源大于它需要的資源"cout << &

15、quot; 分配不合理,不予分配!" << endl;ch = 'n'break;else if (Requestj>Avaliablej)/判斷申請是否大于當前資源,若大于則 /出錯cout << "進程" << i << "申請的資源大于系統現在可利用的資源"cout << " 分配出錯,不予分配!" << endl;ch = 'n'break;if (ch = 'y') changdata(i)

16、;/根據進程需求量變換資源showdata();/根據進程需求量顯示變換后的資源safe();/根據進程需求量進行銀行家算法判斷void addresources() /添加資源int n, flag;cout << "請輸入需要添加資源種類的數量:"cin >> n;flag = N;N = N + n;for (int i = 0;i<n;i+) cout << "名稱:"cin >> nameflag;cout << "數量:"cin >> Avali

17、ableflag+;showdata();safe();void delresources() /刪除資源char ming;int i, flag = 1;cout << "請輸入需要刪除的資源名稱:"do cin >> ming;for (i = 0;i<N;i+)if (ming = namei) flag = 0;break;if (i = N)cout << "該資源名稱不存在,請重新輸入:" while (flag);for (int j = i;j<N - 1;j+)namej = namej

18、 + 1;Avaliablej = Avaliablej + 1;N = N - 1;showdata();safe();void changeresources() /修改資源函數cout << "系統目前可用的資源Avaliable:" << endl;for (int i = 0;i<N;i+)cout << namei << ":" << Avaliablei << endl;cout << "輸入系統可用資源Avaliable:" &l

19、t;< endl;cin >> Avaliable0 >> Avaliable1 >> Avaliable2;cout << "經修改后的系統可用資源為" << endl;for (int k = 0;k<N;k+)cout << namek << ":" << Avaliablek << endl;showdata();safe();void addprocess() /添加作業int flag = M;M = M + 1;cout

20、<< "請輸入該作業的最打需求量Max" << endl;for (int i = 0;i<N;i+) cout << namei << ":"cin >> Maxflagi;Needflagi = Maxflagi - Allocationflagi;showdata();safe();int main()/主函數int i, j, number, choice, m, n, flag;char ming;cout << "*單處理機系統進程調度實現*"

21、<< endl;cout << "請首先輸入系統可供資源種類的數量:"cin >> n;N = n;for (i = 0;i<n;i+)cout << "資源" << i + 1 << "的名稱:"cin >> ming;namei = ming;cout << "資源的數量:"cin >> number;Avaliablei = number;cout << endl;cout <&

22、lt; "請輸入作業的數量:"cin >> m;M = m;cout << "請輸入各進程的最大需求量(" << m << "*" << n << "矩陣)Max:" << endl;for (i = 0;i<m;i+)for (j = 0;j<n;j+)cin >> Maxij;do flag = 0;cout << "請輸入各進程已經申請的資源量(" << m

23、<< "*" << n << "矩陣)Allocation:" << endl;for (i = 0;i<m;i+)for (j = 0;j<n;j+) cin >> Allocationij;if (Allocationij>Maxij)flag = 1;Needij = Maxij - Allocationij;if (flag)cout << "申請的資源大于最大需求量,請重新輸入!n" while (flag);showdata();/顯

24、示各種資源safe();/用銀行家算法判定系統是否安全cin >> choice;while (choice)cout << "*銀行家算法演示*" << endl;cout << " 1:增加資源 " << endl;cout << " 2:刪除資源 " << endl;cout << " 3:修改資源 " << endl;cout << " 4:分配資源 " << endl;cout << " 5:增加作業 " << endl;cout << " 0:離開 " << endl;cout << "*" << endl;cout << "請選擇功能號:"cin >&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論