银行家算法实验报告(共11页).doc
《银行家算法实验报告(共11页).doc》由会员分享,可在线阅读,更多相关《银行家算法实验报告(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 实验 报告 11
限制150内