FR 2779842 A1 19991217 FR 9807529 A 19980615 I PROCEDE DE GESTION DE L'EXECUTION D'UN PROGRAMME DANS UN DISPOSITIF A CIRCUIT INTEGRE L'invention concerne un procédé de gestion de l'exécution d'un programme dans un dispositif à circuit intégré et, en particulier, dans une puce d'un objet portatif au format carte à puce ou au format classique des modules d'identification abonné (SIM). Les dispositifs à circuit intégré sont utilisés notamment dans des applications sécuritaires au sein de cartes ou de modules SIM. Ils comportent une unité centrale de traitement (CPU) qui assure la gestion de données entre des mémoires ROM, RAM, EEPROM ou Flash PROM dudit dispositif, par l'intermédiaire de bus de données et d'adresses. Ces dispositifs sont de plus en plus performants. En effet, ils sont cadencés à des vitesses de plus en plus élevées, les temps de lecture et/ou d'écriture des mémoires qu'ils comportent sont sensiblement diminués et la taille desdites mémoires est de plus en plus importante. Par ailleurs, ces dispositifs reconnaissent et exécutent des programmes rédigés dans des langages informatiques de haut niveau. Il s'agit notamment de langages informatiques dérivés des langages Java , C ou C+ +. On estime ainsi, qu'à court ou moyen terme, ces dispositifs seront susceptibles de gérer des programmes de l'ordre de 64 koctets. De tels programmes sont constitués d'instructions dites instructions cartes. L'exécution de ces instructions nécessite habituellement l'exécution de routines voire de sous-routines implémentées dans les dispositifs à circuit intégré sous forme logicielle, en EEPROM ou en ROM. Ces routines et/ou sous-routines renvoient à l'exécution d'instructions de bas niveau comprises par la CPU. Dans la suite de la présente description, on utilisera le terme instruction pour désigner une instruction carte. Pour l'exécution d'un programme et, par suite, pour l'exécution d'instructions, de routines et de sous-routines auxquelles fait appel ledit programme, on dispose, de manière classique, d'un espace mémoire formant une pile (Stack en anglo-saxon). Cette pile permet à la CPU d'exécuter une instruction, routine ou sous-routine sans perte des adresses de retour auxquelles il faudra revenir pour l'exécution des routines ou sous-routines en suivant dans le déroulement de chaque instruction du programme. Néanmoins, lors de l'exécution du programme, le dispositif à circuit intégré est susceptible de recevoir des instructions qui n'ont pas de lien avec le programme. Ledit dispositif doit ainsi gérer, de manière concomitante, l'exécution des instructions du programme et les instructions reçues. Cette gestion, assurée de la manière classique précitée à l'aide de la mémoire de sauvegarde d'adresses de retour, conduit à une perte du contexte propre aux instructions du programme, l'exécution de l'instruction qui n'a pas de lien avec le programme impliquant une perte des données du contexte de l'instruction exécutée précédemment dans le déroulement du programme. Considérant ce qui précède, un problème que se propose de résoudre l'invention est de faire en sorte que la gestion de l'exécution d'une instruction d'un programme soit permise sans perte du contexte propre audit programme, même dans le cas o ledit dispositif recevrait des instructions qui n'ont pas de lien avec ledit programme. La solution de l'invention au problème précité a pour objet un procédé de gestion de l'exécution concomitante, dans un dispositif à circuit intégré destiné à être intégré au sein d'un corps d'objet portatif et comportant un microcontrôleur et une mémoire, d'une part, d'un programme PRG comprenant une ou plusieurs instructions Ii(PRG),..., In(PRG),..., IN(PRG), une des desdites instructions faisant appel à une ou plusieurs routines RI(In(PRG)),..., Rp(In(PRG)),... Rp(In(PRG)) et, le cas échéant, à une ou plusieurs sous-routines SR1(Rp(In(PRG))),..., SRq(Rp(In(PRG))),..., SRQ(Rp(In(PRG))), et, d'autre part, d'une instruction Ix faisant appel à une ou plusieurs routines Rl(Ix),..., Ry(Ix),..., Ry(Ix) et, le cas échéant, à une ou plusieurs sous- routines SR1(Ry(Ix)),..., SRz(Ry(Ix)),..., SRz(Ry(Ix)) selon lequel procédé, une adresse ADD[(Ry(Ix))] de la routine Ry(Ix) ou une adresse ADD[SRz(Ry(Ix))] de la sous-routine SRz(Ry(Ix)) est enregistrée dans une première mémoire de sauvegarde d'adresses de retour STK1, caractérisé en ce que, pour l'exécution du programme PRG, une adresse ADD[In(PRG)] d'une instruction In(PRG), une adresse ADD[Rp(In(PRG))] d'une routine Rp(In(PRG)) ou, le cas échéant, une adresse ADD[SRq(Rp(In(PRG)))] d'une sous-routine SRq(Rp(In(PRG))), est enregistrée dans une seconde mémoire de sauvegarde d'adresses de retour STK2, la première mémoire de sauvegarde d'adresses de retour STK1 étant différente de la seconde mémoire de sauvegarde d'adresses de retour STK2. L'invention sera mieux comprise à la lecture de l'exposé non limitatif qui suit, rédigé au regard des dessins qui l'accompagne, dans lesquels: - la figure 1 résume, de manière schématique, un mode de réalisation du procédé de l'invention. Les dispositifs à circuit intégré selon l'invention sont des puces destinées à être intégrées au sein de corps d'objets portatifs au format carte ou jeton, ou alors, dans des formats autres. La plupart de ces objets ont des caractéristiques définies notamment dans les normes ISO 78-10, 78-16, 14443 et GSM 11.11 et 11.14, le contenu desdites normes étant intégré au présent exposé de l'invention, par citation de références. On se référera, dans la suite de cet exposé, à l'exemple d'un module d'identification abonné (module SIM). Un tel module SIM comprend un dispositif à circuit intégré qui comporte une unité centrale de traitement (CPU), ladite CPU assurant, par l'intermédiaire de bus de données et d'adresses, la gestion des données entre des mémoires non volatiles ROM, volatiles RAM et non volatiles programmables et effaçables électriquement EEPROM ou Flash PROM dudit dispositif. Un ou plusieurs programmes PRG peuvent être chargés résidents dans une mémoire du module SIM, notamment dans sa mémoire EEPROM. Un programme PRG se compose d'une ou plusieurs instructions I(PRG),..., In(PRG),..., IN(PRG), n et N étant des nombres entiers supérieurs ou égaux à 1. Ces instructions peuvent par exemple être consituées de byte codes résultant d'une pré- compilation puis d'un traitement d'instructions Java . Elles peuvent être rédigées en langage C ou C++ ou tout autre langage de haut niveau. Pour l'exécution d'une instruction In(PRG), il est généralement fait appel à une ou plusieurs routines Rl(In(PRG)),..., Rp(In(PRG)),.... Rp(In(PRG)), p et P étant des nombres entiers supérieurs ou égaux à 1. Par ailleurs, pour son exécution, une routine Rp(In(PRG)) est susceptible de faire appel à une ou plusieurs sous-routines SR1(Rp(In(PRG))),..., SRq(Rp(In(PRG))),..., SRQ(Rp(In(PRG))), q et Q étant des nombres entiers supérieurs ou égaux à 1. Il en va de même et ainsi de suite pour l'exécution des sous-routines SRq(Rp(In(PRG))), celles-ci pouvant en effet faire appel à d'autres sous-routines. En pratique, les routines et sous-routines d'un programme sont utilisées dans un voire plusieurs autres programmes. On limite ainsi l'espace mémoire utile pour l'enregistrement de plusieurs programmes dans un module selon l'invention. Lorsque le module SIM est connecté à un équipement mobile, par exemple un téléphone mobile, ledit module SIM est susceptible de recevoir, dudit équipement mobile, des instructions Ix qui n'ont pas de lien avec le programme PRG. De telles instructions Ix sont listées par exemple dans la norme précitée GSM 11.11. On citera par exemple les instructions SELECT ou READ BINARY. Ces instructions Ix font en général appel à une ou plusieurs routines RI(Ix),..., Ry(Ix),..., Ry(Ix), y et Y étant des nombres entiers supérieurs ou égaux à 1. De plus, de même que dans le cas précédemment décrit, les routines Ry(Ix) font appel, le cas échéant, à une ou plusieurs sous-routines SRi(Ry(Ix)),..., SRz(Ry(Ix)),.... SRz(Ry(Ix)), lesdites sous-routines faisant elles-mêmes parfois appel à d'autres sous-routines et ainsi de suite. Selon l'invention, pour la gestion de l'exécution concomitante, dans le module SIM, d'une part, du programme PRG et, d'autre part, d'une instruction Ix qui n'a pas de lien avec le programme PRG, on utilise deux mémoires de sauvegarde d'adresses de retour, une première mémoire de sauvegarde d'adresses de retour STK1I et une seconde mémoire de sauvegarde d'adresses de retour STK2, la première mémoire STK1 étant différente de la seconde mémoire STK2. La première mémoire STK1 est une mémoire classique implémentée en hardware masque alors que la seconde mémoire STK2 est une mémoire logicielle implémentée en masque logiciel. Chacune des deux mémoires comporte un pointeur STKP1 et STKP2 qui pointe l'adresse de retour à laquelle il faudra revenir en premier lieu pour l'exécution du programme PRG ou de l'instruction Ix. I1 s'agit, en pratique, de la dernière adresse enregistrée dans les mémoires. Les adresses ADD[(Ry(Ix))] des routines Ry(Ix) des instructions Ix voire les adresses ADD[SRz(Ry(Ix))] des sous-routines SRz(Ry(Ix)) desdites instructions sont uniquement enregistrées dans la première mémoire classique STK1. Par contre, les adresses ADD[In(PRG)] des instructions In(PRG), les adresses ADD[Rp(In(PRG))] des routines Rp(In(PRG)) et les adresses ADD[SRq(Rp(In(PRG)))] des sous-routines SRq(Rp(In(PRG))) desdites instructions In(PRG) sont enregistrées, en particulier, dans la seconde mémoire logicielle STK2. Le procédé de l'invention est mis en oeuvre de la manière décrite ciaprès, au regard d'un cas particulier de l'exécution d'un programme PRG résident dans le module SIM et ce, concomitamment avec l'exécution d'une instruction carte classique Ix envoyée par l'équipement mobile au SIM. Dans ce cas particulier, l'exécution du programme PRG nécessite l'exécution d'une instruction In(PRG) et d'une instruction In+l(PRG), l'instruction In(PRG) nécessitant elle-même l'exécution des routines Rp(In(PRG)) et Rp+l(In(PRG)), l'exécution de la routine Rp(In(PRG)) nécessitant elle-même l'exécution des sous-routines SRq(Rp(In(PRG))) et SRq+il(Rp(In(PRG))). Par ailleurs, l'exécution de l'instruction Ix nécessite quant à elle l'exécution des routines Ry(Ix) et Ry+l(Ix), l'exécution de la routine Ry(Ix) nécessitant elle-même l'exécution de sous-routines SRz(Ry(Ix)) et SRz+l(Ry(Ix)). Selon l'invention, l'adresse ADD[In+i(PRG)] de l'instruction In+i(PRG), qui doit être exécutée à la suite de l'instruction In(PRG), est automatiquement, et de manière classique, enregistrée dans la mémoire STK1. De même, l'adresse ADD[Rp+l(In(PRG))] de la routine Rp+I(In(PRG)), qui doit être exécutée à la suite de la routine Rp(In(PRG), est automatiquement, et de manière classique, enregistrée dans la mémoire STK1. Enfin, lorsque dans l'exécution de l'instruction In (PRG) du programme, la routine Rp(In(PRG)) renvoit à l'exécution de la sousroutine SRq(Rp(In(PRG))), l'adresse ADD[SRq+i(Rp(In(PRG)))] de la sousroutine SRq+l(Rp(In(PRG))), qui doit être exécutée à la suite de la routine SRq(Rp(In(PRG))) est automatiquement, et de manière classique, enregistrée dans la mémoire STK1. Toutefois, immédiatement après chaque enregistrement, l'exécution d'une fonction de sauvegarde notée SV réinitialise la mémoire STK1 et sauvegarde chaque adresse dans la mémoire STK2. A la figure 1, cette fonction est écrite SV. A noter que, la mémoire STK1 étant réinitialisée, le SIM est susceptible de recevoir une instruction Ix du mobile, externe au programme PRG. A noter par ailleurs que le pointeur de la mémoire STK2 pointe sur la dernière adresse enregistrée indiquant par la même l'adresse de la prochaine routine ou sous-routine à exécuter pour l'exécution de l'instruction In(PRG) du programme. Si l'instruction classique Ix est reçue pendant l'exécution de l'instruction In(PRG) du programme, cette instruction Ix est exécutée immédiatement de manière classique, en utilisant la mémoire STK1. A cet effet, lorsque l'exécution de la routine Ry(Ix) renvoit à l'exécution de la sous-routine SRz(Ry(Ix)), l'adresse de la sous-routine SRz+j(Ry(Ix)), qui doit être exécutée à la suite de la sous-routine SRz(Ry(Ix)), est enregistrée dans la mémoire STK1. Le pointeur pointe sur la dernière adresse enregistrée indiquant par la même l'adresse de la prochaine routine ou sous-routine à exécuter pour l'exécution de l'instruction Ix. A la fin de l'exécution de l'instruction Ix, l'exécution du programme PRG reprend. A cet effet, une fonction RETRIEVAL permet alors de retrouver les adresses des routines ou sous-routines à effectuer pour la continuation de l'exécution dudit programme PRG. La fonction RETRIEVAL effectue une copie de l'ensemble des adresses contenues dans la mémoire STK2 dans la mémoire STK1, sans perte de l'ordonnancement desdites adresses. Le pointeur STKP1 de la mémoire STK1 alors repositionné de manière à pointer la dernière adresse copiée dans la mémoire STK1, l'instruction, la routine ou la sous-routine pointée par ledit pointeur STKP1 est alors exécutée et ainsi de suite. A la fin de l'exécution du programme PRG, une instruction SCRIPT END permet avantageusement de réinitialiser la STK1 et de terminer ainsi l'exécution du programme PRG. Ainsi, selon l'invention, le contexte du programme PRG n'est pas perdu lors de l'exécution d'une instruction Ix. REVENDICATIONS 1. Procédé de gestion de l'exécution concomitante, dans un dispositif à circuit intégré destiné à être intégré au sein d'un corps d'objet portatif et comportant un micro-contrôleur et une mémoire, d'une part, d'un programme PRG comprenant une ou plusieurs instructions I1(PRG),..., In(PRG),..., IN(PRG), une des desdites instructions faisant appel à une ou plusieurs routines Rl(In(PRG)),..., Rp(In(PRG)),..., Rp(In(PRG)) et, le cas échéant, à une ou plusieurs sous-routines SRi(Rp(In(PRG))),..., SRq(Rp(In(PRG))),..., SRQ(Rp(In(PRG))), et, d'autre part, d'une instruction Ix faisant appel à une ou plusieurs routines Rl(Ix)..., R),..,..., Ry(Ix) et, le cas échéant, à une ou plusieurs sous-routines SRl(Ry(Ix)),... SRz(Ry(Ix)),..., SRz(Ry(Ix)) selon lequel procédé, une adresse ADD[(Ry(Ix))] de la routine Ry(Ix) ou une adresse ADD[SRz(Ry(Ix))] de la sous-routine SR,(Ry(Ix)), est enregistrée dans une première mémoire de sauvegarde d'adresses de retour STK1, caractérisé en ce que, pour l'exécution du programme PRG, une adresse ADD[In(PRG)] d'une instruction In(PRG), une adresse ADD[Rp(In(PRG))] d'une routine Rp(In(PRG)) ou une adresse ADD[SRq(Rp(In(PRG)))] d'une sous- routine SRq(Rp(In(PRG))), est enregistrée dans une seconde mémoire de sauvegarde d'adresses de retour STK2, la première mémoire de sauvegarde d'adresses de retour STK1 étant différente de la seconde mémoire de sauvegarde d'adresses de retour STK2. 2. Procédé selon la revendication 1, caractérisé en ce qu'il comporte une étape selon laquelle on exécute une fonction SV de sauvegarde de réinitialisation de la première mémoire de sauvegarde d'adresses de retour STK1 et on enregistre une adresse ADD[Rp(In(PRG))] d'une routine Rp(In(PRG)) ou ADD[SRq(Rp(In(PRG)))] d'une sous-routine dans la mémoire de sauvegarde d'adresses de retour STK2. 3. Procédé selon l'une des revendications 1 ou 2, caractérisé en ce qu'il comporte une étape selon laquelle on exécute une fonction RETRIVAL de copie de l'ensemble des adresses contenues dans la mémoire de sauvegarde d'adresses de retour STK2, dans la mémoire de sauvegarde d'adresses de retour STK 1.