need[serial_proc][j]-=request[serial_proc][j]; allocation[serial_proc][j]+=request[serial_proc][j]; }
if(security(type_src,n_proc)) { tmp=0; for(j=0;j int finish_all(void) { int i,j; for(i=0;i /*结果输出*/ void output() { int i,j; printf(\此时安全序列输出:\\n\ for(i=0;i printf(\ printf(\ Max Allocation Need Available\\n\ printf(\ A B C A B C A B C A B C\\n\ for(i=0;i for(j=0;j for(j=0;j if (i==serial_proc) for(j=0;j printf(\ } } /*----------------------------------------------------------------------------------------------*/ /*主函数,提供开始工作界面*/ void main(void) { start: printf(\模拟银行家算法*********************\\n\\t\\t\\t\\n\ do{ init0_data(); }while(!security(type_src,n_proc)); output(); do{ proc_require0(); if(apply_success(over_need(),over_avail())) bank(); output(); }while(finish_all()); goto start; } 五.自我评价 在学习操作系统的时候我就对银行家算法很感兴趣,所以这次就挑选了这个任务来完成。程序中,我不仅把请求资源超过分配资源,资源不满足任何进程等情况都考虑了,而且在每次有进程要求分配资源后,都输出安全序列。 在查找相关资料的时候,我发现有人不仅做了自动输入请求资源的进程和要求分配的资源数,他还做了自动请求和分配的情况。我觉得有手动输入和自动两种情况更好。 通过本次实验,让我对银行家算法和其中的安全性检查算法有了更深刻的认识和理解,也提高了自己的编程能力。

