ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:97.19KB ,
资源ID:6996752      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6996752.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于MC68HC08单片机ADDA转换系统的设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于MC68HC08单片机ADDA转换系统的设计.docx

1、基于MC68HC08单片机ADDA转换系统的设计操作系统课程设计报告 指导教师: 潘煜 学号: 070603115 姓名: 张鑫 班级: 070603 学期:2009至2010学年1学期1、概述一、设计目的1.对死锁避免中的银行家算法作进一步理解。2.加深理解死锁的概念。 3.加深理解安全序列和安全状态的概念。4.通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。二、开发环境 操作系统 Windows xp编译环境 VC+6.0生成文件 银行家算法.cpp2、需求分析一、死锁概念:是指两个或两个以上的进程在执行过程中,因争夺资源

2、而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程.由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了死锁。二、关于死锁的一些结论:1.参与死锁的进程最少是两个(两个以上进程才会出现死锁) 2.参与死锁的进程至少有两个已经占有资源 3.参与死锁的所有进程都在等待资源 4.参与死锁的进程是当前系统中所有进程的子集 如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。 3、资源分类:永久性资源: 可以被多个进程多次使用(可再用资源) 1

3、)可抢占资源 2)不可抢占资源 临时性资源: 只可使用一次的资源;如信号量,中断信号,同步信号等(可消耗性资源) “申请-分配-使用-释放”模式 4、产生死锁的四个必要条件:1、互斥使用(资源独占) 一个资源每次只能给一个进程使用 2、不可强占(不可剥夺) 资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放 3、请求和保持(部分分配,占有申请) 一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配) 4、循环等待 存在一个进程等待队列 P1 , P2 , , Pn, 其中P1等待P2占有的资源,P2等待P3占有的资源,Pn等待P1占有的资源,形成

4、一个进程等待环路 。5、死锁的解决方案5.1产生死锁的例子 申请不同类型资源产生死锁 P1: 申请打印机 申请扫描仪 使用 释放打印机 释放扫描仪 P2: 申请扫描仪 申请打印机 使用 释放打印机 释放扫描仪 申请同类资源产生死锁(如内存) 设有资源R,R有m个分配单位,由n个进程P1,P2,Pn(n m)共享。假设每个进程对R的申请和释放符合下列原则: * 一次只能申请一个单位 * 满足总申请后才能使用 * 使用完后一次性释放 m=2,n=3 资源分配不当导致死锁产生5.2死锁预防:1.摒弃“请求和保持”2.摒弃“不剥夺”条件3.摒弃“环路等待”5.3安全状态与不安全状态 : 安全状态 :如

5、果操作系统能保证所有的进程在 有限的时间 内得到需要的 全部资源 ,则称系统处于安全状态。3、数据结构设计 一、可利用资源向量矩阵AVAILABLE。这是一个含有M个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果AVAILABLE j= K,则表示系统中现有R类资源K个 二、最大需求矩阵MAX。这是一个N*M的矩阵,用以表示每一个进程对M类资源的最大需求。如果MAX i,j=K,则表示进程I需要R类资源的数目为K。 三、分配矩阵ALLOCATION。这也是一个N*M的矩阵,它定义了系统中每一类

6、资源当前已分配给每一进程的资源数。如果ALLOCATION i,j=K,则表示进程i当前已分得R类资源的数目为K。 四、需求矩阵NEED。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果NEED i,j=K,则表示进程i还需要R类资源K个,才能完成其任务。 上述矩阵存在下述关系: NEED i,j= MAXi,j ALLOCATIONi,j 4、算法的实现1、初始化 由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。2、银行家算法在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性

7、能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。设进程cusneed提出请求REQUEST i,则银行家算法按如下规则进行判断。(1)如果REQUEST cusneed i= NEEDcusneedi,则转(2);否则,出错。(2)如果REQUEST cusneed i= AVAILABLEcusneedi,则转(3);否则,出错。(3)系统试探分配资源,修改相关数据:AVAILABLEi-=REQUESTcusneedi;ALLOC

8、ATIONcusneedi+=REQUESTcusneedi;NEEDcusneedi-=REQUESTcusneedi;(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。三、安全性检查算法(1)设置两个工作向量Work=AVAILABLE;FINISH(2)从进程集合中找到一个满足下述条件的进程,FINISH=false;NEED=Work;如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。Work+=ALLOCATION;Finish=true;GOTO 2(4)如所有的进程Finish= true,则表

9、示安全;否则系统不安全。四、各算法流程图 初始化算法流程图: 银行家算法流程图: 4、源程序清单#include iostream.hint main(int argc, char* argv) int I,J,i,i1,j,n,sign; int avail10,max1010,alloc1010,need1010,requ1010,work10,finish10; coutIJ; for(i=0;iI;i+) for(j=0;jJ;j+) cout请输入进程i对资源jmaxij; /*初始化max*/ for(i=0;iI;i+) for(j=0;jJ;j+) cout请输入进程i已分配到

10、资源jallocij; /*初始化alloc*/ for(i=0;iI;i+) for(j=0;jJ;j+) cout请输入进程i还需要资源jneedij; /*初始化need*/ for(j=0;jJ;j+) cout资源javailj; /*初始化avail*/ /*用安全性算法判断系统初始化后的当前状态是否安全 START */ for(j=0;jJ;j+) workj=availj; for(i=0;iI;i+) finishi=0; /*设置两个工作向量*/ A1: for(i=0;iI;i+) sign=1; /*sign=1表示need=work*/ for(j=0;jworkj

11、) sign=0; if(finishi=0&sign=1) for(j=0;jJ;j+) workj=workj+allocij; finishi=1; /*设置finish向量*/ coutPiendl; /*输出安全序列*/ goto A1; sign=1; /*判断系统状态是否安全*/ for(i=0;iI;i+) if(finishi=0) sign=0; if(sign=0) cout当前系统处于不安全状态.endl; else cout当前系统处于安全状态,可以接受资源请求.endl; /*用安全性算法判断系统初始化后的当前状态是否安全 END */*设置请求向量 START *

12、/S: couti; i1=i; for(j=0;jJ;j+) cout请输入进程i请求的资源jrequij; /*进程请求资源*/ for(j=0;jneedij) cout错误!请求数超过需要数!endl; goto S; for(j=0;javailj) cout可利用资源不足,无法分配。endl; goto S; /*设置请求向量 END */ for(j=0;jJ;j+) availj=availj-requij; /*系统尝试分配资源*/ allocij=allocij+requij; needij=needij-requij; /*安全性算法START*/ for(j=0;jJ;

13、j+) workj=availj; for(i=0;iI;i+) finishi=0; /*设置两个工作向量*/ A2: for(i=0;iI;i+) sign=1; /*sign=1表示need=work*/ for(j=0;jworkj) sign=0; if(finishi=0&sign=1) for(j=0;jJ;j+) workj=workj+allocij; finishi=1; /*设置finish向量*/ coutPiendl; /*输出安全序列*/ goto A2; sign=1; for(i=0;iI;i+) if(finishi=0) sign=0; /*判断系统状态是否

14、安全*/ if(sign=0) cout不安全,系统已收回尝试分配的资源!endl; /*若不安全,不予分配,并将数据修改回原来的值*/ for(j=0;jJ;j+) availj=availj+requi1j; alloci1j=alloci1j-requi1j; needi1j=needi1j+requi1j; goto S; else cout安全,可以分配.1- 3状态b不安全,只剩1个可用资源,收不回已分配资源。(2)考虑下列系统状态分配矩阵最大需求矩阵可用资源矩阵0012 0012152010001750135423560632065200140656问系统是否安全?若安全就给出所有的安全序列。若进程2请求(0420),可否立即分配?答:安全。安全序列为:1-3-2-5-4。若进程2请求(0420),可立即分配。分配后可用资源为1 1 0 0,回收1进程资源,可用资源数为:1 1 1 2,然后执行3-2-5-4序列。6、参考文献1、汤子嬴编:计算机操作系统,西安电子科技大学出版社2. 严蔚敏、吴伟民.数据结构(C语言版).北京:清华大学出版社,2007.4.3. 谭浩强等.C程序设计(第二版).北京:清华大学出版社,2005.9.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1