欢迎来到天天文库
浏览记录
ID:11629391
大小:836.00 KB
页数:44页
时间:2018-07-13
《计算机操作系统实验报告资料.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、中国地质大学(北京)计算机操作系统实验报告姓名专业班级学号指导老师成绩实验时间2016/4/23–2016/6/144内容摘要:为了提高本专业学生专业素养,加深对操作系统知识的理解,对算法思想更熟练的应用,由指导教师提供参考题目与学生自主命题相结合的办法选定了以下课程设计题目:1.编制银行家算法通用程序2.处理机管理3.存储器管理采用可变式分区管理4.LRU与改进型的CLOCK算法5.磁盘调度算法在指导教师的指导下,各个学生独立完成课题分析、设计、代码编写和调试,独立撰写课程设计报告。所有工作任务主要在微机实验室完成。关键词:操作系统;课程设计44目录目录内容摘要:2目录3实验一编制银行家算法
2、通用程序4实验二处理机管理11实验三存储器管理采用可变式分区管理20实验四LRU与改进型的CLOCK算法31实验五磁盘调度算法3844实验一编制银行家算法通用程序(1)需求分析编制银行家算法通用程序,并检测所给状态的系统安全性。假定系统的任何一种资源在任一时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能由其它进程抢占。进程申请的资源不能满足时,必须等待。设计的要求:(1)程序中使用的数据结构及主要符号说明;(2)资源的种类和数目可以变化的(3)进程可以任意的顺序创建和变化(2)概要设计:44所用到的结构体:typedefstruct{intA;intB;intC;}RE
3、SOURCE//最大需求矩阵RESOURCEMax[MAX_PROCESSES_NUMBER];//已分配资源数矩阵RESOURCEAllocation[MAX_PROCESSES_NUMBER];//需求矩阵RESOURCENeed[MAX_PROCESSES_NUMBER];44//可用资源向量RESOURCEAvailable={3,3,2};intsafe[MAX_PROCESSES_NUMBER];//用于存放安全序列(1)详细设计:(3)-1安全检查函数//安全性检查boolSafeCheck(intprocessNumber){RESOURCEWork=Available;boo
4、l*Finish=newbool[processNumber];//boolFinish[5]={false,false,false,false,false};inti;intj=0;for(i=0;i5、ork.A+=Allocation[i].A;Work.B+=Allocation[i].B;Work.C+=Allocation[i].C;Finish[i]=true;safe[j++]=i;i=-1;//重新进行遍历}}}//如果所有进程的Finish向量都为true则处于安全状态,否则为不安全状态for(i=0;i6、mber){//request向量需小于Need矩阵中对应的向量if(res->A<=Need[process].A&&res->B<=Need[process].B&&res->C<=Need[process].C){//request向量需小于Available向量if(res->A<=Available.A&&res->B<=Available.B&&res->C<=Available.C){//试探分配ProbeAlloc(process,res);//如果安全检查成立,则请求成功,否则将分配回滚并返回失败if(SafeCheck(processNumber)){returntrue;7、}else{printf("安全性检查失败。原因:系统将进入不安全状态,有可能引起死锁。");printf("正在回滚...");RollBack(process,res);}}else{printf("安全性检查失败。原因:请求向量大于可利用资源向量。");}}else{printf("安全性检查失败。原因:请求向量大于需求向量。");}44returnfalse;}(3)-3试
5、ork.A+=Allocation[i].A;Work.B+=Allocation[i].B;Work.C+=Allocation[i].C;Finish[i]=true;safe[j++]=i;i=-1;//重新进行遍历}}}//如果所有进程的Finish向量都为true则处于安全状态,否则为不安全状态for(i=0;i6、mber){//request向量需小于Need矩阵中对应的向量if(res->A<=Need[process].A&&res->B<=Need[process].B&&res->C<=Need[process].C){//request向量需小于Available向量if(res->A<=Available.A&&res->B<=Available.B&&res->C<=Available.C){//试探分配ProbeAlloc(process,res);//如果安全检查成立,则请求成功,否则将分配回滚并返回失败if(SafeCheck(processNumber)){returntrue;7、}else{printf("安全性检查失败。原因:系统将进入不安全状态,有可能引起死锁。");printf("正在回滚...");RollBack(process,res);}}else{printf("安全性检查失败。原因:请求向量大于可利用资源向量。");}}else{printf("安全性检查失败。原因:请求向量大于需求向量。");}44returnfalse;}(3)-3试
6、mber){//request向量需小于Need矩阵中对应的向量if(res->A<=Need[process].A&&res->B<=Need[process].B&&res->C<=Need[process].C){//request向量需小于Available向量if(res->A<=Available.A&&res->B<=Available.B&&res->C<=Available.C){//试探分配ProbeAlloc(process,res);//如果安全检查成立,则请求成功,否则将分配回滚并返回失败if(SafeCheck(processNumber)){returntrue;
7、}else{printf("安全性检查失败。原因:系统将进入不安全状态,有可能引起死锁。");printf("正在回滚...");RollBack(process,res);}}else{printf("安全性检查失败。原因:请求向量大于可利用资源向量。");}}else{printf("安全性检查失败。原因:请求向量大于需求向量。");}44returnfalse;}(3)-3试
此文档下载收益归作者所有