实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可
实时操作系统的相关概念
(1)基本概念
代码临界段:指处理时不可分割的代码。一旦这部分代码开始执行则不允许中断打入;
资源:任何为任务所占用的实体;
共享资源:可以被一个以上任务使用的资源;
任务:也称作一个线程,是一个简单的程序。每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。典型地,每个任务都是一个无限的循环,每个任务都处在以下五个状态下:休眠态,就绪态,运行态,挂起态,被中断态;
任务切换:将正在运行任务的当前状态(CPU寄存器中的全部内容)保存在任务自己的栈区,然后把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行;
内核:负责管理各个任务,为每个任务分配CPU时间,并负责任务之间通讯。分为不可剥夺型内核于可剥夺型内核;
调度:内核的主要职责之一,决定轮到哪个任务运行。一般基于优先级调度法;
(2)关于优先级的问题
任务优先级:分为优先级不可改变的静态优先级和优先级可改变的动态优先级;
优先级反转:优先级反转问题是实时系统中出现最多的问题。共享资源的分配可导致优先级低的任务先运行,优先级高的任务后运行。解决的办法是使用“优先级继承”算法来临时改变任务优先级,以遏制优先级反转。
(3)互斥
虽然共享数据区简化了任务之间的信息交换,但是必须保证每个任务在处理共享共享数据时的排他性。使之满足互斥条件的一般方法有:关中断,使用测试并置位指令(TAS),禁止做任务切换,利用信号量。
最大中断禁止时间和任务切换时间
因为采用实时操作系统的意义就在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时操作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。中断响应时间通常被定义为:
中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间。
中断延迟时间=MAX(关中断的最长时间,最长指令时间) + 开始执行ISR的第一条指令的时间。
最大中断禁止时间:
当RTOS运行在核态或执行某些系统调用的时候,是不会因为外部中断的到来而中断执行的。只有当RTOS重新回到用户态时才响应外部中断请求,这一过程所需的最大时间就是最大中断禁止时间。
在处理临界代码时,RTOS都会禁用中断。禁用中断的时间越长,中断延迟就越大。RTOS 通常在短于50 uS的时间内禁用中断,越短越好。
任务切换时间:
当由于某种原因使一个任务退出运行时,RTOS保存它的运行现场信息、插入相应队列、并依据一定的调度算法重新选择一个任务使之投入运行,这一过程所需时间称为任务切换时间。
上述几项中, 最大中断禁止时间和任务切换时间是评价一个RTOS实时性最重要的两个技术指标。
调度
GPOS,调度以通常实现高吞吐量(即单位时间内完成执行的进程总数)的方式来处理。但是,这可能意味着高优先级流程的执行将被延迟,以便完成多个低优先级任务。另一方面,RTOS的价值是根据它的反应速度或可预测性来衡量的,而不是根据它在给定时间内完成的工作量来衡量的。
在RTOS中,调度通常基于优先级。大多数RTOS使用基于优先级的抢先任务调度方法。这里,高优先级进程将在低优先级进程之上执行。使用GPOS时,随着需要调度更多线程,延迟会不断累积。RTOS没有这样的问题,因为所有进程和线程的延迟都是有时间限制的。RTOS还为您提供了一种确保共享系统资源不会被并发访问的方法。
RTOS的内核是可抢占的,而GPOS的内核是不可抢占的,这在优先服务高优先级进程和线程时非常重要。如果没有可抢占的内核,来自内核内部的请求,比如来自驱动程序或系统服务的请求,将会覆盖所有其他进程和线程。使用RTOS,只有非常重要的服务请求被保存在内核调用中,所有其他服务请求都被视为外部进程和线程。基于内核的服务请求与RTOS的有限延迟相关联,以保持快速和可预测的响应。
调度是内核的主要职责,负责确认运行哪个任务以及何时运行。大多数实时内核采用优先级策略,每个任务根据其重要性分配一个优先级。任务的优先级由应用指定。在基于优先级调度的内核中,CPU 的控制权将始终交给就绪的最高优先级任务。然而,最高优先级任务何时获得 CPU 取决于所使用的调度类型。有两种类型调度:非抢占式调度和抢占式调度。
非抢占式调度
非抢占式调度要求每个任务主动放弃对CPU的控制。为了保持任务并发,这个过程必须经常进行。非抢占式调度也称为协作式多任务处理。当一个任务放弃 CPU 时,内核会执行下一个就绪的最重要的任务代码。异步事件由ISR处理。ISR可以使更高优先级任务就绪,但ISR完成后将返回到被中断的任务。只有当前任务自愿放弃 CPU 时,新的更高优先级任务才会获得CPU的控制权。如图2所示。非抢占式调度的延迟远低于前后台系统;延迟由最长任务的时间确定。
抢占式调度
在抢占式内核中,当一个事件使高优先级的任务就绪时,当前任务立即挂起,较高优先级的任务获得CPU控制权。如果ISR使更高优先级的任务就绪,则被中断的任务挂起,恢复执行新的更高优先级的任务。大多数实时系统采用抢占式调度,其响应速度更快。抢占式调度如图3所示。
静态表驱动策略利优先级驱动策略
静态表驱动策略是一种离线调度策略,指在系统运行前根据各任务的时间约束及关联关系,采用某种搜索策略生成一张运行时刻表。在系统运行时,调度器只需根据这张时刻表启动相应的任务即可。
优先级驱动策略指按照任务优先级的高低确定任务的执行顺序。优先级驱动策咯又分为静态优先级调度策略和动态优先级调度策略。静态优先级调度是指任务的优先级分配好之后,在任务的运行过程中,优先级不会发生改变。静态优先级调度又称为固定优先级调度。动态优先级调度是指任务的优先级可以随着时间或系统状态的变化而发生变化。
重入
可重入函数是可以由多个任务使用而不必担心数据损坏的函数。相反,不可重入函数不能被多个任务共享,但可以通过使用信号量或在临界段中代码中禁用中断来互斥使用不可重入函数。可重入函数可以被随时中断并恢复,不会丢失数据。可重入函数使用局部变量(CPU 寄存器或堆栈变量),如果使用全局变量需保护其数据。专门为嵌入式软件设计的编译器通常会提供可重入的运行时库。非抢占式调度不需要可重入函数,除非函数在任务和ISR之间共享。如果函数由多个任务共享,则抢占式调度需要函数可重入。
内核服务
实时内核为应用程序提供各种服务。内核提供的最常见的服务之一是信号量管理。信号量是一种协议机制,用于控制对共享资源的访问(互斥)、发布事件的发生或允许两个任务同步它们的活动。信号量通常是代码能否继续执行的开关。如果信号量已在使用中,则请求任务将被挂起,直到信号量被其当前所有者释放。挂起的任务通常不消耗CPU时间。
内核还提供与时间相关的服务,允许任务自身延迟整数个系统时钟。时钟节拍通常每10到200 毫秒发生一次,具体取决于应用要求。
任务或 ISR 将信息传递给另一个任务,这称为任务间通信,用于发送和接收消息的服务通常由内核提供。用于发送消息的两个最常见的内核服务是消息邮箱和消息队列。消息邮箱也称为消息交换,通常是一个指针变量。通过内核提供的服务,任务或ISR 将消息(指针)发送到邮箱。发送任务和接收任务约定指针指向的消息内容。消息队列用于向一个任务发送多个消息。消息队列本质上是一个邮箱数组。
-
(1)约束性
RTOS任务的约束包括时间约束、资源约束、执行顺序约束和性能约束。
RTOS的任务具有时间约束性。时间约束是任何RT0S都固有的约束。时间约束性可分为硬实时和软实时。硬实时是指在航空航天、军事、核工业等一些关键领域中应用的系统,时间要求必须能够得到完全满足,否则将造成不可预计的结果。软实时通常是指在监控系统、信息采集系统等某些应用中,有时间约束要求,但偶尔违反不会造成严重影响。
资源约束是指多个实时任务共享有限的资源时,必须按照一定的资源访问控制协议迸行同步,以避免死锁和高优先级任务被低优先级任务堵塞的时间(即优先级倒置时间)不可预测。
执行顺序约束是指各任务的启动和执行必须满足一定的时间和顺序约束。例如,在分布式端到端(end-to-end)实时系统中,同一任务的各子任务之间存在前驱或后继的约束关系,需要执行同步协议来管理子任务的启动和控制子任务的执行,使它们满足时间约束和系统可调度性要求。
性能约束是指必须满足如可靠性、可用性、可预测性、服务质量(Quality of Service,QoS)等性能指标。
(2)可预测性
可预测性是指RTOS完成实时任务所需要的执行时间应是可知的。可预测性是RTOS的一项重要性能要求。可预测性包括硬件时延的可预测性和软件系统的可预测性(包括应用程序的响应时间是可预测的,以及操作系统的可预测性)。
在多种任务型RTOS中,不但包括周期任务、偶发任务、非周期任务,还包括非实时任务。多种类型任务的混合,使系统的可调度性、可预测性分析更加困难。
(3)可靠性
大多数RTOS要求有较高的可靠性,要求系统在坏情况下都能正常工作或避免损失。可靠性是RTOS的重要性能指标。
(4)交互性
外部环境是RTOS不可缺少的一个组成部分,它往往是被控子系统。嵌人式计算机系统一般作为控制系统,必须在规定的时间内对被控子系统请求做出反应。被控子系统也必须能够正常工作或准各对任何异常行为采取动作。两者相互作用构成完整的实时系统。