資源簡介
操作系統 課程設計任務書
銀行家算法
1)了解多道程序系統中,多個進程并發執行的資源分配。
2)掌握銀行家算法,了解資源在進程并發執行中的資源分配情況。
3)掌握預防死鎖的方法,系統安全狀態的基本概念。
設計一個n個并發進程共享m個系統資源的程序以實現銀行家算法。要求:
1) 簡單的選擇界面;
2) 能顯示當前系統資源的占用和剩余情況。
3) 為進程分配資源,如果進程要求的資源大于系統剩余的資源,不與分配并且提示分配不成功;
4) 撤銷作業,釋放資源。
編寫和調試一個系統動態分配資源的簡單模擬程序,觀察死鎖產生的條件,并采用適當的算法,有效地防止和避免死鎖的發生。

代碼片段和文件信息
#include?
#include?
int??m=3;//m個系統資源
int??n=0;//n個并發進程
int?Max[20][20];//={{753}{322}{902}{222}{433}};????????????//最大需求矩陣???
int?Available[20];//={1032};????????????????????????????????????????????//可利用資源向量?
int?Allocation[20][20];//={{010}{200}{302}{211}{002}};?????//分配矩陣
int?Need[20][20];//={{743}{122}{600}{011}{431}};???????????//需求矩陣
int?Request[20];??
int?queue[20];????//進程Pi的請求向量
//*******************************************************************************
int?output()??//顯示各個矩陣資源分配情況
{
?int?klt;t=65;
?printf(“\n**********************************************************\n“);
???printf(“ ???MAX?“);
???for(l=0;l ???printf(“Allocation?“);
???for(l=0;l ????printf(“Need?“);
???for(l=0;l ??printf(“Available?“);
???for(l=0;l ???printf(“\n“);
???
?//printf(“????????A???B???C????A???B???C????A???B???C????A???B???C??“);
?printf(“????????“);
?for(l=0;l<4;l++)
?{for(k=0;k ????printf(“%c???“65+k);
????printf(“??“);}
?for(k=0;k ?{
??printf(“\nP%d??????“k);
??for(l=0;l ????printf(“%d???“Max[k][l]);printf(“??“);
??for(l=0;l ????printf(“%d???“Allocation[k][l]);printf(“??“);
??for(l=0;l ??printf(“%d???“Need[k][l]);printf(“??“);
??if(k==0)?{
??for(l=0;l ??printf(“%d???“Available[l]);
??}
?}
?return?1;
}
//*****************************************************************************
int?input()??//資源分配情況的錄入。
{
?int?ij;int?t=65;
?????//printf(“\n請輸入系統的未分配資源數:“);
?//?scanf(“%d%d%d“AvailableAvailable+1Available+2);
?//for(i=0;i<5;i++)
?????printf(“\n????????????????資源名稱:“);
?for(i=0;i ?printf(“\n請輸入p%d的最大需求資源數:“n);
?for(i=0;i ??
?printf(“\n????????????????資源名稱:“);
?for(i=0;i ?printf(“\n請輸入p%d的已分配的資源數:“n);
?for(i=0;i ?//for(i=0;i ??for(j=0;j ?
??Need[n][j]=Max[n][j]-Allocation[n][j];
?????for(i=0;i ?{
?????Available[i]-=Allocation[n][i];
?}
??
????n++;
?return?1;
}
//*****************************************************************************
int?safe(){//安全性檢查?返回1?表示安全?有安全隊列?queue?返回0表示不安全
int?doneapply=0;int?t;
????int?ij;int?work[20];
int?finish[20]={0};
????for(j=0;j ?while(apply {
??t=0;
for(i=0;i {
?done=0;
?if(finish[i]!=false)?{continue;}
???for(j=0;j ???{?
???if(Need[i][j]?>work[j])?{done=1;?break;?}
???}?
?if(done==0)
?{
?for(j=0;j ???finish[i]=true;
???queue[apply]=i;apply++;t=1;
?}
}
if(t==0)??return?false;
}??
??return?1;
}
//***************************************************************
int?dijkstra(in
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????839168??2013-06-29?15:40??操作系統課程設計\操作系統-課程設計報告.doc
?????文件???????6313??2013-01-14?22:00??操作系統課程設計\源代碼及運行程序\dijkstra.cpp
?????文件?????200781??2013-01-14?22:00??操作系統課程設計\源代碼及運行程序\dijkstra.exe
?????目錄??????????0??2013-06-29?15:40??操作系統課程設計\源代碼及運行程序
?????目錄??????????0??2013-06-29?15:41??操作系統課程設計
-----------?---------??----------?-----??----
??????????????1046262????????????????????5
- 上一篇:用C++語言設計的一個小型公司工資管理系統
- 下一篇:DES算法C++實現
評論
共有 條評論