银行家算法实验报告(共11页).doc

上传人:飞****2 文档编号:14132137 上传时间:2022-05-03 格式:DOC 页数:11 大小:88.50KB
返回 下载 相关 举报
银行家算法实验报告(共11页).doc_第1页
第1页 / 共11页
银行家算法实验报告(共11页).doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《银行家算法实验报告(共11页).doc》由会员分享,可在线阅读,更多相关《银行家算法实验报告(共11页).doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上南华大学计算机学院实验报告 ( 2018学年春季学期 )课程名称 操作系统实验名称 银行家算法姓名学号专业网络工程班级1班地点教师曹军一、实验题目: 系统中有 m 个同类资源被 n 个进程共享,每个进程对资源的最大需求数分别为 S1, S2,Sn,且 Max(Si)=m, (i=1,2,n)。进程可以动态地申请资源和释放资源。编写一个程序, 实现银行家算法,当系统将资源分配给某一进程而不会死锁时,就分配之。否则,推迟分配,并显示适当的信息。二、实验目的: 当系统的总资源数 m 小于或等于所有进程对资源的最大需求 S n n i i =1 时,就可能产生 死锁。死锁会引

2、起计算机系统的瘫痪。银行家算法是在实现资源分配时避免死锁的一个著名 算法,该算法是在能确保系统处于安全状态时才把资源分配给申请者。通过本实验进一步理解死锁的概念,并选择一个算法来避免死锁。 进一步理解利用银行家算法避免死锁的问题; 在了解和掌握银行家算法。理解和掌握安全序列、安全性算法。三、实验内容及要求:1、设计进程对各类资源最大申请表示及初值的确定。2、设定系统提供资源的初始状况。3、设定每次某个进程对各类资源的申请表示。4、编制程序,依据银行家算法,决定其资源申请是否得到满足。5、显示资源申请和分配时的变化情况。四、实验过程:程序要求:1. 判断当前状态是否安全,如果安全,给出安全序列;

3、如果不安全给出理由。2. 对于下一个时刻T1,某个进程Pk会提出请求Request(R1, ,Rm),判断分配给P k进程请求的资源之后是否安全。如果安全,给出安全序列;如果不安全给出理由。3. 输入:进程个数n,资源种类m,T0时刻各个进程的资源分配情况(可以运行输入,也可以在程序中设置)。4. 输出:如果安全输出安全的进程序列,不安全提示信息。进程调度的实现过程:1. 变量初始化;2. 接收用户输入n,m,(输入或者默认的)Allocationij,Need ij;3. 按照银行家算法判断当前状态安全与否,安全给出安全序列,不安全给出提示;4. 如果安全,提示用户输入下一时刻进程Pk的资源

4、请求Request(R1, ,Rm);5. 如果不安全或者无新请求则退出。源代码:#include #include #include #include #include using namespace std;#define MaxNumber 20static int n;static int m;static int AvailableMaxNumber;static int MaxMaxNumberMaxNumber;static int AllocationMaxNumberMaxNumber;static int NeedMaxNumberMaxNumber;static int

5、RequestMaxNumber;static int SafeOrderMaxNumber;static bool FinishMaxNumber;static bool isDisplayAvaliable = true;static char sourceName = A,B,C,D,E,F,G,H,I,J,K; /资源名称void input();bool isSystemSafe();void bankerAlgorithm();void display();int main() input(); bankerAlgorithm(); system(pause); return 0;

6、void input() /int n=6; /int m=3; ifstream inData; inData.open(C:/476.txt); /读取数据 inDatan; inDatam; for (int i=0;iAvailablei; for (int i=0;in;i+) for (int j=0;jAllocationij; for (int i=0;in;i+) for (int j=0;jNeedij; for (int i=0;in;i+) for (int j=0;jm;j+) Maxij = Needij + Allocationij; cout*程序开始*endl

7、; display();bool isSystemSafe() int workMaxNumber; for (int i=0;im;i+) /m是资源个数A,B,C worki = Availablei; for (int i=0;in;i+) /n是进程个数 Finishi = false; SafeOrderi = -1; /初始化安全序列 int FinishNumebr = 0; int isSafe; int i =0,j; while(in) isSafe = 0; for(j = 0;jm;j+) if (Finishi=false & Needij=workj) isSafe

8、+; else break; if (isSafe = m) /当且仅当进程对应的所有资源的数量都满足的时候才成立 Finishi = true; SafeOrderFinishNumebr = i; FinishNumebr+; for (j = 0;jm;j+) workj += Allocationij; i=0; /找到满足条件的进程后,从头开始再进行寻找 else i+; if (FinishNumebr=n) cout*Safe!*endl; cout对应的安全序列为:endl; coutPSafeOrder0; for (int i=1;in;i+) coutPSafeOrder

9、i ; coutendl; return true; cout*unSafe!*endl; return false;void bankerAlgorithm() int chooseProcess; char isContinue; while(true) /设置两个布尔变量:判别请求向量是等待还是系统已经不再分配新的资源 bool isRequestNeedOK = true; bool isRequestAvailableOK = true; cout请输入要申请资源的进程号(注意:第一个进程为0号,第二个进程为1号,以此类推!)endlchooseProcess; cout请输入进程所

10、请求的各类资源的数量:(A B C)endl; for (int i=0;iRequesti; /输入错误判断 for (int i=0;iNeedchooseProcessi) cout*当前运行结果*endl; cout您输入的请求进程所对应的资源数量超过最大需求量,请重新输入!endl; / cout*Availablei) cout*当前运行结果*endl; cout您输入的请求进程的资源数量超过系统所供给的最大资源数量pi必须等待,请重新输入!endl; / cout*endl; isRequestAvailableOK = false; continue; for (int j =

11、 0;jm;j+) Availablej -=Requestj; AllocationchooseProcessj += Requestj; NeedchooseProcessj -= Requestj; cout*endl; if (!isSystemSafe() /如何不满足系统安全性算法,将本次试探作废,恢复到原来的值 for (int j = 0;jm;j+) Availablej +=Requestj; AllocationchooseProcessj -= Requestj; NeedchooseProcessj += Requestj; /当请求向量Request满足和Need、

12、Available的关系时,证明系统已不能再分配资源 if (isRequestAvailableOK&isRequestNeedOK) cout*当前运行结果*endl; cout当前可利用资源已经不能满足任何进程的需求,故系统进入不安全状态,系统不分配资源!endl; cout*endl; cout尝试根据p(i)发出的请求向量后的资源情况:endl; display(); cout*endl; cout是否继续输入请求变量request进行测试,是(Y),否(N)endl; coutisContinue; if (isContinue=Y|isContinue=y) /input();/

13、实现多次请求(保留上一次请求的状态) continue; else if (isContinue=N|isContinue=n) cout*程序结束*endl; break; void display() char processName = 1,2,3,4,5,6; cout-endl; cout当前进程个数为 n = nendl; cout当前资源个数为 m = mendl; cout系统可利用资源数情况如下:endl; for (int i=0;im;i+) coutsetw(5)sourceNamei ; coutendl; coutsetw(5)Available0 ; coutse

14、tw(5)Available1 ; coutsetw(5)Available2 endl; cout-endl; coutprocessName; coutsetw(10)Max ; coutsetw(15)Allocation ; coutsetw(10)Need ; if (isDisplayAvaliable) coutsetw(15)available; coutendl; coutsetw(15); for (int i=0;im;i+) coutsourceNameisetw(3); coutsetw(5); for (int i=0;im;i+) coutsourceNameis

15、etw(3); coutsetw(10); for (int i=0;im;i+) coutsourceNameisetw(3); if (isDisplayAvaliable) coutsetw(5); for (int i=0;im;i+) coutsourceNameisetw(3); coutendl; /设置矩阵输出形式 bool OnlyOneLineAvaliable = true; /Avaliable数组只输出第一行 for (int i=0;in;i+) coutsetw(5)PprocessNamei; coutsetw(10); for (int j = 0;jm;j+

16、) coutMaxijsetw(3); coutsetw(5); for (int j = 0;jm;j+) coutAllocationijsetw(3); coutsetw(10); for (int j = 0;jm;j+) coutNeedijsetw(3); if (isDisplayAvaliable&OnlyOneLineAvaliable) coutsetw(5); for (int i=0;im;i+) coutAvailableisetw(3); OnlyOneLineAvaliable = false; coutendl; 五、实验结果:六、实验总结: 通过本次实验,我慢慢了了解到银行家算法这个问题,对这个问题有了自己的认识和了解。通过实验的操作实践,去真正搞懂课本上的知识有一种豁然开朗的感觉。所以说实践出真知。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁