Accueil🇫🇷Chercher

ARINC 653

ARINC 653 est un standard de partitionnement temporel et spatial de ressources informatiques. Ce standard définit également des interfaces de programmation et de configuration qui permettent d'assurer l'indépendance de l'application vis-à-vis du logiciel et du matériel sous-jacent.

Le principe de partitionnement permet la coexistence sur la même plateforme, de fonctions avioniques de niveaux DO-178B DAL (Design Assurance Level) différents, et permet un processus de qualification incrémentale de ces fonctions, ainsi qu'un processus de ségrégation des fournisseurs de fonctions.

Il définit une API de portabilité pour les logiciels applicatifs avioniques adoptée notamment par les architectures IMA (Integrated Modular Avionics) ou AMI (Avionique modulaire intégrée) en français.

Généralités

Une fonction avionique est réalisée par une décomposition logicielle et matérielle traçable par rapport aux spécifications de cette fonction. Dans le cadre d'une architecture IMA adoptant l'interface A653, cette décomposition est effectuée de la manière suivante:

  • le logiciel applicatif dĂ©composĂ© en une ou plusieurs partitions exĂ©cutĂ©es par une ou plusieurs plateformes dont l'interface est l'A653.
  • une ou plusieurs plateformes IMA composĂ©e d'une interface A653, de son implĂ©mentation logicielle et matĂ©rielle.

Historique

A653

Publication originale du 04/10/1996.

A653-1

Publication du 16/10/2003. L'évolution majeure de cette révision est l'introduction de l'IMA (§1.3.1)

A653-2

Publication du 07/03/2006. Le changement majeur est la division de la norme en trois parties :

  • Partie 1 : interface standard.
  • Partie 2 : interfaces optionnelles d'extension.
  • Partie 3 : procĂ©dure de test de conformitĂ©.

Cette version précise certains points. Le fait que le processus d'initialisation continue en mode NORMAL ou pas dépend de l'implémentation.

Implémentations spécifiques

Le standard Airbus est un exemple de standard industriel né en 2001/2002, entre les publications A653 et A653-1, dans le cadre des premiers développements IMA sur le programme A380. La publication A653-1 s'inspire largement du standard Airbus. La portabilité d'une application n'est donc que partielle entre ce standard industriel et la norme A653.

Logiciel applicatif

Chaque partition a son propre espace mémoire et temporel, la ségrégation étant assurée par le système d'exploitation. Au sein de chaque partition, le multi-tâches est autorisé. Le langage d'implémentation recommandé par la norme est Ada, bien que le C soit également mentionné. Un simple fichier d'interface des services est fourni en annexe.

La portabilité de l'application est assurée par l'utilisation stricte des services de l'API standard, et ne doit en aucun cas reposer sur des comportements liés à l'implémentation matérielle et logicielle de la plateforme.

L'initialisation

L'initialisation de la partition A653 est fondamentale. Elle a pour objectif la création des ressources, la gestion des modes de démarrage et des pannes (avec le Error Handler).

La création des ressources (PROCESS, EVENT, SEMAPHORE…) est effectuée par l'appel des services CREATE_..... L'appel de ces services vérifie l'existence et la disponibilité des ressources demandées avant l'attribution d'un handler ou identifiant utilisable par l'application.

L'initialisation est effectuée au sein d'un processus pourvu d'une pile, et que l'on peut assimiler au "main" d'une application native. Ce processus se termine par l'appel du service SET_PARTITION_MODE.

L'A653-2 précise que l'implémentation de la plateforme peut laisser le processus s'exécuter après l'appel de ce service, mais l'application ne doit en aucun cas dépendre de ce point pour garantir sa portabilité.

Le gestionnaire d'erreurs (Error Handler)

Le gestionnaire d'erreurs est créé par l'appel du service CREATE_ERROR_HANDLER dans la phase d'initialisation de la partition.

Dès lors que le gestionnaire d'erreurs a été créé avec succès, il est appelé quand une exception se produit.

Le gestionnaire d'erreurs est un processus non préemptable. Il peut être vu comme le processus de plus haute priorité.

Lorsqu'un événement (exception) asynchrone (interruption matérielle, date d'échéance de processus) ou synchrone (violation de segment mémoire) est détecté par la plateforme A653, le gestionnaire d'erreurs préempte le processus en cours d'exécution.

Ce processus est censé traiter la cause de l'exception par exemple stopper le processus fautif, envoyer un message de maintenance.

Lorsque le gestionnaire d'erreurs se termine par l'appel du service STOP_SELF, l'ordonnanceur est appelé et élit le processus READY le plus prioritaire.

La norme A653 ne précise pas de comportement dans le cas où le gestionnaire d'erreurs ne traite pas la cause de l'exception. Une implémentation possible de l'A653 est de rappeler immédiatement le gestionnaire d'erreurs, ce qui mènerait à une boucle infinie entre le processus fautif et le gestionnaire d'erreurs.

Le gestionnaire d'erreurs dispose du service GET_ERROR_STATUS pour obtenir des informations sur la source de l'exception et du contexte d'apparition (compteur de programme, identifiant de processus).

Le gestionnaire d'erreurs joue un rôle particulier avec le processus d'initialisation. Le comportement opérationnel d'une partition avionique dépend beaucoup de la conception de ce processus.

La gestion de mode

La partition dispose d'un attribut de mode qui prend sa valeur parmi :

  • COLD_START
  • WARM_START
  • NORMAL
  • IDLE

Dans les modes COLD_START et WARM_START, le processus d'initialisation seul s'exécute jusqu'à sa fin.

En mode NORMAL, le processus d'initialisation est arrêté et les autres processus sont élus par l'ordonnanceur selon la priorité de chacun.

En mode IDLE, aucun processus n'est en cours d'exécution. En pratique, l'implémentation peut être d'exécuter un processus caché de priorité minimale effectuant une boucle infinie.

Le service SET_PARTITION_MODE permet de passer d'un mode à l'autre. Ce service peut être appelé par n'importe quel processus.

Le mode IDLE est le seul mode irréversible pour la partition. Il faut un événement externe, comme le redémarrage de la plateforme, peut faire sortir la partition de ce mode.

Les processus ou PROCESS

Une partition comprend au moins un processus. Un processus est une unité logicielle qui s'exécute en concurrence avec les autres processus de la partition. Un processus dispose d'attributs statiques et dynamiques.

Les attributs statiques sont :

  • Le nom
  • Le point d'entrĂ©e
  • La taille de la pile
  • La prioritĂ© de base
  • La pĂ©riode (une valeur particulière est utilisĂ©e pour APERIODIC)
  • La capacitĂ© temporelle
  • Le type de contrĂ´le d'Ă©chĂ©ance (matĂ©riel par interruption timer ou logiciel par polling)

Les attributs dynamiques sont :

  • La prioritĂ© courante
  • La date d'Ă©chĂ©ance (DEADLINE)
  • L'Ă©tat du processus

Le processus prend l'un des Ă©tats :

  • DORMANT : arrĂŞtĂ©
  • READY : prĂ©sent dans la liste des processus Ă©ligibles pour l'ordonnancement
  • WAITING : en attente, absent de la liste des processus Ă©ligibles pour l'ordonnancement
  • RUNNING : en cours d'exĂ©cution

L'état WAITING dispose de sous-états qui précisent la raison de mise en attente :

  • attente sur suspension
  • attente d'une ressource
  • attente du mode NORMAL (en mode COLD_START ou WARM_START)
  • attente de la pĂ©riode suivante…

L'ordonnancement des processus est préemptif à priorité fixe. L'ordonnanceur est déclenché par interruption matérielle (timer) ou par appel de services de l'API. L'ordonnanceur dispose de la liste de processus READY, examine leur priorité courante et élit le processus le plus prioritaire qui passe à l'état RUNNING. Le processus précédemment à l'état RUNNING passe à l'état READY.

L'utilisation des services

Certains services demandent des précautions d'usage :

SUSPEND et RESUME : ces services permettent de suspendre et reprendre l'exécution d'un processus P2 depuis un processus P1. Si le processus P1 s'arrête, le processus P2 reste suspendu indéfiniment.

STOP : si un processus obtient une ressource, puis est stoppé par un autre processus, la ressource reste inaccessible indéfiniment. Il n'est pas recommandé à l'implémentation de ce service, de libérer les ressources acquises par le processus arrêté, car elles sont dans un état indéterminé.

La plateforme

La plateforme est composée :

  • d'une cible pourvue de ressources matĂ©rielles permettant de rendre des services dĂ©terministes. En particulier, le dĂ©terminisme temporel d'exĂ©cution des instructions et d'interruption est nommĂ© temps rĂ©el. La cible doit satisfaire les contraintes d'exploitation : maintenance modulaire, conditions de tempĂ©rature, de pression, d'hygromĂ©trie, de rayonnement Ă©lectromagnĂ©tique, de vibration…
  • d'une couche d'abstraction matĂ©rielle de la cible d'exĂ©cution (board support package), qui diffère d'un système d'exploitation classique par la contrainte de partitionnement de toutes les ressources matĂ©rielles de la plateforme (mĂ©moire, microprocesseur, pĂ©riphĂ©riques d'entrĂ©es/sorties).
  • de l'implĂ©mentation des services de la norme A653
  • d'une interface de configuration de cette plateforme et du domaine d'utilisation logiciel associĂ©
  • d'outils embarquĂ©s ou non, pour rĂ©aliser les exigences d'instrumentation, de configuration, de maintenance, de vĂ©rification de dĂ©terminisme.

La cible

La cible est généralement composée d'un microprocesseur, d'horloges de précision, de mémoire vive, de mémoire morte, et d'entrées-sorties.

La couche d'abstraction matérielle

Elle fournit les services de bas niveau pour partitionner les ressources de la cible.

Elle utilise généralement les services de la MMU (memory management unit) de la cible pour effectuer le partitionnement spatial, c'est-à-dire exclure l'accès à la mémoire d'une partition depuis une autre partition. Ce mécanisme peut en outre être effectué ou complété par un ASIC externe sur le bus reliant le microprocesseur à la mémoire.

Le partitionnement temporel est généralement effectué par des horloges matérielles internes au microprocesseur ou dans un ASIC externe piloté par un oscillateur à quartz précis. Le séquencement temporel des partitions est configuré statiquement.

Les drivers permettent l'abstraction de l'interface des entrées-sorties avioniques : bus A429, bus AFDX, USB, CAN (Controller area network), entrées-sorties numériques et analogiques, mémoire non volatile.

Les services

Les services sont répartis en 7 catégories :

  1. Gestion de la partition
  2. Gestion des processus
  3. Gestion du temps
  4. Gestion de la mémoire
  5. Gestion des communications inter-partition
  6. Gestion des communications intra-partition
  7. Gestion des pannes

Chaque catégorie comprend au moins un service de création de ressource. Son implémentation peut être statique ou dynamique. Si elle est dynamique, l'implémentation devra s'assurer de la cohérence avec le domaine d'utilisation comme la disponibilité des ressources physiques…

L'ensemble des services retourne un paramètre RETURN_CODE pointé en cas d'exception. Le type énuméré RETURN_CODE prend les valeurs suivantes :

  • NO_ERROR : requĂŞte valide et le service est effectuĂ© nominalement.
  • NO_ACTION : l'Ă©tat du système est inchangĂ© après l'appel du service.
  • NOT_AVAILABLE : le service est temporairement indisponible.
  • INVALID_PARAM : au moins un paramètre du service est invalide.
  • INVALID_CONFIG : au moins un paramètre du service est incompatible avec la configuration courante de la partition.
  • INVALID_MODE : le service est incompatible avec le mode courant de la partition.
  • TIMED_OUT : le dĂ©lai imparti Ă  l'exĂ©cution du service a expirĂ©. L'Ă©tat du système n'a pas Ă©tĂ© modifiĂ©.

Les paramètres OUT sont valides si et seulement si RETURN_CODE vaut NO_ERROR.

La partition

La partition est définie par son mode et sa condition de démarrage.

Le mode peut prendre les valeurs suivantes :

  • IDLE : la partition est arrĂŞtĂ©e. Aucun process n'est exĂ©cutĂ©. Une implĂ©mentation classique est une boucle infinie, attendant une interruption de changement de partition ou un redĂ©marrage matĂ©riel.
  • COLD_START : la partition est en cours d'initialisation. Le dĂ©marrage est ralenti par les tests des analyses safety.
  • WARM_START : la partition est en cours d'initialisation. Le dĂ©marrage est rapide, souvent pendant le vol.
  • NORMAL : l'ordonnancement des processus se dĂ©roule normalement.

Les services :

  • GET_PARTITION_STATUS : retourne le statut courant de la partition.
  • SET_PARTITION_MODE : change le mode courant de la partition.

Le passage en mode NORMAL positionne :

  • Les pĂ©riodes des processus pĂ©riodiques Ă  la prochaine pĂ©riode de la partition (pour les synchroniser), en ajoutant un dĂ©lai Ă©ventuel avec le service DELAYED_START.
  • Les dates d'Ă©chĂ©ance des processus.

Les processus

  • GET_PROCESS_ID : retourne l'identifiant unique d'un process existant d'après son nom.
  • GET_PROCESS_STATUS : retourne l'Ă©tat d'un processus existant d'après son identifiant.
  • CREATE_PROCESS : crĂ©e un processus dont le nom est passĂ© en paramètre.
  • SET_PRIORITY : modifie la prioritĂ© d'un processus existant d'après son identifiant.
  • SUSPEND_SELF : suspend le processus courant (RUNNING).
  • SUSPEND : suspend un processus existant d'après son identifiant.
  • RESUME : reprend l'exĂ©cution d'un processus existant d'après son identifiant.
  • STOP_SELF : termine le processus courant (RUNNING).
  • STOP : termine un processus existant d'après son identifiant.
  • START : dĂ©marre le processus d'après son identifiant.
  • DELAYED_START : dĂ©marre un processus pĂ©riodique d'après son identifiant, après un dĂ©lai.
  • LOCK_PREEMPTION : verrouille la prĂ©emption pour protĂ©ger une section critique.
  • UNLOCK_PREEMPTION : dĂ©verrouille la prĂ©emption.
  • GET_MY_ID : retourne l'identifiant unique du processus dont le nom est passĂ© en paramètre.

La gestion du temps

  • TIMED_WAIT : met en attente le processus courant pendant un temps donnĂ©.
  • PERIODIC_WAIT : met en attente le processus pĂ©riodique jusqu'Ă  la prochaine pĂ©riode.
  • GET_TIME : retourne le temps en valeur absolue.
  • REPLENISH : retarde la date d'Ă©chĂ©ance du processus d'un dĂ©lai supplĂ©mentaire.

La gestion mémoire

La partition est libre de gérer sa mémoire. Aucun service n'est spécifié à cette fin.

Les queues de messages

  • CREATE_QUEUING_PORT
  • SEND_QUEUING_MESSAGE
  • RECEIVE_QUEUING_MESSAGE
  • GET_QUEUING_PORT_ID
  • GET_QUEUING_PORT_STATUS

Les messages échantillonnés inter-partition

  • CREATE_SAMPLING_PORT
  • WRITE_SAMPLING_MESSAGE
  • READ_SAMPLING_MESSAGE
  • GET_SAMPLING_PORT_ID
  • GET_SAMPLING_PORT_STATUS

La gestion des pannes (health monitoring)

  • REPORT_APPLICATION_MESSAGE
  • CREATE_ERROR_HANDLER
  • GET_ERROR_STATUS
  • RAISE_APPLICATION_ERROR

Les queues de messages intra-partition

  • CREATE_BUFFER
  • SEND_BUFFER
  • RECEIVE_BUFFER
  • GET_BUFFER_ID
  • GET_BUFFER_STATUS

Les messages échantillonnés intra-partition

  • CREATE_BLACKBOARD
  • DISPLAY_BLACKBOARD
  • READ_BLACKBOARD
  • CLEAR_BLACKBOARD
  • GET_BLACKBOARD_ID
  • GET_BLACKBOARD_STATUS

Les événements

  • CREATE_EVENT
  • SET_EVENT
  • RESET_EVENT
  • WAIT_EVENT
  • GET_EVENT_ID
  • GET_EVENT_STATUS

Les sémaphores

  • CREATE_SEMAPHORE
  • WAIT_SEMAPHORE
  • SIGNAL_SEMAPHORE
  • GET_SEMAPHORE_ID
  • GET_SEMAPHORE_STATUS

Références

Voir Ă©galement

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.