FR 3070081 A1 20190215 FR 1757638 A 20170810 DOMAINE DE L'INVENTION La présente invention concerne un procédé d'écriture d'un programme dans une mémoire non-volatile. ETAT DE LA TECHNIQUE Un dispositif électronique tel qu'un élément sécurisé embarqué ou intégré (- Embedded/Integrated Secure Element » ou - eSE/eUICC » et - iSE/iUICC » en anglais) utilise conventionnellement une mémoire non volatile dans laquelle est mémorisé un système d'exploitation. Ce système d'exploitation est exécuté par un processeur du dispositif électronique. Le système d'exploitation d'un tel dispositif électronique peut, pour diverses raisons, être remplacé dans la mémoire non volatile du dispositif électronique par un nouveau système d'exploitation. Par exemple, un tel remplacement est mis en oeuvre vers un nouveau système d'exploitation du même type mais plus récent, afin de corriger des bugs, ou bien vers un système d'exploitation différent, fourni par un fournisseur différent du premier système d'exploitation déjà présent dans le dispositif électronique. Un tel remplacement peut typiquement être mis en oeuvre lors d'un reconditionnement du dispositif après un retour terrain. Dans tous les cas, ce remplacement peut survenir après une utilisation intensive du premier système d'exploitation. Or, la durée de vie d'une mémoire non volatile, telles que de la mémoire flash, dépend du nombre d'écritures de données faites dans cette mémoire. Par conséquent, la mémoire volatile peut être déjà fortement usée lorsqu'il est décidé de remplacer le premier système d'exploitation par un autre. Cette usure engendre un problème de répartition de responsabilités entre le vendeur du dispositif électronique, qui garantit généralement l'acheteur que le dispositif fonctionnera sur une certaine durée de vie, le fournisseur du premier système d'exploitation, voire le fournisseur du deuxième système d'exploitation s'il est différent. Si la mémoire non volatile est fortement usée, cette garantie sera difficile à maintenir après remplacement du système d'exploitation. EXPOSE DE L'INVENTION Un but de l'invention suivante vise à améliorer la durée de vie d'un dispositif électronique comprenant une mémoire non volatile. 2 Un autre but de l'invention est d'identifier le plus tôt possible une usure prématurée d'une mémoire non volatile d'un dispositif électronique susceptible d'être reconditionné. Ainsi, selon un aspect, l'invention propose un procédé embarqué sur dispositif discret 5 ou intégré d'écriture d'un programme incluant code et données dans une mémoire non- volatile, le procédé comprenant des étapes de : pour une pluralité de zones de la mémoire non-volatile, détermination sans données préalables d'un état d'usure de la zone avant écriture du nouveau programme, 10 réception et utilisation de données de condition d'accès à une portion du programme depuis la mémoire volatile, la détermination desdites données étant mise en oeuvre avant que la portion du programme ne soit écrite dans la mémoire non-volatile, sélection d'au moins une des zones de la mémoire non-volatile où écrire la portion 15 du programme, en fonction des données et des états d'usure déterminés. Les données de condition d'accès peuvent renseigner sur des droits d'accès à la portion de programme dans la mémoire non-volatile. La zone sélectionnée peut être : une zone usée lorsque les droits d'accès sont en lecture seule, 20 une zone saine lorsque les droits d'accès sont en lecture et en écriture. Les données de condition d'accès peuvent renseigner sur une fréquence d'accès en écriture estimée à la section de programme (code et données) dans la mémoire non-volatile. La zone sélectionnée peut être : une zone saine lorsque la fréquence d'accès en écriture est élevée, et 25 une zone usée lorsque la fréquence d'accès en écriture est faible. Notamment, la zone sélectionnée peut être une zone usée lorsque les données de condition d'accès indiquent que les droits sont en lecture seule ou que la fréquence d'accès en écriture est faible, une zone saine lorsque les données de condition d'accès indiquent 30 cumulativement que les droits d'accès sont en lecture et en écriture, et que la fréquence d'accès en écriture est élevée. Dans une mise oeuvre possible, le procédé comprend le signalement d'un message d'erreur lorsque les données déterminées autorisent que la zone sélectionnée soit une zone saine, mais qu'il ne reste plus aucune zone saine de disponible dans la mémoire non volatile 35 où écrire la portion de programme. 3 Egalement, le procédé peut comprendre un abandon de l'écriture du programme dans la mémoire non volatile, lorsque les données déterminées autorisent que la zone sélectionnée soit une zone saine, mais qu'il ne reste plus aucune zone saine de disponible dans la mémoire non volatile où écrire la portion de programme. 5 En outre, le programme peut être un système d'exploitation destiné à remplacer un autre système d'exploitation ou une partie, déjà présent dans la mémoire non volatile. L'invention concerne également un produit programme d'ordinateur comprenant des instructions de code de programme pour l'exécution des étapes du procédé proposé, lorsque ce procédé est exécuté par au moins un processeur. 10 DESCRIPTION DES FIGURES D'autres caractéristiques, buts et avantages de l'invention ressortiront de la description qui suit, qui est purement illustrative et non limitative, et qui doit être lue en regard des 15 dessins annexés sur lesquels : - Les figures la et lb représentent de façon schématique un dispositif électronique pour le cas respectivement d'un eSE/eUICC et d'un iSE/iUICC. - La figure 2 est un organigramme d'étapes d'un procédé d'écriture d'un programme dans une mémoire volatile. 20 - La figure 3 représente des espaces d'adressage logique et physique dans une mémoire non volatile. - La figure 4 illustre un exemple de réorganisation de l'espace d'adressage physique. Sur l'ensemble des figures, les éléments similaires portent des références identiques. 25 DESCRIPTION DETAILLEE DE L'INVENTION En référence aux figures la et 1 b, un dispositif électronique 1 comprend au moins un processeur 2, au moins une mémoire non volatile 4 interne (eSE/eUICC - figure 1 a) ou externe (iSE/iUICC - figure lb), et au moins une mémoire volatile 5. La mémoire non volatile 4 mémorise de manière persistante des programmes et des 30 données destinées à être manipulées par les programmes. Cette mémoire 4 est par exemple de type flash. La mémoire non volatile 4 comprend une pluralité de secteurs physiques. Chaque secteur physique a une adresse physique, et est susceptible d'héberger des données. La mémoire non volatile 4 stocke notamment plusieurs programmes : 35 - un système d'exploitation, 4 - au moins une application susceptible d'être lancée par le système d'exploitation. - Un programme d'écriture de système d'exploitation en mémoire non-volatile. Un tel programme est également appelé programme de chargement dans la littérature (- loader » en anglais). 5 Le processeur 2 est configure pour exécuter l'un ou l'autre de ces programmes. La mémoire non volatile 4 est également destinée à stocker des données manipulées par ces programmes. Ces données sont soit présentes dans la mémoire 4 avant la première mise en service du dispositif électronique, soit écrites dans la mémoire 4 par l'un ou l'autre de ces programmes après une telle mise en service. 10 En particulier, le système d'exploitation occupe une pluralité de secteurs physiques de la mémoire non volatile 4. Par ailleurs, la mémoire volatile 5 a vocation à stocker des données de manière temporaire, jusqu'à une mise hors tension du dispositif électronique 1. La mémoire 5 est par exemple de type RAM (- Random Access Memory »). 15 Le dispositif électronique 1 comprend en outre une unité de gestion mémoire paginée (- Memory Management Unit » en anglais, abrégé dans la suite en MMU). De façon connue en soi, la MMU est configurée pour contrôler les accès que le processeur 2 fait à la mémoire non volatile 4, lorsque ce processeur exécute l'un des programmes de ce dispositif. 20 En particulier, la MMU est configurée pour abstraire la mémoire non volatile dans un espace d'adressage logique La MMU comprend des registres matériels configurables dits TLB (- Translation Lookaside Buffer »). Chaque TLB associe une adresse logique (par exemple, mais non limitativement, celui d'une page) à une adresse physique de la mémoire 4. L'ensemble des TLB peut être configure à l'aide d'une table d'adressage définissant 25 comment passer d'un espace d'adressage logique à un espace d'adressage physique, et vice/versa. Le dispositif électronique 1 comprend également une interface de communication 6 avec un autre dispositif 8. L'interface de communication 6 comprend par exemple au moins un contact électrique 30 destiné à être mis en contact électrique avec un contact de l'autre dispositif 8, de sorte que des signaux électriques porteurs de données puissent être communiqués entre les deux dispositifs. En variante ou à titre complémentaire, l'interface de communication comprend une antenne radio, par exemple pour établir une communication du type - en champ proche » (NEC). 5 Le dispositif électronique 1 est par exemple élément sécurisé embarqué ou intégré (- Embedded/Integrated Secure Element » en anglais), (par exemple au format UICC). En référence à la figure 2, un procédé mis en oeuvre par le programme de chargement pour écrire un nouveau système d'exploitation dans la mémoire non volatile 4 comprend les 5 étapes suivantes. Le dispositif électronique reçoit par son interface de communication 6 un message indiquant qu'un nouveau système d'exploitation doit être écrit dans la mémoire non volatile 4, en lieu et place d'un précédent système d'exploitation déjà présent à ce stade dans la mémoire non volatile 4. 10 Le programme de chargement est alors démarré en réponse à la réception de ce message (étape 100). Le programme de chargement met en oeuvre un zonage de la mémoire non volatile (étape 102), de sorte à déterminer dans quelle mesure cette mémoire non volatile est usée. Le zonage 102 comprend une répartition des secteurs physiques de la mémoire non 15 volatile 4 en différentes zones, par exemple des zones qui sont toutes de même taille prédéterminées. Chaque zone peut par exemple être constituée d'au moins un secteur physique Le zonage 102 comprend par ailleurs, pour chaque zone de la mémoire non volatile 4 identifiée, la détermination d'un état d'usure de la zone par le programme de chargement. 20 Pour une zone donnée, le programme de chargement met par exemple en oeuvre un test sur au moins un secteur physique de la zone. Il choisit par exemple une page se trouvant sensiblement au milieu de la zone considérée, lorsque la zone comprend plusieurs pages. Ce test comprend une séquence de plusieurs cycles (par exemple 3), chaque cycle comprenant un effacement de la page physique choisie, une écriture de données prédéterminées dans la 25 page physique choisie, une lecture des données prédéterminées écrites dans la page physique choisie, et une vérification des données lues. Au cours de la vérification, le programme de chargement compare les données lues avec les données précédemment écrites. Si les données comparées sont différentes, alors l'état d'usure de la zone est positionné à une valeur indicative que cette zone est usée (par 30 exemple 0). De façon connue en elle-même, une réparation automatique peut avoir été mise en oeuvre au moment de la lecture par la mémoire non volatile elle-même ou un autre composant du dispositif électronique 1. Autrement dit, même si les données comparées par le programme sont identiques, il peut tout de même s'être produit des erreurs d'écriture ou de lecture au cours d'un cycle. Dans une telle éventualité, l'état d'usure de la zone est 35 positionné à la valeur indicative que cette zone est usée. 6 Si au contraire les données comparées sont identiques et qu'il est détecté qu'aucune réparation n'a été mise en oeuvre dans la zone considéré au cours d'un cycle, alors l'état d'usure de la zone est positionné à une valeur indicative que cette zone est saine (par exemple 1). 5 A l'issue de l'étape 102, le programme de chargement a ainsi généré autant d'états d'usure que de zones de la mémoire non volatile 4. Ces états d'usure sont mémorisés dans la mémoire volatile 5. La figure 3 montre un exemple de zonage appliqué à huit zones d'une mémoire non volatile 4. Quatre zones ont été déclarées saines et les quatre autres zones ont été déclarées 10 usées au cours du zonage 102 mis en oeuvre par le programme de chargement. Le programme de chargement efface par ailleurs le contenu de l'espace utilisateur dans la mémoire non volatile 4 (étape 104). A l'issue de cette étape 104, toutes les zones déterminées au cours de l'étape de zonage 102 marquées comme étant disponibles, c'est-à-dire susceptible d'être sélectionnées pour héberger de nouvelles données. 15 Le dispositif électronique reçoit par ailleurs, via son interface de communication 6, une portion du nouveau système d'exploitation à écrire dans la mémoire non volatile 4 (étape 106). Cette portion est par convention appelée dans la suite une - section » du système d'exploitation. La section est temporairement mémorisée dans la mémoire volatile 5 avant l'écriture 20 dans la mémoire non volatile 4. La section comprend conventionnellement des instructions de code du nouveau système d'exploitation et/ou des données statiques de ce système d'exploitation destinées à être utilisées au cours d'une exécution ultérieur d'instructions de code par le processeur 2 du dispositif électronique 1. 25 La section comprend par ailleurs des données qui renseignent le programme de chargement sur des conditions futures d'accès à la section par le processeur 2, une fois que cette section aura été écrite dans la mémoire non volatile 4. Par convention, on appelle ces données - données de conditions d'accès ». En variante, les données de conditions d'accès ne font pas partie de la section elle-même mais sont reçues par l'interface de communication 30 6 dans un ou plusieurs message(s) séparé (s) de la section. Les données de conditions d'accès comprennent des données de droits d'accès à la section par le processeur 2. Les données de droits d'accès indiquent que la section a vocation à être accessible depuis la mémoire non volatile 4 en lecture et en écriture (L/E), ou bien que cette section a 35 vocation à être accessible depuis la mémoire non volatile en lecture seule (L). 7 Le programme de chargement lit les données de droits d'accès de la section (étape (108). Le programme sélectionne parmi les zones disponibles au moins une zone de destination où la section doit être écrite. Bien entendu, le nombre de zones sélectionnées dépend de la 5 taille de la section reçue. On considère par exemple dans ce qui suit que la taille de la section est inférieure à la taille d'une zone. Une seule zone de destination est dans ce cas sélectionnée. La sélection de la zone de destination de la section dépend des états d'usures préalablement déterminés et des données de conditions d'accès contenues dans la section, 10 que le programme de chargement a lues au cours de l'étape 108. Si ces données de droits d'accès indiquent que la section a vocation à être accessible depuis la mémoire non volatile 4 en lecture seule, alors le programme de chargement sélectionne (étape 110) de préférence une zone usée en tant que zone de destination, c'est-à-dire une zone disponible dont l'état d'usure a été positionné à la valeur - zone usée ». S'il 15 n'en a pas, il prend une zone saine. Le programme de chargement commande alors l'écriture de la section dans la zone de destination usée sélectionnée. Pour cela, le programme de chargement configure l'entrée TLB pour associer à l'adresse logique l'adresse physique située dans la zone sélectionnée. Il écrit ensuite à l'adresse physique le contenu de la section. 20 Après l'écriture, la zone de destination sélectionnée devient occupée entièrement ou en partie. Si elle l'est en partie, le programme ajuste la taille et l'adresse de début de la zone encore disponible. Si elle est occupée entièrement, elle devient non disponible. Par ailleurs, si les données de droits d'accès indiquent que la section a vocation à être accessible depuis la mémoire non volatile 4 en lecture et en écriture (LIE), alors le 25 programme de chargement vérifie s'il reste une zone saine disponible (étape 112). Dans la négative, le programme de chargement signale avantageusement un message d'erreur, par exemple avant que l'écriture du nouveau système d'exploitation dans la mémoire non volatile 4 ne soit terminée afin de gagner du temps (étape 114). Ce signalement de message permet de dégager une responsabilité entre les fournisseurs respectifs de 30 l'ancien et du nouveau système d'exploitation, s'ils sont différents. De préférence, l'écriture du programme dans la mémoire non volatile est abandonnée dans la même situation. Cet abandon est préférable à écrire la section dans une zone usée car, au vu des conditions d'accès futures à cette section, cette zone déjà usée serait fortement sollicitée après écriture. Le système d'exploitation ne pourrait ainsi être utilisé 35 que pour une période très courte avant que la zone usée ne devienne totalement inutilisable. 8 Le procédé mis en oeuvre par le programme de chargement permet en définitive d'anticiper des problèmes futurs en inspectant l'état de la mémoire dès le moment où un nouveau système d'exploitation est installé. S'il reste au contraire une zone saine disponible dans la mémoire non volatile 4, le 5 programme de chargement sélectionne (étape 116) une telle zone saine en tant que zone de destination où écrire la section, c'est-à-dire une zone disponible dont l'état d'usure a été positionné à la valeur - zone saine Le programme de chargement commande alors l'écriture de la section dans la zone de destination usée sélectionnée. Pour cela, le programme de chargement configure l'entrée 10 TLB pour associer à l'adresse logique l'adresse physique située dans la zone sélectionnée. Il écrit ensuite à l'adresse physique le contenu de la section. Après l'écriture, la zone de destination sélectionnée devient occupée entièrement ou en partie. Si elle l'est en partie, le programme ajuste la taille et l'adresse de début de la zone encore disponible. Si elle est occupée entièrement, elle devient non disponible afin 15 qu'elle ne puisse pas être à nouveau sélectionnée par le programme de chargement comme zone de destination d'une autre section du système d'exploitation. Le programme de chargement vérifie ensuite si la section qui vient d'être écrite dans la mémoire non volatile 4 était la dernière. Le programme peut pour cela vérifier si une nouvelle section du nouveau système d'exploitation a été reçue via l'interface de 20 communication 6 (étape 118) dans un délai prédéterminé. Dans l'affirmative, les étapes 108 et suivantes sont répétées pour la nouvelle section. Sinon, toutes les sections du programme ont été reçues se sont vues attribuer une zone de destination dans la mémoire non volatile 4, et ont donc été écrites dans la mémoire non volatile 4. 25 Une fois que toutes les sections ont été écrites dans la mémoire non volatile 4, il se peut que les sections en lecture seule et les sections en lecture/écritures soient entrelacées dans l'espace d'adressage physique. Avantageusement, l'espace d'adressage physique est réorganisé par le programme de chargement (étape 120) de sorte que les pages des sections en lecture seule utilisent de 30 préférence des zones usées, et que les pages des sections en lecture écriture utilisent de préférence des zones saines. L'espace d'adressage logique restant contigue, le programme reste fonctionnel. C'est ce qu'illustre la figure 4, sur laquelle on a représenté une image de différentes sections A-B-C-D-E-F avant chargement (première ligne), puis la même image après 35 chargement et traitement (dernière ligne). Physiquement, les différentes sections sont 9 réorganisées et ne sont pas contigües. Elles sont par contre contiguës au niveau logique pour rester fonctionnelles. Cette réorganisation 120 comprend la génération d'une nouvelle table d'adressage, et une reconfiguration de la MMU à l'aide de cette nouvelle table d'adressage. 5 La table d'adressage est par exemple sauvegardée dans une mémoire persistante dédiée du dispositif électronique 1. Lors d'une mise sous tension suivante du dispositif électronique, le nouveau système d'exploitation est démarré. La nouvelle table d'adressage est récupérée par le nouveau système d'exploitation puis fournie au MMU. Les registres TLB de la MMU sont alors configurés de sorte à respecter cette table d'adressage. 10 Si le dispositif électronique 1 est par ailleurs équipé d'un programme d'uniformisation d'usure, il n'applique une telle uniformisation que sur les pages associées à des zones saines. Il peut également appliquer une uniformisation sur les autres pages, mais en appliquant un malus sur des compteurs de cycles associés aux pages. Dans le procédé qui vient d'être décrit, seuls des droits d'accès futurs à une section 15 donnée du nouveau système d'exploitation, compris dans les données de condition d'accès, ont été pris en considération par le programme de chargement pour décider si cette section devait être écrite dans une zone saine ou usée. Dans un deuxième mode de réalisation, les données de conditions d'accès reçues par le dispositif électronique renseignent sur une fréquence d'accès en écriture estimée à la 20 portion de programme dans la mémoire non-volatile. On entend ici par - fréquence d'accès » toute information permettant de discriminer les sections du programme en au moins deux groupes : - un premier groupe de sections qui sera fortement sollicité lors d'une exécution ultérieure du système d'exploitation par le processeur 2, 25 - un deuxième groupe de sections qui sera comparativement moins sollicité lors d'une lors d'une exécution ultérieure du système d'exploitation par le processeur 2. Cette information de fréquence d'accès est donc susceptible de comprendre deux valeurs : une première valeur indicative d'un grand nombre d'accès futurs à la section par le processeur 2 au cours d'une période de durée prédéterminée, et une deuxième valeur 30 indicative d'un plus petit nombre d'accès futurs à la section par le processeur 2 au cours d'une période ayant la même durée prédéterminée. En pratique, cette information de fréquence d'accès en écriture peut être obtenue au cours d'une étape préliminaire de profilage du nouveau système d'exploitation conduite sur un dispositif témoin de préférence identique au dispositif électronique 1. Au cours de cette 35 étape préliminaire de profilage, le nouveau système d'exploitation est compilé dans un mode 10 spécial de sorte à intégrer des outils de profilage. Le nouveau système d'exploitation est ensuite installé dans le dispositif témoin, puis exécuté par le processeur de ce dispositif témoin au cours d'une période relativement longue. Au cours de cette période, les outils de profilage intégrés au système d'exploitation permettent de déterminer quelles sont les 5 instructions de code et les données statiques du système d'exploitation les plus fréquemment utilisées par le processeur du dispositif témoin, et donc, par analogie, qui seront les plus fréquemment utilisées par le processeur 2 du dispositif électronique 1. C'est donc grâce à ces outils de profilage, connus en eux-mêmes, que les informations de fréquence d'accès futur à chaque section peuvent être déterminées et incluses dans les données de conditions 10 d'accès fournies au programme de chargement du dispositif électronique 1. Dans le deuxième mode de réalisation, le programme de chargement sélectionne une zone de destination d'une section de la manière suivante : - la zone de destination est une zone saine lorsque la fréquence d'accès en écriture est élevée, et 15 - la zone de destination est une zone usée lorsque la fréquence d'accès est comparativement plus faible. De cette façon, on maximise la durée de vie du programme s'exécutant sur la mémoire non volatile 4 du dispositif 1 discret, ou intégré, cette mémoire s'usant pour chaque cycle d'effacement/écriture lors de l'exécution REVENDICATIONS1. Procédé embarqué sur dispositif discret ou intégré d'écriture d'un programme incluant code et données dans une mémoire non-volatile, le procédé comprenant des étapes de : - pour une pluralité de zones de la mémoire non-volatile, détermination (102) sans données préalables d'un état d'usure de la zone avant écriture du nouveau programme, - réception et utilisation (106) de données de condition d'accès à une portion du programme depuis la mémoire volatile, la détermination desdites données étant mise en oeuvre avant que la portion du programme ne soit écrite dans la mémoire non- volatile, - sélection (110, 116) d'au moins une des zones de la mémoire non-volatile où écrire la portion du programme, en fonction des données et des états d'usure déterminés. 2. Procédé selon la revendication 1, dans lequel les données de condition d'accès renseignent sur des droits d'accès à la portion de programme dans la mémoire non-volatile. 3. Procédé selon la revendication 2, dans lequel la zone sélectionnée est - une zone usée lorsque les droits d'accès sont en lecture seule, - une zone saine lorsque les droits d'accès sont en lecture et en écriture. 4. Procédé selon l'une des revendications précédentes, dans lequel les données de condition d'accès renseignent sur une fréquence d'accès en écriture estimée à la section de programme (code et données) dans la mémoire non-volatile. 5. Procédé selon la revendication précédente, dans lequel la zone sélectionnée est - une zone saine lorsque la fréquence d'accès en écriture est élevée, et - une zone usée lorsque la fréquence d'accès en écriture est faible. 6. Procédé selon les revendications 2 et 4 prises en combinaison, dans lequel la zone sélectionnée est - une zone usée lorsque les données de condition d'accès indiquent que les droits sont en lecture seule ou que la fréquence d'accès en écriture est faible, 12 - une zone saine lorsque les données de condition d'accès indiquent cumulativement que les droits d'accès sont en lecture et en écriture, et que la fréquence d'accès en écriture est élevée. 5 7. Procédé selon l'une des revendications précédentes, comprenant le signalement (114) d'un message d'erreur lorsque les données déterminées autorisent que la zone sélectionnée soit une zone saine, mais qu'il ne reste plus aucune zone saine de disponible dans la mémoire non volatile où écrire la portion de programme. 10 8. Procédé selon l'une des revendications précédentes, comprenant un abandon (114) de l'écriture du programme dans la mémoire non volatile, lorsque les données déterminées autorisent que la zone sélectionnée soit une zone saine, mais qu'il ne reste plus aucune zone saine de disponible dans la mémoire non volatile où écrire la portion de programme. 15 9. Procédé selon l'une des revendications précédentes, dans lequel le programme est un système d'exploitation destiné à remplacer un autre système d'exploitation ou une partie, déjà présent dans la mémoire non volatile. 10. Produit programme d'ordinateur comprenant des instructions de code de programme 20 pour l'exécution des étapes du procédé selon l'une des revendications précédentes, lorsque ce procédé est exécuté par au moins un processeur.