logo资料库

银行家算法实验报告(C++版).doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
2011年 11 月 07 日
1、实验目的
2、实验内容
3、实验笔记
4、总结
操作系统 上机实验报告 银行家算法模拟 实验人: 学 号: 2011 年 11 月 07 日
实验报告 1、实验目的 模拟银行家算法,加深了解有关资源申请、死锁避免、状态安全性等概念, 并体会和运用避免死锁的具体方法。然后自行设计模拟程序。 2、实验内容 用 C 语言或 C++语言对银行家算法进行模拟。 要求以文件形式输入以下数组: Available: array[1..m]of integer; Max: array[1..n,1..m]of integer; Allocation: array[1..n,1..m]of integer; Need: array[1..n,1..m]of integer; 输入文件内容及格式见附录 A。其中,资源种类数 m=3,进程数 n=5 在程序中手工输入: Request i: array[1..m]of integer; 要求检测输出若满足该进程的请求则系统状态是否安全,若状态安全则输出 //第 i 个进程的资源请求 //当前分配 //系统可用资源 //进程最大需求 //尚需资源 安全进程序列。 3、实验笔记 2011 年 11 月 7 日星期一 内容:深刻了解有关实验目的,仔细阅读有关实验内容,对银行家算法进行初步的构思,分 析。 原理:银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地 申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致 系统进入不安全状态,则分配,否则等待。 银行家算法的基本思想是分配资源之前,判断 系统是否是安全的;若是,才分配。 //系统可用资源 //进程最大需求 //当前分配 2011 年 11 月 8 号星期二 内容:分析实现银行家算法所需资源,Available :系统可用资源、Max: 进程最大需求、 Allocation:当前分配、Need: array 尚需资源、Request i: 第 i 个进程的资源请求。 Available: array[1..3]of integer; Max: array[1..5,1..3]of integer; Allocation: array[1..5,1..3]of integer; Need: array[1..5,1..3]of integer; Request i: array[1..3]of integer; 2011 年 11 月 14 号星期一 内容:选择利用 c++完成银行家算法,对数据进行处理,从文件 banker 中读入 Available : 系统可用资源、Max: 进程最大需求、Allocation:当前分配、Need: array 尚需资源等资源的数 据。 问题:读取的数据不能显示 //尚需资源 //第 i 个进程的资源请求 2
实验报告 解决:报 banker 中的英文单词删除 2011 年 11 月 18 日 内容:继续完成银行家算法 (1)如果 Request[N]<=NEED[I,N],则转(2);否则,出错。 (2)如果 Request[N]<=AVAILABLE,则转(3);否则,出错。 3
实验报告 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程 等待。 2011 年 11 月 19 日 内容:安全性检查 FINISH[M]=FALSE (2)从进程集合中找到一个满足下述条件的进程, FINISH[i]=FALSE NEED<=AVAILABLE 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 AVAILABLE+=ALLOCATION FINISH=TRUE GO TO 2 (4)如所有的进程 Finish[M]=true,则表示安全;否则系统不安全。 2011 年 11 月 20 日 内容;试图简化代码,但没有成功。 4、总结 对本次实践进行简单总结(例如,问题,收获等)。 银行家算法是避免死锁的一种重要方法,在完成作业的过程中加深了解有关 资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 银行家算法描述:操作系统按照银行家制定的规则为进程分配资源,当进 程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存 的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推 迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资 源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满 足则按当前的申请量分配资源,否则也要推迟分配。 在完成作业的过程中也遇到了麻烦,从文件中读入数据应该删除多余的注释 等,以免对读入的数造成影响。自己做的银行家算法太过于麻烦的有无力改 变,暂时没有想到什么好的解决办法。 附录 A: 输入文件内容及格式: Max 7 5 3 3 2 2 9 0 2 2 2 2 4 3 3 Allocation 4
实验报告 0 1 0 2 0 0 3 0 2 2 1 1 0 0 2 Need 7 4 3 1 2 2 6 0 0 0 1 1 4 3 1 Available 3 3 2 输出内容(填写程序运行时屏幕上的输出结果): 以进程 2 为例,请求资源 1,1,1; 源代码: #include #include using namespace std; int main() { int const m=3; 5
实验报告 int const n=5; bool A(int,int Need[5][3]); void B(int i,int Max[5][3],int Need[5][3],int Allocation[5][3],int Available[3]); int Max[5][3]; //进程最大需求 int Allocation[5][3]; //当前分配 int Need[5][3]; //尚需资源 int Available[3];//系统可用资源 int Request[3]; bool t[n]; int a,k; int a1,a2; ifstream infile("banker.txt",ios::in); if(!infile) { } cerr<<"open error!"<>Max[i][j]; cout<
实验报告 cout<>Allocation[i][j]; cout<>Need[i][j]; cout<>Available[i]; cout<
实验报告 for(k=0;k<5;k++) { } t[k]=false; cout<<"请输入满足哪进程的请求:"; cin>>a; cout<<"进程"<>Request[i]; { } for( i=0;iAvailable[i]) { } cout<<"请求资源过大,超过可用资源量"<
分享到:
收藏