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

摘要:嵌入式操作系统在很多领域得到应用。由于嵌入式实时操作系统支持多任务,使得程序开发更加容易,在便于维护的同时还能提高系统的稳定性和可靠性,所以逐步成为嵌入式系统的重要组成部分。本文介绍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种系统,还不够完善。未来可以对其他更多的实时操作系统进行分析比较。

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

作者 Mohamad Ali| IBM咨询首席运营官 北京2024年5月24日 /美通社/ -- 生成式AI的兴起几乎在所有面向上给业务带来改变。根据 IBM 商业价值研究院最新的年度 CEO 研究,近60%...

关键字: IBM AI BSP 模型

台北2024年5月21日 /美通社/ -- 提供针对AMD WRX90和TRX50主板优化的DDR5 OC R-DIMM 提供容量128GB(16GBx8)到768GB(96GBx8),速度5600MHz到8...

关键字: AMD 内存 BSP GB

上海2024年5月20日 /美通社/ -- 2024年5月16日,世界知名的生命科学公司 Eppendorf 集团于第二十三届生物制品年会上成功举办了"疫路超越 推流出新"的产品发布会,正式推出大规模...

关键字: RF PEN BSP IMAC

北京2024年5月20日 /美通社/ -- 过去五年里,支付和收款方式日新月异,其发展和变化比过去五十年都要迅猛。从嵌入式数字商务的出现,到"一拍即付"的...

关键字: VI BSP PAY COM

华钦科技集团(纳斯达克代码: CLPS ,以下简称"华钦科技"或"集团")近日宣布致敬 IBM 大型机 60 载辉煌历程,并将继续实施集团大型机人才培养计划。

关键字: IBM BSP 研发中心 PS

助力科研与检测新突破 上海2024年5月15日 /美通社/ -- 全球知名的科学仪器和服务提供商珀金埃尔默公司今日在上海举办了主题为"创新不止,探索无界"的新品发布会,集中展示了其在分析仪器领域的最...

关键字: 质谱仪 BSP DSC 气相色谱

上海2024年5月16日 /美通社/ -- 2024年5月10日至5月13日,富士胶片(中国)投资有限公司携旗下影像产品创新力作亮相北京P&E 2024。在数码相机展览区域,全新制定的集团使命"为世界绽...

关键字: 富士 数码相机 影像 BSP

贝克曼库尔特目前已成为MeMed Key免疫分析平台和MeMed BV检测技术的授权经销商 在原有合作的基础上,继续开发适用于贝克曼库尔特免疫分析仪的MeMed BV检测 加州布瑞亚和以色列海法2024年5月16日...

关键字: BSP IO 检测技术 免疫分析仪

英国英泰力能的燃料电池是可产业化的产品解决方案 英国首个专为乘用车市场开发的燃料电池系统 在 157kW 功率下,此燃料电池比乘用车的其他发动机更为强大 &...

关键字: ENERGY INTELLIGENT 氢燃料电池 BSP

深爱人才,共赴"芯"程 深圳2024年5月15日 /美通社/ -- 5月11日,深圳国资国企"博士人才荟"半导体与集成电路产业专场活动在深圳市重投天科半导体有限公司(简...

关键字: 半导体 集成电路产业 BSP 人工智能
关闭
关闭