Brevet FR2976094A1 — publié le 20121207

Procédé de génération d'un logiciel La présente invention concerne un procédé de génération d'un logiciel, comportant au moins deux composants logiciels, à partir de fichiers sources associés aux composants logiciels, les fichiers sources comprenant des variables initialisées à zéro et des variables initialisées à des valeurs spécifiques, propre à être exécuté sur un terminal comprenant un système d'exploitation sans mémoire virtuelle et une mémoire physique, la mémoire physique comprenant une mémoire vive, propre à contenir au moins un segment de stockage de données et au moins un segment de données, et une mémoire morte, propre à contenir au moins un segment d'initialisation de données, le procédé comprenant, pour chaque composant logiciel, dont l'un au moins est propre à un redémarrage spécifique lors d'une exécution du logiciel, les étapes suivantes : - une étape de compilation, utilisant un compilateur propre à allouer, pour chaque fichier source, les variables initialisées à zéro à un segment de stockage de données, les variables initialisées à un segment de données, et les valeurs spécifiques des variables initialisées à un segment d'initialisation de données, et à transformer les fichiers sources en fichiers objets, et - une étape d'édition de liens, utilisant un éditeur de liens propre à regrouper les variables initialisées à zéro, les variables initialisées et leurs valeurs spécifiques dans un bloc respectif au sein de leur segment respectif alloué, propre à attribuer une zone prédéterminée de la mémoire pour chaque bloc et propre à regrouper les fichiers objets pour constituer un fichier exécutable correspondant au logiciel, Les systèmes d'exploitation utilisés dans les terminaux mobiles, comme par exemple les téléphones mobiles, comprenant une mémoire physique sont classés en deux catégories. La première catégorie, correspondant à des systèmes d'exploitation simples, est généralement désignée par « RTOS », acronyme des termes anglais « Real Time Operating System », la seconde catégorie, correspondant à des systèmes d'exploitation complets, étant généralement désignée par « OS complet ». Une différence entre ces deux catégories réside dans le fait que les systèmes d'exploitation complets disposent d'une mémoire virtuelle, contrairement aux systèmes d'exploitation simples. Cette mémoire virtuelle permet une isolation de composants logiciels, utilisés par une application donnée, et une initialisation de la mémoire utilisée par les composants logiciels à chaque fois que l'application est (re)démarrée. L'intégration d'un logiciel, comprenant plusieurs composants logiciels, dans le terminal s'effectue grâce à l'utilisation de la mémoire physique du terminal. De manière classique, la mémoire physique comprend une mémoire vive ou RAM, de l'anglais « Random Access Memory », propre à contenir un segment de stockage de données (BSS) et un segment de données (data), et une mémoire morte ou ROM, « Read-Only Memory » selon la terminologie anglo-saxonne, propre à contenir au moins un segment d'initialisation de données. En particulier, l'intégration comprend une phase de génération du logiciel, à partir de fichiers sources, associés aux composants logiciels, comportant des variables initialisées à des valeurs spécifiques et des variables initialisées à zéro, le logiciel étant propre à être exécuté par le terminal. Les variables initialisées à des valeurs spécifiques correspondent à des variables utilisées par un développeur du composant logiciel concerné et dont il a fixé le contenu à une valeur spécifique lors du développement. Les variables initialisées à zéro correspondent à des variables dont le contenu n'a pas été fixé par le développeur. Pour ces variables, c'est le système d'exploitation qui fixe leur contenu à zéro. De manière connue, la phase de génération utilise un procédé de génération comprenant une étape de compilation du logiciel, propre à allouer pour chaque composant logiciel les variables initialisées à zéro dans le segment de stockage de données et les variables initialisées à des valeurs spécifiques dans le segment de données. Cette étape de compilation est propre, également, à transformer les fichiers sources en fichiers objets. Le procédé de génération comprend également une étape d'édition de liens, propre à regrouper les variables initialisées à zéro et celles initialisées à des valeurs spécifiques au sein de leur segment respectif alloué, et à regrouper les fichiers objets afin de constituer un fichier exécutable correspondant au logiciel. Après application du procédé, le segment de stockage de données comprend l'ensemble des variables initialisées à zéro associées à chaque composant de façon regroupée et le segment de données comprend l'ensemble des variables initialisées à des valeurs spécifiques associées à chaque composant de façon regroupée. Ainsi, pour un composant logiciel donné, les variables initialisées à zéro et celles initialisées à des valeurs spécifiques occupent, respectivement, une partie du segment de stockage de données et une partie du segment de données. Lors de son fonctionnement, le terminal est propre à exécuter des applications utilisant un ou plusieurs composants logiciels. Dans le cas d'un redémarrage d'une application, il est nécessaire de redémarrer le ou les composants logiciels utilisés par l'application. Or, pour les systèmes d'exploitation simples, c'est-à-dire pour des systèmes d'exploitation sans mémoire virtuelle, le redémarrage s'effectue par une réinitialisation du segment de stockage de données et du segment de données. Le problème est que cette réinitialisation entraîne une réinitialisation de l'ensemble des composants logiciels en mémoire du terminal, provoquant un redémarrage du terminal pendant une période donné et donc une indisponibilité complète du terminal durant toute cette période. Le but de l'invention est donc de proposer un procédé de génération d'un logiciel permettant un redémarrage spécifique d'un composant logiciel afin d'éviter un redémarrage global du terminal lors de son fonctionnement. A cet effet, l'invention a pour objet un procédé de génération d'un logiciel du type précité, caractérisé en ce qu'il comporte, en outre, pour au moins un composant logiciel propre à un redémarrage : - une étape de renommage du segment de stockage de données, du segment de données et du segment d'initialisation de données, associés à chaque fichier objet du composant logiciel à redémarrer, et - une étape de configuration de l'éditeur de liens, destinée à réaliser une étape d'édition de liens spécifique propre à un repositionnement des valeurs des variables initialisées du segment renommé de données aux valeurs spécifiques issues du segment renommé d'initialisation de données, et des valeurs des variables initialisées à zéro du segment renommé de stockage de données, lors d'un redémarrage du composant logiciel. Suivant d'autres modes de réalisation, le procédé de génération comprend une ou plusieurs des caractéristiques suivantes, prises isolément ou suivant toutes les combinaisons techniquement possibles : - les variables initialisées à zéro sont des variables ayant une valeur fixée par le système d'exploitation, et les variables initialisées à des valeurs spécifiques sont des variables dont les valeurs spécifiques ont été fixées préalablement par un développeur ; - l'étape d'édition de liens spécifique comprend les étapes suivantes : - une étape propre à attribuer une zone spécifique de la mémoire, différente de la zone prédéterminée, pour le segment renommé de stockage de données, le segment renommé de données et le segment renommé d'initialisation de données, et - une étape propre à créer des repères en début et en fin de chaque segment renommé, destinée à indiquer l'emplacement dans la mémoire des variables à initialiser lors d'un redémarrage du composant logiciel propre à un redémarrage ; - le composant logiciel est une bibliothèque logicielle ; - le compilateur est de type C/C++ ; - le terminal est un téléphone mobile. L'invention a également pour objet un terminal propre à exécuter un logiciel, caractérisé en ce que le logiciel est généré suivant le procédé tel que défini ci-dessus. L'invention a également pour objet un produit programme d'ordinateur comportant des instructions qui, lorsque mises en oeuvre par une unité centrale de traitement intégrée à un terminal, met en oeuvre le procédé tel que défini ci-dessus. Ces caractéristiques et avantages de l'invention apparaîtront à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple non limitatif, et faite en référence aux dessins annexés, sur lesquels : - la figure 1 est une représentation schématique d'un terminal comprenant un logiciel généré par le procédé selon l'invention, - la figure 2 est une représentation schématique d'une mémoire d'un terminal, et - la figure 3 est un organigramme du procédé de génération d'un logiciel selon l'invention. On observe, en figure 1, un terminal 10, comme par exemple un téléphone portable, propre à interagir avec un réseau de téléphonie mobile afin d'établir une communication avec un utilisateur ou un terminal distant. Plus précisément, le terminal 10 comprend différents composants électroniques nécessaires à son fonctionnement, comme par exemple une unité centrale de traitement 12, reliée à un bus de données 14, permettant l'échange d'informations avec l'ensemble des autres composants du terminal 10, comme une ou plusieurs mémoires 16, une interface utilisateur 18, et un écran d'affichage 20. Le terminal 10 comprend également des moyens de communication 22 permettant l'échange de données avec le réseau de téléphonie mobile. La mémoire 16 comprend un logiciel 24, comportant des composants logiciels ou applications, et un système d'exploitation 26, dans le cas considéré ici, sans mécanisme de recours à une mémoire virtuelle, propre à être exécuté par l'unité centrale de traitement 12. L'unité centrale 12 est propre à exécuter les applications contenues en mémoire 16, à l'aide du système d'exploitation 26, permettant ainsi le fonctionnement classique d'un terminal 10. L'interface utilisateur 18 permet à un utilisateur d'interagir avec le terminal 10 et, plus particulièrement, avec les différentes applications exécutées sur le terminal 10, comme par exemple avec un composant logiciel lorsque celui-ci est exécuté par l'unité centrale 12. Par exemple, dans le cas d'une utilisation d'un navigateur Internet, le composant logiciel est « Webkit ». L'écran d'affichage 20 est propre à fournir à l'utilisateur une visualisation de différentes informations issues des applications exécutées par l'unité centrale 12. La structure de la mémoire 16 va être à présent détaillée de manière plus précise à l'aide de la figure 2. La mémoire 16 comprend différentes zones de mémoire, allouées statiquement ou dynamiquement, en fonction du logiciel global 24 et des applications exécutées sur le terminal 10. Plus précisément, la mémoire 16 comprend une mémoire vive 28, et une mémoire morte 30. La mémoire vive 28 et la mémoire morte 30 sont découpées en zones de mémoire. La mémoire vive 28 comprend un segment de stockage de données 32, plus communément connu sous l'appellation « BSS », destiné au stockage de variables initialisées à zéro. La mémoire vive 28 comprend également un segment de données 34, plus communément connu sous l'appellation « Data », destiné au stockage de variables initialisées à des valeurs spécifiques. La mémoire morte 30 comprend un segment d'initialisation de données 36, plus communément connu sous l'appellation « Data_init », destiné au stockage des valeurs spécifiques des variables initialisées à des valeurs spécifiques. Le procédé de génération du logiciel 24 va être à présent décrit au regard de la figure 3. Le logiciel 24 comprend des composants logiciels 38, 42 de deux catégories différentes. Un composant logiciel 38, d'une première catégorie, représenté par un ensemble de fichiers sources 40 associés, correspond à un composant logiciel qui ne demande pas de redémarrage spécifique lors du fonctionnement du terminal 10. Au contraire, un composant logiciel 42, d'une seconde catégorie, représenté par un ensemble de fichiers sources 44 associés, correspond à un composant logiciel qui demande un redémarrage spécifique lors du fonctionnement du terminal 10. Chaque fichier source, respectivement 40, 44 comprend du code en langage de haut niveau, par exemple en langage C, et des variables, certaines variables étant initialisées à zéro et d'autres étant initialisées à des valeurs spécifiques. Pour les deux catégories de composants logiciels, respectivement 38, 42, une étape de compilation 46 est propre à transformer respectivement chaque fichier source, respectivement 40, 44 en un fichier objet, respectivement 48, 50. Plus précisément, de manière classique, un compilateur est propre à allouer, pour chaque fichier source, respectivement 40, 44, le code, respectivement 52, 54 à un segment de code, non représenté, les variables initialisées à zéro, respectivement 56, 58 au segment de stockage de données 32, les variables initialisées à des valeurs spécifiques, respectivement 60, 62 au segment de données 34 et les valeurs spécifiques, respectivement 64, 66 des variables initialisées au segment d'initialisation de données 36. Ensuite, une étape de d'édition de liens 68 est propre à regrouper l'ensemble des fichiers objet, respectivement 48, 50 en un fichier exécutable, correspondant au logiciel 24, à charger en mémoire 16 et à exécuter sur le terminal 10. Plus précisément, de manière connue, pour le composant logiciel 38, un éditeur de liens regroupe l'ensemble des variables initialisées à zéro 56 dans un bloc 70 au sein du segment de stockage de données 32, l'ensemble des variables initialisées à des valeurs spécifiques 60 dans un bloc 72 au sein du segment de données 34 et l'ensemble des valeurs spécifiques 64 dans un bloc 74 au sein du segment d'initialisation de données 36. Ensuite, l'éditeur de liens attribue une zone prédéterminée de la mémoire 16, par défaut, à chaque bloc, respectivement 70, 72, 74. Plus précisément, une zone prédéterminée 76 est attribuée au sein du segment de stockage de données 32 de la mémoire vive 28 pour le bloc 70 regroupant l'ensemble des variables initialisées à zéro 56 du composant 38. De la même manière, une zone prédéterminée 78 est attribuée au sein du segment de données 34 de la mémoire vive 28 pour le bloc 72 regroupant l'ensemble des variables initialisées à des valeurs spécifiques 60 du composant 38. Enfin, une zone prédéterminée 80 est attribuée au sein du segment d'initialisation de données 36 de la mémoire morte 30 pour le bloc 74 regroupant l'ensemble des valeurs spécifiques 64 des variables initialisées du composant 38. De la même manière, dans le cas où le logiciel 24 comprend d'autres composants logiciels de type 38, c'est-à-dire de première catégorie ne demandant pas de redémarrage spécifique, les étapes de compilation 46 et d'édition de liens 68 permettent l'obtention de manière groupée d'un ensemble de variables de type 56, 60 et de valeurs spécifiques de type 64 associés aux composants logiciels de type 38 au sein d'un même segment, respectivement 32, 34, 36, comme représenté sur la figure 3. Ainsi, comme le système d'exploitation 26 gère tout redémarrage d'un composant logiciel de type 38 au niveau de ses segments associés, respectivement 32, 34, 36, en cas de redémarrage du composant logiciel 38 ou de l'un quelconque des autres composants logiciels de type 38, c'est l'ensemble des composants logiciels qui sont impactés et qui vont redémarrer. Dans une étape de renommage 82, concernant le composant 42 suite à l'étape 46 de compilation, chaque segment alloué respectivement aux variables initialisées à zéro 58, aux variables initialisées à des valeurs spécifiques 62 et aux valeurs spécifiques 66 est renommé. De manière plus précise, l'ensemble des fichiers objets 50 est édité de manière à modifier le nom du segment de stockage de données 32 alloué aux variables initialisées à zéro 58. Par exemple, le nom « BSS » du segment initial de données 58 est renommé en « BSS_Comp._42». Suivant un principe identique, les noms du segment de données 34 alloué aux variables initialisées à des valeurs spécifiques 60 et du segment d'initialisation de données 36 alloué aux valeurs spécifiques 64 sont renommés. Ainsi, cette étape de renommage 82 est propre à isoler les variables 58, 62 et les valeurs spécifiques 66 dans des segment spécifiques et uniques au composant logiciel 42, de manière à permettre un redémarrage spécifique du composant logiciel 42. Suite à l'étape de renommage 82, une étape de configuration 84 de l'éditeur de liens est initiée afin de modifier le comportement par défaut de l'éditeur de liens et de réaliser une étape d'édition de liens spécifique 86 pour le composant logiciel 42. La configuration de l'éditeur de liens consiste à lui indiquer que des segments renommés de stockage de données, de données, et d'initialisation de données pour tous les fichiers objets 50 issus de la compilation des fichiers sources 44, doivent être alloués dans des zones spécifiques au composant logiciel 42, nommées d'après le composant logiciel 42, respectivement en mémoire vive 28 pour les segments renommés de stockage de données et de données et en mémoire morte 30 pour les segments renommés d'initialisation de données et ce de façon contigüe en utilisant les directives d'édition de lien prévues à cet effet. Ainsi, lors de l'étape d'édition de liens spécifique 86, l'éditeur de liens regroupe de manière contigüe l'ensemble des variables initialisées à zéro 58 dans un segment renommé de stockage de données 88. Suivant le même principe, l'ensemble des variables initialisées à des valeurs spécifiques 62 est regroupé de manière contigüe dans un segment renommé de données 90 et l'ensemble des valeurs spécifiques 66 est regroupé de manière contigüe dans un segment renommé d'initialisation de données 92. Ensuite, l'éditeur de liens attribue une zone spécifique de la mémoire 16, différente de la zone prédéterminée qui est celle attribuée au composant 38 dans l'exemple considérée, pour chaque segment renommé 88, 90, 92. De manière plus précise, une zone spécifique 94 est attribuée pour le segment renommé 88 de stockage de données regroupant l'ensemble des variables initialisées à zéro 58 du composant 42. Suivant un principe identique, une zone spécifique 96 est attribuée pour le segment renommé 90 de segment de données regroupant l'ensemble des variables initialisées à des valeurs spécifiques 62 du composant 42 et une zone spécifique 98 est attribuée pour le segment renommé 92 d'initialisation de données regroupant l'ensemble des valeurs spécifiques 66 des variables initialisées du composant 42. De la même manière, dans le cas où le logiciel 24 comprend d'autres composants logiciels de type 42, c'est-à-dire de seconde catégorie demandant un redémarrage spécifique, les étapes de compilation 46, d'édition de liens 82 et de configuration 84 permettent l'obtention d'un ensemble des variables de type 58, 62 et de valeurs spécifiques de type 66 associés aux composants logiciels de type 42 au sein de segments renommés, respectivement 88, 90, 92, ces segments étant associés uniquement à leurs composants logiciels respectifs. Enfin, l'étape spécifique d'édition de liens 86 comprend une étape de création de repères en début et en fin de chaque segment renommé 88, 90, 92. Cette étape est destinée à indiquer à un logiciel d'initialisation du matériel l'emplacement dans la mémoire 16 des variables 58, 62 à initialiser lors d'un redémarrage du composant logiciel 42 lors du fonctionnement du terminal. Lors de cette étape de création de repères, l'éditeur de liens crée des variables avec un nom spécifique en début et en fin de chaque segment renommé 88, 90, 92 en une adresse donnée de la mémoire 16, permettant ainsi de créer des repères, ou marqueurs, pour tous les segments renommés 88, 90, 92. Ainsi, lors du fonctionnement du terminal 10, en cas d'erreur de fonctionnement associé à un composant logiciel 42, due par exemple à un problème de débordement mémoire, le logiciel d'initialisation du matériel récupère les adresses des repères pour chaque segment renommé. Ensuite, le logiciel d'initialisation du matériel procède à l'initialisation à zéro de l'ensemble des données du segment renommé 88 de stockage de données. Puis, le logiciel gère le repositionnement, ou la recopie, des données du segment renommé 92 d'initialisation de données dans le segment renommé de données 90. Ainsi, comme l'ensemble des variables 58, 62 associées au composant logiciel 42 a été réinitialisée, le composant logiciel 42 est propre à un redémarrage de manière spécifique. Par conséquent, grâce au procédé de l'invention qui permet d'isoler les segments associés aux variables utilisées par un composant logiciel en particulier, le composant logiciel 42 est propre à un redémarrage indépendamment des autres composants logiciels 38 et du logiciel 24. De ce fait, le procédé selon l'invention permet d'éviter un redémarrage complet de terminaux disposant de systèmes d'exploitation simple sans mémoire virtuelle dans le cas 9 où un ou plusieurs composants logiciels spécifiques doivent être redémarrés. Par conséquent, l'impact d'un redémarrage d'un composant logiciel sur la disponibilité des services offerts par le terminal est considérablement amoindri. On a considéré ici que le système d'exploitation ne disposait pas de recours à une 5 mémoire virtuelle (système d'exploitation « simple »). Bien entendu, l'invention pourra être mise en oeuvre avec un système d'exploitation « complet ». REVENDICATIONS1.- Procédé de génération d'un logiciel (24), comportant au moins deux composants logiciels (38, 42), à partir de fichiers sources (40, 44) associés aux composants logiciels (38, 42), les fichiers sources (40, 44) comprenant des variables initialisées à zéro (56, 58) et des variables initialisées (60, 62) à des valeurs spécifiques (64, 66), propre à être exécuté sur un terminal (10) comprenant un système d'exploitation (26) sans mémoire virtuelle et une mémoire physique (16), la mémoire physique (16) comprenant une mémoire vive (28), propre à contenir au moins un segment de stockage de données (32) et au moins un segment de données (34), et une mémoire morte (30), propre à contenir au moins un segment d'initialisation de données (36), le procédé comprenant, pour chaque composant logiciel (38, 42), dont l'un au moins est propre à un redémarrage spécifique lors d'une exécution du logiciel (24), les étapes suivantes : - une étape de compilation (46), utilisant un compilateur propre à allouer, pour chaque fichier source (40, 44), les variables initialisées à zéro (56, 58) à un segment de stockage de données (32), les variables initialisées (60, 62) à un segment de données (34), et les valeurs spécifiques (64, 66) des variables initialisées à un segment d'initialisation de données (36), et à transformer les fichiers sources (40, 44) en fichiers objets (48, 50), et - une étape d'édition de liens (68), utilisant un éditeur de liens propre à regrouper les variables initialisées à zéro (56), les variables initialisées (60) et leurs valeurs spécifiques (64) dans un bloc respectif (70, 72, 74) au sein de leur segment respectif alloué (32, 34, 36), propre à attribuer une zone prédéterminée (76, 78, 80) de la mémoire (16) pour chaque bloc (70, 72, 74) et propre à regrouper les fichiers objets (52) pour constituer un fichier exécutable correspondant au logiciel (24), caractérisé en ce qu'il comporte, en outre, pour au moins un composant logiciel (42) propre à un redémarrage : - une étape de renommage (82) du segment de stockage de données (32), du segment de données (34) et du segment d'initialisation de données (36), associés à chaque fichier objet (50) du composant logiciel (42) à redémarrer, et - une étape de configuration (84) de l'éditeur de liens, destinée à réaliser une étape d'édition de liens spécifique (86) propre à un repositionnement des valeurs des variables initialisées (62) du segment renommé de données (90) aux valeurs spécifiques (66) issues du segment renommé d'initialisation de données (92), et des valeurs des variables initialisées à zéro (58) du segment renommé de stockage de données (88), lors d'un redémarrage du composant logiciel (42). 2.- Procédé selon la revendication 1, caractérisé en ce que les variables initialisées à zéro (56, 58) sont des variables ayant une valeur fixée par le système d'exploitation (26), et en ce que les variables initialisées (60, 62) à des valeurs spécifiques (64, 66) sont des variables dont les valeurs spécifiques ont été fixées préalablement par un développeur. 3.- Procédé selon la revendication 1 ou 2, caractérisé en ce que l'étape d'édition de liens spécifique (86) comprend les étapes suivantes : - une étape propre à attribuer une zone spécifique (94, 96, 98) de la mémoire (16), différente de la zone prédéterminée (76, 78, 80), pour le segment renommé de stockage de données (88), le segment renommé de données (90) et le segment renommé d'initialisation de données (92), et - une étape propre à créer des repères en début et en fin de chaque segment renommé (88, 90, 92), destinée à indiquer l'emplacement dans la mémoire (16) des variables à initialiser (58, 62) lors d'un redémarrage du composant logiciel (42) propre à un redémarrage. 4.- Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce que le composant logiciel (42) est une bibliothèque logicielle. 5.- Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce que le compilateur est de type C/C++. 6.- Procédé selon l'une quelconque des revendications précédentes, caractérisé 25 en ce que le terminal (10) est un téléphone mobile. 7.- Terminal (10) propre à exécuter un logiciel (24), caractérisé en ce que le logiciel (24) est généré suivant le procédé décrit selon l'une quelconque des revendications 1 à 5. 8.- Produit programme d'ordinateur comportant des instructions qui, lorsque mises en oeuvre par une unité centrale de traitement (12) intégrée à un terminal (10), met en oeuvre le procédé selon l'une quelconque des revendications 1 à 6. 30