《操作系統》課程綜合性實驗報告
姓名: 學號: 2016 年 11 月 20 日
實驗題目進程調度算法程序設計一、實驗目的
通過對安全性算法和銀行家算法的模擬,進一步理解資源分配的基本概念,加深對資源申請,資源分配(銀行家算法)以及系統是否能分配(安全性算法)資源的理解。
二、設備與環境
1. 硬件設備:PC機一臺
2. 軟件環境:安裝Windows操作系統或者Linux操作系統,并安裝相關的程序開發環境,如C \C++\Java 等編程語言環境。
三、實驗內容
用C語言(或其它語言,如Java)實現對資源的資源申請與分配;
(一)銀行家算法(bank()函數):
進程i發出請求資源申請,
(1)如果Request [j]<=need[i,j],轉向步驟(2),否則認為出錯,因為他所需要的資源數已經超過它所宣布的最大值。
(2)如果:Request i[j]<=available[i,j],轉向步驟(3),否則表示尚無足夠資源,進程i需等待。
(3)若以上兩個條件都滿足,則系統試探著將資源分配給申請的進程,并修改下面數據結構中的數值:
Available[i,j]= Available[i,j]- Request [j];
Allocation[i][j]= Allocation[i][j]+ Request [j];
need[i][j]= need[i][j]- Request [j];
(4)試分配后,執行安全性檢查,調用check()函數檢查此次資源分配后系統是否處于安全狀態。若安全,才正式將資源分配給進程。否則本次試探分配作廢,恢復原來的資源分配狀態,讓該進程等待。
(5)用do{…}while 循環語句實現輸入字符y/n判斷是否繼續進行資源申請。
(二)安全性算法(safe()函數):
(1)設置兩個向量: 工作向量Work,它表示系統可提供給進程繼續運行所需的各類資源數目,在執行安全性算法開始時,Work= Available。 工作向量Finish,它表示系統是否有足夠的資源分配給進程,使之運行完成。開始時先做Finish[i]=false;當有足夠的資源分配給進程時, 再令Finish[i]=true。
(2)在進程中查找符合以下條件的進程: 條件1:Finish[i]=false; 條件2:need[i][j]<=Work[j] 若找到,則執行步驟(3)否則,執行步驟(4)
(3)當進程獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行: Work[j]= Work[j]+ Allocation[i][j]; Finish[i]=true; goto step (2);
(4)如果所有的Finish[i]=true都滿足,則表示系統處于安全狀態,否則,處于不安全狀態。
四、實驗結果及分析
1.實驗設計說明
按0由用戶輸入,按1由系統提供數據
2.實驗代碼
#include
#include
#include
#define max_process 50 //最大進程數
#define max_resource 100//最大資源數
#define false 0
#define true 1
int available[max_resource]={3,3,2};//可利用資源向量
int max[max_process][max_resource]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//最大需求矩陣
int allocation[max_process][max_resource]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//分配矩陣
int need[max_process][max_resource];//需求矩陣
int request[max_process][max_resource];//進程需要資源數
int finish[max_process];
int m=5,n=3;
void init();
int safe();
void bank();
void init2();
void print();
void print2();
void main()
{
int i;
printf("請輸入測試數據,按0由用戶輸入測試數據,按1由系統提供測試數據:\n");
scanf("%d",&i);
switch(i){
case 0: init();