OSEK

OSEK

OSEK/VDX

OSEK est le sigle pour « Offene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug », en français Systèmes ouverts et interfaces correspondantes pour lélectronique des véhicules automobiles.

OSEK a été créé en 1993 par un consortium de constructeurs et équipementiers automobiles allemands (BMW, Bosch, DaimlerChrysler, Opel, Siemens, et VW) ainsi quun département de luniversité de Karlsruhe. Leur but était de développer un standard pour une architecture ouverte reliant les divers contrôleurs électroniques dun véhicule. En 1994, les constructeurs français Renault et PSA qui développaient un projet similaire, VDX (Vehicle Distributed eXecutive), rejoignirent le consortium.

Larchitecture ouverte présentée par OSEK/VDX comprend trois parties :

  • La communication (échange de données entre unités de contrôle)
  • La gestion de réseau
  • Le système dexploitation temps réel

Sommaire

La communication

OSEK COM offre des services pour le transfert de données entre tâches et/ou routines dinterruption. Laccès aux services OSEK COM nest possible que via linterface (API) spécifiée, le but de linterface étant dassurer la portabilité, linteropérabilité et la réutilisation des logiciels dapplication.

Gestion de réseau

OSEK NM (network management) définit un jeu de services assurant linitialisation, le démarrage et le contrôle de létat des nœuds dun réseau.

Le système d'exploitation temps réel

Le système d'exploitation temps réel OSEK a pour but de répondre aux contraintes sévères dexécution en temps réel des logiciels embarqués utilisés par lélectronique automobile. Il permet daider à la portabilité entre différents modules constituant une application logicielle. L'une des caractéristiques d'OSEK/VDX est que le système est défini de façon statique lors de la compilation : tous les services utilisés (tâches, messages, etc.) sont définis de façon statique dans le langage OIL (OSEK Implementation Language), contrairement aux systèmes temps réel de type POSIX. Cela entraîne une faible empreinte mémoire et un très faible surcoût processeur au système.

Services offerts par OSEK OS

La gestion de tâches

Une tâche est une portion de code séquentiel. OSEK OS fournit deux types de tâches :

  • les tâches de base
  • les tâches étendues
Les tâches de base

Une tâche de base rend la main au processeur si :

  • elle est terminée
  • OSEK OS laisse la main à une tâche de priorité plus haute
  • une interruption arrive

Une tâche de base peut prendre trois états différents :

  • suspended : la tâche est passive mais peut être activée
  • ready : la tâche est candidate à lexécution
  • running : la tâche est en cours dexécution
Les tâches étendues

Les tâches étendues ont les mêmes caractéristiques que les tâches de base avec en plus la possibilité dutiliser la gestion des évènements.

Cette possibilité leur « donne accès » a un quatrième état : Waiting. Les tâches étendues ont par ailleurs les trois mêmes états que les tâches de base (Running, Suspended, Ready).


Dans létat « Waiting », la tâche étendue ne peut pas continuer à sexécuter car elle doit attendre larrivée dau moins un évènement.

Quelques primitives (API) de gestion des tâches

La déclaration dune tâche se fait grâce à la primitive void DeclareTask( TaskIdentifier).

Au démarrage, une tâche est à létat « Suspended ». Pour lactiver, cest-à-dire passer à létat « Ready », on utilise la primitive StatusType ActivateTask(TaskType <TaskID>)

Pour terminer une tâche, cest-à-dire la passer à létat « Suspended », on utilise la primitive StatusType TerminateTask(void).

Il existe dautres primitives pour la gestion des tâches, qui permettent par exemple de connaître le numéro didentification dune tâche ou encore létat courant dune tâche.

Gestion des priorités
  • Traitement des tâches


Les priorités données aux tâches sont primordiales dans le sens elle vont servir à lordonnanceur à déterminer quelle est la tâche actuellement à létat « Ready » qui va passer la prochaine à létat « Running ».

Les priorités données aux tâches sont définies de manière statique à la création.

La valeur 0 représente la priorité la plus basse. Il ny a pas de valeur limite pour les priorités les plus hautes.

Dans le cas de tâches ayant la même priorité, on donne la main à celle qui a été activée en premier.

Une tâche qui a été préemptée est considérée comme étant la plus ancienne dans la file FIFO des tâches de même priorité, et sera donc la première à en sortir. A linverse, une tâche qui sort de létat « Waiting » est placée comme la première dans la file FIFO des tâches de même priorité, et sera donc la dernière à en sortir.

Pour déterminer la prochaine tâche qui sera exécutée, lordonnanceur suit lalgorithme suivant :

  • recherche de toutes les tâches qui sont dans létat « Ready »
  • à partir de cet ensemble de tâche, lordonnanceur détermine celles qui ont la plus haute priorités
  • parmi cet ensemble de tâches à la priorité la plus haute, lordonnanceur détermine la plus ancienne (celle qui a été activée en premier), et lexécute.


Les interruptions et lordonnanceur

OSEK définit trois niveaux de traitements :

  • les interruptions
  • lordonnanceur
  • les tâches


Les interruptions ont une priorité supérieure aux tâches. Lordonnanceur a une priorité inférieure aux interruptions mais supérieure aux tâches.


Les fonctions servant à traiter les interruptions (ISR : Interrupt Service Routine) existent sous deux formes :

- ISR catégorie 1 : lISR ne fait pas appel aux services de lOS. Ces interruptions sont transparentes pour lOS, sont rapides et ne nécessitent pas de synchronisation avec lOS.

- ISR catégorie 2 : lISR fait appel aux services de lOS, cest-à-dire que le code de linterruption contient des API.


N.B : dans la version 2.1 dOSEK, il existe également une catégorie 3 dISR, qui est une combinaison entre les catégories 1 et 2. Mais cette troisième catégorie a été supprimée dans la version 2.2.

Les évènements

Les évènements représentent, comme les interruptions, des événements externes. Le traitement dun évènement ne seffectue pas dans une ISR mais dans une tâche dans laquelle lévènement a été défini.

Le mécanisme dévènement nest utilisable que pour les tâches étendues et conditionne lentrée ou la sortie de létat « Waiting » de ce type de tâches.

Les évènements ne sont pas des objets indépendants, ils sont rattachés à une tâche étendue, qui est dite « propriétaire » de cet évènement. Un évènement est ainsi identifié par son propriétaire et son nom (ou son masque).

Les évènements peuvent être utilisés comme un moyen de synchronisation entre les tâches ou pour communiquer des informations (binaires) à la tâche étendues auxquelles ils sont rattachés.

Un évènement peut être déclenché aussi bien par une tâche étendue que par une tâche de base. Le déclenchement est réalisé grâce à un service de lOS et peut également être réalisé par des alarmes, des messages ou des ISR. Par contre, la remise à zéro de lévènement ne peut être effectuée que dans la tâche dans laquelle il a été défini.

Alarmes et compteurs

OSEK fournit des objets permettant de traiter des phénomènes récurrents dans le temps. Un tel phénomène pourrait être par exemple lactivation cyclique dune interruption. Ces objets sont les compteurs et les alarmes.

Les compteurs sont destinés à lenregistrement des ticks en provenance dun timer ou dun dispositif émettant des stimuli (par exemple des capteurs). OSEK ne fournit pas dAPI permettant de manipuler directement les compteurs.

Lalarme a pour but de superviser la valeur dune référence (par exemple celle dun compteur). Lalarme se déclenchera quand une certaine valeur de cette référence sera atteinte. Les alarmes sont statiquement associées à un compteur et à une tâche. Plusieurs alarmes peuvent être affectées à un même compteur.

N.B : la norme OSEK impose limplémentation dau moins une alarme.

Si laffectation dune alarme à un compteur et à une tâche est statique, la valeur à laquelle lalarme expire est dynamique et peut donc être changé en cours dexécution.

Une alarme peut être utilisée pour effectuer les actions suivantes :

- activation dune tâche

- déclenchement dun évènement

Gestion des ressources

La gestion des ressources comprend la coordination de laccès aux ressources partagées. Celles-ci peuvent être de lespace mémoire, des composants hardware, des applications ou encore des instances de lOS (par exemple le scheduler).

La gestion des ressources assure que :

- deux tâches ne peuvent pas occuper la même ressource au même instant

- il ne peut pas y avoir dinversion de priorité

- il ne peut pas y avoir dinterblocage

- laccès à une ressource nengendre pas détat « Waiting » pour une tâche

Les phénomènes dinversion de priorité et dinterblocage peuvent être évités grâce au Priority Ceiling Protocol mise en place par OSEK.

Gestion des erreurs

Les routines crochets (hook routines)

OSEK fournit des mécanismes de « crochets » qui permettent à l'utilisateur de dérouter le déroulement normal de lOS de façon à prendre temporairement le contrôle du système.

Les routines crochets sont appelées par lOS et ont une priorité supérieure à toutes les tâches. Elles sont implémentées par le développeur et doivent obligatoirement être implémentées.


Les routines crochets disponibles pour le développeur sont les suivantes :

- StartupHook : utilisé au démarrage de lapplication avant lactivation des tâches

- ShutdownHook : utilisé avant larrêt de lOS

- PreTaskHook : utilisé avant chaque changement de contexte dune tâche

- PostTaskHook : utilisé après chaque changement de contexte dune tâche

- ErrorHook : utilisé lors de détection derreur système

Les différents types derreur

On distingue deux types derreur :

- les « application errors » qui arrivent lorsque lOS na pas pu correctement exécuter lAPI demandée

- les « fatal errors » qui arrivent lorsque lOS na plus la garantie de lintégrité des données internes

Cest grâce à la routine crochet ErrorHook que lutilisateur peut réaliser des actions, quil aura lui-même définies, au moment de larrivée dune erreur. La routine crochet ErrorHook sera appelée si la variable StatusType retournée par une API nest pas égale à « E_OK ».

Classes de conformité

Le système dexploitation doit pouvoir sadapter à différents niveaux de complexité du système logiciel qui peut être limité par les ressources disponibles (type de processeur, taille de mémoire, …). Cest pourquoi OSEK introduit le concept de classes de conformité (conformance classes) dont lobjectif est de proposer un niveau de fonctionnalités croissant pour les systèmes des plus simples aux plus complexes.

OSEK définit quatre niveaux différents :

  • BCC1 : uniquement des tâches de base
        Une seule demande dactivation par tâche
        Une seule tâche par niveau de priorité
  • BCC2 : BCC1 plus :
        Plus dune tâche par niveau de priorité
        Plusieurs demandes dactivation par tâche
  • ECC1 : BCC1 plus des tâches étendues
  • ECC2 : ECC1 plus :
        Plus dune tâche par niveau de priorité
        Plusieurs demandes dactivation par tâche

Séquencement

OSEK permet différents niveaux de séquencement des tâches.

  • Séquencement non préemptif :

Un changement de contexte vers une tâche dun niveau de priorité plus élevé ne peut se faire que par une utilisation explicite des services fournis par le système dexploitation.

  • Séquencement préemptif :

Lexécution dune tâche peut être suspendue pour autoriser lexécution dune tâche de plus haute priorité.

  • Séquencement préemptif mélangé :

Le système autorise la présence de tâches dont lexécution peut ou non être interrompue.

Voir aussi

Articles connexes

Liens externes

Ce document provient de « OSEK/VDX ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article OSEK de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • OSEK — steht für ein industrielles Standardisierungsgremium und bedeutet ausgeschrieben Offene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug . OSEK ist ein Warenzeichen der Firma Continental AG, zuvor bis 2007 der Firma Siemens AG …   Deutsch Wikipedia

  • OSEK — (Offene Systeme und deren Schnittstellen für die Elektronik in Kraftfahrzeugen; English: Open Systems and their Interfaces for the Electronics in Motor Vehicles ) is a standards body that has produced specifications for an embedded operating… …   Wikipedia

  • Osek — Osek …   Deutsch Wikipedia

  • Osek — may refer to several places in the Czech Republic: Osek (Teplice District), town in the Teplice District Osek (Beroun District), village in the Beroun District Osek (Jičín District), village in the Jičín District Osek (Písek District), village in …   Wikipedia

  • OSEK — (Offene Systeme und deren Schnittstellen für die Elektronik in Kraftfahrzeugen), al español: «Sistemas abiertos y sus interfaces para la electrónica en automóviles» , es un estándar que especifica el sistema operativo integrado incluyendo una… …   Wikipedia Español

  • OSEK-OS — ist eine vom OSEK Konsortium verabschiedete Spezifikation für Echtzeitbetriebssysteme für eingebettete Systeme. Übliche Zielplattformen sind 16 und 32 Bit Mikrocontroller für die Automobilindustrie. OSEK OS ist statisch. Alle Betriebsmittel und… …   Deutsch Wikipedia

  • Osek — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sommaire 1 Localités de République tchèque 2 Équipe de foot …   Wikipédia en Français

  • Osek — 1 Original name in latin Osek Name in other language Ossegg State code CZ Continent/City Europe/Prague longitude 50.62115 latitude 13.69274 altitude 315 Population 4975 Date 2012 12 24 2 Original name in latin Osek Name in other language Wosek… …   Cities with a population over 1000 database

  • osèk — éka tudi ósek a m (ȅ ẹ; ọ) nar. 1. osrednje ograjen prostor za živino ob pastirski koči: zapreti živino v osek 2. mn. ograja okrog vodnjaka: Martin je sedel na osekih ob vodnjaku (F. Godina) …   Slovar slovenskega knjižnega jezika

  • Osek — Sp Òsekas Ap Osek L Čekija …   Pasaulio vietovardžiai. Internetinė duomenų bazė

Share the article and excerpts

Direct link
https://fr-academic.com/dic.nsf/frwiki/1251792 Do a right-click on the link above
and select “Copy Link”