欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    嵌入式实时操作系统的任务管理及任务调度1.pdf

    • 资源ID:71543731       资源大小:229.56KB        全文页数:5页
    • 资源格式: PDF        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式实时操作系统的任务管理及任务调度1.pdf

    1、嵌入式实时操作系统简介 11 英文名 Embedded Real-time Operation System,简写为 RTOS。1.2.1 定义:当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。(注:在工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。我们常常说的嵌入式操作系统都是嵌入式实时操作系统。比如 C/OS-II、eCOS 和 Linux。故对嵌入式实时操作系统的理解应该建立在对嵌入式系统的理解之上加入对响应时间的要求。)1.2.2 IEEE 定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”。1.2.3 一般定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。1.3 分类:VxWorks,uC/OS-,uClinux,eCos,RTXC 等。2、嵌入式实时操作系统的任务管理21 任务管理:是嵌入式实时操作系统的核心和灵魂,决定了操作系统的实时性能。它通常包含优先级设置、多任务调度机制和时间确定性等部分。2.1.1 优先级设置:嵌入式操作系统支持多任务,每个任务都具有优先级,任务越重要,赋予的优先级应越高。优先级的设置分为静态优先级和动态优先级两种。静态优先级指的是每个任务在运行前都被赋予一个优先级,而且这个优先级在系统运行期间是不能改变的;动态优先级则是指每个任务的优先级(特别是应用程序的优先级)在系统运行时可以动态地改变。2.1.2 多任务调度机制:任务调度主要是协调任务对计算机系统资源的争夺使用。对系统资源非常匮乏的嵌入式系统来说,任务调度尤为重要,它直接影响到系统的实时性能。通常,多任务调度机制分为基于优先级抢占式调度和时间片轮转调度。(1)基于优先级抢占式调度:系统中每个任务都有一个优先级,内核总是将 CPU 分配给处于就绪态的优先级最高的任务运行。如果系统发现就绪队列中有比当前运行任务更高的优先级任务,就把当前运行任务置于就绪队列中,调入高优先级任务运行。系统采用优先级抢占方式进行调度,可以保证重要的突发事件及时得到处理。(2)时间片轮转调度:让优先级相同的处于就绪状第 1 页态的任务按时间片使用 CPU,以防止同优先级的某一任务长时间独占 CPU。在一般情况下,嵌入式实时操作系统采用基于优先级抢占式调度与时间片轮转调度相结合的调度机制。2.1.3 时间的可确定性:嵌入式实时操作系统甬数调用与服务的执行时间应具有可确定性。系统服务的执行时间不依赖于应用程序任务的多少。基于此特征,系统完成某个确定任务的时间是可预测的。2.2 任务管理机制:在内核的设计过程中,最先应考虑的是任务的状态以及迁移时序,然后根据此状态设计相应的队列,如就绪队列、等待队列等。内核时钟也依赖任务的状态。可以看出,任务管理实现的核心和基础是任务状态和迁移时序。2.2.1 任务状态:在多任务状态中,任务要参与资源的竞争,只有在所需资源得到满足的情况下才能得到执行。然而,任务拥有的资源情况是不断变化的,这将导致任务状态也表现出不断变化的特性。不同的实时内核实现方式对状态的定义不尽相同,但都包括以下三种基本状态:(1)等待:任务在等待I/O 完成或者等待某事件的发生;(2)就绪:任务已经得到需要运行的资源,并等待获得处理器资源;(3)执行:任务获得处理器和其他所有需要的资源,相关代码正在被运行。在单处理器系统中,任何时候只有一个任务处于运行状态。如果没有任何任务需要运行,那么内核会运行一个空闲任务。任何一个可以执行的任务都必须处于就绪状态,实时内核会从所有就绪的任务中,使用合适的调度策略选择一个运行。当一个任务请求 I/O 操作,或者等待信号量将会处于等待状态。2.2.2 任务状态转移:在一定条件下,任务会在不同的状态之间进行转化,称为任务状态迁移,如图1 所示。图 1 任务状态迁移图图 2 实际实现的任务状态转换图第 2 页图 2 在描述任务状态迁移的同时,也描述了任务的生存周期,任务的生命期从新建态时开始直到结束态时结束。在给定的时刻,任务的状态一定处在这六种状态之一。新建状态是指任务被创建的过程,在这个过程中主要工作有:为任务分配 TCB 和栈空间以及其他资源。当任务创建完成以后,任务就具备运行的能力了,与此同时,任务进入就绪状态,并等待调度器为它分配运行的机会。当任务得到运行的机会,任务开始执行。处于运行态的任务会在任意时刻由运行态进入休眠态、就绪态或结束状态。其中进入休眠态是任务的主动过程,这主要是任务调用了内核提供的休眠函数,任务在休眠状态,如果没有其他任务唤醒它,它将永远休眠下去直到系统关闭,这种方式也可用于任务同步。等待状态主要由两种原因引起,一种是等待某事件的发生,如等待信号量;第二种为任务主动等待多少个 tick。最后,任务可以将自己杀死进入结束态。图 3 任务状态迁移示意图图 3 描述了三个任务状态迁移过程。图中包含三个任务和一个调度程序。调度程序确定下一个需要投入运行的任务,因此调度程序本身也占用一定的处理时间。3、嵌入式实时操作系统的任务调度3.1 任务调度:调度是内核的主要职责之一,调度的主要任务就是要决定该轮到哪个任务运行。多数实时内核采用基于优先级调度的算法。基于优先级的调度算法是指,每个任务根据重要程度被赋予一定的优先级,CPU 总是让处在就绪态的优先级最高的任务运行。然而,究竟何时让高优先级任务掌握 CPU 的使用权,有两种不同的情况,这取决于内核的类型(是可剥夺型的还是可剥夺型内核)。当调度程序决定新的任务获得 CPU 的使用权时,这时内核将执行任务切换。任务切换过程为:首先保存当前任务的上下文,即 CPU 寄存器中的全部内容。这些内容可以保存在任务的自己的栈中,也可以保存在 TCB 中。然后,将需要运行的任务的上下文从该任务的栈中重新装入 CPU 的寄存器,并开始运行。任务切换过程增加了应用程序的额外负荷。CPU 的内部寄存器越多,额外负荷就越重。3.2 调度算法 3.2.1 时间片轮转调度算法:当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间,该段时间叫做时间片,然后切换给另一个任务。内核在满足以下条件时,把 CPU 控制权交给下一个就绪态的任务:当前任务运行的时间片到期;当前任务在时间片还没结束时已经完成了。第 3 页 3.2.2 基于优先级的调度算法:每个任务都赋予优先级。任务越重要,赋予的优先级就越高。优先级的分配方式可分为静态分配和动态分配的方式。静态优先级是指应用程序执行过程中诸任务的优先级不变。在静态优先级系统中,各个任务以及它们的时间约束在程序编译时是已知的。动态优先级指应用程序执行过程中,任务的优先级是可变的。Linux 采取的调度策略结合了这几种调度方案。在Linux 系统中,调度算法最基本的一类就是基于优先级的调度。优先级高的任务先运行,相同优先级的任务按照轮转方式进行调度。Linux 也实现了基于动态优先级的调度方法。一开始,利用静态优先级的方法设置任务的优先级,然而它允许调度程序根据需要来提升、降低优先级。3.3 调度器实现:在整个任务管理中,任务调度无疑是系统的核心,任务调度通常由内核中的调度器实现。调度器的实现与任务运行状态迁移,任务队列有密切的联系,可以说任务运行状态迁移和任务队列决定了调度器的实现。调度器的主要作用是在就绪队列中选择优先级最高的任务运行,如果优先级最高的任务不止一个,则选择队头的任务运行。虽然整个调度器的功能可以用上面的几句话概括,但调度器的实现远远没有那么简单,主要困难来源下面的原因:确定调度器运行的时机;中断处理程序完了后,是执行当前任务,还是马上调度;调度器的性能;调度中伴随着任务上下文的切换,尤其对处理器架构有关的上下文,应该设计良好的接口以便移植。对于实时系统来说,中断处理程序执行完毕后,应该马上执行调度,这是因为中断常常伴随着有新的任务处于就绪队列中,在这些任务中可能会有高优先级的任务就绪,所以在实时内核中要求必须支持在中断后马上进行任务调度。不管是在实时系统,还是在其他系统中,调度器性能显得非常重要,常常要求调度器的时间复杂度至少应该为线性,当然常数是最好的。对于不同的处理器架构,其提供的寄存器,状态寄存器都有很大的区别,调度器应该留出良好的接口给不同的处理器,以便以后方便移植。在实现调度器时,基本上考虑了上面的几个基本问题。根据任务状态迁移、内核队列等方面的内容,在byCore中实现了一个叫 scheduler()的调度程序。在 scheduler()中调用几个与硬件相关的函数,这几个函数主要用于实现任务硬件上下文的切换,这部分代码用汇编完成,并且与处理器有关。图 4 描述了 scheduler()的算法流程图。图 4 scheduler()的算法流程图第 4 页该调度程序的算法非常简单,首先,在允许调度的情况下,如果有高优先级任务就绪,则进行任务切换。任务切换会发生在两种处理器模式下,一种是处理器处于正常的运行态,另一种发生在中断态中。因此,内核使用两组函数分别处理这两种情况。在两种处理器状态下都有“启动新任务”和“新旧任务切换”函数接口实现最后的任务切换工作,这两组函数与处理器有关,并由汇编实现。“启动新任务”的主要功能是将任务的初始上下文复制给处理器的各个寄存器,这包括通用寄存器、堆栈指针寄存器、状态寄存器和指令指针寄存器等。这些初始值在新任务创建时被初始化。启动新任务发生的时机有两种情况,第一种情况是内核初始化完毕后,启动第一个任务;第二种情况为任务主动结束后,当前任务指针被置位 NULL时。“任务切换”发生在两个任务之间,一个是被换切换出去的任务,另一个是将要执行的任务。任务切换函数也由汇编代码实现。它所要完成的工作主要有两个,第一是将旧任务(被换切换出去的任务)的上下文保存到自己的栈中,第二是新任务(将要执行的任务)将保存在栈中的上下文复制到处理器的相关寄存器中。任务切换的发生时机有:当前任务执行时间到;当前任务被高优先级任务抢占;当前任务休眠,或等待某事件发生。4、结语通过查阅相关资料,我对嵌入式实时操作系统以及嵌入式实时操作系统的任务管理、任务调度有了更进一步的了解。许多嵌入式操作系统都是实时操作系统,而实时系统的调度追求的是实时性,其结果的正确性依赖于逻辑结果和产生该结果的时间。任务是任务调度的基本单位,而任务管理的内容是优先级设置、多任务调度机制和时间确定性等部分。只有设置好了任务的相关内容,才能很好的实现任务的调度。第 5 页

    注意事项

    本文(嵌入式实时操作系统的任务管理及任务调度1.pdf)为本站会员(l***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开