Brevet FR2951840A1 — publié le 20110429

La présente invention concerne une unité électronique de commande à noyau temps réel gérant un partitionnement. La présente invention est plus particulièrement destinée à des applications aéronautiques. Parmi celles-ci, il est connu sous l'acronyme FADEC (de l'anglais « full authority digital engine control » ou régulateur moteur numérique à totale autorité) une unité de commande comportant un microcontrôleur intégrant un système logiciel d'exploitation pour exécu- ter des tâches d'applications informatiques. Ces applications peuvent être exécutées en tout ou partie de façon simultanée. Le système d'exploitation incorpore un noyau temps réel (ou RTOS de l'Anglais « Real-Time Operating System ») pour gérer l'exécution des applications et as- surer un routage de données entre deux applications et entre les applications et le matériel. Il est prévu un partitionnement avec des partitions allouées à chaque application pour éviter que les applications ne se perturbent mutuellement lors de leur exécution. Ce partitionne- ment est régi dans le domaine aéronautique par la norme ARINC 653 qui prévoit un partitionnement spatial, qui garantit qu'une application ne peut écrire dans une zone mémoire affectée à une partition d'une autre application, et un partitionnement temporel qui garantit qu'un temps d'exécution sera alloué à chaque application. Ce partitionnement permet d'avoir des applications de fournisseurs différents et / ou de criticité différente. Les noyaux temps réel compatibles avec la norme ARINC 653 sont cependant onéreux et présente l'inconvénient que le partitionnement est purement logiciel et peut être rendu inefficace par une application qui s'exécuterait en-dehors du noyau temps réel. En outre, dans les noyaux multitâches, lorsque l'ordonnanceur du noyau commande le passage d'une pre- mière tâche à une deuxième tâche, le contexte de la première tâche (c'est-à-dire l'ensemble des valeurs d'états du microcontrôleur qui sont nécessaires à son exécution et sont notamment enregistrées dans les registres mémoi- res du microcontrôleur) doit être sauvegardé tandis que le contexte de la deuxième tâche doit être retrouvé et restauré. Les changements de contexte sont ainsi relativement longs et ce d'autant plus que les microcontrôleurs comportent un nombre de registres à sauvegarder de plus en plus important. Les changements de partitions sont tout aussi longs pour les mêmes raisons. Ceci constitue un inconvénient supplémentaire des noyaux multitâches compatibles avec la norme ARINC 653. Un but de l'invention est de fournir une unité de commande offrant un partitionnement spatial et temporel fort. A cet effet, on prévoit, selon l'invention, une unité électronique de commande comprenant un microcontrôleur pourvu d'une mémoire morte contenant un code d'un système logiciel d'exploitation intégrant un noyau temps réel pour exécuter des tâches informatiques, et d'une mémoire dynamique contenant des données variables en relation avec les tâches. La mémoire morte et la mémoire dynamique comportent des zones affectées à des partitions allouées pour l'une au noyau temps réel et pour d'autres chacune à au moins une des tâches. La mémoire morte et la mémoire dynamique sont associées à un bus d'adresses programmé physiquement pour empêcher chaque partition, d'une part, d'écrire dans une autre des zones de la mémoire dy- namique et, d'autre part, d'exécuter une autre des zones de la mémoire morte et le noyau temps réel est associé à une temporisation pour allouer à chaque partition un temps d'exécution. Ainsi, le bus d'adresse est programmé physique- ment de sorte qu'une tâche exécutée dans une partition n'a aucun moyen matériel pour écrire des données ou exécuter du code dans une autre partition que celle qui lui a été allouée. L'échange de données entre partitions ne peut pas matériellement être effectué sans passer par le noyau temps réel via la programmation du bus d'adresse. Le noyau temps réel assure de la sorte l'intégrité des données des partitions autres que celles en cours d'exécution. Le noyau temps réel garantit en outre que chaque tâche pourra s'exécuter en allouant à chacune des tâches une fenêtre temporelle d'exécution. Les tâches peuvent alors s'exécuter de manière concurrente en limitant au maximum le risque d'une perturbation mutuelle de leur exécution. Avantageusement, le noyau temps réel est agencé pour commander une exécution des partitions selon un cycle d'exécution circulaire et, de préférence encore, le cycle d'exécution peut comprendre une même partition plu-sieurs fois. Un tel cycle est simple à gérer. De préférence encore, le cycle d'exécution comprend un intervalle de réserve temporelle. La réserve temporelle permet de rajouter une ou plusieurs tâches de manière simple sans remaniement corn- plet du cycle d'exécution. Selon une première caractéristique particulière-ment intéressante de l'invention, la partition allouée au noyau temps réel contient des pages mémoires allouées chacune à une tâche pour contenir les registres de chaque tâche, le noyau temps réel étant agencé pour gérer un pointeur de tâche destiné à contenir l'adresse de la page de la tâche en cours d'exécution. Ceci permet d'accélérer le changement de registre en évitant la nécessité d'une sauvegarde des registres de la tâche en cours et une restitution des registres de la tâche à exécuter. Ceci permet également d'assurer un partitionnement des registres en obligeant une commande appropriée du pointeur de tâches pour accéder à un regis- tre. Selon une deuxième caractéristique particulière-ment intéressante de l'invention, la partition allouée au noyau temps réel contient une liste de tâches prêtes à être exécutées établie par partition et le noyau temps réel est agencé pour gérer un pointeur de partition pour accéder à la liste des tâches prêtes et, de préférence, la liste des tâches prêtes se présente sous la forme d'une tête de chaînage qui contient les adresses de contextes de la première et de la dernière des tâches prêtes à être exécutées. Ceci permet un changement rapide de partition par la simple mise à jour du pointeur de partition. D'autres caractéristiques et avantages de l'invention ressortiront à la lecture de la description qui suit de modes de réalisation particuliers non limita-tifs de l'invention. 11 sera fait référence aux dessins annexés, parmi lesquels : - la figure 1 est une représentation schématique du partitionnement spatial de la mémoire morte et de la mémoire vive, - la figure 2 est une représentation schématique de l'unité de commande conforme à l'invention montrant en particulier l'organisation du partitionnement de la mé- moire vive, - la figure 3 est une représentation schématique de l'ordonnancement des partitions. L'invention est ici décrite dans une application aéronautique pour la régulation d'un ou plusieurs moteurs d'un aéronef. L'unité de commande est ici du type FADEC et est conforme à la norme ARINC 653. En référence aux figures, l'unité de commande conforme à l'invention est un microcircuit de type SOC (de l'anglais « System On Chip ») comportant le jeu d'instructions d'un microcontrôleur et ses périphériques. L'unité de commande peut également être réalisée sous la forme d'un réseau logique programmable ou FPGA (de l'anglais « Field Programmable Gate Array »). L'unité de commande comprend ainsi un micro-contrôleur 1 pourvu d'une mémoire morte 2 ou ROM (pour « Read Only Memory ») et d'une mémoire vive 3 ou dynamique (également appelée RAM pour « Random Access Memory »). L'unité de commande comprend en outre notamment des moyens non représentés de connexion à des capteurs disposés sur le ou les moteurs et à des instruments de commandes disposés dans le poste de pilotage de l'aéronef. La mémoire morte 2 comporte des zones affectées à des partitions (PO à P3) allouées pour l'une au code d'un système logiciel d'exploitation et pour d'autres au code d'applications ou programmes informatiques comportant des tâches. La mémoire morte 2 est associée à un bus d'adresses programmé physiquement pour que chaque parti- tion ne puisse pas exécuter du code dans une autre des zones de la mémoire morte que celle qui lui a été affectée. Le système logiciel d'exploitation incorpore un noyau temps réel ayant pour fonctions d'assurer l'ordonnancement des tâches et de garantir le respect de contraintes temporelles prédéterminées pour l'exécution des tâches. La partition PO est ainsi allouée au code du noyau temps réel et les autres partitions (ici les partitions Pi à P3) sont allouées chacune au code d'une ou plusieurs tâches (ici les tâches Ti à T6). La mémoire vive 3 comporte des zones affectées à des partitions (PO à P3) allouées pour l'une au noyau temps réel et pour d'autres chacune à au moins une des tâches et est associée à un bus d'adresses programmé phy- siquement pour que chaque partition ne puisse pas écrire dans une autre des zones de la mémoire vive que celle qui lui a été affectée. La partition PO est ainsi allouée aux données et autres variables du noyau temps réel et les autres partitions (ici les partitions P1 à P3) sont al- louées chacune aux données d'une ou plusieurs tâches (ici les tâches Tl à T6). Il est ainsi réalisé un partitionnement spatial mis en oeuvre via un mécanisme d'adressage virtuel géré par un contrôleur mémoire qui est incorporé au micro- contrôleur et qui gère un bus d'adresses et un bus de données (par analogie avec l'adressage virtuel classique, l'adresse programmée correspond à l'adresse virtuelle et l'adresse réelle à l'adresse physique ; voir la figure 1). Des tampons (ou « buffers » ou TLB pour « Translation Lookaside Buffer » dans les microcontrôleurs de type MPC 5554) sont prévus pour programmer l'adresse de translation permettant de passer de l'adresse programmée à l'adresse réelle. Le microcontrôleur gère ainsi quatre tampons pour les deux partitions pouvant s'exécuter à un instant donné : . un tampon pour le code et un tampon pour les données de la partition PO allouée au noyau temps réel ; . un tampon pour le code et un tampon pour les données de la partition PX allouée à la tâche active au- dit instant. Tous les accès aux codes et aux données s'effectuent via les tampons : lorsqu'un tampon est effacé, l'accès à l'adresse physique est impossible. Ainsi, en utilisant seulement quatre tampons, seules les deux partitions désirées (noyau temps réel et tâche applicative sélectionnée) sont accessibles. Les autres partitions sont inaccessibles. De plus, il est possible de donner aux tampons des permissions superviseur et utilisateur de manière à protéger la partition PO (mode superviseur) allouée au noyau temps réel contre des accès non désirés par une partition applicative s'exécutant en mode utilisateur. Le noyau temps réel est en outre agencé pour met- tre en œuvre une temporisation pour allouer à chaque partition P1 à P3 un temps d'exécution. Une temporisation est un multiple d'un cycle de base cadencé par une interruption de l'horloge du microcontrôleur et la tâche activée par cette interruption appelle la routine de gestion du temps du noyau temps réel de sorte que le noyau temps réel reprend le contrôle à chacune de ces interruptions pour décider si l'exécution de la partition en cours doit être suspendue. Le noyau temps réel est ici plus particulièrement agencé pour commander une exécution des parti- tions et donc des tâches selon un cycle d'exécution circulaire. Le cycle d'exécution comprend un intervalle de réserve temporelle R permettant l'ajout de nouvelles partitions en prenant le temps d'exécution de celles-ci à la réserve temporelle. La partition PO allouée au noyau temps réel contient des pages mémoires (PMI à PM6) allouées chacune à une tâche (Tl à T6) pour contenir les registres de chaque tâche, le noyau temps réel étant agencé pour gérer un pointeur de tâche (PT) destiné à contenir l'adresse de la page de la tâche en cours d'exécution. La partition PO allouée au noyau temps réel contient une liste de tâches prêtes à être exécutées établie par partition (LTP1 à LTP3) et le noyau temps réel est agencé pour gérer un pointeur de partition (PP) pour accéder à la liste des tâches prêtes (LTP1 à LTP3). Chaque liste des tâches prêtes (LTP1 à LTP3) se présente sous la forme d'une tête de chaînage qui contient les adresses de contextes de la première et de la dernière des tâches prêtes à être exécutées. Le noyau temps réel maintient à jour la liste des tâches prêtes en fonction de la survenance d'évènements (comme des appels de fonctions ou des interruptions) déclencheurs desdites tâches. En outre, le noyau temps réel tient compte des priorités éventuelles accordées à chaque tâche pour or-donner la liste des tâches prêtes. Au lancement de l'exécution des tâches prêtes de chaque partition, le noyau temps réel déclenche une temporisation et, à la fin de la temporisation, suspend l'exécution de ladite partition pour lancer l'exécution des tâches prêtes de la partition suivante. Le changement de partition se fait par la mise à jour du pointeur de partition. Le changement de contexte préalable à l'exécution d'une nouvelle tâche se fait en introduisant dans le pointeur de tâche PT l'adresse de la page mémoire contenant les registres de la tâche à exécuter. L'invention permet ainsi un fonctionnement multitâche et temps réel du microcontrôleur tout en respectant la norme ARINC 653 en limitant le coût de l'unité de commande. De manière classique, la partition PO allouée au noyau temps réel contient d'autres listes chaînées pour gérer les ressources du noyau temps réel (temporisations, files d'attente...). Bien entendu, l'invention n'est pas limitée aux modes de réalisation décrits mais englobe toute variante entrant dans le champ de l'invention telle que définie par les revendications. 5 En particulier, les partitions peuvent avoir des tailles identiques ou différentes. Le cycle d'exécution peut comprendre une même partition une ou plusieurs fois. L'unité électronique peut avoir une structure différente de celle décrite. Par exemple, la mémoire morte 2 peut également être de type EEPROM (pour « Electrically Erasable Programmable Read Only Memory ») ou NVM (pour « Non Volatile Memory »). REVENDICATIONS1. Unité électronique de commande comprenant un microcontrôleur pourvu d'une mémoire morte contenant un code d'un système logiciel d'exploitation intégrant un noyau temps réel pour exécuter des tâches informatiques, et d'une mémoire dynamique contenant des données variables en relation avec le noyau temps réel et les tâches, les mémoires dynamique et morte comportant des zones af- fectées à des partitions allouées pour l'une au noyau temps réel et pour d'autres chacune à au moins une des tâches et étant associées à un bus d'adresses programmé physiquement pour empêcher chaque partition, d'une part, d'écrire dans une autre des zones de la mémoire dynamique et, d'autre part, d'exécuter une autre des zones de la mémoire morte et le noyau temps réel est associé à une temporisation pour allouer à chaque partition un temps d'exécution. 2. Unité selon la revendication 1, dans laquelle le noyau temps réel est agencé pour commander une exécution des partitions selon un cycle d'exécution circulaire. 3. Unité selon la revendication 2, dans laquelle le cycle d'exécution comprend une même partition plu- sieurs fois. 4. Unité selon la revendication 2, dans laquelle le cycle d'exécution comprend un intervalle de réserve temporelle. 5. Unité selon la revendication 1, dans laquelle la partition allouée au noyau temps réel contient des pages mémoires allouées chacune à une tâche pour contenir les registres de chaque tâche, le noyau temps réel étant agencé pour gérer un pointeur de tâche destiné à contenir l'adresse de la page de la tâche en cours d'exécution. 6. Unité selon la revendication 1, dans laquelle la partition allouée au noyau temps réel contient une liste de tâches prêtes à être exécutées établie par partition et le noyau temps réel est agencé pour gérer un pointeur de partition pour accéder à la liste des tâches prêtes. 7. Unité selon la revendication 6, dans laquelle la liste des tâches prêtes se présente sous la forme d'une tête de chaînage qui contient les adresses de contextes de la première et de la dernière des tâches prêtes à être exécutées. 8. Unité selon la revendication 1, dans laquelle l'unité de commande est un microcircuit incorporant un jeu d'instructions d'un microcontrôleur et de périphéri- ques d'un tel microcontrôleur. 9. Unité selon la revendication 1, dans laquelle le microcontrôleur est un réseau logique programmable.