FR 3053810 A1 20180112 FR 1656413 A 20160705 53 810 PROCEDE DE TRANSACTION COMPRENANT DES OPERATIONS D'ECRITURE DE DONNEES DANS UNE MEMOIRE NON VOLATILE La présente invention concerne la gestion d'une transaction dans un système de transaction ayant des ressources limitées, tel qu'une carte à microcircuit mettant en oeuvre par exemple un environnement Java CardTM La présente invention vise en particulier à minimiser la taille mémoire et le nombre d'accès en écriture à une mémoire non volatile dans un tel système. En effet, les accès en écriture à une mémoire non volatile comme les mémoires EEPROM ou Flash sont particulièrement coûteux en temps de traitement. La figure 1 représente un exemple d'architecture de carte à microcircuit, par exemple agencé sur un support portable HD tel qu'une carte plastique ou tout autre support. La carte à microcircuit comporte un microcircuit comprenant un microprocesseur PRC, un circuit d'entrée/sortie IOC, des mémoires M1, M2, M3 reliées au microprocesseur par un bus de données et d'adresse et, optionnellement, un coprocesseur CP1 de calcul cryptographique ou un accélérateur arithmétique, et un générateur RGN de nombre aléatoire. La mémoire M1 est une mémoire morte ou mémoire ROM ("Read-Only Memory") contenant le système d'exploitation du microprocesseur ("Operating System"). La mémoire M2 est une mémoire non volatile, par exemple une mémoire EEPROM ou Flash, contenant des programmes applicatifs et des données non volatiles. La mémoire M3 est une mémoire de type RAM ("Random Access Memory"). Le circuit d'interface de communication IOC peut être du type à contact, par exemple selon la norme ISO/IEC 7816, du type sans contact à couplage inductif, par exemple selon la norme ISO/IEC 14443A/B ou ISO/IEC 13693, du type sans contact par couplage électrique (circuit d'interface UHF), ou à la fois du type à contact et sans contact. Le circuit d'interface IOC peut être également relié par l'intermédiaire d'une interface spécifique, à un autre circuit comme un contrôleur NFC, ou un circuit principal d'un terminal tel qu'un terminal mobile ou un objet connecté. Le circuit intégré CT peut être configuré pour exécuter des opérations de chiffrement, de déchiffrement ou de signature de messages qui lui sont 3053810 2 envoyés, au moyen d'une fonction de cryptographie. Cette fonction de cryptographie peut être exécutée par le processeur PRC du circuit CT ou "sous-traitée" partiellement ou totalement par le processeur PRC au coprocesseur CP1. 5 Dans un environnement tel que celui d'une carte à microcircuit, le temps de calcul, et la capacité de la mémoire et en particulier de la mémoire volatile M3 sont limitées. Les accès en écriture de la mémoire non volatile M2 sont beaucoup plus couteux en énergie et en temps que les accès à la mémoire volatile. En outre, l'alimentation du circuit intégré peut être 10 interrompue à tout instant. Lors d'une transaction, le circuit intégré est mis sous tension. Le code à exécuter peut être ensuite chargé de la mémoire non volatile M1 ou M2 dans la mémoire volatile M3, et préparé pour pouvoir être exécuté. Il est également nécessaire de s'assurer de la cohérence des données mémorisées dans la mémoire volatile, qui a pu être affectée en 15 raison d'une coupure de l'alimentation du circuit intégré durant l'exécution d'une transaction par le processeur PRC. Une transition d'un état cohérent du système vers un autre peut impliquer des mises à jour de la mémoire non volatile M2. Ces mises à jour doivent être réalisées de manière atomique, c'est-à-dire en s'assurant soit 20 que toutes les mises à jour requises pour la transaction soient réalisées si la transaction arrive à son terme avec succès, soit qu'aucune de ces mises à jour ne soit réalisée si la transaction a échoué ou a été annulée ou interrompue. Une méthode destinée à assurer l'atomicité d'une transaction est 25 illustrée sur la figure 2. Cette méthode comprend des étapes El à E5. Aux étapes El et E2, un bloc de données OBj rassemblant les données d'une transaction est lu dans la mémoire non volatile M2 et chargé dans la mémoire volatile M3, ainsi que dans une zone tampon RBB appelée "Rollback Buffer" dans la mémoire non volatile M2. Durant l'étape E3, la 30 transaction proprement-dite est exécutée et des données du bloc de données OBj sont mis à jour dans la mémoire volatile M3. A la fin de la transaction, celle-ci est validée ("transaction commit") en exécutant les étapes E4 et E5. A l'étape E4, le bloc de données OBj dans la mémoire M3 est sauvegardé dans la mémoire M2, par exemple en mettant à jour le bloc de données OBj dans la mémoire M2. A l'étape E5, le bloc de données OBj 3053810 3 dans la zone tampon RBB est effacé ou invalidé. Si la transaction est interrompue, en raison d'une annulation ou d'une coupure d'alimentation du circuit intégré CT, la zone tampon RBB contient un bloc de données valide. Une procédure de démarrage du processeur PRC est configurée pour 5 transférer les blocs de données valides présents dans la zone tampon RBB à leur emplacement dans la mémoire M2 (étape E0). Ainsi, si la transaction a été interrompue, le bloc de données OBj est transféré de la zone tampon RBB à l'emplacement du bloc de données OBj dans la mémoire M2. Ensuite, l'étape E5 est exécutée pour invalider ou effacer le contenu de la zone 10 tampon RBB. De cette manière, si l'écriture du bloc de données OBj dans la mémoire M2 à l'étape E4 a été interrompue, il est assuré que la mémoire M2 soit restaurée dans son état avant le début de la transaction. Cette première méthode implique au minimum trois écritures dans la mémoire non volatile M2, que la transaction arrive à son terme (E2, E4, E5), ou non (E2, E0, E5). 15 Cependant, si toutes les données mises à jour relatives à la transaction peuvent être écrites dans la mémoire M2 en une seule opération d'écriture, l'usage de la zone tampon n'est pas nécessaire, puisque la mémoire non volatile M2 n'est mise à jour qu'à la fin de la transaction. En revanche, si les données dans les mémoires M2, M3 sont mémorisées en association avec 20 des données d'entête situées dans une autre zone de la mémoire M3, il est nécessaire de prévoir une ou plusieurs opérations d'écriture supplémentaires pour sauvegarder ces données d'entête dans la mémoire M2. Il est donc souhaitable de minimiser le nombre d'opérations d'écriture dans une mémoire non volatile d'un circuit intégré exécutant une transaction. 25 Il est également souhaitable de conserver la cohérence des données mémorisées dans la mémoire non volatile, même en cas d'interruption de la transaction à n'importe quel moment durant l'exécution de la transaction. Des modes de réalisation concernent un Procédé d'exécution d'une transaction par un microcircuit comprenant un processeur, une mémoire 30 volatile et une mémoire non volatile, le procédé comprenant des étapes consistant à : charger dans la mémoire volatile une table de données d'entête active lue dans la mémoire non volatile, la table de données d'entête active comprenant des adresses de blocs de données stockés dans la mémoire non volatile, charger dans la mémoire volatile un bloc de données 35 lu à une adresse de la mémoire non volatile, spécifiée dans la table de 3053810 4 données d'entête, exécuter une transaction durant laquelle le bloc de données est modifié dans la mémoire volatile, à la suite d'une validation de la transaction, copier le bloc de données modifié dans la mémoire non volatile, modifier la table de données d'entête active dans la mémoire volatile en y 5 inscrivant une adresse d'écriture dans la mémoire non volatile, du bloc de données modifié, et copier dans la mémoire non volatile la table de données d'entête modifiée lue dans la mémoire volatile. Selon un mode de réalisation, le procédé comprend une étape de modification d'une valeur de compteur associée à la table de données 10 d'entête modifiée dans la mémoire volatile, la table de données d'entête modifiée étant copiée en un emplacement libre de la mémoire non volatile en association avec la valeur de compteur modifiée, la table de données d'entête active dans la mémoire non volatile étant associée à la valeur de compteur la plus récente. 15 Selon un mode de réalisation, le procédé comprend des étapes consistant à : dupliquer dans la mémoire volatile des données du bloc de données à modifier durant l'exécution de la transaction, recevoir un ordre d'annulation de la transaction, et reconstituer le bloc de données avant modification à l'aide des données dupliquées du bloc de données dans la 20 mémoire volatile. Selon un mode de réalisation, les données à modifier sont dupliquées dans une table comprenant pour chaque donnée à modifier un identifiant du bloc de données dans lequel se trouve la donnée à modifier, la donnée à modifier et une position de la donnée à modifier dans le bloc de données. 25 Selon un mode de réalisation, plusieurs blocs de données sont chargés dans la mémoire volatile et modifiés durant la transaction, le procédé comprenant des étapes de copie des blocs de données modifiés dans une zone de transfert de la mémoire volatile, formant un bloc transférable dans la mémoire non volatile en une seule opération d'écriture, 30 et de copie de la zone de transfert dans la mémoire non volatile. Selon un mode de réalisation, le bloc rassemblant les blocs de données modifiés est formé à la place d'une table mémorisant des valeurs précédentes de données modifiées dans la mémoire volatile. Selon un mode de réalisation, la table de données d'entête comprend 35 pour chaque bloc de données une adresse de stockage du bloc de données 3053810 5 dans la mémoire non volatile, la table de données d'entête dans la mémoire volatile comprenant en outre pour chaque bloc de données copié dans la mémoire volatile une adresse de stockage du bloc de données dans la mémoire volatile. 5 Des modes de réalisation peuvent également concerner un circuit comprenant un processeur, une mémoire non volatile, et une mémoire volatile, le processeur étant configuré pour mettre en oeuvre le procédé défini précédemment. Des modes de réalisation peuvent également concerner un dispositif 10 comprenant un tel circuit, agencé sur un support. Des modes de réalisation peuvent également concerner un produit programme d'ordinateur directement chargeable dans une mémoire interne d'un ordinateur et comprenant des portions de code qui lorsqu'elles sont exécutées par un ordinateur configurent l'ordinateur pour mettre en oeuvre 15 les étapes du procédé défini précédemment. Des exemples de réalisation de l'invention seront décrits dans ce qui suit, à titre non limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 décrite précédemment, représente schématiquement un 20 circuit intégré classique, la figure 2 décrite précédemment, représente schématiquement le contenu d'une mémoire volatile et d'une mémoire non volatile du circuit intégré, pour illustrer une méthode classique de mise à jour de la mémoire non volatile, 25 les figures 3A, 3B représentent schématiquement le contenu d'une mémoire volatile et d'une mémoire non volatile d'un circuit intégré, à différentes étapes de mise à jour de la mémoire non volatile, selon un mode de réalisation, les figures 4A à 4D représentent schématiquement le contenu d'une 30 mémoire volatile et d'une mémoire non volatile du circuit intégré, à différentes étapes de mise à jour de la mémoire non volatile, selon un autre mode de réalisation, la figure 5 représente schématiquement le contenu d'une mémoire volatile et d'une mémoire non volatile du circuit intégré, à différentes étapes 3053810 6 de mise à jour de la mémoire non volatile, selon un autre mode de réalisation. Les figures 3A, 3B représentent schématiquement le contenu d'une mémoire non volatile et d'une mémoire volatile, telles que les mémoires M2, 5 M3 du circuit intégré CT représenté sur la figure 1. Sur les figures 3A, 3B, la mémoire non volatile M2 contient des blocs de données OB1, 0B2, ... OBj. Chacun des blocs de données OBj est associé à des données d'entête HD1, HD2, HDj mémorisées dans la mémoire M2 dans une table d'entête HDT active. Les données d'entête HDj d'un bloc de données OBj contiennent 10 notamment un identifiant du bloc de données, une adresse de stockage du bloc de données OBj dans la mémoire M2, et la taille du bloc de données. A noter que les identifiants des blocs de données dans la table HDT peuvent être simplement les positions (ou indexes) des données d'entête de bloc de données dans la table HDT. Durant une étape initiale SO, le processeur PRC 15 lit la table d'entête HDT active dans la mémoire non volatile M2 et la charge dans la mémoire volatile M3. Le processeur PRC exécute ensuite les étapes 51 à S8 successivement. A l'étape 51, une transaction est activée dans le circuit intégré CT. Cette transaction utilise et modifie des données du bloc de données OBj. Le 20 bloc de données OBj est donc lu dans la mémoire M2 et chargé dans la mémoire M3. Les données d'entête HDj du bloc de données OBj copié sont complétées avec l'adresse de stockage du bloc de données dans la mémoire M3. A l'étape S2, le bloc de donnée OBj dans la mémoire M3 est copié dans une zone tampon RB1 de la mémoire M3. A l'étape S3, durant l'exécution de 25 la transaction, le bloc de données OBj est modifié dans la mémoire volatile M3. A l'étape S4 (figure 3B), la transaction est validée ("commit"), ce qui déclenche la fin de la transaction. Le bloc de données modifié OBj' résultant de la modification du bloc de données OBj durant la transaction est transféré 30 de la mémoire M3 dans un emplacement libre de la mémoire non volatile M2. A l'étape S5, les données d'entête HDj du bloc de données OBj sont mises à jour. En particulier, l'adresse où a été écrit le bloc de données modifié OBj' dans la mémoire M2 est inscrite dans les données d'entête HDj du bloc de données OBj dans la mémoire M3. A l'étape S6, la valeur d'un compteur 35 CNT est modifiée, par exemple incrémentée, dans la table d'entête HDT 3053810 7 mémorisée dans la mémoire M3. A l'étape S7, le bloc de données OBj est effacé de la zone tampon RB1. A l'étape S8, la table d'entête modifiée HDT' résultant de la modification de la table HDT aux étapes S5, S6, est transférée de la mémoire M3 en un emplacement libre de la mémoire M2, avec la valeur 5 de compteur modifiée CNT+1. Les adresses figurant dans la table HDT, des blocs de données dans la mémoire M3, ne sont pas copiées dans la mémoire M2. Le processeur PRC est alors configuré pour activer la table HDT se trouvant dans la mémoire M2 et associée à la valeur de compteur CNT la plus récente, par exemple la plus élevée. Ainsi, à l'étape SO, le 10 processeur PRC charge dans la mémoire volatile M3, la table HDT active et utilise cette table pour accéder aux différents blocs de données OBj mémorisés dans la mémoire M2. De cette manière, le bloc de données OBj dans la mémoire M2 devient invalide à la suite de l'étape S8 car il n'est pas référencé par la table HDT active. 15 Si la transaction est annulée avant l'étape S8, le processeur PRC exécute l'étape S4' (figure 3A). Durant l'étape S4', le bloc de donnée OBj est transféré de la zone tampon RB1 à l'emplacement de stockage du bloc de données OBj dans la mémoire M3, ce qui annule les modifications éventuelles du bloc de données OBj. Il est possible également de 20 simplement supprimer l'adresse du bloc de données OBj dans la mémoire M3, mémorisée dans les données d'entête HDj du bloc de données OBj dans la mémoire M3, ce qui rend le bloc de données invalide. Si ce bloc de données doit être modifié par la suite, il sera à nouveau chargé à partir de la mémoire M2 dans la mémoire M3. 25 Si une coupure d'alimentation du circuit CT se produit avant l'étape S8, la mémoire volatile M3 est effacée et la transaction est annulée. Tant que la table HDT modifiée n'est pas copiée dans la mémoire non volatile M2, le bloc de données modifié OBj' qui a été éventuellement chargé dans la mémoire M2 n'est pas référencé par la table HDT active dans la mémoire 30 M2, et donc est considéré comme invalide. Si l'écriture de la table HDT dans la mémoire M2 peut être interrompue notamment en raison d'une coupure d'alimentation, la valeur du compteur CNT peut figurer à la fin de la table d'entête HDT, de sorte que si l'écriture de la table HDT dans la mémoire M2 est interrompue en raison d'une coupure d'alimentation, la valeur du 35 compteur CNT n'est pas copiée dans la mémoire M2. Ainsi une table 3053810 8 d'entête HDT copiée dans la mémoire M2 ne peut être considérée active que si elle comporte une valeur de compteur CNT. Grâce à ces dispositions, seulement deux écritures (étapes S4, S8) dans la mémoire non volatile M2 sont nécessaires durant l'exécution d'une 5 transaction, y compris si les données de transaction sont gérées avec des données d'entête. Les figures 4A, 4B, 4C, 4D représentent schématiquement le contenu d'une mémoire non volatile et d'une mémoire volatile, telles que les mémoires M2, M3 du circuit intégré CT représenté sur la figure 1. Sur les 10 figures 4A à 4D, la mémoire non volatile M2 contient des blocs de données OB1, 0B2, 0B3, 0B4, ... (OBj). Chacun des blocs de données OBj est associé à des données d'entête HD1, HD2, HD3, HD4, (HDj) mémorisées dans une table d'entête HDT dans la mémoire M2. Les données d'entête HDj d'un bloc de données OBj contiennent notamment un identifiant IDj (Figure 15 4A) du bloc de données OBj, une adresse de stockage du bloc de données OBj dans la mémoire M2, et la taille du bloc de données. Ici encore, les identifiants des blocs de données dans la table HDT peuvent être simplement les positions (ou indexes) des données d'entête de bloc de données dans la table HDT. Durant une étape initiale S10, le processeur 20 PRC lit la table d'entête HDT dans la mémoire non volatile M2 et la charge dans la mémoire volatile M3. Le processeur PRC exécute ensuite des étapes S11 à S23 successivement. A l'étape S11 (figure 4A), une transaction est activée dans le circuit intégré CT. Cette transaction utilise et modifie des données des blocs de 25 données 0B3 et 0B2, par exemple. Le bloc de données 0B3 est donc lu dans la mémoire non volatile M2 et chargé dans la mémoire volatile M3. L'adresse d'écriture du bloc 0B3 est mémorisée dans les données d'entête HD3 dans la mémoire M3. La transaction doit modifier une donnée ODT3 du bloc de données 0B3. A l'étape S12, l'identifiant du bloc 0B3 est inscrit dans 30 une zone d'entêtes de blocs modifiés THD de la mémoire M3, et la donnée à modifier ODT3 est copiée dans une table de données modifiées stockée dans une zone TCM de la mémoire M3. Dans la table TCM, la donnée ODT3 est associée à l'identifiant ID3 du bloc de données 0B3, à l'adresse AD3 de ce bloc dans la mémoire M3, et à la position OF3 de la donnée ODT3 dans 35 ce bloc de données. A l'étape S13 (figure 4B), la donnée ODT3 est modifiée 3053810 9 dans le bloc de données 0B3 pour devenir une donnée NDT3. Durant cette même transaction, une donnée ODT2 du bloc de données 0B2 doit également être modifiée. Le bloc de données 0B2 est donc copié de la mémoire M2 dans la mémoire M3 à l'étape S14. A l'étape S15, l'identifiant du 5 bloc 0B2 est inscrit dans la zone d'entêtes de blocs modifiés THD dans la mémoire M3, et la donnée à modifier ODT2 est copiée dans la table de données modifiées TCM, et associée à l'identifiant 1D2 du bloc de données OB2, à l'adresse AD2 de ce bloc de données dans la mémoire M3, et à la position OF2 de la donnée ODT2 dans ce bloc de données. La donnée à 10 modifier ODT2 peut être également associée dans la table TCM à une donnée de vérification d'intégrité, de manière à ne restaurer si nécessaire que des données intègres. A l'étape S16 (figure 4C), durant l'exécution de la transaction, la donnée ODT2 dans le bloc de données 0B2 stocké dans la mémoire volatile M3 est remplacée par la donnée NDT2. 15 A l'étape S17, la transaction est validée, ce qui déclenche la fin de la transaction. Les blocs de données modifiés 0B2', 0B3' dans la mémoire M3 durant la transaction sont transférés dans une zone de transfert de la mémoire M3 où les données modifiées sont regroupées pour former un seul bloc transférable dans la mémoire M2 en une seule opération d'écriture. 20 Cette zone de transfert peut être située dans la zone de mémorisation des blocs de données de transaction avant la zone THD. A l'étape S18, le bloc de données modifiées regroupant les blocs de données 0B2', 0B3' est copié de la mémoire M3 dans la mémoire M2 en une seule opération d'écriture. A l'étape S19 (figure 4D), la zone TCM dans la mémoire M3 est effacée. A 25 l'étape S20, la table d'entêtes HDT est mise à jour dans la mémoire M3. Ainsi, les adresses d'écriture des blocs 0B2, 0B3 dans la mémoire M2 sont modifiées dans les données d'entête HD2, HD3 en utilisant les adresses d'écriture des blocs de données modifiés 0B2', 0B3' dans la mémoire M2 utilisées à l'étape S18. La valeur d'un compteur CNT associé à la table 30 d'entête HDT est modifiée, par exemple incrémentée, dans la mémoire M3. A l'étape S21, la table d'entête modifiée HDT' contenant les données d'entête modifiées HD2', HD3' des blocs de données modifiés 0B2', 0B3' et la valeur de compteur modifiée CNT+1, est transférée de la mémoire M3 en un emplacement libre de la mémoire M2. La table HDT peut ainsi occuper 35 alternativement deux zones de la mémoire M2. Le processeur PRC est alors 3053810 10 configuré pour activer à l'étape S10, la table HDT se trouvant dans la mémoire M2 et associée à la valeur de compteur CNT la plus récente, par exemple la plus élevée. La table HDT active est chargée dans la mémoire volatile M3. A l'étape S22, les données d'entête HD2, HD3 sont effacées de 5 la zone THD dans la mémoire M3. Si la transaction est annulée avant l'étape S17, le processeur PRC reconstitue si nécessaire les blocs de données 0B2, 0B3 d'origine en remplaçant les nouvelles données NDT2 et NDT3 par les anciennes ODT2, ODT3 mémorisées dans la zone TCM. 10 Si une coupure d'alimentation du circuit CT se produit avant l'étape S21, la mémoire M3 est effacée et la transaction est annulée. Comme la table d'entête HDT modifiée n'est pas copiée dans la mémoire non volatile M2, les blocs de données modifiés 0B2', 0B3' éventuellement copiés dans la mémoire M2 ne sont pas référencés par la table de données d'entête 15 active HDT dans la mémoire M2, laquelle référence les blocs de données OB2, 0B3 d'origine, avant le début de la transaction. Ainsi, seulement deux écritures (étapes S18, S21) dans la mémoire non volatile M2 sont nécessaires durant l'exécution d'une transaction, même si la transaction modifie plusieurs blocs de données stockés dans la mémoire 20 non volatile M2, et si les données de transaction sont associées à des données d'entête. Les étapes S10 à S21 autorisent l'annulation d'une transaction lorsque plusieurs transactions imbriquées sont exécutées. En effet, prenons le cas d'une première transaction modifiant le bloc de données 0B2, et une 25 seconde transaction imbriquée dans la première transaction et modifiant le bloc de données 0B3, seule la seconde transaction étant annulée. Le processeur PRC détermine alors les blocs de données modifiés par la transaction annulée, soit le bloc de données 0B3 associé aux données d'entête HD3. Le processeur PRC lit la zone TCM pour rechercher un 30 identifiant 1D3 du bloc de données 0B3 pour récupérer les données d'origine ODT3 et la position de ces données OF3 dans le bloc de données 0B3. Le processeur PRC lit ensuite l'adresse, dans la mémoire M3, du bloc de données 0B3 dans les données d'entête HD3 correspondant à l'identifiant 1D3 lu dans la zone TCM, et écrit les données d'origine ODT3 à l'adresse 35 définie par l'adresse du bloc de données lue dans les données d'entête HD3, 3053810 11 incrémentée de la position OF3 des données d'origine ODT3 dans le bloc de données, lue dans la zone TCM (sous réserve du succès d'un éventuel contrôle d'intégrité des données 1D3, OF3, ODT3 de la zone TCM associées à la donnée ODT3). De cette manière, il est possible de mettre dans leurs 5 états respectifs d'origine les données modifiées par la transaction annulée, sans affecter les données qui peuvent avoir été modifiées par d'autres transactions en cours. Ainsi il est possible d'annuler les seules modifications effectuées dans un bloc de données pendant une transaction annulée, tandis qu'une autre transaction en cours d'exécution modifie d'autres données du 10 bloc de données. A noter que si la première transaction est annulée, toutes les transactions qui sont imbriquées dans cette première transaction sont également annulées. Il est à noter qu'à l'étape S17, seuls sont copiés dans la zone de transfert de la mémoire volatile M3, les blocs de données modifiés par la ou 15 les transactions validées, et donc seuls ces blocs seront transférés dans la mémoire non volatile M2. Les autres transactions en cours et non validées peuvent donc être annulées sans interférer avec le traitement de validation (étapes S17 à S21) d'une autre transaction. Ces dispositions autorisent donc des écritures dans la mémoire non volatile M2 ne nécessitant pas de 20 validation d'une transaction. A noter également que si l'écriture de la table d'entête HDT dans la mémoire non volatile M2 est effectuée d'une manière atomique (étapes S8, S21), de sorte que la table HDT est soit totalement non écrite, la précédente table HDT étant présente dans la mémoire non volatile M2, soit totalement 25 écrite dans la mémoire M2 en remplaçant la précédente table HDT, il n'est pas nécessaire de gérer dans la mémoire M2, deux tables d'entête HDT et HDT' associées à des valeurs de compteur CNT (Figures 3A, 3B, 4A à 4D). La figure 5 représente schématiquement le contenu de la mémoire non volatile M2 et de la mémoire volatile M3. La figure 5 diffère de la figure 30 4C en ce que les étapes S17 et S18 sont remplacées par des étapes S17' et S18'. Selon un autre mode de réalisation, les étapes S17' et S18' sont exécutées à la suite des étapes S11 à S16, notamment lorsque la mémoire volatile M3 présente une capacité insuffisante pour stocker deux fois les blocs de données modifiés. 3053810 12 A l'étape S17', les blocs de données modifiés 0B2, 0B3 dans la mémoire M3 durant la transaction sont transférés dans la zone de données modifiées TCM de la mémoire M3 pour former un seul bloc transférable dans la mémoire M2 en une seule opération d'écriture. Si nécessaire, la zone TCM 5 peut être préalablement effacée à une étape S16'. A l'étape S18', les blocs de données modifiés 0B2', 0B3' sont copiés de la zone TCM dans la mémoire M2 en une seule opération d'écriture. L'étape S19 (figure 4D) précédemment décrite est ensuite exécutée pour effacer la zone TCM dans la mémoire M3. 10 Il apparaîtra clairement à l'homme de l'art que la présente invention est susceptible de diverses variantes de réalisation et diverses applications. En particulier, l'invention ne s'applique pas uniquement aux cartes à microcircuit, mais peut s'appliquer plus généralement à tout circuit comportant un processeur, une mémoire volatile et une mémoire non volatile. 15 REVENDICATIONS1. Procédé d'exécution d'une transaction par un microcircuit comprenant un processeur (PRC), une mémoire volatile (M3) et une mémoire non volatile (M2), le procédé comprenant des étapes consistant à : charger dans la mémoire volatile une table de données d'entête (HDT) active lue dans la mémoire non volatile, la table de données d'entête active comprenant des adresses de blocs de données stockés dans la mémoire non volatile, charger dans la mémoire volatile un bloc de données (OBj, 0B2, 0B3) lu à une adresse de la mémoire non volatile, spécifiée dans la table de données d'entête, exécuter une transaction durant laquelle le bloc de données est modifié dans la mémoire volatile, à la suite d'une validation de la transaction, copier le bloc de données modifié dans la mémoire non volatile, modifier la table de données d'entête active dans la mémoire volatile en y inscrivant une adresse d'écriture dans la mémoire non volatile, du bloc de données modifié, et copier dans la mémoire non volatile la table de données d'entête modifiée lue dans la mémoire volatile. 2. Procédé selon la revendication 1, comprenant une étape de modification d'une valeur de compteur (CNT) associée à la table de données d'entête (HDT) modifiée dans la mémoire volatile (M3), la table de données d'entête modifiée étant copiée en un emplacement libre (HDT') de la mémoire non volatile (M2) en association avec la valeur de compteur modifiée, la table de données d'entête active (HDT') dans la mémoire non volatile étant associée à la valeur de compteur la plus récente. 3. Procédé selon la revendication 1 ou 2, comprenant des étapes consistant à : dupliquer dans la mémoire volatile (M3) des données (OBj, ODT2, ODT3) du bloc de données (OBj, 0B2, 0B3) à modifier durant l'exécution de la transaction, 3053810 14 recevoir un ordre d'annulation de la transaction, et reconstituer le bloc de données avant modification à l'aide des données dupliquées du bloc de données dans la mémoire volatile. 5 4. Procédé selon la revendication 3, dans lequel les données à modifier (ODT2, ODT3) sont dupliquées dans une table (TCM) comprenant pour chaque donnée à modifier un identifiant (ID2, ID3) du bloc de données (0B2, 0B3) dans lequel se trouve la donnée à modifier, la donnée à modifier et une position (0F2, OF3) de la donnée à modifier dans le bloc de données. 10 5. Procédé selon l'une des revendications 1 à 4, dans lequel plusieurs blocs de données (0B2, 0B3) sont chargés dans la mémoire volatile (M3) et modifiés durant la transaction, le procédé comprenant des étapes de copie des blocs de données modifiés (0B2', 0B3') dans une zone de transfert 15 (TCM) de la mémoire volatile, formant un bloc transférable dans la mémoire non volatile (M2) en une seule opération d'écriture, et de copie de la zone de transfert dans la mémoire non volatile. 6. Procédé selon la revendication 5, dans lequel le bloc rassemblant 20 les blocs de données modifiés (0B2', 0B3') est formé à la place d'une table (TCM) mémorisant des valeurs précédentes de données modifiées dans la mémoire volatile (M3). 7. Procédé selon l'une des revendications 1 à 6, dans lequel la table 25 de données d'entête (HDT, HDT') comprend pour chaque bloc de données (0B2, 0B3) une adresse de stockage du bloc de données dans la mémoire non volatile (M2), la table de données d'entête dans la mémoire volatile (M3) comprenant en outre pour chaque bloc de données copié dans la mémoire volatile une adresse de stockage du bloc de données dans la mémoire 30 volatile. 8. Circuit (CT) comprenant un processeur (PRC), une mémoire non volatile (M2), et une mémoire volatile (M3), le processeur étant configuré pour mettre en oeuvre le procédé selon l'une des revendications 1 à 7. 3053810 15 9. Dispositif comprenant un circuit selon la revendication 8, agencé sur un support (HD). 10. Produit programme d'ordinateur directement chargeable dans une 5 mémoire interne d'un ordinateur et comprenant des portions de code qui lorsqu'elles sont exécutées par un ordinateur configurent l'ordinateur pour mettre en oeuvre les étapes du procédé selon l'une des revendications 1 à 7.