嵌入式系统与软.ppt_第1页
嵌入式系统与软.ppt_第2页
嵌入式系统与软.ppt_第3页
嵌入式系统与软.ppt_第4页
嵌入式系统与软.ppt_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,嵌入式实时内核基础,2,嵌入式实时内核的关键设计问题,实时性 可移植性 可剪裁、可配置性 可靠性 应用编程接口,3,实时性,实时性是指实时内核应该保证系统尽可能快地对外部事件产生响应。 实时性是实时内核最重要的特性之一。 实时系统的正确性不仅依赖于系统计算的逻辑结果,还依赖于产生这些结果的时间。 系统的实时性与硬件、操作系统及程序三方面有关系。,4,相关概念 确定性:是指系统对外部事件响应的最坏时间是可以预知的。 响应性:是指系统在识别外部事件以后,要花多长时间来服务该事件。 响应时间:确定性和响应性结合在一起构成了系统对外部事件的响应时间,对于多任务实时应用来说,可以分两种情况:中断响应时间和任务响应时间。,实时性,5,实时性,内核实时性的重要原则: 支持多任务; 支持强占式多任务; 支持任务的优先级调度; 任务的优先级可以继承; 支持可预测的任务同步机制; 实时内核的运行时间可知并可以预测; 系统调用的确定性。,6,实时性,影响实时性的主要因素 调度算法 可抢占式内核 内核的关中断时间 数据结构 存储管理机制 资源的有限时间等待 优先级反转问题的解决 中断处理 浮点数的优化处理,7,可抢占内核与不可抢占内核 体现在任务在使用内核提供的系统调用的过程中被中断打断的不同处理上。 可抢占内核:中断服务程序退出时进行任务重调度,如果有优先级更高的任务就绪,就立即让高优先级任务运行,不要求必须回到被中断的任务,将未完成的系统调用执行完 不可抢占内核:中断服务程序退出时,即使有优先级更高的任务就绪也必须回到被中断的任务,将未完成的系统调用执行完后,才能让高优先级任务执行。,8,可移植性,可移植性是设计实时内核时需要重点考虑的目标之一; 嵌入式软件的移植工作分为异种处理器平台之间的移植和同种处理器平台之间的移植; 不同处理器平台间的移植工作集中在任务切换、中断控制设备和时间设备的驱动上; 同种处理器平台间的移植工作集中在对芯片级控制寄存器的操作上。,9,影响内核可移植性的因素,编程语言:高级语言与汇编语言。 体系结构: 可以将内核设计为三层结构:硬件无关层、硬件抽象层和硬件相关层。 代码实现的技巧: 对不可移植代码的使用转换成对函数和宏定义的使用。,10,可剪裁、可配置性,可剪裁表示系统在增加、删除功能模块时仅需要做少量的修改或者根本不用修改。可剪裁性要求系统中各功能模块之间尽量不存在耦合关系。 可配置性是针对系统中未被卸装的模块,根据应用在数量、机制、工作空间和堆栈等方面的不同需求,决定系统的规模、功能以及内存分配等。,11,可靠性,可靠性对于实时系统来说通常比非实时系统更为重要。 提高可靠性所采用的机制有:异步信号、定时器、优先级继承、优先级天花板、异常(出错)处理、用户扩展和内存保护等。,12,编程接口,每个操作系统提供的系统调用的功能和种类都不同。一般来说,系统调用提供得越多,功能越强,越能对应用程序的开发提供高效率的支持,同时也会减少应用程序的维护工作量;相反,系统调用提供得越少,越单一,应用程序越复杂,可靠性越低。 API影响着应用参与系统控制的深浅程度。通过实时内核提供的API,开发者可以在应用中使用实时内核提供的各种功能,达到对系统硬件资源和软件资源的合理、充分的使用。 提供面向行业的接口标准是嵌入式实时操作系统的一个发展趋势。,13,嵌入式实时内核的主要功能,任务管理 中断管理 任务间的同步与通信管理 时间管理 对共享资源的互斥管理,存储管理 I/O管理 出错管理 用户扩展管理 电源管理,14,任务管理,任务是被调度执行和竞争资源的最基本实体单元; 实时内核最基本的功能是管理任务、提供多线程的支持; 任务管理主要包括创建任务、删除任务、改变任务状态和查询任务状态等功能; 任务管理的核心是任务调度,确定一个适合嵌入式应用特定要求的任务调度算法。,15,多任务管理机制的好处,相对于前后台软件结构而言,多任务软件结构的每个任务规模较小,每个任务更容易编码和调试,其质量也更容易得到保证。 不少应用本身就是由多个任务构成的,采用多任务的处理方式是应用问题的一个非常自然的解决方式。 任务之间具有较高的独立性,耦合性小,通过增加新的任务就能方便地扩充系统功能。 实时性强,保证紧急事件得到优先处理成为可能。,16,进程,进程的定义主要包括以下内容: 一个正在执行的程序; 计算机中正在运行的程序的一个实例; 可以分配给处理器,并由处理器执行的一个实体; 由一个顺序的执行线程、一个当前状态和一组相关的系统资源所刻画的活动单元。 进程由代码、数据、堆栈和进程控制块PCB构成。,17,任务,任务定义 任务是一个具有独立功能的无限循环的程序段的一次运行活动,是操作系统调度的单位。具有动态性、并行性和异步独立性。 动态性: 任务状态是不断变化的。任务状态一般分为就绪态(ready), 运行态(running), 阻塞态(wait/suspended)。 并行性: 系统中同时存在多个任务,它们宏观上是同时运行的 异步独立性: 每个任务各自按相互独立的不可预知的速度运行,走走停停。,18,程序与任务之间的区别,任务更能真实地描述并发,而程序不能 任务是由程序和数据两部分组成的 程序是静态的,任务是动态的 任务有生命周期,有诞生有消亡,短暂的;而程序是相对长久的 一个程序可对应多个任务,反之亦然 任务具有创建其他任务的功能,而程序没有,19,任务组成 代码(如:Code) 数据(如:DATA、BSS) 堆栈(用户堆栈、核心堆栈) 任务控制块TCB 任务标识、任务优先级 任务状态和控制信息 保存CPU的现场,任务,20,21,任务参数,任务的特性可以通过优先级、周期、计算时间、就绪时间和截止时间等参数来进行描述。 任务优先级表示任务对应工作内容在处理上的优先程度。优先级越高,表明任务越需要得到优先处理。任务优先级分为静态优先级和动态优先级。静态优先级表示任务的优先级被确定后,在系统运行过程中将不再发生变化;动态优先级则意味着在系统的运行过程中,任务的优先级是可以动态变化的。 周期是周期任务所具有的参数,表示任务周期性执行的间隔时间。 任务的计算时间是指任务在特定硬件环境下被完整执行所需要的时间,也被称为任务的执行时间。,22,任务参数,任务的特性可以通过优先级、周期、计算时间、就绪时间和截止时间等参数来进行描述。 任务的就绪时间表示任务具备了在处理器上被执行所需要的条件时的时间。 任务的截止时间意味着任务需要在该时间到来之前被执行完成。截止时间可以通过绝对截止时间和相对截止时间两种方式来表示,相对截止时间为任务的绝对截止时间减去任务的就绪时间。,23,任务状态 多任务系统中任务参与资源竞争,处理器资源在任务之间分配,任务状态在不断的变化 不同的内核实现对任务状态的定义不尽相同,但是都可以概括为以下三种状态: 执行态:当前占有CPU的任务状态 就绪态:一旦获得CPU就能执行的任务状态 阻塞态:由于资源条件未满足,没有资格竞争CPU的任务状态,任务,24,任务状态,25,任务,任务的上下文和上下文切换 任务的上下文记录了该任务的执行环境(如,寄存器的内容)。 针对不同体系结构的处理器,任务的上下文有不同的定义。 任务的上下文切换表示当前执行任务在将处理器的控制权交给即将运行的任务之前,把它的执行环境(该任务的上下文)保存到相应的数据结构中,用即将运行任务的上下文重新布置执行环境。,26,任务管理机制,任务管理用来实现对任务状态的直接控制和访问,实时内核的任务管理是通过系统调用来实现的,这些系统调用主要包括任务创建、任务删除、任务挂起、任务唤醒和设置任务属性等内容。 任务创建:为任务分配和初始化相关的数据结构。 获得任务控制块TCB; 根据实时内核用户提供的信息初始化TCB; 为任务分配一个可以唯一标识任务的ID; 使任务处于就绪状态,把任务放置到就绪队列; 进行任务调度处理。,27,任务删除:实时内核根据任务创建时获得的ID删除指定的任务。 根据指定的ID,获得对应任务的TCB; 把任务的TCB从队列中取出来,挂入空闲TCB队列; 释放任务所占用的资源。 任务挂起:根据任务的ID把指定任务挂起,直到通过唤醒任务对任务进行解挂。通过任务挂起,一个任务可以把自己挂起。 根据指定的ID,获取对应任务的TCB; 把任务的状态变为等待状态,并把TCB放置到等待队列; 如果任务自己挂起自己,则进行任务调度。,任务管理机制,28,任务唤醒:根据任务ID解挂指定的任务。 根据指定的ID,获得对应任务的TCB; 如果任务在等待其他资源,任务将仍然处于等待状态;否则,把任务的状态变为就绪状态,并把TCB放置到就绪队列; 进行任务调度。 任务睡眠:使当前任务睡眠一段指定的时间,时间到后,任务又重新回到就绪状态。 修改任务状态,把任务状态变为等待状态; 把任务TCB放置到时间等待链 进行任务调度。,任务管理机制,29,关于任务扩展:以便于应用能够向系统中添加一些关于任务的附加操作,为应用提供在系统运行的关键点上进行干预的手段。 任务扩展的时机:任务创建时、任务删除时、任务上下文切换时。 任务扩展功能可通过任务扩展表或是单独应用编程接口的方式来实现。 任务扩展表用来存放实现任务扩展处理的例程,实时内核通过查找任务扩展表来获取扩展处理的入口函数。,任务管理机制,30,任务管理机制,任务变量:某些例程可能同时被多个任务调用,每个调用任务又期望例程中的全局或是静态变量提供不同的值。 实时内核通常提供以下关于任务变量的操作: 向指定的任务中添加任务变量; 删除指定任务的任务变量; 获得指定任务的任务变量; 获得指定任务当前拥有的任务变量的数量; 获得指定任务的所有任务变量。,31,任务调度,要解决的问题 WHAT:按什么原则分配CPU 任务调度算法 WHEN:何时分配CPU 任务调度的时机 HOW: 如何分配CPU 任务调度过程(任务的上下文切换),32,任务调度,任务调度的概念 任务调度的实质就是将处理器资源合理分配给适当的任务,一方面确保任务的时间约束能被满足,另一方面尽量提高处理器资源的利用率。 任务调度就是从就绪状态的任务中,挑选一个任务到处理器上运行。 操作系统中负责任务调度的程序称为任务调度程序(scheduler)或任务调度器(dispatch)。,33,任务调度,调度点的位置: 中断服务程序的结束位置; 任务因等待资源而处于等待状态; 任务处于就绪状态时。 实时内核的主要职责是要确保所有的任务都能够满足任务的时间约束特性要求。 在设计调度程序时,要综合考虑以下因素: CPU的使用率; 输入/输出设备的吞吐率; 响应时间; 公平性; 截止时间。,34,任务调度算法,内核常用的几种任务调度算法 基于优先级调度 轮转调度 单调速率调度(RM调度),35,优先级调度,优先级调度算法 优先级调度就是让高优先级的任务优先得到处理的调度策略 按照正在执行的任务可否被抢占,优先级调度分为: 可抢占调度 不可抢占调度,36,确定优先级的方法 静态优先级法:在任务创建时指定优先数,在任务运行时优先数不变 动态优先级法:在任务创建时创立一个优先级,但在其生命周期内优先级可以动态变化。如等待时间长优先级可改变,优先级调度,37,不可抢占调度(non-preemptive scheduling) 一旦某个任务占有了处理器就一直运行下去,直到该任务由于自身的原因自愿放弃处理器,任务调度程序才按优先级进行重调度,让其它任务运行。 任务在运行过程中只能被中断打断(抢占)。 中断处理程序即使唤醒了一个更高优先级的任务,当中断处理完成后只能返回到被中断的任务,只有这个任务放弃了处理器时,更高优先级的任务才能运行。,优先级调度,38,不可抢占调度,优先级调度,39,不可抢占调度的优点 - 对共享数据的保护需求较低 不可抢占调度的缺点 - 系统的响应时间得不到保证 因此,对于实时性要求较高的系统不可选择这种调度方式。,优先级调度,40,可抢占调度(preemptive scheduling) 任何时刻都严格按照高优先级任务在处理器上运行的原则进行任务调度 或者说,在处理器上运行的任务永远是就绪任务中优先级最高的任务 当优先级高的任务能运行时,保证其执行时间,让其尽快运行完成,优先级调度,41,可抢占调度 如果优先级高的任务因故(如等待事件)暂停运行, 则让次高优先级的任务运行 一旦高优先级的任务又就绪(因等待的事件到来而成为就绪),任务调度器迫使原运行任务马上让出处理器给高优先级的任务使用或称该任务被抢占。任务在运行过程中只能被中断打断(抢占) 由于需要进行额外的任务调度和任务切换,因而带来一定的时间开销,优先级调度,42,可抢占调度,优先级调度,43,轮转调度,同优先级任务的时间片轮转调度算法(round-robin)定义 是指当有两个或多个就绪任务具有相同的优先级且它们是就绪任务中优先级最高的任务时,任务调度程序按照这组任务就绪的先后次序调度第一个任务,让它运行一段时间 运行的这段时间称为时间片(time slicing) 当任务运行完一个时间片后,该任务即使还没有停止运行,也必须释放处理器让下一个与它相同优先级的任务运行,44,同优先级任务的时间片轮转调度算法,轮转调度,释放处理器的任务被排到同优先级就绪任务链的链尾,等待再次运行 它使实时系统中优先级相同的任务具有平等的运行权利,45,时间片的选择 - 采用时间片轮转调度算法时,任务的时间片大小要适当选择。 - 时间片大小的选择会影响系统的性能和效率 时间片太大,时间片轮转调度就没有意义 时间片太小,任务切换过于频繁,处理器开销大,真正用于运行应用程序的时间将会减小 - 不同的内核在实现时间片轮转调度算法上可能有一些差异: 有的内核允许同优先级的各个任务有不一致的时间片 有的内核要求相同优先级的任务具有一致的时间片,轮转调度,46,时间片轮转调度算法,轮转调度,47,RM:Rate Monotonic 1973年C.L.Liu和J.W.Layland在Journal of ACM ”Scheduling Algorithms for Multiprogramming in a Hard Real-time Environment.”提出,最近得到普及。 RM算法的假设条件: 所有任务都是周期任务; 任务之间不进行通信,也不需要同步; 任务可以在任何位置被抢占,不存在临界区。,单调速率调度RM算法,48,周期任务的相关参数: 任务周期T:指从该任务的一个实例到下一个实例到达之间的时间总量 任务的开始时间:任务达到开始运行的时刻 执行时间C:每个发生的任务所需要的处理时间总量 最后期限Deadline:任务必须完成的时刻,RM算法,49,RM算法,Notations Task set = 1, 2, ., m Periods T1, T2, T3, ., Tm Computation times C1, C2, C3, ., Cm,1/ Ti = rate of periodic task, i = number of instances of i per unit of time Utilization of task set U = Si=1, . m Ci/Ti. If U 1, then there is no way to schedule the task set.,50,It is easy to verify that all the instances of tasks can finish by their deadlines :-),Example 1. Consider a set of two tasks, 1, 2 Let C1 = 1, C2 = 2, T1 = 2, and T2 = 5. Assign 1 the high priority and 2 the low priority. Assume that all the tasks start at t = 0. We have the following executions of tasks,51,Assigning priority differently may make a schedulable task to be unschedulable!,The 1st instance missed deadline!,Example 2. Consider the same set of two tasks, 1, 2 Let C1 = 1, C2 = 2, T1 = 2, and T2 = 5. Assign 1 the low priority and 2 the high priority. Assume that all the tasks start at t = 0. We have the following executions of tasks,52,Example 3. Consider a set of two tasks, 1, 2 Let C1 = 1, C2 = 2.1, T1 = 2, and T2 = 5. U = C1/T1 + C2/T2 = 0.92,The 1st instance of 2 did not finish before its deadline (5)!,Assign 1 the low priority and 2 the high priority.,Assign 1 the high priority and 2 the low priority.,Even if U 1, a task set may not be schedulable by a fixed priority algorithm,The 1st instance missed its deadline!,53,上面例子给我们的启示: 优先级的设置直接关系到任务集能否被调度; 即使任务集的利用率小于1,任务集也有可能不能被调度。,RM算法,54,RM算法,设置优先级的原则 根据任务的执行时间(Ci) 最短执行时间优先 最长执行时间优先 根据任务的周期(Ti) 最短周期优先 最长周期优先 根据任务的利用率(Ci/Ti) 最小利用率优先 最大利用率优先 随机?,55,RM算法结论,根据最短周期优先的原则设置任务的优先级; 如果任务集的利用率U 100%,则任务集不能被调度; 如果任务集的利用率U m(21/m - 1),则任务集一定能被调度; 如果任务集的利用率U 69%,则任务集一定能被调度; 否则,需要用RM算法实际调度后确定任务集能否被调度。,56,RM算法的上限值,57,最早截止时间优先算法EDF,EDF:Earliest Deadline First 1973年C.L.Liu和J.W.Layland在Journal of ACM提出; EDF算法动态优先级调度算法,适合于可抢占式任务。,58,最早截止时间优先算法EDF,EDF算法的假设条件: 所有任务都是周期任务; 每个任务必须在下一次请求前完成,即任务周期为任务的截止时间; 每个任务是独立的,即一个任务的请求不依赖于其他任务的激励或完成; 任务在每个周期内的计算时间都相等; 截止时间越短的任务具有越高的优先级; 任务可以在任何位置被抢占,不存在临界区。,59,EDF算法的优点:可调度上限可以达到100%; EDF算法的缺点:要在系统运行过程中计算和确定任务的优先级,调度开销大,不容易实现。,最早截止时间优先算法EDF,60,任务调度时机,运行任务因为资源条件不满足被阻塞时,其它任务获取调度机会; 当有一个优先级更高的任务就绪(可抢占式)时,调度此任务; 时间片轮转调度情况下,运行任务耗尽时间片时,下一个任务被调度; 中断服务结束,退出服务程序,如果此时有更高优先级的任务到来(可抢占式)则调度此高优先级任务,否则返回原被中断任务。,61,优先级反转问题,优先级反转是一种不确定的延迟形式,经常出现于存在共享资源的多任务、可抢占的执行体中。 当高优先级任务企图访问已被某低优先级任务占有的共享资源时,就会引起优先级反转。 高优先级任务必须等待直到低优先级任务释放它占有的资源。如果该低优先级任务又被一个或多个中等优先级任务阻塞,问题就更加严重。因为低优先级任务得不到执行就不能访问资源、释放资源。于是,低优先级任务就以一个不确定的时间阻塞高优先级的任务,系统的实时性没有保障。,62,优先级反转问题,63,优先级继承,优先级继承是将低优先级任务的优先级抬升到等待它所占有的资源的高优先级任务的优先级。 每当高优先级任务由于等待资源被阻塞,此资源的拥有者的优先级将会被抬升。 当任务释放完它所占有的全部二进制信号量时,它的优先级才恢复到该任务创建时的原始优先级。,64,优先级继承,65,优先级天花板,优先级天花板算法是将申请某资源的任务的优先级抬升到可能访问该资源的所有任务中最高优先级任务的优先级。 这个优先级称为该资源的优先级天花板 互斥信号量的优先级天花板在它被创建时指定,66,优先级天花板,67,优先级继承与优先级天花板的比较,优先级天花板算法避免了优先级继承算法因为需要若干次改变占有资源的任务的优先级引入的额外开销,具有较高的效率。 优先级天花板算法要求在互斥信号量被创建时就确定出可能访问竞争资源的任务情况,从而获得该资源的优先级天花板。,68,两种算法对任务优先级的改变在一定程度上都会影响应用中预先设定的任务流程。 对于优先级继承算法,只有在占有资源的低优先级任务阻塞高优先级任务成为事实时才会采取相应的措施。 对于优先级天花板算法则不论这个事实是否发生都要采取相应的措施,优先级继承与优先级天花板的比较,69,所以相对而言,优先级继承对应用中任务流程的影响要小 对于这两种算法都支持的内核,应用程序选择哪种算法来解决优先级反转问题视实际情况而定。,优先级继承与优先级天花板的比较,70,中断管理,广义的中断分类 中断:由于CPU外部的原因而改变程序执行流程的过程,属于异步事件,又称为硬件中断。 自陷:表示通过处理器所拥有的软件指令,可以预期地使处理器正在执行的程序流程发生变化,以执行特定的程序。属于同步事件。 异常:CPU自动产生的自陷,以处理异常事件。属于同步事件。异常没有对应的处理器指令,当异常事件发生时,处理器也需要无条件地挂起当前运行的程序,执行特定的处理程序。,71,中断的分类,根据硬件中断是否可以被屏蔽,分为可屏蔽中断和不可屏蔽中断。 对于可屏蔽中断,外部设备的中断请求信号一般需要先通过CPU外部的中断控制器,再与CPU相应的引脚相连,可编程中断控制器可以通过软件进行控制,以禁止或是允许中断。 对于不可屏蔽中断是在任何时候都不可屏蔽的,这类中断应随时进行响应。,72,中断的分类,从中断源来说,中断可以分为硬件中断和软件中断。 硬件中断是由于CPU外部的设备所产生的中断,属于异步事件,可能在程序执行的任何位置发生,发生中断的时间通常是不确定的。 软件中断也称为同步中断或者自陷,通过处理器的软件指令来实现,产生中断的时机是预知的,可根据需要在程序中进行设定。 软件中断的处理程序以同步的方式进行执行,其处理方式同硬件中断处理程序类似。 软件中断是一种非常重要的机制,系统可通过该机制在用户模式执行特权模式下的操作。 软件中断也是软件调试的一个重要手段。,73,中断的分类,从中断信号的产生来看,根据中断触发的方式,中断可分为边缘触发中断和电平触发中断。 在边缘触发方式中,中断线从低变到高或是从高变到低时,中断信号就被发送出去,并只有在下一次的从低到高或是从高到低时才会再度触发中断。 在电平方式中,硬件中断线的电平发生变化时产生中断信号,并且中断信号的有效性将持续保持下去,直到中断信号被清除。,74,根据中断服务程序的调试方式,可以把中断分为向量中断、直接中断、间接中断。 向量中断是通过中断向量来调用中断服务程序的方式。 在直接中断调用方式中,中断对应的中断服务程序的入口地址是一个固定值,当中断发生时,程序执行流程将直接跳转到中断服务程序的入口地址,执行中断服务程序。 在间接中断中,中断服务程序的入口地址由寄存器提供。,中断的分类,75,中断处理过程,中断处理的全过程分为中断检测、中断响应和中断处理三个阶段。 中断检测在每条指令结束时进行,检测是否有中断请求或是否满足异常条件。如果没有中断信号,则处理器继续运行,并通过取指周期取当前程序的下一条指令;如果有中断信号,将进入中断响应,对中断进行处理。 中断响应是由处理器内部硬件完成的中断序列,而不是由程序执行的。 中断处理即执行中断服务程序,用来处理自陷、异常或是中断。,76,中断服务程序的主要内容,保存中断服务程序将要使用的所有寄存器的内容,以便于在退出中断服务程序之前进行恢复; 如果中断向量被多个设备所共享,为了确定产生该中断信号的设备,需要轮询这些设备的中断状态寄存器; 获取中断相关的其他信息; 对中断进行具体的处理; 恢复保存的上下文; 执行中断返回指令,使CPU的控制返回到中断的程序继续执行。,77,中断管理机制,对于多个中断,通常可以采用以下两种方法进行处理。 在处理一个中断的时候,禁止再发生中断。这种处理方法又称为非嵌套的中断处理方式。在处理中断的时候将屏蔽所有其他的中断请求。 定义中断优先级,允许高优先级的中断打断低优先级的处理过程。这种处理方法又称为嵌套的中断处理方式。中断被分为多个优先级,中断服务程序只屏蔽那些比当前中断优先级低或是与当前中断优先级相同的中断,在完成必要的上下文保存后即使能中断。,78,任务间的通信和同步,任务之间的关系: 相互独立:仅仅是竞争CPU资源。 竞争除CPU以外的其他资源(互斥):任务必须能对共享资源进行互斥访问。 同步:协调彼此运行的步调。 通信:彼此间传递数据或信息,以协同完成某项工作。,79,任务间的通信与同步,实时多任务系统的功能一般要通过若干任务与若干中断服务程序(ISRs)共同完成。 任务与任务之间、任务与中断服务程序之间必须协调动作,互相配合。 内核一般通过以下机制来完成: 信号量(semaphore)和事件(event)满足同步的需要 消息机制(message queue)提供通信的服务,80,内核一般通过以下机制来完成: 有的操作系统内核还提供异步信号量机制(signal or asynchronous signal)、管道(pipe)和共享内存(shared memory)做为补充方式。 另外,对于分布在不同处理器上的任务还可以通过RPC(Romote Procedure Call)和Socket实现同步和通信。,任务间的通信与同步,81,任务间通信方式,直接通信:是指在通信过程中双方必须明确地知道彼此。 一个链接仅与一对相互通信的任务相联系; 每对任务之间仅存在一个链接; 链接可以是单向的,也可以是双向的。 间接通信:通信双方不需要指出消息的来源或去向。 只有当任务共享一个公共邮箱时链接才建立; 一个链接可以与多个任务相联系; 每对任务可以使用几个通信链接; 链接可以是单向或双向的。,82,信号量机制,信号量用于实现任务之间、任务与中断服务程序之间的同步和任务之间的互斥。 作用: 控制共享资源的使用权(满足互斥条件) 标志某事件的发生 同步任务之间、任务与中断之间的行为 根据用途,信号量一般分为三种: 互斥信号量:用于解决互斥问题,存在优先级反转问题 二进制信号量:用于解决同步问题 计数信号量:用于解决资源计数问题,83,信号量,基本操作: 创建与删除信号量 申请与释放信号量,84,消息机制,消息机制在任务和任务之间、任务和中断服务程序之间提供消息传送(通信)机制。 从操作系统观点看,消息没有定义格式,所有的消息都是字节流,没有特定的含义。 从应用观点看,根据应用定义的消息格式,消息被解释成特定的含义。,85,一些操作系统内核,把消息机制进一步分为: 邮箱机制:仅能存放单条消息 队列机制:可存放若干消息 单向同步与双向同步 按照接收方是否能同步发送方,消息机制分为单向同步消息机制和双向同步消息机制,消息机制,86,消息队列,基本操作: 创建和删除消息队列; 发送普通消息; 发送紧急消息; 广播消息; 接收消息; 取得消息队列上的未决消息数目; 清空消息队列; 取得消息队列标识符;,87,事件机制,事件机制用于任务之间、任务与ISRs之间的同步,可以提供更复杂的同步机制 一个事件就是一个标志,不具备其它信息 往往内核会定义若干个事件,称为事件组 等待事件的“与”、“或”操作 : “与”关系表示等待的几个事件都要发生才算等待的结果发生了 “或”关系表示等待的几个事件只要有一个发生就算等待的结果发生了,88,事件机制,事件的特点: 事件之间是相互独立的; 事件不提供数据传输功能; 任务可以同时等待多个事件; 对事件的等待方式有“与”和“或”两种; 事件无队列,即多次向任务发送同一事件,在事件标志未被接收处理之前,其效果等同于只发送一次。 基本操作: 发送事件; 接收事件。,89,异步信号机制,异步信号机制与中断机制非常相似,所以异步信号又被称为软中断信号,有相应的处理程序(ASR) 需要处理异步信号的任务由两部分组成: 一个是与异步信号无关的任务主体 另一个是ASR。ASR可以看成在任务切换后(post switch extention)所做的任务扩展。,90,异步信号机制,异步信号与中断的区别: 一个ASR对应于一个任务,而ISR对应于一组任务; 当系统运行时,若外部中断出现且未被系统屏蔽,则任务的执行被中断,系统转而执行与中断相关的服务例程; 当一个异步信号被发送给某任务,该任务被终止其自身代码的运行,转而运行与该异步信号相关的例程,因此异步信号机制也可以称为软中断机制。 相同点: 具有中断性; 有相应的服务程序; 可以屏蔽响应。 不同点: 实质不同; 处理时机(或响应时间)不同; 执行环境不同。,91,异步信号机制,异步信号的基本操作 安装异步信号处理例程 发送异步信号,92,时间管理,嵌入式操作系统的时间管理包括时钟管理和定时器管理; 时间分为两种,绝对时间和相对时间 绝对时间就是日历时间,以年、月、日、时、分、秒的时间格式记录,时间单位为秒 相对时间是相对某一刻经过的时间,时间单位为时基 时基定义为发生若干个时钟中断的时间长度 时钟中断的个数一般取决于时钟中断服务程序中的设置 时基的时间长度 = 时钟中断的个数 * 脉冲序列的个数 * 脉冲周期,93,实时时钟是实时系统中,不能缺少的,它是实时软件运行的必不可少的硬件设施; 实时时钟单纯地提供一个规则的脉冲序列,每个脉冲间隔计数完成产生一次实时时钟硬件中断。,时间管理,94,大多数嵌入式系统中有两种时钟源: RTC(Real Time Clock,实时时钟): 一般靠电池供电,维持日期和时间 独立于OS,为计算机提供一个计时标准 定时器(OS时钟或称系统时钟): 是硬件系统的定时器的一个 由OS控制该定时器的工作 开机后才有效,时钟硬件及运作机制,95,不同的OS,RTC和OS时钟的关系不同; RTC和OS时钟之间的关系统称也被称为OS的时钟运行机制; 一般来说,RTC是OS时钟的时间基准,OS通过读取RTC来初始化OS时钟,此后两者保持同步运行,共同维持系统时间。 OS时钟一般定义为整数或长整数,提供给应用程序所有和时间有关的服务。,时钟硬件及运作机制,96,时间管理,时钟管理功能有: 维护系统时基,执行与系统时基相关的处理或操作; 设置和取得时间信息; 定时器管理功能有: 创建、删除定时器; 设置定时器的触发时间; 定时器重新开始设计; 终止定时器计时。,97,对共享资源的互斥管理,关中断: 禁止中断是最强有力的互斥机制。 使用测试并置位指令: 设置一个全局变量,测试该变量为0,则允许该任务访问共享资源,反之,拒绝。 禁止任务切换: 不允许其他任务抢占当前任务的执行。 使用信号量: 信号量是提供任务间通信、同步和互斥的主要手段。,98,99,存储管理,存储管理是操作系统核心重要的组成部分 提供内存资源的合理分配和存储保护等功能 一般操作系统的存储管理非常复杂,广泛使用了虚拟存储管理 虚拟存储管理就是通过操作系统对内存和外存的管理,使应用程序获得比计算机实际内存更大的编址空间,使每一个应用程序都可以享有一段独立的虚拟存储空间。 各应用程序被分隔在各自的地址空间运行,不致相互干扰,起到存储保护的功能。,100,嵌入式系统中存储管理的特殊性,嵌入式操作系统的存储管理通常比较简单 在具体的嵌入式应用中,任务的数量和各自可能使用的内存容量在开发时就已预测。 对于实时、嵌入式应用,如果采用虚拟存储管理,由于页交换的时间不可预测会影响整个系统的确定性。,101,嵌入式系统中存储管理的特殊性,嵌入式系统通常不采用虚拟存储管理,而采用: 静态内存分配 动态内存分配,分为: 固定大小内存分配:分区管理 可变大小内存分配:堆管理,102,存储布局,103,分区管理,分区是一段物理地址连续的内存空间。 分区可以被划分为多个大小固定的缓冲区,应用申请和释放空间都对缓冲区进行操作。,104,堆管理,堆是一段连续的、大小可配置的内存空间,提供可变内存块的分配, 大小在创建时由应用指定。 应用请求获得与释放的内存块称为Buffer(BUF) 。 BUF的大小要求是页的倍数,当然,若应用在请求BUF时,给出的长度不是页的倍数,系统会自动将其调整为页的倍数。 页也是应用在创建Heap时指定的,必须大于等于4并且为4的倍数,是在Heap上进行内存分配的最小单元。,105,内存管理,在应用中可以创建多个分区和堆,以实现对多个内存区域的管理。 对分区的操作主要有: 创建分区; 删除分区; 从分区中申请内存块; 将内存块释放回分区中。 对堆的操作主要有: 创建堆; 删除堆; 从堆中申请内存块; 将内存块释放回堆中。,106,内存管理,为了提高可靠性,有些实时内核提供了内存保护的机制,其实现需要用到嵌入式微处理器的MMU功能。 MMU提供了一种用于实现程序之间相互隔离、保护的硬件机制。 在一些低端的应用中出于成本的考虑,CPU不具备MMU功能且运算速度较慢,存储空间有限,并且应用也很简单。 在一些高端的和安全的高可靠应用中,允许投入更多的硬件、软件成本,CPU的速度非常快并且具备MMU功能,内存保护功能对时间性造成的影响也可忽略,因而要求内核提供内存提供的机制。 但是并不是所有的嵌入式实时操作系统都提供了内存保护功能。,107,I/O管理,很多嵌入式实时内核都提供了简单的输入/输出管理,提供了结构化访问设置的方式。 使用I/O管理的应用可以在系统配置表中定义设备驱动程序表,其中包括了设备驱动程序的入口地址。 每个设备驱动程序包括Initialization(初始化)、Open(打开)、Close(关闭)、Read(读)、Write(写)和Control(控制)等操作。,108,出错处理,嵌入式系统中出现的错误可以分为一般性错误和严重性错误。 一般错误不会对系统直接造成致命的影响,其后果可以在一定范围内得到纠正,对这类错误的处理由内核和应用协作完成。其实质是内核向应用提出错误,实际的处理由应用完成。 严重性错误会对系统造成致命性的影响,其后果不可恢复,实时内核一般会提供这类错误的处理程序,使得系统在出现严重性错误后能处于一个确定的状态。 另外,内核提供的任务重启动、用户扩展管理、任务超时处理以及其他的异常处理都是出错处理的有效手段。,109,用户扩展管理,用户扩展管理向应用程序提供了灵活处理扩展的机制,在无须或者不可能更改内核代码的情况下,用户编写自己的扩展例程,内核在调用点调用这些例程。 通过用户扩展程序入口(Hook)和系统配置表可以实现内核在功能和规模上的可伸缩性。 内核可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论