FR 2879318 A1 20060616 FR 0413359 A 20041215 PARTAGE DE L'ACTIVITE D'UN PROCESSEUR ENTRE DEUX SYSTEMES D'EXPLOITATION La présente invention concerne un procédé de partage de l'activité d'un processeur entre deux systèmes d'exploitation. Dans le jargon de l'Homme du métier, elle concerne une gestion du temps de CPU ( Computer Processing Unit ) qui affecté alternativement à deux systèmes d'exploitation associés dans une même unité informatique. Elle concerne aussi une unité informatique adaptée pour mettre en oeuvre un tel procédé. Plus particulièrement, l'invention est adaptée au cas où l'un des systèmes d'exploitation, aussi appelés noyaux ou kernels , est un système à contrainte de temps réel préemptif et à priorité fixe. Lorsqu'un processeur exécute des codes programmés, des interruptions de cette exécution peuvent être commandées pour exécuter des opérations prioritaires. De telles opérations prioritaires sont, par exemple, l'inscription de données produites par un périphérique dans une mémoire. Une interruption est alors requise, et, lorsqu'elle est effective, l'opération prioritaire est exécutée, puis l'exécution des codes est reprise. Pour certaines opérations, l'interruption doit être effective très rapidement après que la requête a été produite. Autrement dit, l'exécution de l'opération ne peut être différée. Lorsqu'une telle exigence se rapporte à des opérations exécutées dans le cadre d'un système d'exploitation, celui-ci est dit à contrainte de temps réel. Dans la suite, un système d'exploitation à contrainte de temps réel préemptif et à priorité fixe est désigné plus simplement par noyau temps réel. Les applications logicielles qui sont exécutées dans le cadre d'un noyau temps réel sont préalablement analysées pour identifier leurs profils de contrainte de temps réel. Elles sont alors découpées en tâches auxquelles sont associées des priorités d'exécution fixes. Les priorités d'exécution des tâches sont ajustées pour respecter les contraintes de temps réel de l'ensemble des applications logicielles du noyau temps réel. En plus du noyau temps réel, le processeur est associé à un autre système d'exploitation. Cet autre système d'exploitation peut constituer une interface avec un utilisateur qui commande l'exécution d'une application externe, dont les caractéristiques ne sont pas connues initialement. Un tel système d'exploitation est dit ouvert. Des applications logicielles à fortes contraintes de temps réel sont plutôt destinées à être mises en oeuvre dans le cadre d'un noyau temps réel. Néanmoins, il est connu de combiner des applications à fortes contraintes de temps réel avec des applications externes d'origines diverses dans le cadre d'un système d'exploitation ouvert unique. Mais, des dysfonctionnements en résultent, qui surviennent lors de l'exécution des applications à fortes contraintes de temps réel. Inversement, aucun système d'exploitation à contrainte de temps réel n'est disponible à ce jour, qui offre un espace d'exécution suffisant pour des applications qui sont exécutées usuellement dans le cadre de systèmes d'exploitation ouverts. Par ailleurs, il est aussi connu de combiner un système d'exploitation ouvert avec un noyau temps réel, en ce qui concerne l'activité d'un processeur unique, en programmant le système ouvert en tant que tâche de fond du noyau temps réel. Une tâche de fond est associée à une priorité la plus basse par rapport aux priorités associées à d'autres tâches. La figure 1 illustre des séquences d'activité du processeur qui résultent d'une telle programmation. Sur cette figure, l'axe horizontal correspond à une coordonnée temporelle, notée t, et l'axe vertical repère la priorité de chaque opération exécutée par le processeur. Toutes les tâches du noyau temps réel autres que le système d'exploitation ouvert (noté OS ouvert, OS pour Operating System en anglais) sont exécutées prioritairement par le processeur. L'exécution du système ouvert est suspendue quand survient une interruption relative à une autre tâche du noyau temps réel, puis est reprise lorsque toutes les autres tâches en attente ont été exécutées. Une telle gestion de l'activité du processeur est de nature logicielle, étant donné qu'elle résulte de l'exécution du noyau temps réel du processeur. Un inconvénient de ce mode de gestion logicielle de l'activité du processeur provient du fait que les codes du système d'exploitation ouvert et du noyau temps réel sont imbriqués l'un dans l'autre au niveau du contrôleur d'interruptions qui commande l'exécution d'opérations prioritaires par le processeur. En effet, dans une telle configuration, le contrôleur d'interruptions affecte des interruptions à la fois au système ouvert et au noyau temps réel. Un but de la présente invention est donc d'associer un système d'exploitation ouvert et un noyau temps réel à un processeur unique, en évitant les inconvénients cités ci-dessus. Pour cela, l'invention propose un procédé de partage de l'activité d'un processeur entre un système à contrainte de temps réel préemptif et à priorité fixe d'une part, et un système d'exploitation ouvert d'autre part, suivant lequel des interruptions d'un fonctionnement dudit processeur pour entreprendre des opérations selon le noyau à contrainte de temps réel sont requises par une ligne d'interruptions prioritaires, et des interruptions pour entreprendre des opérations selon le système d'exploitation ouvert sont requises par une ligne d'interruptions nonprioritaires. En outre, un fonctionnement du processeur selon le noyau à contrainte de temps réel est constitué par une succession de tâches distinctes. Autrement dit, le noyau temps réel ne comporte pas de tâche de fond. Si le séquenceur de tâches du noyau temps réel comporte initialement une tâche de fond programmée, celle-ci doit donc être supprimée. Le noyau temps réel ressort alors de sa boucle d'exécution quand toutes les tâches en attente de disponibilité du processeur ont été exécutées. Le processeur est alors disponible pour exécuter des opérations du système d'exploitation ouvert, ou des applications logicielles mises en oeuvre dans le cadre de celui-ci. Cette caractéristique de l'invention est donc de nature logicielle. L'autre caractéristique de l'invention est de nature matérielle ( hardware en anglais ). Deux lignes distinctes sont prévues, pour transmettre des requêtes d'interruptions du fonctionnement du processeur. Ces deux lignes sont distinguées par le niveau de priorité des interruptions qui sont requises par chacune d'elles. Ainsi, si une nouvelle interruption est requise par la ligne dédiée aux interruptions prioritaires alors qu'une interruption antérieure, qui a été requise par la ligne d'interruptions non-prioritaires, est en cours de traitement, le processeur suspend le traitement de l'interruption antérieure et entreprend de traiter la nouvelle interruption. L'invention propose donc une architecture à la fois logicielle et matérielle, grâce à laquelle les codes respectifs du noyau temps réel et du système d'exploitation ouvert sont totalement séparés, y compris au niveau du contrôleur d'interruptions. Le noyau temps réel et le système ouvert sont donc réellement indépendants l'un de l'autre, et les fortes contraintes de temps réel des applications mises en oeuvre dans le cadre du noyau temps réel peuvent être satisfaites. L'invention propose aussi une unité informatique qui comprend un processeur et un contrôleur d'interruptions d'un fonctionnement du processeur. L'unité est configurée pour fonctionner alternativement selon un noyau à contrainte de temps réel préemptif et à priorité fixe, et selon un système d'exploitation ouvert. Un fonctionnement du processeur selon le noyau à contrainte de temps réel est constitué par une succession de tâches distinctes. En outre, le contrôleur d'interruptions est adapté pour requérir des interruptions pour entreprendre des opérations selon le noyau à contrainte de temps réel par une ligne d'interruptions prioritaires, et pour requérir des interruptions pour entreprendre des opérations selon le système d'exploitation ouvert par une ligne d'interruptions non-prioritaires. L'invention peut être exprimée en termes de contextes d'exécution respectifs du noyau temps réel et du système d'exploitation ouvert. De façon connue, des ressources matérielles spécifiques sont nécessaires pour permettre à un processeur de fonctionner selon un système d'exploitation ouvert. Pour cela, un mode utilisateur est défini, qui est associé au contexte d'exécution des applications externes. Il permet notamment d'exécuter de telles applications alors que leurs caractéristiques ne sont pas connues initialement. Un noyau temps réel ne nécessite pas de mode utilisateur car, 3o contrairement à un système d'exploitation ouvert, il ne prend en charge que des applications dont les caractéristiques sont connues préalablement et qui sont conçues spécialement pour un environnement d'exécution déterminé. Un noyau temps réel peut alors être exécuté intégralement dans un contexte d'exécution réduit, par rapport à celui d'un système ouvert. Un mode associé à un tel contexte est dit mode privilégié , car il procure par ailleurs des droits supérieurs à ceux d'un mode utilisateur. En effet, les droits définis dans un mode utilisateur sont restreints, afin d'éviter que des programmes chargés par un utilisateur ne puissent corrompre le système. Le mode d'exécution des interruptions est un mode privilégié. Etant donné que l'invention utilise une architecture à deux lignes d'interruptions distinguées par des niveaux de priorité, deux modes privilégiés 10 sont disponibles: un pour chaque ligne d'interruptions. Selon l'invention, le contexte d'exécution du noyau temps réel est l'espace privilégié de la demande d'interruption qui est associée au système d'exploitation ouvert. Autrement dit, le noyau temps réel peut être considéré comme une interruption du système ouvert. Néanmoins, les codes respectifs du système ouvert et du noyau temps réel qui sont traités dans le contrôleur d'interruptions restent bien séparés. D'autres particularités et avantages de la présente invention apparaîtront dans la description ci-après d'un exemple de mise en oeuvre non limitatif, en référence aux dessins annexés, dans lesquels: - la figure 1, déjà décrite, illustre des séquences d'activité d'un processeur contrôlées selon l'art antérieur; - la figure 2 illustre une architecture d'unité informatique adaptée pour mettre en oeuvre de l'invention; - la figure 3 est un diagramme d'un contrôleur d'interruptions d'une unité 25 informatique conforme à la figure 2; et - la figure 4 illustre des séquences d'activité d'un processeur contrôlées selon l'invention. La figure 2 représente schématiquement les deux niveaux matériel, noté HW pour hardware , et logiciel, noté SW pour software , d'une unité 30 informatique. Le niveau matériel HW comprend un coeur de système 1, qui inclut un processeur 2, noté CPU, et un gestionnaire d'interruptions 3, noté IT_HANDLER. Le processeur 2 est connecté à une mémoire à accès aléatoire 8, notée RAM, de façon à permettre un accès en lecture ou en écriture au contenu de la mémoire. Des lignes primaires de requêtes d'interruptions 4, notées ITO, IT1,..., ITn, n étant un nombre entier pouvant être égal à 16 par exemple, sont issues de divers composants du système. Chaque ligne 4 transporte des requêtes d'interruptions du fonctionnement du processeur 2 produites par le composant correspondant, et déclenchées par des évènements particuliers. Les lignes 4 sont indépendantes entre elles. De façon connue, certaines des lignes 4 peuvent provenir de périphériques de l'unité informatique ou du processeur 2 lui-même. Les lignes 4 sont connectées à des entrées respectives d'un contrôleur d'interruptions 5, noté IT_CTRL. En remplissant une fonction de multiplexage, le contrôleur 5 transmet chaque requête d'interruption reçue par l'une des lignes primaires 4 au gestionnaire 3, via une de deux lignes intermédiaires 6 et 7 qui relient le contrôleur 5 au gestionnaire 3. Un tel coeur de système est décrit dans les documentations relatives aux processeurs des familles ARM7 ou ARM9, fabriqués par la société ARM ( Advanced Risk Machine ). La ligne 6 est désignée par FIQ, pour Fast Interruption reQuest en anglais, et la ligne 7 est désignée par IRQ, pour Interruption ReQuest . Les interruptions requises par la ligne 6 (FIQ) sont prioritaires par rapport à celles requises par la ligne 7 (IRQ). Pour cette raison, les interruptions requises par la ligne 7 sont dites non-prioritaires. Le contrôleur 5 répartit donc les requêtes d'interruptions reçues par les lignes 4 en deux groupes, qui correspondent à l'utilisation de la ligne 6 ou de la ligne 7 pour transmettre chacune de ces requêtes au gestionnaire 3. Le gestionnaire 3 traite alors une requête d'interruption transmise par la ligne FIQ de façon prioritaire par rapport à une requête d'interruption transmise par la ligne IRQ. Il séquence alors le fonctionnement du processeur 2 en fonction des requêtes reçues. De façon connue, chaque interruption possède un mode d'exécution dédié au sein du processeur 2, qui utilise des registres de travail qui lui sont propres (pointeur de pile, statut d'exécution,etc). Par conséquent, le contrôleur d'interruptions 5 route chaque requête d'interruption reçue par l'une des lignes 4 vers la ligne 6 ou vers la ligne 7. Il est avantageusement programmable. Il est alors programmé pour sélectionner la ligne 6 ou la ligne 7 pour transmettre chaque requête d'interruption, en fonction d'une analyse de la requête. Une telle analyse peut être prendre en compte, notamment, des indicateurs lus dans la requête ainsi que la ligne primaire ITO, IT1,..., ITn qui transmet la requête parmi l'ensemble des lignes 4. Le contrôleur 5 possède aussi les fonctions usuelles de masquage/démasquage de chaque ligne d'interruptions primaire 4. Un registre de statut permet en outre de connaître l'état de toutes les lignes 4. Conformément à la figure 3, le contrôleur d'interruptions 5 comprend n modules de masquage/démasquage (EN/DIS pour enabling- disabling modules ) 100, 101,..., 10n et n sélecteurs 110, 111,..., 11n respectivement connectés aux sorties des modules 100, 101,..., 10n. Chaque ligne primaire de requêtes d'interruptions 4 est connectée à l'entrée d'un des modules 100, 101,..., 10n. Deux sorties de chacun des sélecteurs 110, 111,..., 11n sont connectées respectivement à une entrée d'un premier et d'un second opérateurs & , référencés 160 et 170. Les sorties des opérateurs 160 et 170 sont respectivement connectées aux lignes intermédiaires 6 et 7. Un pilote programmable 200 (noté IT_DRIVER sur la figure 3) est agencé pour contrôler les états des modules 100, 101,..., 10n et des sélecteurs 110, 111,... , 11 n de façon à transmettre chaque requête d'interruption en fonction d'une analyse de celle-ci. Le pilote 200 produit aussi une information d'état de chaque ligne 4 (ITO_status, IT1_status,..., ITn_status), ainsi qu'une information d'état des lignes 6 (FIQ_status) et 7 (IRQ_status) au gestionnaire 3. De retour à la figure 2, le niveau logiciel SW comprend un noyau temps 30 réel 10 et un système d'exploitation ouvert 20, noté OS ouvert. Le noyau temps réel 10 et le système ouvert 20 sont disjoints: ils correspondent à deux fonctionnements indépendants du processeur 2. De façon connue, le noyau temps réel 10 a pour fonction de commander des exécutions successives, par le processeur 2, de tâches diverses telles que, par exemple, une tâche de transmission GSM ou une sortie de données audio. Différentes tâches exécutées dans le cadre du noyau temps réel 10 sont référencées 11, 12, 13,... sur la figure 2 et notées TSK1, TSK2, TSK3,.... (TSK pour task en anglais). Pour mettre en oeuvre l'invention, le noyau temps réel 10 ne possède pas de tâche de fond. Le système d'exploitation ouvert 20 peut être un système LINUX, WINDOWS ou SYMBIAN, par exemple. La ligne d'interruptions 6 est utilisée pour requérir des interruptions afin d'exécuter des opérations dans le cadre du noyau temps réel 10. La ligne d'interruptions 7 est utilisée pour requérir des interruptions afin d'exécuter des opérations dans le cadre du système d'exploitation ouvert 20. Par ailleurs, il peut être nécessaire de communiquer des données entre le noyau temps réel 10 et le système d'exploitation ouvert 20. Notamment, des applications respectivement mises en oeuvre dans le cadre du noyau temps réel 10 et du système ouvert 20 peuvent nécessiter d'échanger ou de partager des informations entre elles. Pour cela, une portion de la mémoire 8 peut être réservée pour former un espace de boîte aux lettres. Une telle portion de mémoire est située à une adresse fixe qui est connue des deux systèmes d'exploitation 10 et 20. En outre, deux lignes d'interruptions 4 sont utilisées pour signaler à chaque système d'exploitation 10, 20 que des données qui lui sont destinées sont inscrites dans la portion de mémoire 8. Sur la figure 2, la ligne ITn-1 est réservée pour transmettre des requêtes d'interruptions lorsque des données sont produites dans le cadre du système ouvert 20, et destinées à être exploitées dans le cadre du noyau temps réel 10. De façon analogue, la ligne ITn est réservée pour des requêtes d'interruptions qui indiquent que des données sont produites dans le cadre du noyau temps réel 10 et destinées à 3o être exploitées dans le cadre du système ouvert 20. Ces lignes d'interruptions ITn-1 et ITn sont respectivement contrôlées par le système ouvert 20 et par le noyau temps réel 10. En particulier, les requêtes transmises par ces lignes sont produites sensiblement en même temps que les données sont inscrites dans la portion de mémoire 8. Le contrôleur d'interruptions 5 route alors les requêtes d'interruptions reçues par la ligne ITn-1 vers la ligne 6 (FIQ), et les requêtes reçues par la ligne ITn vers la ligne 7 (FIQ). De cette façon, lorsque des données nouvelles sont produites dans le cadre du système d'exploitation ouvert 20 à destination du noyau temps réel 10, une activité du processeur 2 qui est en cours est suspendue, si elle est associée à une priorité inférieure. Le processeur 2 exploite alors immédiatement les nouvelles données dans le cadre du noyau temps réel 10, prioritairement par rapport à d'autres interruptions éventuellement requises par la ligne 7. A l'inverse, lorsque des données sont produites dans le cadre du noyau temps réel 10 à destination du système ouvert 20, le processeur 2 exécute d'abord les opérations pour lesquelles des interruptions ont été requises par la ligne 6. Les données sont lues ensuite, lors d'une exécution de codes du système d'exploitation 20, ou d'une application mise en oeuvre dans le cadre de celui-ci. Eventuellement, deux portions distinctes de la mémoire 8 peuvent être consacrées aux données produites respectivement dans le cadre de chacun des systèmes d'exploitation 10 et 20. En référence à la figure 4, on décrit maintenant une séquence d'activité d'un processeur qui illustre la combinaison entre le partage de temps de CPU qui est obtenu selon l'invention, et la gestion des tâches qui est effectuée par le séquenceur du noyau temps réel. On suppose que l'activité du processeur 2 qui est en cours est exécutée dans le cadre du système ouvert 20. Une interruption survient, qui est requise par la ligne prioritaire 6. On suppose en outre que l'interruption génère un postage de message vers l'une des tâches du noyau temps réel 10 (tâche X). A la fin du traitement de l'interruption, une procédure spécifique du noyau temps réel 10 consiste à détecter si des tâches sont en attente de traitement par le processeur 2. La tâche X est ainsi identifiée. Elle est alors exécutée sous le contrôle du séquenceur de tâches du noyau temps réel 10. En fin d'exécution de la tâche X, le processeur 2 revient à un fonctionnement dans le cadre du système ouvert 20. Lors d'une opération exécutée dans le cadre du système ouvert 20, le processeur 2 peut inscrire dans la mémoire 8 des données destinées à être exploitées dans le cadre du noyau temps réel 10. Il produit alors simultanément une requête d'interruption pour initier une séquence de fonctionnement du processeur 2 qui relève du noyau temps réel 10. Cette requête est décodée par le contrôleur d'interruptions 5 et transmise par la ligne prioritaire 6. o L'activité du processeur 2 devient régie par le noyau temps réel 10. Les données inscrites dans la mémoire 8 sont alors lues et exploitées. REVENDICATIONS 1. Procédé de partage de l'activité d'un processeur (2) entre un noyau à contrainte de temps réel préemptif et à priorité fixe (10) d'une part, et un système d'exploitation ouvert (20) d'autre part, suivant lequel des interruptions d'un fonctionnement dudit processeur pour entreprendre des opérations selon le noyau à contrainte de temps réel (10) sont requises par une ligne d'interruptions prioritaires (6) et des interruptions pour entreprendre des opérations selon le système d'exploitation ouvert (20) sont requises par une ligne d'interruptions non-prioritaires (7), et suivant lequel un fonctionnement du processeur selon le noyau à contrainte de temps réel (10) est constitué par une succession de tâches distinctes. 2. Procédé selon la revendication 1, suivant lequel l'une des deux lignes d'interruptions prioritaires (6) et non-prioritaires (7) est sélectionnée pour requérir chaque interruption au moyen d'un contrôleur d'interruptions programmé (5). 3. Procédé selon la revendication 1 ou 2, suivant lequel des données produites dans le cadre du système d'exploitation ouvert (20) et destinées à être exploitées dans le cadre du noyau à contrainte de temps réel (10) sont inscrites dans une première portion de mémoire (8) connue dudit noyau, et suivant lequel une interruption pour entreprendre des opérations selon ledit noyau est requise sensiblement en même temps. 4. Procédé selon l'une quelconque des revendications 1 à 3, suivant lequel des données produites dans le cadre du noyau à contrainte de temps réel (10) et destinées à être exploitées dans le cadre du système d'exploitation ouvert (20) sont inscrites dans une seconde portion de mémoire (8) connue dudit système ouvert, et suivant lequel une interruption pour entreprendre des opérations selon ledit système ouvert est requise sensiblement en même temps. 5. Unité informatique comprenant un processeur (2) et un contrôleur d'interruptions d'un fonctionnement dudit processeur (5), ladite unité étant configurée pour fonctionner alternativement selon un noyau à contrainte de temps réel préemptif et à priorité fixe (10) et selon un système d'exploitation ouvert (20), un fonctionnement du processeur selon le noyau à contrainte de temps réel (10) étant constitué par une succession de tâches distinctes, et le contrôleur d'interruptions (5) étant adapté pour requérir des interruptions pour entreprendre des opérations selon le noyau à contrainte de temps réel (10) par une ligne d'interruptions prioritaires (6), et pour requérir des interruptions pour entreprendre des opérations selon le système d'exploitation ouvert (20) par une ligne d'interruptions non-prioritaires (7). 6. Unité selon la revendication 5, dans laquelle le contrôleur d'interruptions (5) est programmable. 7. Unité selon la revendication 5 ou 6, comprenant en outre une première portion de mémoire (8) reliée en lecture et en écriture au processeur (2) et connue du noyau à contrainte de temps réel (10), dans laquelle le système d'exploitation ouvert (20) est adapté pour commander une inscription, dans ladite première portion de mémoire, de données produites dans le cadre dudit système ouvert (20) et destinées à être exploitées dans le cadre du noyau à contrainte de temps réel (10), et pour produire sensiblement en même temps une requête d'interruption pour entreprendre des opérations selon ledit noyau. 8. Unité selon l'une quelconque des revendications 5 à 7, comprenant en outre une seconde portion de mémoire (8) reliée en lecture et en écriture au processeur (2) et connue du système d'exploitation ouvert (20), dans laquelle le noyau à contrainte de temps réel (10) est adapté pour commander une inscription, dans ladite seconde portion de mémoire, de données produites dans le cadre dudit noyau (10) et destinées à être exploitées dans le cadre du système d'exploitation ouvert (20), et pour produire sensiblement en même temps une requête d'interruption pour entreprendre des opérations selon ledit système ouvert.