Historique
A653
Publication originale du 04/10/1996.
A653-1
Publication du 16/10/2003. L'évolution majeur de cette révision est l'introduction de l'IMA (§1.3.1)
A653-2
Publication du 07/03/2006. Le changement majeur a été la division de la norme en trois parties
- Part1: interface standard
- Part2: interfaces optionelles d'extension
- Part3: procédure de test de conformité
Cette version précise certains points. Le fait que le processus d'initialisation continue à s'exécuter ou pas en mode NORMAL est dépendant de l'implémentation.
Implémentations spécifiques
Le Standard Airbus est un example 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.
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 se doit également d'être compatible des contraintes d'exploitation (maintenance modulaire, conditions de température, de pression, d'hygrométrie, de rayonnement électromagnétique, de vibration...).
- d'une couche de dématérialisation réalisant l'abstraction matérielle de la cible d'exécution(Board support package), qui diffère notablement d'un système d'exploitation classique par la contrainte de partitionnement de toutes les resources matérielles de la plateforme (Mémoire, CPU, entrée/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, de timers et d'horloges précises, de RAM (Mémoire Vive), de ROM(Mémoire morte), et d'entrée 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 MMU (Memory Management Unit) de la cible pour effectuer le partitionnement spatial, c'est-à-dire exclure l'accès mémoire à une partition depuis une autre partition. Ce mécanisme peut être en outre être effectué / complété par un ASIC externe sur le bus microprocesseur / mémoire. Le partitionnement temporel est généralement effectué par des timers matériels 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:
- Gestion de la partition
- Gestion des process
- Gestion du temps
- Gestion de la mémoire
- Gestion des communications inter partition
- Gestion des communications intra partition
- 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 au domaine d'utilisation (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ée nominalement
- NO_ACTION: l'état du système est inchangé par 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 de la configuration courante du système
- INVALID_MODE: le service est incompatible du mode courant du système
- TIMED_OUT: le délai imparti a l'exécution du service a expiré. L'état du système n'a pas été modifié par le service.
La valorisation des paramètres "OUT" est effective si et seulement si le RETURN_CODE est égal à NO_ERROR.
La Partition
La partition est définie par son mode et sa condition de démarrage. Le mode est un énuméré dans:
- 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. Elle utilise ce mode pour effectuer un démarrage "lent", c'est-à-dire pour effectuer tous les tests requis par les analyses "safety".
- WARM_START: la partition est en cours d'initialisation. Elle utilise ce mode pour effectuer un démarrage "rapide", souvent requis en vol.
- NORMAL: l'ordonnancement des process est effectué dans ce mode.
Les services:
- GET_PARTITION_STATUS: retourne le status courant de la partition
- SET_PARTITION_MODE: change le mode courant de la partition
Le passage en mode normal élabore les données suivantes:
- les points de relaxation des process périodiques sont positionnés au début de la prochaine période de la partition (pour synchroniser les process périodiques), en ajoutant de délai éventuellement demandé par le service DELAYED_START
- Les deadline des process sont positionnées.
Les Process
- GET_PROCESS_ID : retourne un iedntifiant unique pour le process dont le nom est fourni en paramètre
- GET_PROCESS_STATUS : retourne l'état du processus dont l'identifiant est en paramètre
- CREATE_PROCESS : créé le processus dont le nom est en paramètre
- SET_PRIORITY : modifie la priorité du processus dont l'identifiant est en paramètre
- SUSPEND_SELF : suspend le processus courant (RUNNING)
- SUSPEND : suspend le processus dont l'identifiant est en paramètre
- RESUME : relaxe le processus dont l'identifiant est en paramètre
- STOP_SELF : termine le processus courant (RUNNING)
- STOP : termine le processus dont l'identifiant est en paramètre
- START : démarre le processus dont l'identifiant est en paramètre
- DELAYED_START : démarre le processus périodique dont l'identifiant est en paramètre, avec un offset temporel
- 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 fourni 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'à son prochain point de relaxation
- GET_TIME : retourne le temps absolu
- REPLENISH : ajoute un budget de temps à la deadline du processus
La Gestion mémoire
cette section est vide. la partition est libre de sa propre gestion mémoire. Aucun service n'est spécifié à cette fin.
Les queues de messages (QUEUING_PORT)
- CREATE_QUEUING_PORT
- SEND_QUEUING_MESSAGE
- RECEIVE_QUEUING_MESSAGE
- GET_QUEUING_PORT_ID
- GET_QUEUING_PORT_STATUS
Les messages échantillonnés inter partition (SAMPLING_PORT)
- 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 (BUFFER)
- CREATE_BUFFER
- SEND_BUFFER
- RECEIVE_BUFFER
- GET_BUFFER_ID
- GET_BUFFER_STATUS
Les messages échantillonnés intra partition (BLACKBOARD)
- CREATE_BLACKBOARD
- DISPLAY_BLACKBOARD
- READ_BLACKBOARD
- CLEAR_BLACKBOARD
- GET_BLACKBOARD_ID
- GET_BLACKBOARD_STATUS
Les évennements (EVENT)
- CREATE_EVENT
- SET_EVENT
- RESET_EVENT
- WAIT_EVENT
- GET_EVENT_ID
- GET_EVENT_STATUS
Les Sémaphores (SEMAPHORE)
- CREATE_SEMAPHORE
- WAIT_SEMAPHORE
- SIGNAL_SEMAPHORE
- GET_SEMAPHORE_ID
- GET_SEMAPHORE_STATUS
L'interface de configuration