银行家算法(操作系统).docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
银行家算法(操作系统)

《操作系统》实验报告题目:银行家算法班级:网络工程姓名:朱锦涛学号:、实验目的用代码实现银行家算法,了解通过银行家算法避免死锁的思想。通过代码的具体实现,加深对算法的核心的理解。二、实验原理我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。三、实验内容源程序:#includestdio.h#includetime.h#includestdlib.htypedef struct Procedure{int Max[3]; //满足此进程需要三类资源的数量int Allocation[3]; //系统已经为该进程分配的资源情况int Need[3]; //该进程还需要资源数量int flag; //标志位,执行完之前为0,执行完之后为1char p; //在执行完之后,给出相应的编号,如P1,P2struct Procedure * pNext;}Pro,*PNODE; //如果系统资源足够多的话,那么所有的安全序列的数量就会是5*4*3*2*1=120个PNODE create_list(int len);void traverse_list(PNODE pHead);int cnt_exe(PNODE pHead,int *system,int i); //计算目前系统能够执行的进程数int work(PNODE pHead,int *system);int main(){int ok;int len;srand(time(0));int system[3] = {rand()%5+10,rand()%5+2,rand()%5+5};printf(系统中可用的各类资源数分别为:%d %d %d\n,system[0],system[1],system[2]);Pro *pHead = create_list(len);traverse_list(pHead);int cnt = cnt_exe(pHead,system,3);if(cnt == 0){printf(对不起,不存在安全序列\n);return 0;}else{int ok = work(pHead,system);if(ok == len)printf(恭喜!存在安全序列!\n);elseprintf(很抱歉!不存在安全序列!\n);}return 0;}PNODE create_list(int len){int i,j;char c = A; //用来临时存放用户输入的结点的值//分配了一个不存放有效数据的头结点PNODE pHead = (PNODE)malloc(sizeof(Pro));if (NULL == pHead){printf(分配失败, 程序终止!\n);exit(-1);}PNODE pTail = pHead;pTail-pNext = NULL;printf(请输入您需要生成的链表节点的个数:);scanf(%d, len);for (i=0; ilen; ++i){PNODE pNew = (PNODE)malloc(sizeof(Pro));if (NULL == pNew){printf(分配失败, 程序终止!\n);exit(-1);}for(j=0;j3;j++){pNew-Max[j] = rand()%5+4;pNew-Allocation[j] = rand()%5;pNew-Need[j] = pNew-Max[j] - pNew-Allocation[j];}pNew-flag = 0;pNew-p = c;pTail-pNext = pNew;pNew-pNext = NULL;pTail = pNew;c++;}return pHead;}void traverse_list(PNODE pHead){PNODE p = pHead-pNext;int i = 1;while (NULL != p){printf(第%d个资源的需要资源总数各为:%d %d %d,i, p-Max[0],p-Max[1],p-Max[2]);printf(\n);printf(第%

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档