当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式操作系统任务切换方法对比分析

摘要:嵌入式操作系统在很多领域得到应用。由于嵌入式实时操作系统支持多任务,使得程序开发更加容易,在便于维护的同时还能提高系统的稳定性和可靠性,所以逐步成为嵌入式系统的重要组成部分。本文介绍4种嵌入式实时操作系统VxWorks、μClinux、μC/OS-II和Windo-ws CE,对多任务的调度切换进行了分析比较。
关键词:嵌入式操作系统;任务切换;VxWorks;Linux;μC/OS-II;Wiladows CE

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

[!--empirenews.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()完成。代码如下:
   [!--empirenews.page--]
    在Linux系统中,任务的上下文切换和调度比较复杂。Linux的上下文切换功能是由context_switch()函数完成的。代码如下:
   
  
    context_switch()完成了2个工作:
    ①切换虚拟内存映射,即负责把虚拟内存从被切换下来的进程映射到新进程中,该功能由函数switcn_mm()实现。
    ②切换进程的寄存器状态,即负责从一个进程的处理器状态切换到新进程的处理器状态,该功能由函数switcn_to()实现。
    在多任务系统中,都会提供一个系统函数来进行进程(任务)间切换,综合来说,它们有两种进程(任务)切换方式:
    ①由进程(任务)本身直接调用任务切换函数进行进程(任务)切换。在当前进程(任务)因为不能获得必需的资源而立即被堵塞时,就由进程(任务)本身直接调用进程(任务)切换函数进行进程(任务)间调度。在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种系统,还不够完善。未来可以对其他更多的实时操作系统进行分析比较。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭