嵌入式操作系统任务切换方法对比分析

发布者:勾剑寒最新更新时间:2013-10-26 来源: 21ic关键字:任务调度策略  μClinux  实时操作系统 手机看文章 扫描二维码
随时随地手机看文章
  引言

  嵌入式系统在航天、军事、工控以及家电等方面得到了广泛应用。大量的嵌入式系统具有实时性的要求,但是由于体积、能耗、价格等方面的约束,其处理器速度往往比较慢,存储器容量也有限。而传统的实时操作系统难以简单地移植到嵌入式系统中,所以需要重新开发针对嵌入式系统特性的实时操作系统。任务调度策略是实时系统内核的关键部分,如何进行任务调度,使得各个任务能在其期限之内得以完成,是实时操作系统的重要研究领域。而不同的操作系统对任务调度的机制也有所不同,本文对目前比较流行的操作系统——VxWorks、μClinux、μC/OS-II、Windows CE的任务切换机制进行分析和比较。

  1 操作系统介绍

  1.1 VxWorks

  VxWorks是美国WindRiver公司的产品,是目前嵌入式系统领域中应用很广泛、市场占有率比较高的嵌入式操作系统。VxWorks实时操作系统由400多个相对独立、短小精悍的目标模块组成,用户可根据需要选择适当的模块来裁剪和配置系统;提供基于优先级的任务调度、任务间同步与通信、中断处理、定时器和内存管理等功能,内建符合POSIX(可移植操作系统接口)规范的内存管理,以及多处理器控制程序;具有简明易懂的用户接口,在核心方面甚至可以微缩到8KB。

  1.2 μC/OS-lI

  μC/OS-II是在μC/OS的基础上发展起来的,是美国嵌入式系统专家Jean J.Lal3rosse用C语言编写的一个结构小巧、抢占式的多任务实时内核。μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

  1.3 Linux

  Linux是一种自由的Unix类多用户、多任务操作系统,可运行在Intel 80386及更高档次的PC、ARM、DECAlpha等多种计算机平台上,已经成为应用广泛、可靠性高、功能强大的计算机操作系统。

  1.4 WindOWS CE

  微软Windows CE是一个开放且多样化的32位嵌入式操作系统。其设计目的是为符合广泛的智能设备的需求,例如从企业工具(如工业控制器、通信集线器和收款机系统)到电子消费性产品(如摄影机、电话和家庭娱乐设备等),提供自动控制、视听娱乐、行动计算、终端机等各个应用领域一个稳定、实时及多任务的操作系统。

  2 任 务

  2.1 任务切换概述

  上下文切换(context switch),其实际含义是任务切换,或者CPU寄存器切换。当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,也就是CPU寄存器中的全部内容。这些内容被保存在任务自己的堆栈中,入栈工作完成后就把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU寄存器,并开始下一个任务的运行,这一过程就是context switch。

每个任务都是整个应用的一部分,都被赋予一定的优先级,有自己的一套CPU寄存器和栈空间,如图1所示。

[page]

  2.2 任务的切换与调度

  μC/OS-II是可抢占实时多任务内核,它总是运行优先级最高的就绪任务,不支持时间片轮转调度法,每个任务的优先级要求不一样,且是唯一的。它有5种状态,如图2所示。

当一个任务在运行状态中时,如果没有关闭中断,就有可能被中断打断,去执行中断服务子程序ISR。执行完后内核要判断此时是否有更高优先级,新的任务就绪,如果有则原有的任务被抢占,实现了任务的切换。

  当一个任务在运行状态中时,调用OSTimeDly()或OSTimeDlyHMSM()函数,该任务进入等待状态,一直到延时时间到,这2个函数立即强制执行任务切换,让下一个优先级最高的就绪任务运行。当然,如果运行的任务需要等待某一事件的发生,可以调用一些函数(如OSFlag Pend()、OSSemPend()、OSMutexPend()、OSMboxPend()、OSQPrnd()等)挂起该任务,来实现任务的切换。

  实际的任务切换是调用OS_TASK_SW()函数。OS_TASK_SW()是一个宏,是在μC/OS-II从低优先级切换到高优先级任务时须用到的。OS_TA-SK_SW()总是在任务级代码中被调用。另一个函数OSIntExit()用在中断服务子程序ISR中。当中断任务子程序使更高优先级任务进入就绪态时,OSintExit()完成任务切换功能,任务切换只是简单地将处理器的寄存器保存到将被挂起的任务的堆栈中,并且从堆栈中恢复要运行的更高优先级的任务。

μC/OS-II总是运行进入就绪态任务中优先级最高的任务,确定哪个任务优先级最高,以及下面该哪个任务运行。这一工作是由调度器完成的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。该工作由函数OSSched()完成。中断级的调度由OS-intExt()完成。代码如下:

在Linux系统中,任务的上下文切换和调度比较复杂。Linux的上下文切换功能是由context_switch()函数完成的。代码如下:

context_switch()完成了2个工作:

  ①切换虚拟内存映射,即负责把虚拟内存从被切换下来的进程映射到新进程中,该功能由函数switcn_mm()实现。

  ②切换进程的寄存器状态,即负责从一个进程的处理器状态切换到新进程的处理器状态,该功能由函数switcn_to()实现。[page]

  在多任务系统中,都会提供一个系统函数来进行进程(任务)间切换,综合来说,它们有两种进程(任务)切换方式:

  ①由进程(任务)本身直接调用任务切换函数进行进程(任务)切换。在当前进程(任务)因为不能获得必需的资源而立即被堵塞时,就由进程(任务)本身直接调用进程(任务)切换函数进行进程(任务)间调度。在Linux中可以直接调用schedule()函数来实现。

  ②延迟调用任务切换函数进行进程(任务)切换。此方式是把当前进程(任务)设置一调度标志而以延迟方式调用任务切换函数进行进程(任务)切换。在Linux系统中,总是在恢复用户态进程执行之前,检查这一调度标志,在这里标志是need_resched,如果有这一标志,就调用调度函数进行进程切换。

  此种情况主要包括以下几种:

  ①当前进程用完了它的CPU时间片,由scheduler_tick()函数完成schedule()的延迟调用。

  ②当一个被唤醒进程的优先级比当前进程优先级高时,由try_to_wake_up()函数完成schedule()的延迟调用。

  ③当发出系统调用sched_setscheduler()时。在这些情况中,主要由于系统调用或中断而进入内核态,或者当前进程本来在内核态时,返回用户态时发生的。

  在VxWorks系统中,任务的优先级为0~255。任务有4种状态:就绪态、悬置态、休眠态和延迟态,如图3所示。

内核缺省调度机制为基于优先级的抢占式调度。采用这种机制,系统把处理机分配给优先级最高的进程,使之执行。一旦出现优先级更高的进程时,该任务被剥夺CPU使用权,而去执行优先级更高的任务。而在相同优先级的多个任务之间,采用时间片轮转调度机制。采用这种机制,当一个任务到达时,它被安排在轮转队列的后面,等待分配给自己的时间片的到来,如果在时间片内没有结束,则在等待属于自己的时间片的到来,直到任务完成。

  在VxWorks系统中,对于优先级相同的任务,如果状态为Ready,则可以通过时间片轮转方式公平享有CPU资源。轮转调度法给处于就绪态的每个同优先级的任务分配一个相同的时间片,该时间片的大小由系统调用KernelTimeSlice决定。

  在Windows CE系统中,Windows CE 3.0之后,系统支持的优先级增长到256个,0优先级级别最高,255优先级级别最低。0~247的优先级属于实时性优先级,248~255的优先级一般分配给普通应用程序。Windows CE.NET采用基于动态优先级的抢占式多任务机制,越重要的任务,优先级越高。Windows CE.NET在任务调度中采用任务优先级制、优先级动态调整机制和抢占式调度,都是为了最大限度地满足系统的实时性要求。对于一个优先级只有一个任务的简单系统内核,上述的3种调度足以满足要求,但对于Windows CE.NET这样复杂、高性能的多任务实时内核,由于多个任务允许公用一个优先级,则相同优先级的任务要采用Windows CE.NET提供的时间片轮转法实现。具体实现如图4所示。

在没有更高优先级任务就绪时,相同优先级的任务依照就绪的先后次序执行。执行一定的时间片后,无论任务完成与否,均转入下一任务运行。未运行完的任务释放处理器的控制权后转入就绪队列的末尾,依次往复。这样的轮转策略保证了具有相同优先级的任务平等地享有控制权的处理权。在Windows CE系统中,一般设置的时间片大小为10 ms。

  3 总结

  本文对几种操作系统的内核的主要部分(任务切换与调度)进行了分析比较,便于理解其实时性、可靠性等方面的优缺点,为以后进行系统的移植和开发打下基础。由于笔者时间和精力有限,而且目前的操作系统很多,本文只分析了4种系统,还不够完善。未来可以对其他更多的实时操作系统进行分析比较。

关键字:任务调度策略  μClinux  实时操作系统 引用地址:嵌入式操作系统任务切换方法对比分析

上一篇:应用c进行嵌入式Linux的研究
下一篇:嵌入式操作系统μC/OS-Ⅱ面向数控系统的改进

推荐阅读最新更新时间:2024-05-02 22:49

嵌入式实时操作系统的RAM盘扩展
    摘要: 介绍了一种在嵌入式实时操作系统内核(以下简称实时内核)上实现RAM盘的方法,配合接受用户命令的Shell任务,可实现嵌入式系统的多任务动态加载和监控,扩展了实时内核的应用领域。实时内核采用目前十分流行的免费内核μC/OS-Ⅱ,硬件不台为通用现场总线控制器系统。     关键词: μC/OS-Ⅱ内核 嵌入式系统 通用现场总线控制器(GPFC) ColdFire 1 嵌入式RTOS 目前,嵌入式RTOS的应用领域越来越广泛。已经有80多个RTOS厂商生产面向8位、16位、32位、甚至64位微处理器的RTOS产品。商业的实时操作系统如VxWorks,pSOS,VRTX,WindowsCE等功能完
[缓冲存储]
AVR单片机的RTOS-AVRX应用
引 言   随着技术的发展,嵌入式系统的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式。在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入式操作系统深得开发人员的青睐。   AVR微处理器是Atmel公司开发的8位嵌入式RISC处理器,它具有高性能、高保密性、低功耗、非易失性等优点,而且程序存储器和数据存储器可独立编址,并具有独立访问的哈佛结构。AVR单片机内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个周期内一条单一指令访问两个独立的寄存器,这样的结构使代码的执行效率比传统的复杂指令集
[单片机]
建立一个属于自己的AVR的RTOS(第三篇:GCC)
简介:本文为建立一个属于自己的AVR的RTOS:第三篇:GCC中对寄存器的分配与使用相关内容。 第三篇:GCC中对寄存器的分配与使用 在很多用于AVR的RTOS中,都会有任务调度时,插入以下的语句: 入栈: __asm____volatile__( PUSHR0 t ); __asm____volatile__( PUSHR1 t ); ...... __asm____volatile__( PUSHR31 t ); 出栈 __asm____volatile__( POPR31 t ); ...... __asm____volatile__( POPR1 t ); __asm____volatile__( POPR
[单片机]
嵌入式实时操作系统ARTs-OS的中断管理
ARTs-OS是一个基于微内核的嵌入式实时操作系统。ARTs-OS中的中断管理应该提供的基本功能包括:管理中断处理设备、中断服务例程的管理、中断嵌套的管理、中断栈的维护、线程/进程切换时的现场保护和恢复等。但是ARTs-OS作为嵌入式实时操作系统,上述基本功能不能满足所有的要求,它还必须拥有更多体现嵌入和实时特性的功能。ARTs-OS在实现中必须采取一些措施将中断分配时间(IDT)和中断服务时间(IST)减到最小,并使用户能够很容易地在ARTs-OS上开发、调试驱动程序。 1 ARTs-OS的I/O特点 ARTs-OS的I/O体系结构的主要特点有:(1)基于微内核构架。(2)支持动态加载。(3)核内/核外驱动。(4)进程/
[嵌入式]
MSP430单片机上使用RTOS对系统的意义解析方案
引 言 1 在MSP430上使用RTOS的意义 一般的观点认为,MSP430上使用RTOS是没有意义的这是可以理解的。因为MSP430的硬件资源有限(以MSP430F149为例,只有2KB RAM),任何商业操作系统都不可能移植到MSP430上。目前在MSP430上得到应用的RTOS,只有μC/OS-II,但使用μC/OS-II 必须有昂贵的C编译器,这严重地限制了其在MSP430上的使用。 正是基于以上情况,笔者在应用MSP430过程中,编写了一个基于MSP430F149的RTOS,暂定名为M430/OS。它占用RAM量少、代码短小,稍加改动就可适用于大多数其它MSP430单片机。 在MSP430单片机系统上使用M430
[单片机]
基于RTOS的智能交通灯设计方法
引言 随着城市汽车保有量的越来越多,城市的交通拥挤问题正逐渐引起人们的注意。交通灯是交管部分管理城市交通的重要工具。目前绝大部分交通灯其时间都是设定好的,不管是车流高峰还是低谷,红绿灯的时间都固定不变;还有一些交通灯能根据简单划分的时间段来调整时间,但控制起来都不是很灵活,这使得城市车流的调节不能达到最优。本文所述设计正是针对这一弊端进行了改进,根据实时车流量对各路口的绿灯时间进行动态调节,大大加强了其灵活性和实时性;软件编程采用了实时操作系统RTX51,在确保实时性要求的同时,简化了复杂的软件设计工作。 1 方案论证 图1是一个典型的十字路口示意图。分别用1、2、3、4表明四个流向的主车道,用a、b、c、p分别表示各主车道的左行
[单片机]
基于<font color='red'>RTOS</font>的智能交通灯设计方法
基于ARM7支持触摸屏和实时操作系统的开发与应用
  概述   随着信息技术的发展,支持图形界面的触摸操作和实时操作系统相结合的应用系统已经越来越广泛地应用到航空航天、军事、消费类电子、通讯设备等领域。mC/OS-II操作系统是一种占先式、实时操作系统(RTOS),由于其内核可拆减、可剥离性,使得它在实时控制领域中有着广泛的应用。它不仅减小了因为系统硬件设计缺陷带来的不可靠因素,而且增强了系统的控制实时性,从软件方面进一步增强了ARM控制系统的性能。另外,新版本的mC/OS-II已经通过了FAA认证,很适合应用于对实时性要求很高的嵌入式工业控制领域,如目前应用较广泛的军用战斗机、攻击机和火控系统等。   支持图形界面操作(mC/GUI)是一种较为流行的人机交互系统,它能够提供
[单片机]
基于ARM7支持触摸屏和<font color='red'>实时操作系统</font>的开发与应用
RTOS实现双核MCU消息通信
手机、电脑多核的CPU你可能经常看见,但多核的单片机相对来说就不那么常见了。随着需求的增加、技术的进步,单片机已不再局限于单核了,因此,近几年陆续出现了双核的单片机了。 你可能会好奇,双核单片机之间怎么通信?其实,通信的方式和方法有很多种。本文就给大家描述一下:使用FreeRTOS消息缓冲区,实现简单的非对称多处理(AMP)核心到核心通信,结合STM32H7(M4和M7) 双核处理器为例。 分享正文之前推荐一个嵌入式招聘信息的平台: 概述 实现STM32H7双核之间通信是FreeRTOS官方提供的一个方案,是基于FreeRTOS消息缓冲区,该消息缓冲区是无锁循环缓冲区,可以将大小不同的数据包从单个发送方传递到单个接收方。
[单片机]
<font color='red'>RTOS</font>实现双核MCU消息通信
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved