FR 2827456 A1 20030117 FR 0109272 A 20010712 Procédé de communication entre deux couches de protocole L'invention concerne un procédé de communication entre deux couches de protocole. Lorsqu'un message est à transmettre d'une première couche de protocole à une seconde couche de protocole, il est connu de mettre ce message dans une file d'attente. Il peut y avoir plusieurs files d'attente pour communiquer des message de la première couche à la seconde couche. Classiquement on exécute au moins une tâche distincte pour chaque couche de protocole. Dans la seconde couche, une tâche de traitement de message est associée à chaque file d'attente. Elle attend qu'un ou plusieurs messages soit mis dans cette file. S'il n'y a pas de congestion empêchant le traitement d'un message dans la seconde couche, et si la tâche en cours dans la première couche n'a pas un degré de priorité supérieur, une commutation de tâche est réalisée dés lors qu'au moins un message est en attente dans au moins une file : La tâche en cours dans la première couche est interrompue, et la tâche de traitement de message de chaque file contenant au moins un message est lancée. Cette tâche de traitement de messages appelle une routine de la première couche qui a pour fonction d'informer le gestionnaire de la file, du fait que le message transféré est en cours de traitement dans la seconde couche. Puis une nouvelle commutation de tâche est réalisée : Cette tâche de traitement de message est interrompue. Le gestionnaire de tâche relance la tâche qui était en cours d'exécution dans la première couche. Chaque commutation de tâche nécessite un temps de traitement et des ressources non négligeables. Le but de l'invention est de proposer un procédé de communication entre deux couches, permettant de réduire le temps de traitement et les ressources nécessaires. L'objet de l'invention est un procédé de communication d'une première à une seconde couche de protocole, permettant à une tâche de la première couche de transférer un message vers une seconde couche ; caractérisé en ce qu'il consiste à exécuter dans la seconde couche une routine, dite d'autorisation d'émission, si et seulement si aucune congestion n'empêche le traitement d'un message dans la seconde couche ; et : - - si la routine d'autorisation d'émission a émis un signal d'autorisation d'émission, transférer un message de la première à la seconde couche, et exécuter une autre routine, dans la première couche, pour informer le gestionnaire de la prise en compte de ce message ; - si ta routine d'autorisation d'émission n'a pas émis de signal d'autorisation d'émission, depuis le dernier transfert d'un message, mettre dans la file d'attente chaque message qui est à transférer de la première à la seconde couche, et fournir en outre au gestionnaire de la file l'adresse d'une routine chargée d'informer ce gestionnaire de la prise en compte de ce message, quand ce sera réalisé. Le procédé ainsi caractérisé ne nécessite aucune commutation de tâche puisque c'est toujours la même tâche qui est active. Il permet donc une économie de temps de traitement et de ressources. Selon un mode de mise en oeuvre préférentiel, pour mettre un message dans une file d'attente, il consiste à mémoriser plusieurs segments du message respectivement dans diverses portions de mémoire libres, et à mémoriser des liens reliant les segments de ce message. Ce mode de mise en oeuvre ne nécessite pas de lire, modifier, puis recopier un message entier lorsqu'une en-tête lui est rajoutée par un protocole de communication, puisqu'il est possible de mémoriser un segment supplémentaire (une en-tête d'encapsulation correspondant au protocole de communication) sans avoir à lire, modifier, et recopier l'intégralité du message déjà mémorisé. Ce mode de mise en oeuvre économise ainsi le temps de traitement qui serait nécessaire pour lire puis ré-écrire un message entier dans la mémoire de travail. L'invention sera mieux comprise et d'autres caractéristiques apparaîtront à l'aide de la description ci-dessous. Considérons, à titre d'exemple, la mise en oeuvre du procédé selon l'invention pour faire communiquer une couche application et une couche TCP/IP (Transfer Control Protocol/Internet Protocol) du système d'exploitation commercialisé sous la marque DUNIX. Le procédé selon l'invention est applicable dans les deux sens de communication. Considérons, à titre d'exemple, la communication de messages de la couche application vers la couche TCP/IP. Il y a une ou plusieurs files d'attente permettant de stocker un message en attendant qu'il puisse être transféré de la couche application à la couche TCP/IP. Il y a une ou plusieurs tâches en cours d'exécution dans la couche application. Il faut distinguer deux cas : - Si une tâche de la couche TCP/IP devient prête à traiter un message, c'est à dire s'il n'y a plus de congestion pour cette couche TCP/IP, une routine de cette couche, appelée routine d'autorisation d'émission est exécutée pour l'une des files. Cette routine émet un signal d'autorisation d'émission, et elle fournit l'adresse d'une autre routine, appelée routine de réception, dans la couche application. Même s'il y a plusieurs tâches qui sont disponibles pour recevoir un message via la file considérée, un seul signal d'autorisation d'émission est émis pour cette file, jusqu'au prochain transfert d'un message. Si au moins un message est alors proposé au gestionnaire de la file correspondante, le message est transféré directement à la couche TCP/IP sans qu'il soit nécessaire de le mémoriser dans cette file. La routine de réception est exécutée par la tâche ayant émis le signal d'autorisation d'émission. - Si aucune tâche de la couche TCP/IP n'est prête à traiter un message, c'est à dire s'il y a une congestion pour chaque tâche : Aucun signal d'autorisation d'émision n'a été reçu depuis le dernier transfert de message via la file considérée. Lorsqu'un message doit être transféré vers la couche TCP/IP, il est mémorisé dans la file considérée. Il reste stocké dans la file au moins jusqu'à ce que le gestionnaire de cette file reçoive le prochain message d'autorisation d'émission. S'il y a un ou plusieurs autres messages en attente dans la file, chaque message attend son tour dans l'ordre d'arrivée de ces messages. La couche Application informe de cette congestion la couche au-dessus d'elle, car cette information participe au contrôle du flux des messages à travers l'ensemble du système. Ainsi la couche TCP/IP ne reçoit jamais de message sans avoir au préalable donné une autorisation d'émission. Par conséquent, la couche application connaît, message par message, l'état de progression des messages à transférer à la couche TCP/IP, et elle peut elle-même faire remonter cette information en amont. Le flux des messages est donc parfaitement contrôlé. Les files d'attente sont de préférence réalisées chacune dans une mémoire tampon appelée mémoire tampon logique parce que l'enregistrement physique d'un message est réparti sur plusieurs emplacements libres, de la mémoire de travail, qui n'ont pas une suite d'adresses continue. L'enregistrement d'un message dans une mémoire tampon logique consiste à mémoriser respectivement plusieurs segments du message dans diverses emplacements de mémoire libres, et à mémoriser des liens reliant tous les segments de ce message. En particulier, l'ajout d'une entête protocolaire pour encapsuler un message consiste à mémoriser cette entête dans une portion de mémoire libre, indépendante de celles utilisées précédemment pour d'autres parties du message, constituées auparavant. Par ailleurs, il consiste à mémoriser un lien logique reliant cette entête au dernier segment créé précédemment. Lors d'un tel ajout, il n'y a pas de lecture et de ré-écriture des segments créés précédemment pour ce message. Il y a donc une économie de temps de traitement. Un descripteur de mémoire tampon logique mémorise les liens reliant les divers segments de chaque message stocké dans la mémoire tampon logique. Vu de l'extérieur, chaque message stocké dans cette mémoire tampon logique semble être constitué d'un seul bloc. REVENDICATIONS : 1) Procédé de communication d'une première à une seconde couche de protocole, permettant à une tâche de la première couche de transférer un message vers une seconde couche ; caractérisé en ce qu'il consiste à exécuter dans la seconde couche une routine, dite d'autorisation d'émission, si et seulement si aucune congestion n'empêche le traitement d'un message dans la seconde couche ; et : - - si la routine d'autorisation d'émission a émis un signal d'autorisation d'émission, transférer un message de la première à la seconde couche, et exécuter une autre routine, dans la première couche, pour informer le gestionnaire de la prise en compte de ce message ; - - si la routine d'autorisation d'émission n'a pas émis de signal d'autorisation d'émission, depuis le dernier transfert d'un message, mettre dans la file d'attente chaque message qui est à transférer de la première à la seconde couche, et fournir en outre au gestionnaire de la file l'adresse d'une routine chargée d'informer ce gestionnaire de la prise en compte de ce message, quand ce sera réalisé. 2) Procédé selon la revendication 1, caractérisé en ce que pour mettre un message dans une file d'attente, il consiste à mémoriser plusieurs segments du message respectivement dans diverses portions de mémoire libres, et à mémoriser des liens reliant les segments de ce message.