嵌入式系统技术应用与开发
上QQ阅读APP看书,第一时间看更新

3.1.3 嵌入式操作系统性能管理

3.1.3 嵌入式操作系统性能管理

1.实时操作系统(RTOS)

实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个任务均有一个优先级,RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。工程师在编写程序时,可以分别编写各个任务,不必同时将所有任务运行的各种可能情况记在心中,大大减小了程序编写的工作量,而且减小了出错的可能,保证最终程序具有高可靠性。

实时多任务操作系统,以分时方式运行多个任务,看上去好像是多个任务“同时”运行。任务之间的切换以优先级为根据,只有优先服务方式的RTOS才是真正的实时操作系统,时间分片方式和协作方式的RTOS并不是真正的“实时”。

2.共享资源

程序运行时可使用的软、硬件环境统称为资源。资源可以是输入/输出设备,例如打印机、键盘、显示器。资源也可以是一个变量、一个结构或一个数组等。

可以被两个及以上任务使用的资源叫作共享资源。为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫作互斥。至于在技术上如何保证互斥条件,本章会做进一步讨论。

3.任务

一个任务,也称作一个线程,是一个简单的程序,该程序可以认为CPU完全属于该程序自己。实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有其自己的一套CPU寄存器和栈空间。

4.任务切换

当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU寄存器中的全部内容。这些内容保存在任务的当前状态保存区,也就是任务在自己的栈区之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行,这个过程就称为任务切换。这个过程增加了应用程序的额外负荷。CPU的内部寄存器越多,额外负荷就越重。任务切换所需要的时间取决于CPU有多少寄存器要入栈。实时内核的性能不应该以每秒钟能做多少次任务切换来评价。

内核多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通信。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷。代码空间增加ROM的用量,内核本身的数据结构增加RAM的用量,但更主要的是,每个任务要有自己的栈空间,该空间占用内存较大。内核本身对CPU的占用时间一般在2%~5%。

通过提供必不可少的系统服务,诸如信号量管理、消息队列、延时等,实时内核使得CPU的利用更为有效。

5.调度与多任务机制

调度是内核的主要职责之一,决定该轮到哪个任务运行。多数实时内核是基于优先级调度法的。每个任务根据其重要程序的不同被赋予一定的优先级。基于优先级的调度法指CPU总是让处在就绪态的优先级最高的任务先运行。然而究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况:非占先式的内核和占先式内核。

6.非占先式内核

非占先式内核要求每个任务自我放弃CPU的所有权。非占先式调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来相应被中断的任务,直到该任务主动放弃CPU的使用权时,高优先级的任务才能获得CPU的使用权。

7.占先式内核

当系统响应时间很重要时,要使用占先式内核。市场上绝大多数的实时内核都是占先式内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。一个比当前正运行任务的优先级高的任务进入了就绪状态,当前任务的CPU使用权则被剥夺,或者说被挂起,高优先级的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断的任务被挂起,优先级高的那个任务开始运行。

8.任务优先级

任务的优先级是表示任务被调度的优先程度。每个任务都具有优先级。任务越重要,赋予的优先级应越高,越容易被调度而进入运行状态。

9.中断

中断是一种硬件机制,用于通知CPU有异常事件发生。中断一旦被识别,CPU保存部分或全部上下文(即部分或全部寄存器的值),跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序进行事件处理,处理完成后,程序回到后台:

1)在前后台系统中,程序回到后台程序。

2)对非占先式内核而言,程序回到被中断的任务。

3)对占先式内核而言,让进入就绪态的优先级最高的任务开始运行。

10.进程和线程

进程是可并发执行的、具有独立功能的程序在一个数据集合上的运行过程,是操作系统进行资源分配和保护的基本单位;进程是操作系统结构的基础;进程是一个正在执行的程序,也是计算机正在运行的程序实例。它可以是分配给处理器并用处理器执行的一个实体,也可以是单一顺序的执行显示,还可以是一个当前状态和一组相关的系统资源所描述的活动单元。

线程,是一个简单的程序。实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。