《嵌入式实时操作系统.pptx》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统.pptx(36页珍藏版)》请在优知文库上搜索。
1、嵌入式实时操作系统多任务实时操作系统多任务实时操作系统前后台系统前后台系统的组成:前台和前后台系统的组成:前台和后台程序后台程序后台:后台:是一个无限循环的应是一个无限循环的应用程序,循环中调用相应的任用程序,循环中调用相应的任务函数完成相应的操作,各个务函数完成相应的操作,各个任务依次运行,没有调度,运任务依次运行,没有调度,运行的次序不能改变。行的次序不能改变。前台:前台:是中断服务程序,处是中断服务程序,处理异步事件。理异步事件。适用情形一般不复杂或实时性要求不高的小系统很适合采用前后台系统,例如微波炉、电话机、玩具等。在另外一些基于省电的应用中,由于平时微处理器处在停机状态,所有的事都
2、靠中断服务来完成,因此也常常采用前后台系统模式。操作系统 操作系统(操作系统(Operating SystemOperating System,简称,简称OSOS)是计算机中最基本的程序。操作)是计算机中最基本的程序。操作系统负责计算机系统中全部软、硬资源的分配以及回收、控制与协调等并发的系统负责计算机系统中全部软、硬资源的分配以及回收、控制与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为用户活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统功能提供软件平台。扩展新的系统功能提供软件平台。 操作系统的主要包括四大功能:操作系统的主要包
3、括四大功能:处理机管理:解决处理机管理:解决CPUCPU的分时复用。的分时复用。存储管理:配合存储管理:配合CPUCPU调度内存。调度内存。设备管理:分配外设的使用,包括独享、共享和虚拟。设备管理:分配外设的使用,包括独享、共享和虚拟。软件资源管理:解决程序和信息的存取和管理等问题。软件资源管理:解决程序和信息的存取和管理等问题。实时操作系统 实时操作系统(实时操作系统(RTOSRTOS)是指当外界事件或数据产生时,能够接受并以)是指当外界事件或数据产生时,能够接受并以足够足够快的速度快的速度予以处理,其处理的结果又能在予以处理,其处理的结果又能在规定的时间规定的时间之内来控制生产过程或对之内
4、来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。 多任务实时操作系统用户用户的应用程序是运行于的应用程序是运行于RTOSRTOS之上的各个任务,之上的各个任务,RTOSRTOS根据各个任务的根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度和异要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度和异常处理等工作。常处理等工作。多任务多任务实时操作系统实时操作系统,以分时方式运行多个任务,看上去好像是多个,以分时方式运行多个任务,看上去好像是多个任务任务“同时同时”运
5、行。任务之间的切换应当以优先级为根据,只有具有运行。任务之间的切换应当以优先级为根据,只有具有优先优先服务方式服务方式的的RTOSRTOS才是真正的实时操作系统,而时间分片方式和协作方式的才是真正的实时操作系统,而时间分片方式和协作方式的RTOSRTOS并不是真正的并不是真正的“实时实时”。相关基本概念资源与共享资源资源与共享资源内核与内核与任务任务切换切换消息队列消息队列时钟节拍时钟节拍调调度度死死锁锁临界临界区区中中断断任任务务函数的可重入性函数的可重入性资源与共享资源 程序运行程序运行时可使用的软、硬件环境统称为资源。资源可以是输入时可使用的软、硬件环境统称为资源。资源可以是输入/ /输
6、出设输出设备,例如打印机、键盘和显示器;资源也可以是一个变量、一个结构或备,例如打印机、键盘和显示器;资源也可以是一个变量、一个结构或一个数组等一个数组等。 共享共享资源就是指可以被一个以上任务使用的资源。为防止数据被破坏,资源就是指可以被一个以上任务使用的资源。为防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫每个任务在与共享资源打交道时,必须独占该资源,这叫互斥互斥。任务 任务,也称为线程,是一任务,也称为线程,是一个程序个程序。一般地,每个任务都是一个无限的循环。一般地,每个任务都是一个无限的循环。 任务任务有五种有五种状态,任何状态,任何时刻,一个任务都处于这五种状态
7、之一的状态下时刻,一个任务都处于这五种状态之一的状态下。 休眠态休眠态相当于该任务驻留在内存中,但并不被多任务内核所调度相当于该任务驻留在内存中,但并不被多任务内核所调度。 就绪就绪态态意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂不能运行的优先级低,还暂不能运行 。 运行运行态态的任务是指该任务掌握了的任务是指该任务掌握了CPUCPU的控制权,正在运行的控制权,正在运行。 挂起挂起态态指该任务在等待,等待某一事件的发生指该任务在等待,等待某一事件的发生。 被被中断状态中断状态是指
8、,发生中断时,是指,发生中断时,CPUCPU提供相应的中断服务,原来正在运行的任务暂不能运提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态行,就进入了被中断状态。内核与任务切换 内核是操作系统最基本的部分内核是操作系统最基本的部分。 负责负责管理各个任务管理各个任务,为,为每个每个任务任务分配资源分配资源,它,它提供的基本服务是提供的基本服务是任务切换任务切换。 任务切换任务切换 当当多任务内核决定运行另外的任务时,保存正多任务内核决定运行另外的任务时,保存正在运行任务的当前状态,即在运行任务的当前状态,即保存保存CPUCPU寄存器中寄存器中的全部内容的全部内容。这些内容保
9、存在任务的当前状态。这些内容保存在任务的当前状态保存区,也就是任务自己的栈区之中保存区,也就是任务自己的栈区之中。 入入栈工作完成以后,就把下一个将要运行的任栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中务的当前状态从任务的栈中重新装入重新装入CPUCPU的寄的寄存器存器,并开始下一个任务的运行。这个过程就,并开始下一个任务的运行。这个过程就称为任务切换称为任务切换。中断中断是最基本的任务切换方式中断是最基本的任务切换方式,停止,停止现行程序的运行,转向对这些异常情现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回到以下部分:况或特殊请求的处理,处理结束后再返
10、回到以下部分:1.1.在前后台系统中,程序回到后台程序;在前后台系统中,程序回到后台程序;2.2.对非占先式内核而言,程序回到被中断了的任务;对非占先式内核而言,程序回到被中断了的任务;3.3.对占先式内核而言,让进入就绪态的优先级最高的任务开始运行。对占先式内核而言,让进入就绪态的优先级最高的任务开始运行。调度 任务任务的调度方式有的调度方式有基于时间片轮转的调度基于时间片轮转的调度和和基于优先级的调度基于优先级的调度。多数。多数实时系统是基于优先级调度法的。基于优先级的调度法指实时系统是基于优先级调度法的。基于优先级的调度法指CPUCPU总是让处于就总是让处于就绪态的优先级最高的任务先运行
11、。至于何时让高优先级任务掌握绪态的优先级最高的任务先运行。至于何时让高优先级任务掌握CPUCPU的使用的使用权,有两种不同的权,有两种不同的情况:情况: 占先式调度占先式调度 任何任何时候具有最高优先级且已就绪的任务先执行时候具有最高优先级且已就绪的任务先执行。 非非占先式占先式调度调度 要求每个任务自我放弃要求每个任务自我放弃CPUCPU的所有权。的所有权。临界区临界资源:任何时候都只允许一个任务访问的资源。临界资源:任何时候都只允许一个任务访问的资源。临界区或临界段:用于访问临界资源的代码段。临界区或临界段:用于访问临界资源的代码段。临界代码段临界代码段不允许多个并发任务交叉执行不允许多个
12、并发任务交叉执行,否则会产生严重后果,比如进入中断后的现,否则会产生严重后果,比如进入中断后的现场保护代码等。场保护代码等。为确保临界区代码的安全执行,在进入临界区之前要关中断,而临界区代码执行完以后为确保临界区代码的安全执行,在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断要立即开中断函数的可重入性可重入可重入(Reentrant)(Reentrant)型函数:是指可以被型函数:是指可以被多个任务并发使用,而数据不会遭到破坏多个任务并发使用,而数据不会遭到破坏的函数。的函数。可重入型函数特征:可重入型函数特征:只使用局部变量,变量保存在只使用局部变量,变量保存在CPUCPU寄存寄
13、存器或堆栈中,可以在任意时刻被中断,器或堆栈中,可以在任意时刻被中断,再重新恢复运行时,数据不会被破坏;再重新恢复运行时,数据不会被破坏;若使用全局变量,则需满足互斥条件。若使用全局变量,则需满足互斥条件。可重入型函数实例可重入型函数实例void func1(int* x, int* y) int temp; temp= *x; *x = *y;*y = temp;不可重入型函数清单不可重入型函数清单static int temp;void func2(int* x, int* y) temp = *x; *x = *y;*y = temp; 死锁所谓所谓死锁,是指各并发任务彼此等待对方所拥有
14、的资源,且这死锁,是指各并发任务彼此等待对方所拥有的资源,且这些并发任务在得到对方的资源之前不会释放自己所拥有的资源,些并发任务在得到对方的资源之前不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各并发任务不从而造成大家都想得到资源而又都得不到资源,各并发任务不能继续向前推进的状态。能继续向前推进的状态。最最简单的防止死锁发生的方法有两种:简单的防止死锁发生的方法有两种: 1. 1. 让每个任务先得到全部需要的资源,再进行下一步工作。让每个任务先得到全部需要的资源,再进行下一步工作。 2. 2. 让每个任务用同样的顺序去申请多个资源,释放资源时使用相反的顺序。让每个任务用同
15、样的顺序去申请多个资源,释放资源时使用相反的顺序。消息队列和时钟节拍 消息消息队列是保存消息的容器。通过内核提供的服务,任务或中断服务子程序可队列是保存消息的容器。通过内核提供的服务,任务或中断服务子程序可以以将消息将消息放入消息队列。同样放入消息队列。同样,任务,任务可以通过内核服务从消息队列中得到消息。可以通过内核服务从消息队列中得到消息。 通常,先进入消息队列的消息先给任务,遵循先进先出原则(通常,先进入消息队列的消息先给任务,遵循先进先出原则(FIFOFIFO)。)。 内核内核提供的典型消息队列服务如下提供的典型消息队列服务如下: 1 1. .消息队列初始化,队列初始化时总是清为空消息
16、队列初始化,队列初始化时总是清为空; 2 2. .放一则消息到队列中去(放一则消息到队列中去(POSTPOST); 3 3. .等待一则消息的到来(等待一则消息的到来(PENDPEND); 4 4. .无等待取得消息无等待取得消息。基于RTX51操作系统的软件设计 RTX51是Keil公司开发的专门针对于8051兼容MCU所作的多任务实时操作系统,是Keil自带的小操作系统之一。 有二个不同的RTX51版本,RTX51 Full 和RTX51 Tiny RTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器。该RTOS最多支持16个任务,基于RTX51 Tiny构建的应用程序没有main( )函数,是从任务0开始执行的,也不支持抢先任务切换和任务优先级。 RTX51 Tiny的程序用标准的C语言构造,由Keil C51 C编译器编译。用户可以很容易的定义任务函数,而不需要进行复杂的栈和变量结构配置,只需包含一个指定的头文件(rtx5 1tny.h)。 RTX51 Tiny使用定时器0、定时器0中断,和寄存器组1。 描述 RTX51完全模式 RTX51最小