zoukankan      html  css  js  c++  java
  • OSEK OS标准简介(转)

    1OSEK 简介

          随着社会的进步和汽车工业的飞速发展,汽车在降低能耗、提高安全性和舒适度以及环保等方面的要求越来越高。这些要求刺激了电了技术在汽车上的应用,而且比重不断增加,其结果是汽车在零部件控制技术、通信和网络方面的复杂性大大增加。在这个强大的市场需求和激烈竞争的环境下,汽车电子的软硬件产品不断发展并出现多元化格局。

          这时一些问题凸显出来,比如,由于处理器( CPU)不断升级导致不同的CPU间的软件移植滞后,由于不同实时操作系统的应用程序接口(API)不同,导致应用程序的移植性差等。为了改变这种状况,1993年德国汽车工业界提出了OSEK(德文:Offene Systeme and deren Schnittstellen fur dieElektronik im Kraftfahr-zeug)体系,其含义是汽车电子开放式系统及其接口。这个体系的最早倡导者有:宝马、博世、戴姆勒克莱斯勒、欧宝、西门子、大众和卡尔斯鲁厄大学的工业信息技术研究所。法国的汽车制造商标致和雷诺于1994年加人了OSEK体系,并将法国汽车工业使用的汽车分布式运行系统(Vehicle Distributed eX-ecutivr, V DX)也纳人这一体系,VDX的作用与OSEK相似。

            1995年召开的研讨会上,众多的厂商对OSEKVDX的认识达成了共识,产生了OSEK/VDX规范(1997年发布),本文简称OSEK规范。它主要由四部分组成:操作系统规范(OSEK Operating System,OSEK OS)、通信规范(OSEK Communication , OSEK COM )、网络管理规范( OSEK Net Management, OSEK NM)OSEK实现语言(OSEK Implementation Language,OIL)。此后,各软件生产厂商都相继推出了符合OSEK规范的产品,比较典型的有WINDRIVER公司的OSEKWorks,ETAS公司的ERCOSEK,MOTOROLAOSEKturbo和美国密西根大学的EMERALDS-OSEK等。随着该规范应用的不断深人,其结构和功能不断完善和优化,版本也不断升级和扩展。目前OSEK OS2. 2 , OSEK COM2. 3 , OSEK NM2. 3OIL2. 3已经提交ISO审议,即将成为一个国际标准。

    2OSEKOS的特点

        OSEK规范为实现其制定的初衷并满足汽车控制领域对系统安全性和节省有限资源的特殊要求,制定了系统而全面的操作系统规范。其特点主要有以下几个方面。

    2.1 实时性

        由于越来越多的微处理器被应用到汽车控制领域,如汽车刹车的防抱死系统、动力设备的安全控制等这些系统直接关系着人的生命安全,即使出现丝毫的差错也会导致危及生命安全的严重后果,因此要求操作系统具有严格的实时性。OSEK操作系统通过静态的系统配置、占先式调度策略、提供警报机制和优化系统运行机制以提高中断响应速度等手段来满足用户的实时需求。

    2.2 可移植性

        OSEK规范详细规定了操作系统运行的各种机制,并在这些机制基础上制定了标准的应用程序编程接口,使那些独立编写的代码能够很容易地整合起来,增强了应用程序的可移植性。OSEK还制定了标准的OIL,用户只需更改OIL配置文件中与硬件相关部分,便可实现不同微处理器之间的应用程序移植。通过这些手段,减少了用于维护应用程序软件和提高它的可移植性的花费,降低了应用程序的开发成本。

    2.3 可扩展性

        为了适用于广泛的目标处理器,支持运行在广泛硬件基础上的实时程序,OSEK操作系统具备高度模块化和可灵活配置的特性。它定义了不同的符合级别( Conformance Classes),并采用对不同应用程序有可靠接收能力的体系结构,从而增强了系统的可扩展性。OSEK操作系统可以在很少的硬件资源(RAM,ROM,CPC时间)环境下运行,即便在8位微处理器上也是如此。

    3OSEK操作系统的运行机制分析

    3.1 进程(TASK)管理和调度

        OSEK操作系统中,进程管理能力相对有限,这是因为系统的进程设置在系统生成时已经定义好了,并目,系统中进程的数量保持不变,不允许动态创建和删除进程。OSEK规范把进程分为基础进程和扩展进程。基础进程状态包括:就绪态、运行态和挂起态,进程切换只发生在这三种状态之间;扩展进程除了具有基础进程的三种状态外,还有等待态,并支持事件机制
       
        基础进程通常在开始运行后,只有当它被高优先级进程占先或者是被中断时,它才会停止,否则一直运行到进程结束。而扩展进程除了能被高优先级的进程占先和被中断外,还会因等待事件而停止运行,进人等待态。处于等待态的扩展进程只有当它所等待的事件中至少有一个发生才会被激活继续运行。

        处于就绪态的进程由调度程序调度运行OSEK规范采用静态优先级调度策略。进程的优先级在系统生成的时候进行静态分配,高优先级的进程先处理,低优先级的进程后处理,具有相同优先级的进程则进入一个先来先服务的队列。此外进程可分为可被占先进程和不可被占先进程:对不可被占先的进程而言,一旦进程开始运行,就不会被占先,只有到达其调度点时才发生调度,程序设计员可以预知调度点;而对可被占先的进程而言,由于中断可能激活更高优先级的进程,所以任何时候都有可能进行调度,使用这两种进程可使程序设计具有更高的灵活性。

        OSEK操作系统不允许同一进程的多个并行调用,因为这需要动态改变进程的数量。当请求调用一个已经激活的进程时,该请求进人一个请求队列,直到前一个激活进程运行终止(转换为挂起态),第二个激活请求才执行。

    3. 2 同步机制

        OSEK提供了两种同步机制,即对共享资源的互斥访问机制和事件机制

        OSEK的资源可以是一段临界区代码、调度程序、共享内存或数据结构,也可以是共享硬件设备。系统在处理多个进程对共享资源的互斥访问时,采用信号量对临界区数据或资源加锁。在某一时刻只能有一个进程访问资源,但是用信号量机制可能会导致优先级反转,即当一个高优先级的进程试图访问一个已经被较低优先级的进程占用的资源时,则该高优先级的进程必须等待,直到低优先级的进程释放该资源。这时如果有大量的介于前两个进程优先级之间的进程被激活,而且它们根本不使用该资源,那么,占据资源的低优先级进程就会被占先,等待资源的高优先级进程也不能执行,而中间优先级的进程要先于高优先级的进程运行,这就是优先级反转。为了避免这种情况发生,OSEK操作系统采用了优先级最高限度协议(Priority Ceiling Protocol ),即当一个进程占用了一个资源后,该进程的优先级会临时升高为该资源优先级。其优先级为可能使用该资源的所有进程优先级的最高值。这样,该进程只会被不使用该资源并且比该资源的优先级高的进程占先,直到它释放该资源为止。因此,当一个进程试图占用一个资源的时候,不可能有任何其他进程正占用着该资源,也就不会有因试图占用资源而进人等待态的进程。使用该协议同时解决了死锁的问题,当两个进程都已占用了一个资源,而且又试图访问对方所占有的资源时,它们无限期地相互等待下去就会发生死锁。该协议中不存在等待进程,自然也就避免了死锁。

        此外,OSEK还提供了另一种同步机制,即事件机制。该机制的含义是,一个处于等待状态的扩展进程,只有当它所等待的事件至少有一个发生,才能进入就绪态,并且事件的发生会以信号的方式传给该进程。事件机制既可用于多个进程的同步,同时也是进程内部通信的方法之一。虽然只有扩展进程才可以等待事件,但设置这些事件的却可以是任何进程或中断服务程序。有一点要注意,为了遵循占用子资源就不被阻断的原则,必须避免一个占用了资源的进程因等待事件而进人等待状态。

    3. 3 警报

        前面提到汽车电子控制最典型的特性就是实时性,因此系统必须有基于时间或其他计数器的处理机制,来处理定时和循环进程。为此,OSEK提供了警报机制。警报或者基于系统时钟,或者基于其他的某种计数器,当计数器到达警报设定值时被触发。警报触发后可以激活进程也可以为某一进程设置事件,或者干脆执行一个警报回调程序,具体怎样由用户在系统生成时静态定义,但警报值是动态设置的,可以是相对值或者是绝对值,也可以设为循环警报来激活周期性进程。

    3. 4 中断

        汽车控制系统要求对实时输人作出快速反应。在OSEK操作系统中,由应用程序开发者编写的中断服务程序(ISR)与系统封装在一起,这样有利于保护进程和系统状态。OSEK操作系统把中断处理程序分为两类:(1)中断服务程序不会调用系统服务;(2)中断服务程序可以调用部分系统功能,如激活进程、设置事件、设置警报等,因此,它可以激活更高优先级的进程。OSEK操作系统的中断管理提供了开/关全部中断和开/关全部第三类中断的系统调用。OSEK操作系统内核是一个可重入内核,因此,那些正在执行内核代码的进程(如正在执行系统调用)可能被中断,交出CPU的使用权,必要时都不允许等到内核代码运行完,这有利于缩短由中断启动的更高优先级进程的平均延时。OSEK操作系统还支持中断的嵌套。

    3.5 符合级别

        由于汽车嵌入式领域的应用范围很广,所以不同的应用程序软件可能对操作系统的要求有所不同,而且系统实现的硬件环境也存在很大的差异(如在处理器类型、存储容量等方面的不同),这就要求操作系统具有灵活的配置能力。

         OSEK规范把这些配置上的不同特点组织成四个级别,即四个符合级别:BCC1,BCC2,ECC1ECC2。各符合级别在其提供的系统服务、进程类型和对硬件适应能力方面均有所不同,而且在它们之间存在着一定的兼容性。BCC1BCC2只支持基础进程,不支持事件机制;ECC1ECC2支持基础进程和扩展进程,并且支持事件机制;BCC1ECC1支持每个优先级只有一个进程,BCC2ECC2支持每个优先级可以有多个进程,每个进程可以有多个激活请求。开发人员可以根据需要选择合适的符合级别来实现一个完全符合OSEK规范的操作系统,也可以开发支持全部符合级别的系统并提供配置选项,供用户选择使用。

     

     =========================================================================================

    市场上OSEK OS的调研(http://www.hkaco.com/autoelec/support/OSEK_OS.html)

    截止目前,通过认证的OSEK/VDX操作系统,从其官方网站上统计共有12个。其中国外的有10个,国内的有2个。

    ProOSEK是德国的3soft公司推出的全世界最早的OSEK/VDX操作系统(1997),为BMW、VM/Audi、DaimlerChrysler提供了基于OSEK的软件开发平台。

    Freescale公司开发的OSEKTurbo是目前市场上实现OSEK/VDX标准中,使用最为广泛的实时操作系统之一,在业界居领先地位,完全满足最新的OSEK/VDX开放系统的标准,支持8、16、32位微处理器,在稳定性和软件质量(按照CMM5标准研制)方面表现出色。

    Nucleus OSEK是Accelerated Technology Embedded System公司基于开源的Nucleus PLUS操作系统的基础之上实现的,它实现了OSEK/VDX标准的V2.2R1版本,提供了完全的OSEK/VDX认证。( http://www.acceleratedtechnology.com.tw/embedded/osek.php 

    Embedded Office开发的OSEK Extension for uC/OS II基于开源的uC/OS II操作系统,通过了BCC1、ECC1、CCCA、CCCB的官方认证。(http://www.embedded-office.de/index.php?id=35

    OSEKWorks是Wind River公司在其VxWorks的基础之上根据OSEK/VDX标准扩展开发的,具有VxWorks的优良特性。(http://www.windriver.com

    osCAN是德国的Vector公司开发的具有CANopen协议栈的OSEK操作系统,可以结合Vector公司任意通信协议,支持多版本的CAN协议,具有多种特殊功能,例如运行过程中的堆栈管理,多种堆栈优化方法,内部跟踪、模板生成器、组件管理器等。(http://www.vector.com/vi_index_cn.html

    RTA-OSEK是LiveDevices公司开发的,是全球第一个完整实现OSEK所有一致类的RTOS。ERCOSEK是BOSCH公司在其发动机管理系统中使用的实时操作系统,由ETAS公司开发。LiveDevices与ETAS在2007年合并。(http://www.etas.com

    R-OSEK是由韩国电子与电信研究院(ETRI)开发的OSEK/VDX标准的RTOS,ETRI从2006年投资了367万美元用于开发ROSEK,并于2009年5月份通过了OSEK/VDX的认证。

    DeltaOSEK是中国北京科银京成技术有限公司为汽车电子的控制类应用所开发的、符合OSEK/VDX标准的嵌入式操作系统,提供标准的OS及COM功能部件的应用编程接口。它的最新版本在MPC555/MPC5554的平台上通过了OSEK/VDX测试集的全面测试,符合OSEK/VDX标准,于2009年3月获得了OSEK/VDX认证机构的认可。

    SmartOSEK OS是由浙江大学ESE工程中心开发的符合OSEK/VDX标准的嵌入式实时操作系统,在2005年通过了国际OSEK/VDX组织的官方认证。SmartOSEK OS支持多种国际主流处理器,满足不同的硬件需求,具有静态配置、微内核和实时性等优点,实现可抢占式内核以及多种实时调度机制,适用于实时性要求较高的汽车电子产品。

    此外还有Motorola Powertrain Chassis and Systems开发的TinyOSEK。

  • 相关阅读:
    Java并发编程笔记——技术点汇总
    Hello Blog
    shell变量
    认识bash这个shell
    使用myeclipse创建带注解的model实体类
    python List,切片的用法
    ignite从0到1的学习过程记录-第一篇:安装和体验
    安卓Service完全解析(中)
    安卓Service完全解析(上)
    JAVA之数组
  • 原文地址:https://www.cnblogs.com/iable/p/4206848.html
Copyright © 2011-2022 走看看