Brevet FR3007542A1 — publié le 20141226

FILE D'ECHANGE DE DONNEES AYANT UNE PROFONDEUR ILLIMITEE Domaine technique de l'invention L'invention est relative à un système multitâche dans lequel plusieurs tâches productrices de données peuvent envoyer des messages à un élément consommateur de manière asynchrone. L'invention concerne plus particulièrement une structure de file servant à ordonner les messages pour que l'élément consommateur puisse les traiter séquentiellement selon ses disponibilités. État de la technique La figure 1 est un schéma-bloc d'un exemple de système multiprocesseur. Le système peut comprendre plusieurs processeurs PO, Pl... Pn, une mémoire partagée SMEM, et un dispositif périphérique 10, reliés entre eux par un dispositif d'interconnexion CONN, par exemple un bus. Le dispositif périphérique 10 peut être un élément consommateur, par exemple une interface réseau, une interface de stockage de masse, une interface graphique, etc. Le dispositif peut recevoir des données produites par un ou plusieurs des processeurs. Un tel dispositif peut généralement traiter plusieurs flux de données et offrir plusieurs types de traitement. Ainsi, les données sont fournies au dispositif 10 avec des paramètres de traitement. Les paramètres peuvent être fournis sous une forme qu'on dénommera « messages » ci-après. Un message peut en outre contenir les données à traiter ou bien identifier leur emplacement dans la mémoire SMEM. Dans le cas où le dispositif périphérique gère des transferts DMA (« Direct Memory Access ») avec la mémoire SMEM, les messages peuvent ne contenir que les paramètres du transfert. Le dispositif 10 comprend un noyau HWIP qui traite les messages. Ce noyau est généralement conçu pour traiter les messages de manière asynchrone, et ne peut notamment pas absorber une salve de messages envoyés par plusieurs processeurs. Le dispositif 10 comprend ainsi une file d'écriture WQ servant à stocker la salve en attendant que le noyau HWIP puisse traiter tous les messages. Dans ce contexte, on rencontre la difficulté récurrente du dimensionnement de la file 30 d'écriture matérielle WQ. Si la profondeur de la file est trop faible, les éléments producteurs de données (les processeurs) doivent souvent être arrêtés pour attendre la libération de places dans la file. Si on veut éviter l'arrêt des processeurs, la profondeur peut être telle que la file occupe une surface rédhibitoire sur le circuit. Cette difficulté est exacerbée lorsque les messages sont de taille variable. Pour repousser le seuil où les processeurs producteurs de données doivent être arrêtés, tout en utilisant une file matérielle de faible profondeur, la demande de brevet US2010- 0325318 propose un mécanisme de débordement de la file vers la mémoire du système, dans une file gérée de manière logicielle. Le débordement est effectué dans une zone mémoire réservée de taille fixe. Cette solution repousse le seuil d'arrêt de la production de données, mais ne l'élimine pas. La zone mémoire réservée, qu'elle soit utilisée ou pas, est soustraite définitivement à l'espace disponible dans la mémoire du système. Résumé de l'invention On souhaite donc repousser davantage le seuil d'arrêt de production de données, voire supprimer ce seuil, tout en limitant la profondeur des files matérielles et sans réserver de l'espace inutilisé dans la mémoire du système. On contribue à satisfaire ce besoin en prévoyant un procédé de transfert de messages d'un élément producteur vers un élément consommateur utilisant une mémoire partagée entre l'élément producteur et l' élément consommateur et une file matérielle formée de plusieurs registres conçus pour contenir des adresses de la mémoire partagée, comprenant les étapes consistant à stocker chaque message pour l'élément consommateur dans la mémoire partagée sous la forme d'un noeud de liste chaînée, comprenant un pointeur vers un noeud suivant de la liste, le pointeur étant initialement vide ; écrire successivement l'adresse de chaque noeud dans un emplacement libre de la file, d'où il résulte que le noeud identifié par chaque emplacement de la file correspond au premier noeud d'une liste chaînée associée à l'emplacement ; et quand la file est pleine, écrire l'adresse du noeud courant en mémoire dans le pointeur du dernier noeud de la liste chaînée associée au dernier emplacement de la file, d'où il résulte que le noeud courant est placé à la fin de la liste chaînée associée au dernier emplacement de la file. Selon un mode de mise en oeuvre, le procédé comprend les étapes consistant à mettre à jour un registre auxiliaire avec l'adresse du noeud courant après l'écriture de l'adresse du noeud courant dans la file matérielle ou dans un pointeur ; et quand la file est pleine, écrire l'adresse du noeud courant en mémoire dans le pointeur du noeud identifié par le registre auxiliaire. Selon un mode de mise en oeuvre, le procédé comprend les étapes consistant à écrire les adresses des noeuds dans la file par plusieurs éléments producteurs ; activer un drapeau de file pleine dans le registre auxiliaire par l'élément consommateur lorsque le dernier emplacement de la file est indisponible ; à chaque lecture du registre auxiliaire par un élément producteur, activer un drapeau de verrouillage dans le registre auxiliaire par l'élément consommateur si le drapeau de file pleine est actif ; à chaque mise à jour du registre auxiliaire par l'élément producteur, désactiver le drapeau de verrouillage par l'élément consommateur ; lire le contenu du registre auxiliaire par un élément producteur courant ; si l'élément producteur courant voit le drapeau de verrouillage inactif, écrire, par l'élément producteur courant, l'adresse du noeud courant en mémoire dans le pointeur du noeud identifié par le registre auxiliaire, et mettre à jour le registre auxiliaire ; et si l'élément producteur courant voit le drapeau de verrouillage actif, renouveler l'étape de lecture du contenu du registre auxiliaire ultérieurement. Selon un mode de mise en oeuvre, le procédé comprend l'étape consistant, à chaque 15 désactivation du drapeau de verrouillage, à signaler par l'élément consommateur que les éléments producteurs peuvent renouveler la lecture du registre auxiliaire en activant une ligne distribuée à tous les éléments producteurs. Selon un mode de mise en oeuvre, le procédé comprend les étapes consistant à incrémenter un registre de réservation à chaque lecture du registre auxiliaire ; 20 décrémenter le registre de réservation à chaque occupation d'un emplacement de la file matérielle ; et activer le drapeau de file pleine lorsque le contenu du registre de réservation atteint le nombre d'emplacements disponibles dans la queue. Selon un mode de mise en oeuvre, le procédé comprend l'étape consistant, à chaque libération d'un emplacement de la file matérielle, à désactiver le drapeau de file pleine 25 au plus tôt au moment de la désactivation du drapeau de verrouillage. Selon un mode de mise en oeuvre, le procédé comprend les étapes, mises en oeuvre dans l'élément consommateur, consistant à lire successivement chaque emplacement de la file ; libérer chaque emplacement dès qu'il est lu ; lire le noeud à l'adresse contenue dans l'emplacement courant de la file et traiter le message du noeud ; si le pointeur du 30 noeud contient une adresse, réitérer à partir de l'étape précédente avec l'adresse contenue dans le pointeur. Selon un mode de mise en oeuvre, le procédé comprend l'étape, mise en oeuvre dans l'élément consommateur, consistant à suspendre la lecture du dernier emplacement de la file tant que le drapeau de verrouillage est actif Description sommaire des dessins Des modes de réalisation seront exposés dans la description suivante, faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : - la figure 1, précédemment décrite, est un schéma bloc d'un exemple de système multiprocesseur ; - les figures 2A à 2F représentent une structure de file de profondeur illimitée à diverses phases de remplissage ; et - les figures 3A à 3C représentent la structure de file de profondeur illimitée à diverses phases de vidage. Description d'un mode de réalisation préféré de l'invention On considère un système du type de la figure 1 où les messages, c'est-à-dire les données accompagnées de leurs paramètres de traitement, sont transmis par les processeurs P au dispositif périphérique 10 par l'intermédiaire de la mémoire partagée SMEM. Plus spécifiquement, les processeurs sont programmés pour écrire chaque message dans la mémoire partagée sous la forme d'un noeud d'une liste chaînée. Le noeud comprend un pointeur destiné à contenir l'adresse du noeud suivant de la liste. Le processeur fournit une valeur vide pour le pointeur, d'où il résulte que chaque message est initialement écrit dans la mémoire sous la forme d'une liste chaînée distincte à un seul noeud. L'espace mémoire est alloué dynamiquement aux messages ou noeuds au moment de leur écriture, de sorte que cette opération ne laisse aucune zone mémoire réservée inutilisée. Le nombre de noeuds est limité seulement par l'espace disponible en mémoire 25 pour allouer des noeuds qui peuvent être de taille variable. A mesure que les messages sont écrits dans la mémoire, on souhaite que le dispositif 10 puisse lire les messages sans délai. On pourrait envisager qu'un processeur construise une seule liste chaînée à partir des messages qu'il écrit, et que l'adresse du premier noeud soit fournie au dispositif 10. La liste chaînée constituerait une file logicielle, dont 30 la gestion est peu efficace en termes de performances. En outre, la gestion de la liste chaînée devient particulièrement complexe dans la pratique où plusieurs processeurs écrivent des messages en même temps. Le dispositif 10 comprend une structure de file hybride associant la rapidité d'une file matérielle et la flexibilité d'une file logicielle. Plus spécifiquement, lorsque la file 5 matérielle est pleine, on la fait déborder dans une file logicielle sous la forme d'une liste chaînée. Les figures 2A à 2F illustrent plus spécifiquement le fonctionnement d'un mode de réalisation d'une telle file hybride au cours de différents exemples de phases de remplissage. La file hybride comprend une file matérielle HWQ, par exemple de type 10 FIFO, un circuit de commande CTRL et un registre auxiliaire LL. La file HWQ est destinée à contenir des adresses de messages (ou de noeuds) dans la mémoire SMEM. Dans cet exemple, la file HWQ comprend quatre registres. Le registre LL est associé au dernier emplacement de la file HWQ et est destinée à contenir l'adresse dans la mémoire SMEM du dernier noeud d'une liste chaînée associée au dernier emplacement 15 de la file, c'est-à-dire l'adresse du dernier message écrit dans la file hybride. Les figures représentent également les états de deux drapeaux QFULL et LCK, qui seront décrits ultérieurement en relation avec un autre mode de réalisation de file hybride. A la figure 2A, un processeur écrit (W(MA2)) un message dans la mémoire SMEM à 20 l'adresse MA2. Le message est écrit sous la forme d'un noeud de liste chaînée, comprenant le message MSG lui-même et un pointeur NXT contenant l'adresse du noeud suivant de la liste. Le pointeur NXT est initialement vide (null). Le circuit de commande CTRL peut être connecté au bus du système et conçu pour identifier l'écriture des messages destinés au dispositif périphérique. L'identification de la 25 destination des messages peut être réalisée à l'aide de lignes d'adresses de poids fort qui ne sont pas utilisées par la mémoire SMEM. Le circuit de commande écrit l'adresse MA2 prélevée sur le bus dans la file HWQ et dans le registre LL. Comme cela est représenté, la file HWQ contenait déjà deux adresses, MAO et MA1, correspondant à deux noeuds de même nom précédemment 30 écrits dans la mémoire SMEM. L'adresse MA2 est écrite dans l'emplacement disponible suivant, à la troisième place. Le registre LL contient une seule adresse - celle-ci est mise à jour par l'adresse courante MA2. A la figure 2B, le message suivant est écrit à l'adresse MA3 de la mémoire SMEM. Cette adresse est prélevée sur le bus par le circuit de commande CTRL et écrite dans le registre LL et dans l'emplacement libre suivant de la file HWQ. La file HWQ est maintenant pleine. (Pour simplifier les figures, on ne représente ci-après que le contenu modifié de la mémoire SMEM.) Les figures 2C et 2D illustrent deux phases de fonctionnement lorsqu'un message est écrit alors que le dernier emplacement de la file HWQ vient d'être occupé. Le message courant est écrit à l'adresse MA4, tandis que le dernier emplacement de la file contient l'adresse MA3. A la figure 2C, le circuit de commande CTRL prélève l'adresse MA4 sur le bus et trouve la file HWQ pleine. Il écrit alors l'adresse MA4 en mémoire, dans le pointeur NXT du noeud identifié par le registre LL, contenant l'adresse MA3. Le contenu du registre LL est ensuite mis à jour avec l'adresse MA4. Par ces opérations, le noeud courant MA4 est inséré comme dernier élément d'une liste chaînée ayant le noeud MA3 comme premier élément. Le registre LL identifie le noeud MA4 comme le dernier noeud de cette liste. L'adresse MA3 contenue dans la file, représentée en italique, identifie le premier noeud d'une liste chaînée contenant désormais plus d'un noeud. Tant que la file HWQ ne commence pas à se vider, les messages suivants sont traités 20 selon le même procédé, rallongeant la liste chaînée. Aux figures 2E et 2F, un message est écrit à l'adresse MAll alors que la file n'a pas commencé à se vider. Le circuit de commande écrit l'adresse MAll dans le pointeur NXT du noeud identifié par le registre LL, le noeud MA10, et met à jour le registre LL avec l'adresse MA1 1. Désormais l'adresse MA3 contenue dans la file identifie une liste 25 chaînée débutant avec le noeud MA3 et se terminant par le noeud MA11. Cette liste chaînée peut croître dans les limites de l'espace disponible dans la mémoire SMEM, et cela sans avoir au préalable alloué de la mémoire. Si la mémoire disponible venait à manquer, le système pourrait basculer dans un mode classique de gestion de file pleine, notamment en suspendant la production de messages par les processeurs. 30 Les figures 3A à 3C représentent différentes phases lors du vidage de la file hybride, partant de la situation de la figure 2F. A la figure 3A, dès que le noyau HWIP du dispositif périphérique est prêt à traiter un message, il envoie un signal de lecture PULL au circuit de commande CTRL. Le circuit de commande tire le premier élément de la file, ici l'adresse MAO, et libère l'emplacement. Cette adresse est utilisée pour lire le contenu du noeud MAO (le message MSG et le pointeur NXT) dans la mémoire SMEM. Le message est récupéré par le noyau HWIP et le pointeur NXT, ici vide, indique la fin du traitement de la liste chaînée. A la figure 3B, l'emplacement libéré est immédiatement pris par un nouveau message écrit à l'adresse MA20, selon le mécanisme décrit en relation avec la figure 2B : l'adresse MA20 est écrite dans le dernier emplacement de la file et dans le registre LL. Ainsi, le registre LL identifie le noeud MA20 nouvellement écrit comme le dernier noeud d'une nouvelle liste chaînée. Le noeud MA20 est également le premier noeud de cette nouvelle liste. Une nouvelle liste démarre ainsi à chaque fois que le dernier emplacement de la file est libéré puis occupé de nouveau. Cette liste, associée au dernier emplacement de la file, reste « ouverte » tant que le dernier emplacement est occupé par la même adresse. La liste qui avait été démarrée à l'adresse MA3 est « fermée » du fait que l'adresse MA3 est sortie du dernier emplacement de la file. A la figure 3C, la file a été vidée de plusieurs éléments. Le noyau HWIP tire l'adresse MA3 de la file. L'adresse MA3 est utilisée pour lire le contenu du noeud de même nom dans la mémoire SMEM. Le message correspondant est fourni pour traitement au noyau. Le pointeur NXT n'est cette fois pas vide : il contient l'adresse MA4. Cette adresse MA4 est utilisée pour lire le noeud suivant de la liste dans la mémoire, pour récupérer le message et le pointeur correspondants. Ces opérations sont réitérées jusqu'à ce que le pointeur NXT récupéré soit vide, ce qui arrive dans l'exemple pour le noeud MAI I. A ce stade les messages contenus dans tous les noeuds de la liste chaînée ont été lus dans la mémoire et fournis pour traitement dans l'ordre au noyau HWIP L'emplacement de la file contenant l'adresse MA3, bien que le traitement de la liste chaînée correspondante puisse prendre plusieurs cycles, peut être libéré dès la lecture de l'adresse MA3, c'est-à-dire dès l'identification du premier noeud de la liste. En effet, une fois le noeud MA3 traité, le noeud suivant est identifié par le pointeur NXT du noeud courant, de sorte que les informations contenues dans la file ne sont plus nécessaires. Dans cet exemple, la liste chaînée démarrée à la figure 3B a été allongée de plusieurs noeuds, le dernier ayant l'adresse MA25. Aucune nouvelle écriture n'étant intervenue, jusqu'au stade la figure 3C, le registre LL contient toujours l'adresse MA25. Cette adresse ne sera pas utilisée et sera écrasée dès l'arrivée d'un nouveau message dans la file. On remarque ainsi que, selon les circonstances, chaque emplacement de la file peut identifier le premier noeud d'une liste chaînée de longueur quelconque. On obtient des 5 performances optimales lorsque les listes chaînées ne contiennent qu'un seul élément. Alors, à l'écriture d'un message, la seule opération faite est l'écriture de son adresse dans la file et dans le registre LL simultanément, ce qui peut avoir lieu dans le même cycle que celui où le message est écrit dans la mémoire partagée. Quand la file est pleine, on doit mettre à jour le pointeur du dernier noeud de la liste en mémoire, ce qui 10 représente un deuxième accès mémoire après celui servant à écrire le message. Lors de la lecture des messages, on lit le pointeur NXT en plus de chaque message. L'impact sur les performances dépend de la longueur des messages. Si les messages sont longs et nécessitent plusieurs cycles de lecture, la lecture du pointeur peut avoir un impact faible. L'impact peut être nul si le message n'est pas aligné sur la largeur du bus 15 mémoire et que le pointeur rentre dans la partie inutilisée du bus. Dans la description qui précède, on a supposé, que la file hybride était dotée d'une certaine intelligence, notamment au sein du circuit de commande CTRL, permettant de mettre en oeuvre la plupart des opérations décrites, par exemple à l'aide d'un microcontrôleur que le dispositif périphérique possède pour assurer ses propres 20 fonctions. Dans certaines applications, le dispositif périphérique est élémentaire et ne possède pas de microcontrôleur. Dans ce cas, on souhaite que les opérations de gestion de file soient effectuées par les processeurs eux-mêmes, assistés d'une fonctionnalité minimale au sein du circuit de commande CTRL, réalisable par une machine d'état simple. On est alors confronté à un problème d'accès concurrents à la file matérielle 25 HWQ et au registre LL par plusieurs processeurs. Pour gérer ces accès, le registre LL peut contenir, comme le représente la figure 3C, deux drapeaux en plus de l'adresse du dernier message. Ces deux drapeaux peuvent être des bits d'adresse non utilisés par le système. Un premier drapeau QFULL indique que la file matérielle est pleine, et un deuxième drapeau de verrouillage LCK interdit la 30 modification du contenu du registre LL tant qu'une mise à jour de pointeur est en cours. Ainsi, le drapeau LCK n'est activable que lorsque le drapeau QFULL est actif De préférence, le drapeau QFULL reste actif tant que le drapeau LCK est actif même si un emplacement de la file a été libéré. Cette dernière condition empêche un autre processeur d'écrire un nouvel élément dans la file alors que le processeur précédent n'a pas fini de mettre à jour le pointeur du dernier noeud de la liste en mémoire. Ceci garantit que le registre LL contient toujours l'adresse du dernier message écrit dans la file hybride. En outre, le circuit CTRL, une machine d'état, peut comprendre un registre de réservation RREG, dont le rôle sera expliqué ultérieurement. Les figures 2A à 2D sont maintenant décrites en supposant que ce sont les processeurs qui gèrent les lectures et écritures dans les registres et la mémoire, et que la machine d'état CTRL gère seulement le remplissage de la file matérielle HWQ et la mise à jour des drapeaux QFULL et LCK. Les états des drapeaux QFULL et LCK sont montrés dans chaque figure. Dans le cas de la figure 2A, les drapeaux QFULL et LCK sont inactifs. Le processeur écrit le message MA2 en mémoire et lit le contenu du registre LL. Le registre LL indique que la file n'est pas pleine, d'où il résulte que le processeur écrit l'adresse MA2 15 dans la file et dans le registre LL. Dans la figure 2B, le processeur rencontre les mêmes conditions qu'a la figure 2A. Le registre LL indique que la file n'est pas pleine, d'où il résulte que le processeur écrit l'adresse MA3 du message courant dans la file et dans le registre LL. La file est maintenant pleine, ce qui provoque l'activation du drapeau QFULL par la machine 20 d'état CTRL. Dans la figure 2C, le processeur lit le registre LL et voit le drapeau QFULL actif et le drapeau LCK inactif Le processeur a la main pour gérer la liste chaînée associée au dernier emplacement, et la machine d'état active le drapeau LCK. Le processeur écrit l'adresse du message courant, MA4, dans le pointeur du noeud MA3, dont l'adresse a 25 été récupérée dans le registre LL. Cela demande quelques cycles sur le bus - entre temps, un autre processeur pourrait avoir la main sur le bus pour écrire un message. Cet autre processeur lit le registre LL et voit le drapeau LCK activé - il se met en attente pour renouveler la lecture du registre LL ultérieurement. Une fois que la liste chaînée a été mise à jour (figure 2C) et que l'adresse du message 30 courant, MA4, a été écrite dans le registre LL (figure 2D), la machine d'état désactive le drapeau LCK. Les processeurs mis en attente sont notifiés de cet événement, par exemple à l'aide d'une ligne dédiée du bus distribuée à tous les processeurs, à la suite de quoi ils lisent à nouveau le registre LL. Le premier processeur qui lit le registre LL et voit le drapeau LCK inactif a la main et provoque une nouvelle activation du drapeau LCK, de sorte que les autres processeurs voient ce drapeau actif et se remettent en attente. En pratique, la « lecture » du registre LL par un processeur consiste en plusieurs opérations sur le bus, notamment l'envoi d'une requête de lecture, puis la réception de la valeur demandée. Dans certains systèmes, ces opérations ne sont pas atomiques ou consécutives, de sorte que le bus est libéré pour d'autres opérations entre la requête et la réception de la valeur demandée. On peut alors rencontrer des états transitoires, par exemple entre les figures 2A et 2B, où un deuxième processeur complète la lecture du registre LL, et voit le drapeau QFULL inactif, avant que le premier processeur n'ait écrit sa valeur dans la file matérielle et provoqué l'activation du drapeau QFULL. Ainsi, si on ne prend pas de précautions, le deuxième processeur peut voir le drapeau QFULL inactif alors qu'il aurait dû le voir actif après l'opération du premier processeur. Selon la gestion de la file matérielle HWQ mise en oeuvre par la machine d'état CTRL, la valeur écrite par le deuxième processeur est perdue ou écrase la valeur écrite par le premier processeur. Dans cette situation, on souhaite que le drapeau QFULL soit activé en anticipation d'un remplissage de la file matérielle, avant que la file matérielle n'ait effectivement été remplie. Pour cela, un mécanisme de réservation peut être prévu qui comptabilise le nombre de fois consécutives où le drapeau QFULL peut être renvoyé comme inactif en fonction des emplacements disponibles dans la file matérielle et du nombre d'emplacements précédemment « réservés ». La machine d'état CTRL comprend alors un registre de réservation RREG (figure 3C) qui est incrémenté à chaque fois qu'une requête de lecture du registre LL est reçue et que la valeur courante du registre de réservation est inférieure au nombre d'emplacements disponibles dans la file matérielle. Le registre de réservation est décrémenté lorsque le registre LL est mis à jour et que l'emplacement correspondant est effectivement pris dans la file matérielle. Le drapeau QFULL est activé dès que le nombre d'emplacements réservés atteint le nombre d'emplacements disponibles dans la file matérielle. Le vidage de la file hybride et la lecture des messages peuvent continuer à être faits par le noyau HWIP du dispositif Ces opérations ne requièrent pas de gestion de file complexe et sont réalisables par une simple machine d'état. Dès que le noyau lit une adresse dans la file, la machine d'état CTRL libère l'emplacement de la file matérielle. De préférence, comme on l'a précédemment évoqué, cette action ne provoque pas directement la désactivation du drapeau QFULL. Le drapeau QFULL ne sera désactivé que lorsque le drapeau LCK est désactivé. Il est préférable que le noyau HWIP suspende la lecture du dernier emplacement de la file tant que le drapeau de verrouillage LCK est actif, c'est-à-dire tant que le processeur qui est en train de mettre à jour la dernière liste chaînée n'a pas terminé.5 REVENDICATIONS1. Procédé de transfert de messages d'un élément producteur (P1, P2...) vers un élément consommateur (10) utilisant une mémoire (SMEM) partagée entre l'élément producteur et l' élément consommateur et une file matérielle (HWQ) formée de plusieurs registres conçus pour contenir des adresses de la mémoire partagée, comprenant les étapes suivantes : - stocker chaque message (MSG) pour l'élément consommateur dans la mémoire partagée sous la forme d'un noeud de liste chaînée, comprenant un pointeur (NXT) vers un noeud suivant de la liste, le pointeur étant initialement vide ; - écrire successivement l'adresse (MAO, MA1 ...) de chaque noeud dans un emplacement libre de la file, d'où il résulte que le noeud identifié par chaque emplacement de la file correspond au premier noeud d'une liste chaînée associée à l'emplacement ; et - quand la file est pleine, écrire l'adresse (MA4) du noeud courant en mémoire dans le pointeur (NXT) du dernier noeud de la liste chaînée associée au dernier emplacement de la file, d'où il résulte que le noeud courant est placé à la fin de la liste chaînée associée au dernier emplacement de la file. 2. Procédé selon la revendication 1, comprenant les étapes suivantes : - mettre à jour un registre auxiliaire (LL) avec l'adresse du noeud courant après l'écriture de l'adresse du noeud courant dans la file matérielle ou dans un pointeur ; et - quand la file est pleine, écrire l'adresse du noeud courant en mémoire dans le pointeur (NXT) du noeud identifié par le registre auxiliaire. 3. Procédé selon la revendication 2, comprenant les étapes suivantes : - écrire les adresses des noeuds dans la file par plusieurs éléments producteurs ; - activer un drapeau de file pleine (QFULL) dans le registre auxiliaire (LL) par l'élément consommateur (10) lorsque le dernier emplacement de la file est indisponible ;- à chaque lecture du registre auxiliaire par un élément producteur, activer un drapeau de verrouillage (LCK) dans le registre auxiliaire par l'élément consommateur si le drapeau de file pleine est actif ; - à chaque mise à jour du registre auxiliaire par l'élément producteur, désactiver le drapeau de verrouillage (LCK) par l'élément consommateur ; - lire le contenu du registre auxiliaire (LL) par un élément producteur courant ; - si l'élément producteur courant voit le drapeau de verrouillage inactif, écrire, par l'élément producteur courant, l'adresse du noeud courant en mémoire dans le pointeur (NXT) du noeud identifié par le registre auxiliaire (LL), et mettre à jour le registre auxiliaire ; et - si l'élément producteur courant voit le drapeau de verrouillage actif, renouveler l'étape de lecture du contenu du registre auxiliaire ultérieurement. 4. Procédé selon la revendication 3, comprenant l'étape suivante : - à chaque désactivation du drapeau de verrouillage (LCK), signaler par l'élément consommateur que les éléments producteurs peuvent renouveler la lecture du registre auxiliaire (LL) en activant une ligne distribuée à tous les éléments producteurs. 5. Procédé selon la revendication 3, comprenant les étapes suivantes : - incrémenter un registre de réservation (RREG) à chaque lecture du registre auxiliaire (LL) ; - décrémenter le registre de réservation à chaque occupation d'un emplacement de la file matérielle ; et - activer le drapeau de file pleine (QFULL) lorsque le contenu du registre de réservation atteint le nombre d'emplacements disponibles dans la queue. 6. Procédé selon la revendication 3, comprenant l'étape suivante : - à chaque libération d'un emplacement de la file matérielle, désactiver le drapeau de file pleine (QFULL) au plus tôt au moment de la désactivation du drapeau de verrouillage (LCK). 7. Procédé selon la revendication 1, comprenant les étapes suivantes mises en oeuvre dans l'élément consommateur (10) : - lire successivement chaque emplacement de la file ; - libérer chaque emplacement dès qu'il est lu ; - lire le noeud à l'adresse contenue dans l'emplacement courant de la file et traiter le message du noeud ; - si le pointeur (NXT) du noeud contient une adresse, réitérer à partir de l'étape précédente avec l'adresse contenue dans le pointeur. 8. Procédé selon la revendication 6, comprenant l'étape suivante mise en oeuvre dans l'élément consommateur (10) : - suspendre la lecture du dernier emplacement de la file tant que le drapeau de verrouillage (LCK) est actif