版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、度:系统中每个任务都有一个优先级,内核总是将CPUCPU 分配给处于就绪态的优先级最高的1 1、嵌入式实时操作系统简介1 1 1 1 英文名 EmbeddedEmbedded Real-timeReal-time OperationOperation SystemSystem ,简写为 RTOSRTOS。1.2.11.2.1 定义:当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的 结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应, 并控制所有实时任 务协调一致运行的嵌入式操作系统。 (注:在工业控制、军事设备、航空航天等领域对系统 的响应时间有苛刻的要求, 这就
2、需要使用实时系统。 我们常常说的嵌入式操作系统都是嵌入 式实时操作系统。比如卩 C/OSIIC/OSII、eCOSeCOS 和 LinuxLinux。故对嵌入式实时操作系统的理解应该建立在对嵌入式系统的理解之上加入对响应时间的要求。)1.2.21.2.2 IEEEIEEE 定义:嵌入式系统是 “用于控制、监视或者辅助操作机器和设备的装置 ”。1.2.31.2.3 一般定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、 成本、体积、功耗严格要求的专用计算机系统。1 1 . . 3 3 分类:VxWorksVxWorks , uC/OS-uC/OS-n,uClinuxuClin
3、ux , eCoseCos, RTXCRTXC 等。2 2、嵌入式实时操作系统的任务管理2 21 1 任务管理:是嵌入式实时操作系统的核心和灵魂,决定了操作系统的实时性能。它 通常包含优先级设置、多任务调度机制和时间确定性等部分。2.1.12.1.1 优先级设置:嵌入式操作系统支持多任务,每个任务都具有优先级,任务越重要,赋予的优先级应越高。 优先级的设置分为静态优先级和动态优先级两种。 静态优先级指的是 每个任务在运行前都被赋予一个优先级, 而且这个优先级在系统运行期间是不能改变的; 动 态优先级则是指每个任务的优先级(特别是应用程序的优先级 )在系统运行时可以动态地改变。2.1.22.1.
4、2 多任务调度机制:任务调度主要是协调任务对计算机系统资源的争夺使用。对系统资源非常匮乏的嵌入式系统来说, 任务调度尤为重要, 它直接影响到系统的实时性能。 通常, 多任务调度机制分为基于优先级抢占式调度和时间片轮转调度。(1 1)基于优先级抢占式调任务运行。 如果系统发现就绪队列中有比当前运行任务更高的优先级任务, 就把当前运行任 务置于就绪队列中, 调入高优先级任务运行。 系统采用优先级抢占方式进行调度, 可以保证 重要的突发事件及时得到处理。(2 2)时间片轮转调度:让优先级相同的处于就绪状态的任务按时间片使用 CPUCPU,以防止同优先级的某一任务长时间独占CPUCPU。在一般情况下,
5、嵌入式实时操作系统采用基于优先级抢占式调度与时间片轮转调度相结合的调度机制。2.1.32.1.3 时间的可确定性: 嵌入式实时操作系统甬数调用与服务的执行时间应具有可确定性。 系统服务的执行时间不依赖于应用程序任务的多少。 基于此特征, 系统完成某个确定任务的 时间是可预测的。2 2 . . 2 2 任务管理机制:在内核的设计过程中,最先应考虑的是任务的状态以及迁移时序, 然后根据此状态设计相应的队列,如就绪队列、等待队列等。内核时钟也依赖任务的状态。 可以看出,任务管理实现的核心和基础是任务状态和迁移时序。2.2.12.2.1 任务状态:在多任务状态中,任务要参与资源的竞争,只有在所需资源得
6、到满足的情况下才能得到执行。 然而, 任务拥有的资源情况是不断变化的, 这将导致任务状态也表现 出不断变化的特性。 不同的实时内核实现方式对状态的定义不尽相同, 但都包括以下三种基 本状态:( 1 1)等待:任务在等待 I/OI/O 完成或者等待某事件的发生;( 2 2)就绪:任务已经得 到需要运行的资源,并等待获得处理器资源;(3 3)执行:任务获得处理器和其他所有需要的资源,相关代码正在被运行。在单处理器系统中,任何时候只有一个任务处于运行状态。如果没有任何任务需要运行, 那么内核会运行一个空闲任务。 任何一个可以执行的任务都必 须处于就绪状态, 实时内核会从所有就绪的任务中, 使用合适的
7、调度策略选择一个运行。 当 一个任务请求 I/OI/O 操作,或者等待信号量将会处于等待状态。2.2.22.2.2 任务状态转移:在一定条件下,任务会在不同的状态之间进行转化,称为任务状态 迁移,如图 1 1 所示。图 1 1 任务状态迁移图图 2 2 实际实现的任务状态转换图图 2 2 在描述任务状态迁移的同时,也描述了任务的生存周期,任务的生命期从新建态时开始直到结束态时结束。 在给定的时刻,任务的状态一定处在这六种状态之一。新建状态是指任务被创建的过程,在这个过程中主要工作有: 为任务分配 TCBTCB 和栈空间以及其他资源。 当任务创建完成以后,任务就具备运行的能力了,与此同时,任务进
8、入就绪状态, 并等待调度器为它分配运行的机会。当任务得到运行的机会,任务开始执行。处于运行态的任务会在 任意时刻由运行态进入休眠态、就绪态或结束状态。其中进入休眠态是任务的主动过程,这主要是任务调用了内核提供的休眠函数,任务在休眠状态,如果没有其他任务唤醒它,它将永远休眠下去直到系统关闭,这种方式也可用于任务同步。等待状态主要由两种原因引起, 一种是等待某事件的发生,如等待信号量;第二种为任务主动等待多少个ticktick。最后,任务 可以将自己杀死进入结束态。茯猖CPU休运行就缮孝待图 3 3 任务状态迁移示意图图 3 3 描述了三个任务状态迁移过程。图中包含三个任务和一个调度程序。调度程序
9、确定下一个需要投入运行的任务,因此调度程序本身也占用一定的处理时间。3 3、嵌入式实时操作系统的任务调度3.3. 1 1 任务调度:调度是内核的主要职责之一,调度的主要任务就是要决定该轮到哪个任务运行。多数实时内核采用基于优先级调度的算法。基于优先级的调度算法是指,每个任务根据重要程度被赋予一定的优先级,CPUCPU 总是让处在就绪态的优先级最高的任务运行。然而,究竟何时让高优先级任务掌握 CPUCPU 的使用权,有两种不同的情况,这取决于内核的类型(是 可剥夺型的还是可剥夺型内核)。当调度程序决定新的任务获得CPUCPU 的使用权时,这时内核将执行任务切换。任务切换过程为:首先保存当前任务的
10、上下文,即CPUCPU 寄存器中的全部内容。这些内容可以保存在任务的自己的栈中,也可以保存在TCBTCB 中。然后,将需要运行的任务的上下文从该任务的栈中重新装入CPUCPU 的寄存器,并开始运行。任务切换过程增加了应用程序的额外负荷。CPUCPU 的内部寄存器越多,额外负荷就越重。3.3. 2 2 调度算法3.2.13.2.1 时间片轮转调度算法:当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间, 该段时间叫做时间片, 然后切换给另一个任务。 内核在满足以下条 件时,把 CPCPU U控制权交给下一个就绪态的任务: 当前任务运行的时间片到期; 当前任 务在时间片还没结
11、束时已经完成了。3.2.23.2.2基于优先级的调度算法:每个任务都赋予优先级。任务越重要,赋予的优先级就越 高。优先级的分配方式可分为静态分配和动态分配的方式。 静态优先级是指应用程序执行过 程中诸任务的优先级不变。 在静态优先级系统中, 各个任务以及它们的时间约束在程序编译 时是已知的。动态优先级指应用程序执行过程中,任务的优先级是可变的。LinuxLinux 采取的调度策略结合了这几种调度方案。 在 LinuxLinux 系统中,调度算法最基本的一类 就是基于优先级的调度。 优先级高的任务先运行, 相同优先级的任务按照轮转方式进行调度。 LinuxLinux 也实现了基于动态优先级的调度
12、方法。一开始,利用静态优先级的方法设置任务的优 先级,然而它允许调度程序根据需要来提升、降低优先级。3.3. 3 3 调度器实现: 在整个任务管理中, 任务调度无疑是系统的核心, 任务调度通常由内核 中的调度器实现。 调度器的实现与任务运行状态迁移, 任务队列有密切的联系, 可以说任务 运行状态迁移和任务队列决定了调度器的实现。 调度器的主要作用是在就绪队列中选择优先 级最高的任务运行, 如果优先级最高的任务不止一个, 则选择队头的任务运行。 虽然整个调 度器的功能可以用上面的几句话概括, 但调度器的实现远远没有那么简单, 主要困难来源下 面的原因:确定调度器运行的时机;中断处理程序完了后,是
13、执行当前任务,还是 马上调度;调度器的性能;调度中伴随着任务上下文的切换,尤其对处理器架构有 关的上下文,应该设计良好的接口以便移植。对于实时系统来说,中断处理程序执行完毕后,应该马上执行调度,这是因为中断常常 伴随着有新的任务处于就绪队列中, 在这些任务中可能会有高优先级的任务就绪, 所以在实 时内核中要求必须支持在中断后马上进行任务调度。 不管是在实时系统, 还是在其他系统中, 调度器性能显得非常重要, 常常要求调度器的时间复杂度至少应该为线性, 当然常数是最好 的。对于不同的处理器架构,其提供的寄存器,状态寄存器都有很大的区别,调度器应该留 出良好的接口给不同的处理器,以便以后方便移植。
14、在实现调度器时,基本上考虑了上面的几个基本问题。根据任务状态迁移、内核队列等方面 的内容, 在 byCorebyCore中实现了一个叫 scheduler(scheduler( ) ) 的调度程序。在 scheduler(scheduler( ) )中调用几个与硬 件相关的函数,这几个函数主要用于实现任务硬件上下文的切换,这部分代码用汇编完成, 并且与处理器有关。图 4 4 描述了 scheduler(scheduler( ) )的算法流程图。無旧任务忖渎1_M11在中師蕊NS功輻任挥在中断垂下任野骑用任爭圳松堆跆前仔务图 4 4 scheduleschedule )的算法流程图该调度程序的算
15、法非常简单,首先,在允许调度的情况下,如果有高优先级任务就绪,调螫就轴仏列辻于爭SHFF .为荊圧寻招併*空1越在中昕限笛程VIN则进行任务切换。任务切换会发生在两种处理器模式下,一种是处理器处于正常的运行态,另一种发生在中断态中。因此,内核使用两组函数分别处理这两种情况。在两种处理器状态下都有启动新任务”和新旧任务切换”函数接口实现最后的任务切换工作,这两组函数与处理器有关,并由汇编实现。启动新任务”的主要功能是将任务的初始上下文复制给处理器的 各个寄存器,这包括通用寄存器、堆栈指针寄存器、状态寄存器和指令指针寄存器等。这些初始值在新任务创建时被初始化。启动新任务发生的时机有两种情况,第一种情况是内核初始化完毕后,启动第一个任务;第二种情况为任务主动结束后,当前任务指针被置位 NULLNULL 时。“任务切换 ”发生在两个任务之间,一个是被换切换出去的任务,另一个是将要执行的任 务。任务切换函数也由汇编代码实现。它所要完成的工作主要有两个, 第一是将旧任务 (被 换切换出去的任务) 的上下文保存到自己的栈中, 第二是新任务(将要执行的任务)将保存 在栈中的上下文复制到处理器的相关寄存器中。任
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考地理一轮复习第三章地球上的大气及其运动第三节常见天气系统课件
- 新课改课件模板
- 2023年国家公务员录用考试《行测》真题(地市级)及答案解析
- 2024年湖南省中考英语真题卷及答案解析
- 动画设置 课件
- 幼儿园小班歌曲《大西瓜》课件
- 西京学院《景观小品设计》2023-2024学年第一学期期末试卷
- 西京学院《机械制造技术基础》2023-2024学年第一学期期末试卷
- 西京学院《工程创新设计电气控制》2021-2022学年期末试卷
- 西京学院《电力工程基础》2022-2023学年期末试卷
- 医药魔方-CAR-T细胞疗法研发现状与发展趋势-2023.07
- 数字经济学导论-全套课件
- 矿山环境保护教材或演讲课件
- 学习投入量表
- 【历史课件】中国近代史
- 基础英语语法中国大学mooc课后章节答案期末考试题库2023年
- 北师大版八年级生物下册《发酵技术》评课稿
- 王崧舟慈母情深课件
- 保育员-项目二-组织进餐课件
- 南京工业职业技术大学辅导员考试题库
- 2024年消防设施操作员之消防设备高级技能每日一练试卷B卷含答案
评论
0/150
提交评论