Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR MONITORING THE FREE SPACE OF A MEMORY STACK
Document Type and Number:
WIPO Patent Application WO/2019/002746
Kind Code:
A1
Abstract:
The present invention relates to a method for monitoring the free space of a stack of a microcontroller during the execution of a process using spaces of said stack from a start address to an end address of the stack, wherein said method is characterised in that it comprises: · in a prior step, writing N keys in the stack at N addresses of said stack, the memory space between two consecutive keys decreasing in a direction from the start address to the end address of the stack; · and, in a step of executing the process, saving the address of the current key, corresponding to the address of the existing key, among the N keys, that is closest to the stack start address. Figure 2

Inventors:
DELAIRE JACQUES (FR)
Application Number:
PCT/FR2018/051548
Publication Date:
January 03, 2019
Filing Date:
June 26, 2018
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
CONTINENTAL AUTOMOTIVE FRANCE (FR)
CONTINENTAL AUTOMOTIVE GMBH (DE)
International Classes:
G06F11/30; G06F9/50; G06F11/34
Foreign References:
US20140359246A12014-12-04
DE10036278A12002-02-07
JP2009020806A2009-01-29
JPH04266141A1992-09-22
Other References:
None
Attorney, Agent or Firm:
CONTINENTAL AUTOMOTIVE FRANCE (FR)
Download PDF:
Claims:
REVENDICATIONS

1. Procédé de surveillance de l'espace libre d'une pile d'un microcontrôleur pendant l'exécution d'un processus utilisant des espaces de ladite pile depuis une adresse de début à une adresse de fin de la pile, dans lequel ledit procédé est caractérisé en ce qu'il comprend :

· dans une étape préalable, l'écriture de N clés dans la pile à N adresses de ladite pile, l'espace mémoire entre deux clés consécutives étant décroissant dans une direction allant de l'adresse de début à l'adresse de fin de la pile ;

• et en ce que dans une étape d'exécution du processus, la sauvegarde de l'adresse de la clé courante, correspondant à l'adresse de la clé existante, parmi les N clés, la plus proche de l'adresse de début de pile,

• une étape consistant à comparer l'adresse de la clé courante à l'adresse d'une clé maximum correspondant à une adresse de la pile, et dans le cas où l'adresse de la clé courante est plus proche de l'adresse de fin que l'adresse de la clé maximum, l'adresse de ladite clé maximum prend pour valeur l'adresse de la clé courante.

2. Procédé de surveillance de l'espace libre d'une pile selon la revendication précédente, caractérisé en ce que depuis une adresse prédéfinie d'une première clé A(1 ), l'adresse de la i-ième clé, i variant de 2 à N, est égale à la partie entière de

{^pr x (ss - 04(1) - SSA)) où SS est égal à la taille de la pile, SSA l'adresse de départ de la pile.

3. Procédé de surveillance de l'espace libre d'une pile selon la revendication précédente, caractérisé en ce que ledit procédé comporte en outre l'écriture de deux clés à chaque extrémité de la pile.

4. Procédé de surveillance de l'espace libre d'une pile selon la revendication précédente, caractérisé en ce que l'adresse de la clé maximum est stockée dans une zone mémoire, non volatile.

5. Procédé de surveillance de l'espace libre d'une pile selon l'une des revendications précédentes, caractérisé en ce que les adresses des clés sont stockées dans un tableau de données.

6. Procédé de surveillance de l'espace libre d'une pile selon la revendication précédente, caractérisé en ce qu'une adresse d'une i-ème clé est accessible par son indice i dans le tableau de données.

7. Produit programme d'ordinateur, destiné à être exécuté par des moyens de traitement d'une unité de calcul, ladite unité de calcul comprenant en outre une mémoire, et ledit programme étant caractérisé en ce qu'il est configuré pour la mise en œuvre du procédé tel que défini dans les revendications 1 à 6.

Description:
Procédé de surveillance de l'espace libre d'une pile mémoire

L'invention concerne le domaine de la gestion d'une pile d'un microprocesseur.

Elle a plus particulièrement pour objet un procédé de surveillance de l'espace libre d'une pile d'un microcontrôleur pendant l'exécution d'un processus.

Dans le cas de systèmes embarqués, temps réel, ceux-ci doivent répondre à des contraintes de conception permettant de répondre aux besoins, tout en limitant les surcoûts. Ainsi, ces systèmes ont souvent un espace mémoire limité et des puissances de calculs optimisées pour l'exécution de tâches prédéfinies. Généralement, ces systèmes répondent aussi à des contraintes de sûreté de fonctionnement, étant dits critiques, pour lesquelles ils ne doivent pas subir de défaillance, c'est-à-dire toujours permettre d'obtenir des résultats justes, pertinents, et ce dans les délais attendus.

La plupart des microprocesseurs de systèmes embarqués gèrent nativement une pile par processus (c'est-à-dire un programme en cours d'exécution). Cette dernière correspond à une zone d'une mémoire volatile, ladite zone étant limitée en taille, habituellement déterminée au début du programme. Une pile est allouée à l'exécution d'un processus et sert particulièrement à gérer les appels de sous-programmes, le passage des paramètres et les variables. La taille de la pile d'exécution dépend de nombreux facteurs, incluant le langage de programmation, l'architecture du processeur, la quantité de mémoire vive (ou RAM pour « Random Access Memory » en langue anglaise) disponible, etc.

Un dépassement de pile (en anglais, « stack overflow ») est une anomalie de fonctionnement causée par un processus qui, lors de l'écriture dans une pile, écrit à l'extérieur de l'espace alloué à la pile, écrasant ainsi des informations nécessaires au processus. Il en résulte généralement une interruption du programme.

Pour éviter de telles situations problématiques, lors de la conception d'un système embarqué, on utilise de façon connue, des calculs théoriques évaluant la quantité de mémoire consommée dans les cas d'exécutions de processus correspondant à des scénarios théoriques limites. Ces scénarios amènent le plus souvent à largement surestimer la taille de pile nécessaire, entraînant un surcoût de conception.

On connaît également des méthodes de détection de capacité d'une pile 100 comme illustrée en figure 1. Dans de telles méthodes, une clé 1 10/120 (valeur numérique, chaînes de caractères) est initialisée à chaque extrémité de la pile. Au cours de l'exécution d'un processus utilisant la pile 100, il est déterminé si les clés 1 10 et/ou 120 ont été atteintes en vérifiant que les clefs sont toujours présentes à chaque extrémité de la pile. Dans le cas contraire, le processus est réinitialisé pour récupérer un état d'exécution du processus connu et sûr, afin d'éviter des comportements inattendus du système. Cependant une telle méthode perturbe l'exécution en cours du processus.

Il existe donc un besoin de proposer un procédé permettant d'estimer la taille optimale d'une pile de façon précise, peu consommatrice de ressources processeur, pour permettre une gestion optimale des ressources mémoires, notamment dans le cas de systèmes embarqués ou lesdites ressources sont particulièrement limitées.

La présente invention se rapporte selon un premier aspect à un procédé de surveillance de l'espace libre d'une pile d'un microcontrôleur, dans lequel ledit procédé comprend :

• dans une étape préalable, l'écriture de N clés dans la pile à N adresses de ladite pile, l'espace mémoire entre deux clés consécutives étant décroissant dans une direction allant de l'adresse de début à l'adresse de fin de la pile ;

• dans une étape d'exécution du processus, la sauvegarde de l'adresse de la clé courante, correspondant à l'adresse de la clé existante, parmi les N clés, la plus proche de l'adresse de début de pile.

Ledit procédé permet donc de suivre l'occupation de la pile, de façon optimale, le nombre de clés étant plus important en fin de pile qu'en début. De plus, ce procédé de surveillance ne consomme pas plus de ressources processeur que le procédé standard décrit ci-dessus.

Avantageusement, mais facultativement, le procédé selon l'invention peut en outre comprendre au moins une des caractéristiques suivantes :

• le procédé comporte l'écriture de deux clés à chaque extrémité de la pile ;

• depuis une adresse prédéfinie d'une première clé A(1 ) l'adresse de la i-ième clé, i variant de 2 à N, est égale à la partie entière de (^pr x ( ss ~ ( 1 - SSA) j où SS est égal à la taille de la pile, SSA l'adresse de départ de la pile.

Le procédé comprend une étape consistant à comparer l'adresse de la clé courante à l'adresse d'une clé maximum correspondant à une adresse de la pile, et dans le cas où l'adresse de la clé courante est plus proche de l'adresse de fin, que l'adresse de la clé maximum, l'index de ladite clé maximum prend pour valeur l'index de la clé courante ;

• l'index de la clé maximum est stockée dans une zone mémoire, non volatile ;

• les adresses des clés sont stockées dans un tableau de données ; et

• un index du tableau de données correspond à une adresse de clé.

Selon un deuxième aspect, l'invention concerne un produit programme d'ordinateur destiné à être exécuté par des moyens de traitement d'une unité de calcul, ladite unité de calcul comprenant en outre une mémoire, et configuré pour la mise en œuvre du procédé tel que défini dans les caractéristiques précédentes.

D'autres caractéristiques et avantages apparaîtront à la lecture de la description qui va suivre d'un mode de réalisation. Cette description sera donnée en référence aux dessins annexés dans lesquels :

- la figure 1 , déjà présentée, illustre schématiquement une pile d'un microprocesseur selon un mode de mise en œuvre de l'art antérieur ;

- la figure 2 illustre schématiquement une pile d'un microprocesseur selon un mode de mise en œuvre de l'invention ; et

- la figure 3 illustre schématiquement un procédé de contrôle de l'espace libre d'une pile d'un microcontrôleur pendant l'exécution d'un processus selon un mode de réalisation de l'invention.

La figure 2 illustre une pile 200 d'un microcontrôleur telle que mise en œuvre selon un mode de réalisation de l'invention. La pile 200 est définie dans une mémoire vive M par une adresse de départ 21 1 et une adresse de fin 212 de la pile 200.

Lors de l'exécution d'un processus utilisant la pile 200, un procédé de surveillance de l'espace libre de ladite pile 200 permet de surveiller l'utilisation de l'espace mémoire.

En référence à la figure 3, il est illustré des étapes d'un tel procédé de surveillance.

Dans une étape E10, dit d'initialisation, préalable à l'exécution du processus, la pile étant vide, une pluralité N+2 de clés K, (en considérant 0<i<N+1 ) est positionnée dans la pile 200, par l'écriture de valeurs spécifiques, d'initialisation, prédéterminées, à N+1 adresses distinctes A,. Les clefs K 0 et K N+ i étant celles du processus standard garantissant que les limites de la pile n'ont jamais été dépassées. Idéalement, le positionnement est effectué de telle façon que les clés K, sont plus présentes en fin de pile, qu'en début de pile. Ainsi, en allant de l'adresse de début 21 1 à l'adresse de fin de pile 212, l'espace mémoire séparant deux clés consécutives diminue. Cette répartition des clés permet un maillage graduel de la pile. En conséquence, on obtient un maillage plus important de la zone de marge 230 de la pile. Cette zone de marge 230 permet comme exposé précédemment d'être informé que l'espace libre de la pile devient limité, tout en gardant encore un certain nombre d'adresses utilisables dans la RAM.

Dans un mode de réalisation préféré, la répartition des clés K, est effectuée selon une loi de distribution exponentielle. Par exemple, les clés sont écrites aux adresses de la pile selon la lo (i) = A{1) + x (SS - 04(1) - SSA)) , où A(i) représente l'adresse de la i-ième clé K,, SSA l'adresse de départ de la pile, et SS la taille de la pile et i variant de 2 à N. Suite à l'écriture des N+2 valeurs d'initialisation, toujours dans l'étape E10, la première clé (correspondant à A(1 )) est sauvegardée et correspond à un index courant Cl. L'adresse de la première clé A(1 ) est idéalement définie par une adresse telle que l'on considère que la taille de la pile restant libre est acceptable et sure. Ainsi, l'adresse de la clé peut être définie à la moitié de la pile, ou par exemple à 70% ou 80% de la taille de la pile.

Idéalement, le nombre de clés K, est compris est déterminé en fonction de la taille de la pile et de la granularité finale désirée qui est égale à la taille du dernier espace déterminé par les clés soit ^ " ^^ " ^^pour N clés

Dans une étape E20, lors de l'exécution d'un processus utilisant la pile 200, à intervalle régulier (idéalement à la plus petite des récurrences de l'ensemble des processus gérés par un système exécutant lesdits processus), la première clé est vérifiée. Ainsi, à l'adresse A(1 ), le procédé vérifie que la valeur d'initialisation de la première clé est présente. Dans le cas où la valeur est changée, le processus a donc utilisé l'espace de la pile jusqu'au niveau de la clé courante, ce qui signifie que la clé a été atteinte. Dans le cas où la valeur est inchangée, la clé n'a pas été atteinte. Si la clé a été atteinte, le procédé vérifie que la clé suivante n'a pas été atteinte, et ainsi de suite jusqu'à détecter une clé K, non atteinte. La i-ième clé ainsi déterminée, est sauvegardée et la valeur de l'index courant Cl est mis à jour pour correspondre à cette clé.

L'adresse d'une clé K, peut être automatiquement calculée ou, idéalement, lors de l'initialisation, les adresses des clés K, sont stockées dans une structure de données, telle qu'un tableau par exemple, les indices du tableau étant mises en correspondance avec les indices i des clés.

Dans une étape E30, lorsque la dernière clé K N+ i est atteinte ou si la clef K 0 a été corrompue, comme pour le procédé standard, une réinitialisation du processus est déclenchée pour retrouver un état stable et sûr d'exécution du processus. Cette réinitialisation entraine également la réinitialisation de la pile 200. Ainsi, on procède à nouveau à l'étape E10 de répartition des clés et de réinitialisation de l'index courant Cl.

Dans une étape E40, on sauvegarde également une valeur d'index maximal Ml. Lors de la première initialisation de la pile, par exemple suite à la première mise sous tension d'un système exécutant le processus, Ml est égal à l'index courant Cl. Par la suite, quand la valeur de l'index courant Cl est mise à jour, le procédé vérifie que cette valeur n'est pas supérieure à la valeur de l'index maximal Ml. Dans le cas où cette valeur est supérieure, Ml est mis à jour avec la valeur de l'index courant Cl. L'index maximal Ml est sauvegardé dans une zone mémoire non volatile, par exemple une mémoire RAM non volatile (NVRAM). Ainsi, lors de la réinitialisation de la pile suite à la réinitialisation du processus provoquée dans une étape E30, la valeur de l'index maximale Ml n'est pas affectée.

L'index maximal Ml pourra être récupéré dans une étape ultérieure, permettant ainsi la vérification de la mesure de taille de pile restant libre. Cette taille restant libre TL est comprise entre TLinf(MI) et TLsup(MI) tel que TLinf(MI)≤TL <

TLsup(MI) avec TLinf(MI) = Ml→ x (-4(1) - SSA) et TLsup(MI) = =-^ - x

04(1) - SSA) pour Ml > 1 et TLinfil) = SS et TLsupil) = A(l) - SSA.

En conséquence, par la mise en œuvre de ce procédé de surveillance, il est possible de déterminer avec précision une quantité maximum de mémoire consommée lors par exemple des phases de conception d'un système embarqué. La taille de la pile pourra donc être définie de manière optimale. De plus, l'utilisation d'un tel procédé consomme peu de ressources processeur, permettant l'emploi de ces ressources pour d'autres tâches.