實驗報告
六、總結
通過本次實驗,實現了避免死鎖的銀行家演算法。銀行家演算法是通過動態地檢測系統中資源分配情況和程序對資源的需求情況,保證至少有乙個程序能得到所需要的全部資源,從而能確保系統處於安全狀態,才把資源分配給申請者,避免了程序共享資源時系統發生死鎖。
銀行家演算法確實能保證系統時時刻刻都處於安全狀態,但它要不斷檢測每個程序對各類資源的占用和申請情況,需花費較多的時間。
一、實驗目的
模擬銀行家演算法,用銀行家演算法實現資源分配
二、實驗內容
已知程序,有三類系統資源a、b、c的數量分別為10、5、7,在t0時刻的資源分配情況如下圖所示:
(1)若程序p1請求資源,發出請求向量request1(1,0,2),編寫程式用銀行家演算法判斷系統能否將資源分配給它;
(2)若程序p3提出請求request(1,1,2),用銀行家演算法程式驗證系統能否將資源分配給它。
三、實驗環境
軟體環境:vc ++
硬體環境:微機
四、實驗步驟
資料結構:
1.可利用資源向量**ailable
2.最大需求矩陣max
3.分配矩陣allocation
4.需求矩陣need
功能介紹:
模擬實現dijkstra的銀行家演算法以避免死鎖的出現.分兩部分組成:
第一部分:銀行家演算法(掃瞄)
1.如果request<=need,則轉向2;否則,出錯
2.如果request<=**ailable,則轉向3,否則等待
3.系統試探分配請求的資源給程序
4.系統執行安全性演算法
第二部分:安全性演算法
1.設定兩個向量
(1).工作向量:work=**ailable(表示系統可提供給程序繼續執行所需要的各類資源數目)
(2).finish:表示系統是否有足夠資源分配給程序(true:有;false:沒有).初始化為false
2.若finish[i]=false&&need<=work,則執行3;否則執行4(i為資源類別)
3.程序p獲得第i類資源,則順利執行直至完成!並釋放資源:
work=work+allocation;
finish[i]=true;
轉24. 若所有程序的finish[i]=true,則表示系統安全;否則,不安全!
五、實驗結果
編寫**如下:
#include <>
#include <>
#define m 5 /*m個程序,n個資源*/
#define n 3
int **ailable[n可用資源陣列*/
int max[m][n最大需求矩陣*/
int allocation[m][n]; /*分配矩陣*/
int need[m][n需求矩陣*/
int request[m][n程序需要資源數*/
bool finish[m系統是否有足夠的資源分配*/
int p[m記錄序列*/
void init();
bool safe();
void banker();
void output();
void main()
void init() /*初始化演算法*/
cout<<"請輸入各個資源現有的數目:"< for(i=0;i
}void banker() /*銀行家演算法*/
for(i=0;i
for(i=0;i
if(safe())
else
for(i=0;i
cout<<"您還想再次請求分配嗎?是請按y/y,否請按其它鍵"< cin>>flag;
if(flag=='y'||flag=='y')
break;
}}void output() /*輸出*/
}bool safe() /*安全性演算法*/
cout<<"安全性:"< for(i=0;i
else
{for(j=0;j
if(need[i][j]>work[j])
break;
if(j==n)
finish[i]=true;
cout<<"p"< 作業系統課程設計題目詳細說明
說明 本課程設計題目共28個,原則上一人一題。如果題目未加說明,則必須一人一題。題目1 動態分割槽分配方式的模擬1 1 設計目的 了解動態分割槽分配中使用的資料結構和分配演算法,並進一步加深對動態分割槽儲存管理方式及其實現過程的理解。2 設計內容 1 用c語言實現採用首次適應演算法的動態分割槽分配過...
作業系統課程設計題目詳細說明
題目1 動態分割槽分配方式的模擬1 1 設計目的 了解動態分割槽分配中使用的資料結構和分配演算法,並進一步加深對動態分割槽儲存管理方式及其實現過程的理解。2 設計內容 1 用c語言實現採用首次適應演算法的動態分割槽分配過程alloc 和 過程free 其中,空閒分割槽通過空閒分割槽鍊錶來管理,在進行...
作業系統課程設計指導
一 本課程的教學目的及基本要求 1 教學目的 作業系統課程設計是作業系統課程的重要實踐環節,是作業系統課程內實驗的有益補充,它旨在培養學生的實踐能力,促進理論與實踐的結合。要求學生通過上機程式設計,了解如何模擬作業系統原理的實現,從而加深對作業系統原理的領會,加深對作業系統實現方法的理解,與此同時使...