Brevet FR3013869A1 — publié le 20150529

PROCEDE DE DETECTION DES DEBORDEMENTS DE PILE ET PROCESSEUR POUR LA MISE EN OEUVRE D'UN TEL PROCEDE L'invention porte sur un procédé de détection des débordements de pile (« stack overflow » en anglais) et sur un processeur pour la mise en oeuvre d'un tel procédé. Les programmes écrits dans des langages évolués (C, C++, ADA, etc.) requièrent des piles de données pour isoler les variables locales de chaque fonction. Généralement, pour un processus ou fil d'exécution (« thread ») donné, la pile est unique et grandit à chaque imbrication de fonctions, puis se réduit lorsqu'une fonction se termine (retourne). La mémoire d'un ordinateur stocke en général une pluralité de piles, une pour chaque processus ou fil d'exécution. Un problème fréquemment rencontré avec les piles est le débordement de l'espace alloué à l'une d'entre elles, principalement à cause 15 d'erreurs de programmation (boucles récursives non bornées, branchements non attendus, etc.) ou de défauts fonctionnels (mauvaise analyse de la taille de pile, allocation de mémoire insuffisante, etc.). Des débordements peuvent également se produire lorsqu'on utilise des données dont on ne connait la taille qu'à la compilation (constructions avec des types non contraints, principalement 20 en langage ADA). Lorsqu'un tel débordement se produit, un processus en cours d'exécution écrit en dehors de la zone de mémoire qui est allouée à sa pile, le plus souvent dans la zone allouée à la pile d'un autre processus. Un tel problème est d'autant plus difficile à détecter et à analyser qu'il se manifeste à 25 retardement, lorsque le processus dont la pile a été corrompue est activé. Pour des raisons d'optimisation du code généré, le débordement de pile n'est classiquement pas géré par les compilateurs. Par le passé, certains compilateurs ADA stockaient dans un registre générique une valeur maximale admissible pour le pointeur de pile et ils 30 vérifiaient après le prologue de chaque fonction - donc juste après l'allocation de pile - que le pointeur de pile n'avait pas dépassé cette valeur maximale admissible. Cette solution était coûteuse en temps d'exécution et n'assurait pas une protection totale contre les risques de débordement. En outre, elle ne fournissait aucun aide au programmeur pour dimensionner les piles de manière à éviter les erreurs de débordement. Une autre méthode connue de l'art antérieur pour gérer les erreurs de débordement consiste à utiliser les unités de gestion de mémoire (MMU, de l'anglais « memory management unit ») généralement présentes dans les unités centrales (CPU, de l'anglais « central processing unit ») modernes. Le principe de cette technique consiste à créer un espace de garde autour de la zone mémoire allouée à la pile, c'est à dire un petit espace (usuellement de 4kB) avant et après la zone de pile, dont l'accès en o lecture/écriture est interdit. Lorsque le pointeur de pile déborde, l'application cherche à lire ou écrire dans cette zone interdite et produit une faute de page (exception programme). Cette technique présente plusieurs inconvénients : - elle nécessite une MMU, qui est une unité matérielle lourde, qui n'est pas présente dans tous les processeurs et qui est notamment absente 15 dans de nombreux processeurs « embarqués » ; - la programmation de la MMU est lourde et contraignante (pour cette raison, cette unité est usuellement désactivée pour la plupart des applicatifs) ; - la protection obtenue n'est pas absolue : si par exemple la 20 pile locale d'une fonction réserve une grande quantité de mémoire non exploitée, il est possible de passer au-dessus de l'espace de garde et de poursuivre dans un espace dont l'accès est autorisé bien que non alloué à la pile. Il convient de noter, en outre, que les MMU ne sont pas 25 prévues pour une telle application, qui en constitue une sorte de « détournement ». Afin d'aider au dimensionnement des piles, il est également connu d'écrire dans les cellules de mémoire allouées à la pile un motif connu. Après l'exécution d'un programme de test, on examine la mémoire pour 30 déterminer jusqu'à quel « niveau » de la pile ce motif a été écrasé par des opérations d'écriture. Cette technique est lourde à mettre en oeuvre et ne peut être appliquée qu'en phase de développement. Elle ne permet pas de gérer, ni même de détecter le débordement, mais à réduire la probabilité qu'ils se produisent en permettant une allocation de mémoire mieux adaptée aux exigences réelles des processus. L'invention vise à remédier à au moins certains des inconvénients précités de l'art antérieur. Plus précisément, l'invention vise à procurer un procédé de détection des débordements de pile simple à mettre en oeuvre, ne ralentissant pas de manière significative l'exécution des programmes et ne nécessitant pas d'unités matérielles complexes. Un procédé selon l'invention met en oeuvre à la fois des moyens matériels - relativement simples - et des moyens logiciels. Selon un mode de réalisation de l'invention, les débordements de pile sont détectés dès qu'ils se produisent, ce qui permet d'en minimiser les conséquences. Selon un autre mode de réalisation de l'invention, le procédé fournit en outre des données susceptibles d'aider un développeur dans le dimensionnement des piles. Ces deux modes de réalisation peuvent avantageusement être combinés. L'invention vise également à procurer un 15 processeur comprenant des moyens matériels pour la mise en oeuvre d'un tel procédé. Un objet de l'invention est un procédé de détection des débordements de pile comportant les étapes suivantes : A. stocker dans au moins un registre dédié au moins une 20 donnée choisie parmi : une donnée indicative d'une valeur maximale autorisée pour un pointeur de pile, et une donnée indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; B. effectuer une comparaison entre une valeur actuelle ou passée dudit pointeur de pile et ladite ou chaque dite donnée ; et 25 C. générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle ou passée dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur minimale autorisée. Selon différents modes de réalisation de l'invention : 30 - Ladite étape A. peut comporter le stockage dans deux registres dédiés d'une donnée indicative d'une valeur maximale autorisée pour un pointeur de pile et d'une donnée indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et ladite étape B. comporte au moins une comparaison entre la valeur dudit pointeur de pile et chaque dite donnée. - Le procédé peut comprendre également les étapes suivantes : Al : stocker dans au moins un autre registre dédié au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale prise par un pointeur de pile au cours de l'exécution d'un processus ou fil d'exécution, et une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit o processus ou fil d'exécution ; BI : mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution. - Ladite étape Al peut comporter le stockage dans deux registres dédiés d'une donnée indicative d'une valeur maximale prise par ledit 15 pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution et d'une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution. - Ladite étape Al peut être mise en oeuvre par un système d'exploitation lors de l'activation dudit processus ou fil d'exécution, et ladite 20 étape BI être mise en oeuvre par un module de traitement matériel lors de l'exécution dudit processus ou fil d'exécution. - Ladite étape A. peut être mise en oeuvre par un système d'exploitation lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. peuvent être mises en oeuvre par ledit système d'exploitation 25 lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation d'un autre processus ou fil d'exécution, et comprendre au moins une comparaison choisie parmi : une comparaison entre ladite donnée indicative d'une valeur maximale autorisée pour un pointeur de pile et ladite valeur maximale prise par ledit pointeur de pile lors de l'exécution du 30 processus ou fil d'exécution en cours de suspension ; et une comparaison entre ladite donnée indicative d'une valeur minimale autorisée pour un pointeur de pile et ladite valeur minimale prise par ledit pointeur de pile lors de l'exécution dudit processus ou fil d'exécution en cours de suspension. - Ladite étape A. peut être mise en oeuvre par un système d'exploitation lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. peuvent être mises en oeuvre par un module de traitement matériel lors de l'exécution dudit processus ou fil d'exécution, ladite étape B. comprenant une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée. - Lors de l'activation d'un processus ou fil d'exécution, ledit système d'exploitation peut récupérer du contexte d'un processus ou fil o d'exécution à activer ladite ou chaque dite donnée à stocker dans ledit ou chaque dit registre dédié et, lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation d'un autre processus ou fil d'exécution, ledit système d'exploitation peut sauvegarder ladite ou chaque dite donnée stockée dans un dit registre dédié dans le 15 contexte dudit processus ou fil d'exécution en cours de suspension. - Le procédé peut mettre en oeuvre un premier jeu de dits registres dédiés et un deuxième jeu équivalent de registres dédiés, et : lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode utilisateur, au moins ladite étape A. peut être mise en oeuvre par un système 20 d'exploitation opérant en mode superviseur et en utilisant le ou les registres dédiés dudit premier jeu ; et lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode superviseur, au moins ladite étape A. peut être mise en oeuvre par un système d'exploitation opérant en mode hyperviseur et en utilisant le ou les registres dédiés dudit deuxième jeu. 25 Un autre objet de l'invention est un processeur pour la mise en oeuvre d'un tel procédé comprenant : une unité centrale ; au moins un registre pour stocker un pointeur de pile ; au moins un registre dédié pour stocker au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale autorisée pour ledit pointeur de pile, et une donnée indicative d'une valeur 30 minimale autorisée pour ledit pointeur de pile ; et un module de traitement matériel configuré pour effectuer une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée, et générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur minimale autorisée. Encore un autre objet de l'invention est un processeur pour la mise en oeuvre d'un tel procédé comprenant : une unité centrale ; au moins un registre pour stocker un pointeur de pile ; au moins un registre dédié pour stocker au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale autorisée pour ledit pointeur de pile, et une donnée indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et au moins un registre dédié pour stocker au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale prise par un pointeur de pile au cours de l'exécution d'un processus ou fil d'exécution en cours, et une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution en cours; et un module de traitement matériel configuré pour mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution. D'autres caractéristiques, détails et avantages de l'invention ressortiront à la lecture de la description faite en référence aux dessins annexés donnés à titre d'exemple et qui représentent, respectivement : - La figure 1, un schéma fonctionnel simplifié d'un processeur selon un mode de réalisation de l'invention ; - La figure 2, un ordinogramme d'un traitement matériel selon un mode de réalisation de l'invention ; - Les figures 3A et 3B des ordinogrammes de procédés selon deux modes de réalisation de l'invention, mettant en oeuvre respectivement une détection matérielle et une détection logicielle des débordements de pile ; et - La figure 4 un schéma d'organisation de la mémoire d'un ordinateur mettant en oeuvre un procédé selon un mode de réalisation de l'invention. Le processeur P de la figure 1 comprend - d'une manière 30 conventionnelle - une unité centrale UC échangeant des données avec une mémoire MEM (qui, dans le cas de la figure, ne fait pas partie du processeur lui-même), un ensemble de N registres « génériques » R1 - RN et deux registres destinés à stocker un pointeur à une pile : RSP et SRSP, pour les processus exécutés en mode utilisateur et en mode superviseur, respectivement. Le processeur comprend également deux jeux de registres dédiés, servant à la détection des débordements de pile : un premier jeu comprenant les registres RHaut, RBas, RMin et RMax, pour le mode utilisateur et un second jeu comprenant les registres SRHaut, SRBas, SRMin et SRMax, pour le mode superviseur ; ainsi qu'un module matériel de traitement MMT représenté comme un composant séparé, mais pouvant en fait être intégré à l'unité centrale. Dans le mode de réalisation de la figure 1, tous les échanges de données se font par l'intermédiaire de l'unité centrale UC ; en variante, des échanges de données pourraient s'effectuer directement entre les registres dédiés et le module matériel de traitement MMT et/ou la mémoire MEM. Chacun des registres dédiés doit avoir une dimension au moins égale à celle du pointeur de pile SP/SSP. Le processeur P peut être mono- ou multicoeurs et être réalisé en tant que circuit intégré dédié ou synthétisé à partir de composants logiques programmables tels que des CPLD ou des FPGA. Le registre RHaut (SRHaut en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPHaut - indicative d'une valeur maximale autorisée pour le pointeur de pile SP ; en pratique, il s'agira le plus souvent de la valeur maximale de SP ne produisant pas de débordement de pile « par le haut ». Le registre RBas (SRBas en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPBas - indicative d'une valeur minimale autorisée pour le pointeur de pile SP ; en pratique, il s'agira le plus souvent de la valeur minimale de SP ne produisant pas de débordement de pile « par le bas ». Les valeurs de SPHaut et SPBas sont initialisées lors de l'allocation de la pile. Ces valeurs ne sont pas modifiées pendant l'exécution d'un processus ou fil d'exécution (dans la suite on parlera simplement de « processus »), mais seulement lors d'une commutation de contexte ; cela sera expliqué en détail plus loin, en référence aux figures 3Aet 3B. Le registre RMax (SRMax en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPMax - indicative d'une valeur maximale prise par le pointeur de pile SP au cours de l'exécution du processus (en pratique, il s'agira le plus souvent de la valeur maximale elle-même). Le registre RMin (SRMin en mode superviseur) est destiné à contenir une donnée - indiquée par la suite par SPMin - indicative d'une valeur minimale prise par le pointeur de pile SP au cours de l'exécution du processus (en pratique, il s'agira le plus souvent de la valeur minimale elle-même). Les valeurs SPMax et SPMin sont mises à jour continuellement au cours de l'exécution d'un processus. Il convient de noter qu'un processeur selon l'invention ne doit pas nécessairement comprendre tous les huit registres dédiés illustrés sur la figure 1. En effet, différents modes de réalisation d'un procédé selon l'invention peuvent utiliser seulement un jeu de registres (généralement le premier, destiné à la gestion des débordements provoqués par des processus exécutés en mode utilisateur), voire seulement un jeu incomplet, ne comprenant que la paire de registres RHaut/RBas (ou SRHaut/SRBas) ou la paire RMax/RMin (ou SRMax/SRMin). Par ailleurs, si on sait qu'un débordement de pile ne peut raisonnablement se produire que « vers le haut », il peut être suffisant de prévoir le registre RHaut et/ou le registre RMax (SRHaut et/ou SRMax si on s'intéresse aux processus exécutés en mode superviseur). Réciproquement, si on sait qu'un débordement de pile ne peut raisonnablement se produire que « vers le bas », il peut être suffisant de prévoir le registre RBas et/ou le registre 20 RMin (SRBas et/ou SRMin si on s'intéresse aux processus exécutés en mode superviseur). On comprend que, à la limite, un seul registre dédié peut suffire pour certains modes de réalisation particulièrement simples de le l'invention. De même, un procédé selon certains modes de réalisation de l'invention peut ne pas utiliser un module matériel de traitement MMT, mais 25 effectuer la détection des débordements de pile de façon logicielle (notamment, par le système d'exploitation lors d'une commutation de contexte) - les seuls éléments matériels non conventionnels utilisés étant alors le ou les registres dédiés. Dans le mode de réalisation de la figure 1, le module matériel 30 de traitement MMT effectue les traitements illustrés sur la figure 2. On considère que, lors de la création du processus en cours d'exécution, les valeurs SP, SPMin et SPMax ont été initialisées en leur attribuant une valeur SPINIT correspondant au « fond » de la pile ; si on utilise la convention la plus courante, selon laquelle on empile en décrémentant SP, on a SPINIT=SPHaut. Puis, à chaque cycle du processeur, on vérifie si la valeur du pointeur de pile SP est inférieure à la valeur actuelle de SPMin, stockée dans le registre RMin ou SRMin. Dans l'affirmative, SPMin est mise à jour, et devient égale à SP. Ensuite, on vérifie si la valeur du pointeur de pile SP est supérieure à la valeur actuelle de SPMax, stockée dans le registre RMax ou SRMax. Dans l'affirmative, SPMax est mise à jour, et devient égale à SP. Ces deux opérations de comparaison et d'assignation (dans des modes de réalisation simplifiés, une seule peut être présente) constituent la « partie I » du traitement. Puis (« partie II » du traitement) on vérifie si SP>SPHaut ou SP Initialement, le processus PR_1 est en cours d'exécution. Les débordements éventuels de sa pile sont détectés par le module matériel MMT et gérés par le service du système d'exploitation Gestion_débordement_pile(PR_1) ; en outre, les valeurs de SPMin et SPMax sont constamment mises à jour par ce même module de traitement, comme expliqué plus haut. Lorsque PR_1 doit être suspendu, le système d'exploitation enregistre les dernières valeurs de SPMin et SPMax, contenues dans les registres dédiés RMin et RMax dans des variables de contexte PR_1.SPMin et PRI.SPMax. Puis, SPMin et SPMax prennent leurs nouvelles valeurs, à partir des variables PR_2.SPMin et PR2.SPMax contenues dans le contexte de PR_2 ; en outre, les valeurs SPBas et SPHaut, stockées dans les variables de contexte de PR_2 dénommées PR_2.SPBas et PR_2SPHaut sont chargées dans les registres dédiés RBas et RHaut (l'ordre des ces opérations est sans importance). La commutation de contexte se poursuit ensuite de manière conventionnelle. Si le module de traitement matériel MMT n'est configuré que pour mettre en oeuvre la partie I du traitement (et, de ce fait, ne comporte pas les registres RHaut et RBas), la détection des débordements peut être effectuée de manière logicielle. Pour ne pas ralentir excessivement l'exécution des programmes, cette détection se fait alors uniquement lors de la commutation de contexte, comme illustré par l'ordinogramme de la figure 3B. Cette figure montre que, lorsque le processus PR_1 doit être suspendu, le système d'exploitation compare SPMin à PR_1.SPBas et SPMax à PRI.SPHaut et, le cas échéant, déclenche une exception de débordement (exécution du service Gestion débordement_pile, ayant PR_1 comme paramètre). Ensuite, comme dans le cas précédent, les valeurs courantes de SPMin et SPMax sont sauvegardées dans le contexte de PR_1 (plus précisément : dans la région de la mémoire destinée à sauvegarder les données caractérisant le contexte de PR_1) et leurs nouvelles valeurs sont chargées dans les registres RMin et RMax à partir du contexte de PR_2. La commutation de contexte se poursuit ensuite de manière conventionnelle. On remarque que, dans le mode de réalisation de la figure 3A, les débordements sont détectés immédiatement par le module matériel MMT, avant même qu'une écriture intempestive n'ait lieu. Dans le mode de réalisation de la figure 3B, par contre, les débordements ne sont détectés que lors de la suspension du processus qui a provoqué l'erreur, après que des données aient pu être endommagées de manière potentiellement irréversible. On remarquera que, dans tous les cas, l'invention met en oeuvre aussi bien des moyens matériels (registres dédiés, module MMT) que logiciels (système d'exploitation et compilateurs, ces derniers étant responsables de la détermination des valeurs de SPHaut et SPBas). L'utilisation d'un module matériel - et non logiciel - de traitement permet de détecter les débordements de pile et/ou à mesurer l'usage réel de l'espace de pile par les processus sans ralentir indûment leur exécution. En outre, le contrôle matériel est insensible aux erreurs logicielles. Le fait que le système d'exploitation soit impliqué dans le contrôle des débordements des processus ordinaires (et pas un programme de même ordre de privilège, comme dans le cas de certaines techniques connues de l'art antérieur) contribue également à la fiabilité de la technique de l'invention. Les figures 3A et 3B se rapportent au cas où les processus PR 1 et PR 2 sont des processus ordinaires exécutés en mode utilisateur, mais elles s'appliquent également, mutatis mutandis, au cas où il s'agit de processus privilégiés exécutés en mode superviseur ; dans ce dernier cas, le traitement des débordements se fait en mode hyperviseur. La figure 4 illustre l'organisation de la mémoire MEM lors de la mise en oeuvre d'un procédé selon l'invention. Du haut vers le bas on distingue une région allouée au stockage des données globales, la pile ST_PR1 allouée au processus PR_1 en cours d'exécution, la pile ST_PR2 allouée au processus PR_2 qui est suspendu, la pile ST_OS allouée au système d'exploitation OS et un « tas » destiné au stockage des données dynamiques. Dans le cas de la pile ST_PR1, on voit que SPMin=SPBas, ce qui signifie que le pointeur de pile SP a atteint - mais pas dépassé - la limite inférieure de la pile ; par contre, SPMax REVENDICATIONS1. Procédé de détection des débordements de pile comportant les étapes suivantes : A. stocker dans au moins un registre dédié (RHaut, RBas) au moins une donnée choisie parmi : une donnée (SPHaut) indicative d'une valeur maximale autorisée pour un pointeur de pile (SP), et une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; B. effectuer une comparaison entre une valeur actuelle (SP) io ou passée (SPMin, SPMax) dudit pointeur de pile et ladite ou chaque dite donnée ; et C. générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle ou passée dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur 15 minimale autorisée. 2. Procédé selon la revendication 1 dans lequel ladite étape A. comporte le stockage dans deux registres dédiés (RHaut, RBas) d'une donnée (SPHaut) indicative d'une valeur maximale autorisée pour un pointeur de pile et 20 d'une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et ladite étape B. comporte au moins une comparaison entre la valeur dudit pointeur de pile (SP) et chaque dite donnée. 3. Procédé selon l'une des revendications précédentes 25 comprenant également les étapes suivantes : Al : stocker dans au moins un autre registre dédié (RMax, RMin) au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale (SPMax) prise par un pointeur de pile (SP) au cours de l'exécution d'un processus ou fil d'exécution, et une donnée (SPMin) indicative 30 d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution ; B1: mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution. 4. Procédé selon la revendication 3 dans lequel ladite étape Al comporte le stockage dans deux registres dédiés (RMax, RMin) d'une donnée (SPMax) indicative d'une valeur maximale prise par ledit pointeur de pile (SP) au cours de l'exécution dudit processus ou fil d'exécution et d'une donnée (SPMin) indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution. 5. Procédé selon l'une des revendications 3 ou 4 dans lequel o ladite étape Al est mise en oeuvre par un système d'exploitation (OS) lors de l'activation dudit processus ou fil d'exécution, et ladite étape B1 est mise en oeuvre par un module de traitement matériel (MTM) lors de l'exécution dudit processus ou fil d'exécution. 15 6. Procédé selon l'une des revendications 3 à 5 dans lequel ladite étape A. est mise en oeuvre par un système d'exploitation lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. sont mises en oeuvre par ledit système d'exploitation lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation 20 d'un autre processus ou fil d'exécution et comprennent au moins une comparaison choisie parmi : une comparaison entre ladite donnée indicative d'une valeur maximale autorisée pour un pointeur de pile et ladite valeur maximale prise par ledit pointeur de pile lors de l'exécution du processus ou fil d'exécution en cours de suspension ; et une comparaison entre ladite donnée 25 indicative d'une valeur minimale autorisée pour un pointeur de pile et ladite valeur minimale prise par ledit pointeur de pile lors de l'exécution dudit processus ou fil d'exécution en cours de suspension. 7. Procédé selon l'une des revendications 1 à 5 dans lequel 30 ladite étape A. est mise en oeuvre par un système d'exploitation (OS) lors de l'activation d'un processus ou fil d'exécution, et lesdites étapes B. et C. sont mises en oeuvre par un module de traitement matériel (MTM) lors de l'exécutiondudit processus ou fil d'exécution, ladite étape B. comprenant une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée. 8. Procédé selon l'une des revendications 5, 6 ou 7 dans lequel, lors de l'activation d'un processus ou fil d'exécution (PR_1), ledit système d'exploitation récupère du contexte d'un processus ou fil d'exécution à activer ladite ou chaque dite donnée à stocker dans ledit ou chaque dit registre dédié et, lors de la commutation du contexte pour la suspension dudit processus ou fil d'exécution et l'activation d'un autre processus ou fil o d'exécution (PR_2), ledit système d'exploitation sauvegarde ladite ou chaque dite donnée stockée dans un dit registre dédié dans le contexte dudit processus ou fil d'exécution en cours de suspension. 9. Procédé selon l'une des revendications précédentes 15 mettant en oeuvre un premier jeu de dits registres dédiés (RHaut, RBas, RMax, RMin) et un deuxième jeu équivalent (SRHaut, SRBas, SRMax, SRMin) de registres dédiés, dans lequel : - lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode utilisateur, au moins ladite étape A. est mise en oeuvre 20 par un système d'exploitation (OS) opérant en mode superviseur et en utilisant le ou les registres dédiés dudit premier jeu ; et - lors de l'activation d'un processus ou fil d'exécution destiné à être exécuté en mode superviseur, au moins ladite étape A. est mise en oeuvre par un système d'exploitation opérant en mode hyperviseur et en 25 utilisant le ou les registres dédiés dudit deuxième jeu. 10. Processeur (P) pour la mise en oeuvre d'un procédé selon la revendication 7 comprenant : une unité centrale (UC) ; 30 au moins un registre (RSP) pour stocker un pointeur de pile (SP) ; - au moins un registre dédié (RHaut, RBas) pour stocker au moins une donnée choisie parmi : une donnée (SPHaut) indicative d'une valeurmaximale autorisée pour ledit pointeur de pile, et une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et - un module de traitement matériel (MTM) configuré pour effectuer une comparaison entre une valeur actuelle dudit pointeur de pile et ladite ou chaque dite donnée, et générer une exception de débordement de pile si ladite comparaison indique que ladite valeur actuelle dudit pointeur de pile est supérieure à ladite valeur maximale autorisée ou inférieure à ladite valeur minimale autorisée. 10 11. Processeur (P) pour la mise en oeuvre d'un procédé selon la revendication 7 comprenant : une unité centrale (UC) ; au moins un registre (RSP) pour stocker un pointeur de pile (SP) ; 15 - au moins un registre dédié (RHaut, RBas) pour stocker au moins une donnée choisie parmi : une donnée (SPHaut) indicative d'une valeur maximale autorisée pour ledit pointeur de pile, et une donnée (SPBas) indicative d'une valeur minimale autorisée pour ledit pointeur de pile ; et - au moins un registre dédié (SPMax, SPMin) pour stocker 20 au moins une donnée choisie parmi : une donnée indicative d'une valeur maximale prise par un pointeur de pile au cours de l'exécution d'un processus ou fil d'exécution en cours, et une donnée indicative d'une valeur minimale prise par ledit pointeur de pile au cours de l'exécution dudit processus ou fil d'exécution en cours; et 25 un module de traitement matériel (MTM) configuré pour mettre à jour lesdites données au cours de l'exécution dudit processus ou fil d'exécution.