当前位置:文档之家› 操作系统实习报告

操作系统实习报告


x.Format("%d",list[j].Max[i]); if(i==0) max=x; else max=max+' '+x; x.Format("%d",list[j].Allocation[i]); if(i==0) allocation=x; else allocation=allocation+' '+x; x.Format("%d",list[j].Need[i]); if(i==0) need=x; else need=need+' '+x; } m_display=m_display+" 最大需求矩阵:"+max+"\r\n"; m_display=m_display+" 分配矩阵:"+allocation+"\r\n"; m_display=m_display+" 需求矩阵:"+need+"\r\n"; } } void CMy0Dlg::OnButton2() //添加进程 { // TODO: Add your control notification handler code here UpdateData(TRUE); count=Count(m_sum); if(count==0) MessageBox("请先输入总的资源数!","提示",MB_OK);
void CMy0Dlg::fun() { CString max,allocation,need,n,x; for(int i=0;i<count;i++) { x.Format("%d",Available[i]); //将任意数据类型转换为字符 串,此处返回的是:Available[i] if(i==0) m_available=x; else m_available=m_available+' '+x; } m_display=""; for(int j=0;j<N;j++) { n.Format("%d",j+1); m_display=m_display+"PID:"+n+"\r\n"; for(int i=0;i<count;i++) {
转向步骤(2)。 ·如果所有进程的Finish[i]=true,则表示系统处于安全状态;否 则,系统处于不安全状态。 注明:此处所提到的几个函数说明: Available:表示系统可分配的资源数 Allocation:表示系统当前分配资源数 Need:表示进程所需的最大资源数 Request:表示进程所申请的资源数 Finish:表示该系统是否能为进程分配资源时期完成运行 3、详细设计表示: (1)银行家算法流程图 进入系统 进行初始化 添加进程并提出申请资源请求
N
Finish[1:all]==true
Y N
系统不安全 Available[i]= Available[i]+Allocation[i]
Y
系统安全
Finish=true
【调试报告】 ** 问题描述
由于MFC基础知识不扎实,导致编程屡屡出错,在调试的过程 中,更是问题百出: (1) 刚开始的时候由于对话框数量比较多显示调用的时候,记 错了ID号,导致按钮操作和弹出的对话框总是不匹配。 (2) 由于操作过程中每一个按钮都创建了一个类向导,但是由 于编程初期没有规划好,所以代码有些杂乱无章,在编程 的时候代码出现很多变量未定义或重复定义现象。 (3) 对银行家算法还存在不理解的地方,安全性检测等许多地 方,不懂得使用工作变量finish来进行判断,也为后来的 编程引起了很大的不便。 (4) 想为对话框添加背景图画,但是一直不能实现将普通图片 转化为位图,导致图片不能显示,此功能现在还未实现, 还在继续学习中。 (5) 本系统还存在一个问题就是资源申请出错时,不能给用户 提示,还在努力的修改中。
count=Count(m_sum); if(count==0) MessageBox("请先输入总的资源数!","提示",MB_OK); else if(N==0) MessageBox("请先添加进程!","提示"); else { m_request_dlg.m_request=""; if(m_request_dlg.DoModal()==IDOK) { update(); } } } void CMy0Dlg::OnButton1() //重置 { // TODO: Add your control notification handler code here UpdateData(TRUE); m_sum=""; m_available=""; count=0; N=0; m_display=""; UpdateData(FALSE); } void CMy0Dlg::OnButton3() //输出安全序列 { // TODO: Add your control notification handler code here
else MessageBox("系统未分配该进程资源!"); fun(); m_request_dlg.flag=0; } } if(m_add_dlg.flag==1) { if(strlen(m_add_dlg.m_max)!=0) { N++; change(m_add_dlg.m_max,list[N-1].Max); change(m_add_dlg.m_allocation,list[N-1].Allocation); for(int i=0;i<count;i++) { list[N-1].Need[i]=list[N-1].Max[i]-list[N-1].Allocation[i]; Available[i]=Available[i]-list[N-1].Allocation[i]; } fun(); } m_add_dlg.flag=0; } UpdateData(FALSE); } void CMy0Dlg::OnButton4() //请求分配资源 { // TODO: Add your control notification handler code here UpdateData(TRUE);
操作系统课程实验报告
学生姓名: 班 学 号: 指导教师:
目录
一、银行家算法 2 【需求规格说明】 2 ** 问题描述 3 ** 问题分析 3 【算法分析】 3 ** 设计思想 3 ** 设计表示 5 【调试报告】 7 ** 问题描述 7 ** 问题分析 7 【用户手册】 9 【附录】 9 ** 源代码(部分) 9 二、内存管理模型 15 【需求规格说明】 15 ** 问题描述 15 ** 问题分析 16 【算法分析】 16 ** 设计思想 16 ** 设计表示 17 *** 算法步骤 17 【调试报告】 18 ** 问题描述 18 **调试结果截图 18 【用户手册】 19 【附录】 19 ** 源代码(部分) 20 三、实习总结 28
2、设计表示: (1)算法步骤: ① 如果Request小于或等于Need,则转向步骤(2);否则,认为出 错,因为它所需要的资源数已超过它所宣布的最大值。 ② 如果Request<or=Available,则转向步骤(3);否则,表示系 统中尚无足够的资源,进程必须等待。 ③ 系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的 数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request; ④ 系统执行安全性算法,检查此次资源分配后,系统是否处于安全 状态。 (2)安全性检查步骤 ·设置两个向量Available和Finish 1 向量Available,它表示系统可提供进程继续运行所需要的各类 资源数目,执行安全算法开始时,Available=Allocation; 2 尔向量Finish,它表示系统是否有足够的资源分配给进程,使 之运行完成,开始时先令Finish[i]=false,当有足够资源分配 给进程时,令Finish[i]=true。 ·从进程集合中找到一个能满足下述条件的进程: 2 Finish[i]=false 3 Need<or=Available 如找到,执行步骤(3);否则,执行步骤(4)。 ·当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的 资源,故应执行: Available=Available+Allocation; Finish[i]=true;
实习题目一:银行家算法设计实现
【需求规格说明】
1、问题描述 对I/O系统的死锁资源的问题的解决主要的方法是银行家算法,单 种资源的银行家算法和多种资源的银行家算法的解决思路一致,要求设 计实现多种银行家算法,并要求所涉及的模型最少更够满足如下要求: (1) 程序能够根据进程的请求进行判断,给出系统是否安全的的提 示,如果安全,要求能够显示一组进程执行的安全序列; (2) 能够根据需要,显示当前系统中各种资源的分配情况; 2、问题分析 死锁是多个进程在运行过程中因争夺资源而造成的一种僵局,若无 外力作用它们都将无法再继续向前推进。因此在实际操作过程中,我们 应该要合理的分配系统资源避免系统进入死锁状态。避免死锁的方式有 很多,但其中以Dijkstra的银行家算法最为典型,它可以很好地进行资源 的分配从而避免系统进入死锁状态。
相关主题