银行家算法(操作系统).doc_第1页
银行家算法(操作系统).doc_第2页
银行家算法(操作系统).doc_第3页
银行家算法(操作系统).doc_第4页
银行家算法(操作系统).doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统实验报告题目:银行家算法班级:网络工程姓名:朱锦涛学号:E31314037一、实验目的 用代码实现银行家算法,了解通过银行家算法避免死锁的思想。通过代码的具体实现,加深对算法的核心的理解。二、实验原理 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。三、实验内容源程序:#include#include#includetypedef struct Procedureint Max3; /满足此进程需要三类资源的数量int Allocation3; /系统已经为该进程分配的资源情况int Need3; /该进程还需要资源数量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 system3 = rand()%5+10,rand()%5+2,rand()%5+5;printf(系统中可用的各类资源数分别为:%d %d %dn,system0,system1,system2);Pro *pHead = create_list(len);traverse_list(pHead);int cnt = cnt_exe(pHead,system,3);if(cnt = 0)printf(对不起,不存在安全序列n);return 0;elseint 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;jMaxj = rand()%5+4;pNew-Allocationj = rand()%5;pNew-Needj = pNew-Maxj - pNew-Allocationj;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-Max0,p-Max1,p-Max2);printf(n);printf(第%d个资源已分配资源总数各为:%d %d %d,i, p-Allocation0,p-Allocation1,p-Allocation2);printf(n);printf(第%d个资源还需要资源总数各为:%d %d %d,i, p-Need0,p-Need1,p-Need2);printf(n);printf(n);p = p-pNext;i+;printf(n);return;int cnt_exe(PNODE pHead,int *system,int i)PNODE p;p = pHead-pNext; /p指向第一个节点int count = 0;while(p != NULL)if(system0 = p-Need0 & system1 = p-Need1 & system2 = p-Need2)count+;p = p-pNext;return count;int work(PNODE pHead,int *system)PNODE p;p = pHead-pNext; /p指向第一个节点 int ok = 0;while(p != NULL)if(system0 = p-Need0 & system1 = p-Need1 & system2 = p-Need2)system0 += p-Allocation0;system1 += p-Allocation1;system2 += p-Allocation2;p-flag = 1;ok+;printf(系统已经为您执行了进程:%cn,p-p);PNODE q;q = pHead; /寻找q的前一个节点,方便删掉q节点while( q-pNext != p )q = q-pNext; q-pNext = p-pNext;free(p);p = NULL;p = pHead-pNext;/p又重新指向第一个节点elsep = p-pNext;return ok;存在安全序列的情况:不存在安全序列的情况:四、实验小结用随机数为系统分配三类资源的个数,随后系统为每个作业分配每个资源需要的个数和已经分配的资源数量,那么还需要资源的数量则有最大分配量减去已经分配的数量。 系统在队列中寻找能满足当前条件的作业,运行完之后,将其资源释放,把各类资源重新还给系统。把运行完之后的作业从队列中删除,系统再从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论