Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR MANAGING THE THREADS OF EXECUTION IN A COMPUTER UNIT, AND COMPUTER UNIT CONFIGURED TO IMPLEMENT SAID METHOD
Document Type and Number:
WIPO Patent Application WO/2014/012983
Kind Code:
A2
Abstract:
The invention relates to a method for managing threads of execution launched by processes executed in a computer unit comprising at least one computation core connected to a shared memory. The method includes the steps of: using an area of the shared memory that is accessible to all the processes and threads of execution so as to ensure the management of the computation tokens; when a thread needs to be executed, said thread verifies that a computation token is available; if a computation token is available, the thread assigns the computation token to itself while updating the shared memory, pursues the execution thereof, then releases the computation token at the end of the execution of said thread; assigning a priority index to each thread of execution, having each thread with a task in the process of being executed periodically verify that a thread with a priority index higher than that of each thread is not placed on standby, and if necessary, ending the execution of the thread in the process of execution and releasing the corresponding computation token. The invention also relates to a computer unit for implementing said method.

Inventors:
BRONSART SEBASTIEN (FR)
DARBOIS MATTHIEU (FR)
THUILLIER CEDRIC (FR)
Application Number:
PCT/EP2013/065116
Publication Date:
January 23, 2014
Filing Date:
July 17, 2013
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
MORPHO (FR)
International Classes:
G06F9/38; G06F9/48; G06F9/52
Domestic Patent References:
WO2009058154A12009-05-07
Foreign References:
US6604160B12003-08-05
US7844973B12010-11-30
Other References:
None
Attorney, Agent or Firm:
LAVIALLE, Bruno et al. (FR)
Download PDF:
Claims:
REVENDICATIONS

1. Procédé de gestion de fils d'exécution lancés par des processus exécutés dans une unité informatique comportant au moins un cœur de calcul relié à une mémoire partagée, caractérisé en ce que le procédé comprend les étapes de :

utiliser une zone de la mémoire partagée, accessible à tous les processus et fils d'exécution, afin d'assurer la gestion des jetons de calcul,

- lorsqu'un fil lié à une tâche veut s'exécuter, faire vérifier par ce fil qu'un jeton de calcul est disponible,

- si un jeton de calcul est disponible, faire s'attribuer le jeton de calcul par le fil en mettant à jour la mémoire partagée, poursuivre son exécution, puis libérer le jeton de calcul à la fin de son exécution,

si aucun jeton n'est disponible, faire se placer le fil à exécuter en attente jusqu'à la libération d'un jeton de calcul par un fil ayant terminé son exécution,

- lorsqu'un jeton de calcul est libéré par un fil, faire identifier par ce même fil le prochain fil à qui transmettre ce jeton, et le lui transmettre le cas échéant ,

- un indice de priorité étant attribué à chaque fil d'exécution, faire vérifier périodiquement, par chaque fil ayant une tâche en cours d'exécution, que n'a pas été mis en attente un fil avec un indice de priorité plus élevé que le sien et, le cas échéant, faire cesser l'exécution du fil en cours d'exécution et libérer le jeton de calcul correspondant.

2. Procédé selon la revendication 1, dans lequel chaque processus ayant un fil en cours d'exécution signale périodiquement qu' il est actif au travers de la zone de mémoire partagée qui tient à jour une liste des processus ayant un fil en cours d'exécution, et l'un de ces processus libère le jeton de calcul d'un processus inscrit n'ayant pas signalé qu'il était actif.

3. Procédé selon la revendication 1, dans lequel chaque processus est susceptible de charger en mémoire la donnée permettant la gestion des jetons de calcul et la donnée de gestion des jetons de calcul est chargée en mémoire par le premier processus souhaitant s'exécuter dans le cadre d'une session et déchargé à la fin de l'exécution du dernier processus en cours d'exécution.

4. Procédé selon la revendication 1, comprenant l'étape de prévoir une attribution d'un nombre limité de jetons de calcul à un au moins un processus.

5. Procédé selon la revendication 1, comprenant l'étape de réserver au moins un jeton de calcul à au moins un processus.

6. Procédé selon la revendication 1, comportant l'étape d'autoriser un programme à accéder à la zone partagée .

7. Procédé selon la revendication 6, dans lequel le programme est un programme de collecte d' informations utilisables à des fins statistiques.

8. Procédé selon la revendication 6, dans lequel le programme est un programme de débogage.

9. Unité informatique comportant au moins un cœur de calcul relié à une mémoire et agencé pour exécuter des processus, caractérisé en ce que l'unité informatique est agencée pour la mise en œuvre du procédé conforme à l'une quelconque des revendications précédentes.

Description:
PROCEDE DE GESTION DES FILS D'EXECUTION DANS UNE UNITE INFORMATIQUE ET UNITE INFORMATIQUE AGENCEE POUR LA MISE

EN ŒUVRE DE CE PROCEDE

La présente invention concerne un procédé de gestion des fils d'exécution lancés par des processus informatiques au sein d'une unité informatique. L'invention a également pour objet une unité informatique pour la mise en œuvre de ce procédé.

Une unité informatique, comme l'unité centrale d'un ordinateur personnel, d'un serveur ou d'une station de travail, comporte généralement au moins un cœur de calcul relié à une mémoire contenant un système d'exploitation (ou O.S. de l'anglais « Operating System ») et des applications.

L'exécution d'une instance d'une de ces applications se traduit par l'exécution d'un processus au sein de l'unité. Chaque processus peut engendrer l'exécution d'un ou plusieurs fils (« threads » en anglais) , lesquels partagent la mémoire du processus parent. À des fins de simplification, on utilisera le terme « fil » pour décrire les portions de code exécutable de manière concurrente, qu'il s'agisse du code des processus, ou bien du code des fils créés par les processus .

Les unités informatiques les plus performantes comportent un nombre croissant de cœurs de calcul permettant d'exécuter des fils en parallèle. L'ordonnancement de différents fils pouvant tirer partie des performances de plusieurs cœurs et lançant des tâches qui ont des durées et des priorités différentes est relativement complexe, difficile à calculer et à intégrer dans le but d'optimiser à la fois le flux et le temps de réponse. Pour conserver une certaine maîtrise des durées d'exécution et de la gestion des priorités, il est généralement nécessaire dans ce cas de recourir à un programme d'ordonnancement dit temps réel. Ceci entraîne une perte de flexibilité dans le fonctionnement de l'unité informatique et est coûteux à développer.

Dans les domaines nécessitant de fortes puissances de calcul, comme par exemple dans le traitement des informations de bases de données de très grandes tailles, il est courant d'utiliser des systèmes informatiques regroupant plusieurs unités informatiques multicœurs ayant chacune accès à une partie de la base de données. On comprend que, dans ces domaines, l'optimisation de la charge des cœurs de calcul au sein de chaque unité informatique permet de réduire le nombre d'unités informatiques du système informatique et donc le coût de ce dernier. Il s'agit donc là d'un objectif maj eur .

Un but de l'invention est de fournir un moyen pour gérer des fils à exécuter par une unité informatique .

A cet effet, on prévoit, selon l'invention, un procédé de gestion de fils d' exécution lancés par des processus exécutés dans une unité informatique comportant au moins un cœur de calcul relié à une mémoire partagée, caractérisé en ce que le procédé comprend les étapes de :

utiliser une zone de la mémoire partagée, accessible à tous les processus et fils d'exécution, afin d'assurer la gestion des jetons de calcul,

- lorsqu'un fil lié à une tâche veut s'exécuter, faire vérifier par ce fil qu'un jeton de calcul est disponible,

- si un jeton de calcul est disponible, faire s'attribuer le jeton de calcul par le fil en mettant à jour la mémoire partagée, poursuivre son exécution, puis libérer le jeton de calcul à la fin de son exécution,

si aucun jeton n'est disponible, faire se placer le fil à exécuter en attente jusqu'à la libération d'un jeton de calcul par un fil ayant terminé son exécution,

- lorsqu'un jeton de calcul est libéré par un fil, faire identifier par ce même fil le prochain fil à qui transmettre ce jeton, et le lui transmettre le cas échéant,

- un indice de priorité étant attribué à chaque fil d'exécution, faire vérifier périodiquement, par chaque fil ayant une tâche en cours d'exécution, que n'a pas été mis en attente un fil avec un indice de priorité plus élevé que le sien et, le cas échéant, faire cesser l'exécution du fil en cours d'exécution et libérer le jeton de calcul correspondant.

Ainsi, l'ordonnancement des fils ne résulte pas de calculs mais de l'attribution de jetons de calcul aux fils demandant à s'exécuter et de la libération des jetons de calcul par les fils après exécution. Il s'agit d' un ordonnancement résultant de la coopération des processus et fils entre eux. Cet ordonnancement nécessite en outre peu de ressources et ne fait pas appel à l'ordonnanceur de l'O.S.

L'invention a également pour objet une unité informatique pour la mise en œuvre de ce procédé.

D'autres caractéristiques et avantages de l' invention ressortiront à la lecture de la description qui suit d'un mode de réalisation particulier non limitatif de l'invention.

Il sera fait référence à la figure unique annexée qui est une vue schématique d'une unité informatique conforme à l'invention.

L' invention concerne donc un procédé de gestion de fils lancés par des processus exécutés dans une unité informatique et une unité informatique pour la mise en œuvre de ce procédé. En référence à la figure, l'unité informatique comporte, de façon connue en elle-même, un module de traitement de données 1 qui comprend des cœurs de calcul 2, ici au nombre de seize, et qui est relié à une mémoire vive 3 de type RAM et à une mémoire morte 4 contenant un programme de gestion O.S. et des programmes applicatifs APP. La mémoire vive 3 comprend au moins une zone partagée 5 accessible par tous les programmes applicatifs APP. Il va sans dire que l'unité informatique comprend d'autres composants comme un dispositif d'entrée/sortie, des interfaces homme/machine et autres qui ne sont ni décrits ni représentés car sans rapport direct avec 1' invention .

Le fonctionnement de l'unité informatique est classique, à savoir que les programmes sont chargés en mémoire vive 3 pour pouvoir être exécutés par lè module de traitement et plus précisément par les cœurs de calcul 2. Ces programmes consistent en un enchaînement de tâches qui sont exécutées sur un ou plusieurs fils. L'exécution des processus conduit donc au lancement successif et/ou simultané de fils qui vont être en concurrence pour être exécutés par les cœurs de calcul 2.

L'unité informatique est agencée pour mettre en œuvre un procédé de gestion de ces fils.

Ce procédé débute par l'étape de charger dans la zone partagée 5 de la mémoire vive 4 une donnée P permettant la gestion d'un nombre de jetons de calcul qui est ici fonction du nombre prédéterminé de cœurs de calcul 2. Ce chargement est généralement effectué par le premier fil d'exécution faisant la demande d'un jeton de calcul. A cette fin, chaque processus est agencé pour vérifier la présence en mémoire vive de la donnée P de gestion des jetons de calcul et, dans la négative, pour charger en mémoire cette donnée.

Si aucun jeton de calcul n'est disponible, le fil d'exécution met à jour la donnée P afin d'indiquer son souhait de récupérer un jeton, puis se met en attente jusqu'à la libération d'un jeton de calcul par un autre fil ayant terminé son exécution. Si un jeton de calcul est disponible, le fil met à jour la donnée P pour indiquer qu'il s'attribue le jeton de calcul, et poursuit son exécution. A la fin de l'exécution du fil, ce dernier libère le jeton de calcul en mettant à jour la donnée P, et le cas échéant, en indiquant à un autre fil en attente qu'un jeton est disponible.

Il est prévu qu'un indice de priorité est attribué à chaque fil. Chaque fil est agencé pour vérifier périodiquement que n'a pas été mis en attente un autre fil avec un indice de priorité plus élevé que le sien et, le cas échéant, libère son jeton pour l'attribuer au fil de priorité plus élevée, puis se place en attente d'un nouveau jeton.

Avantageusement, chaque processus dont un fil est en cours d'exécution signale périodiquement qu'il est actif au travers de la donnée mémoire P qui tient à jour une liste des processus inscrits en cours d'exécution. L'un des processus inscrits libère le (s) jeton (s) de calcul d'un processus inscrit n'ayant pas signalé qu'il était actif au moment prévu. Ceci permet de libérer les jetons affectés à un processus dont le fonctionnement serait défaillant et qui aurait par exemple terminé son exécution prématurément, sans rendre ses jetons.

Avantageusement encore, dans un mode préférentiel de mise en œuvre, le procédé comprend l'étape de prévoir une attribution d'un nombre limité de jetons de calcul à un processus ou groupe de processus. Ceci permet de s'assurer que le processus ou groupe de processus ne monopolisera pas un nombre trop important de cœurs de calcul et permettra à d' autres processus de pouvoir être exécutés sur les cœurs de calcul restant. Ceci est intéressant pour des processus non prioritaires gourmands en ressources.

Il est également possible de réserver au moins un jeton de calcul à au moins un processus. Ceci est particulièrement intéressant lorsque des processus critiques doivent pouvoir être exécutés à tout moment.

Ces restrictions d'attribution (limitation ou réservation) sont mémorisées dans la mémoire contenant la donnée P.

De préférence, le procédé de l'invention comporte l'étape d'autoriser un programme à accéder à la zone partagée 5. Le programme est par exemple un programme de collecte d' informations utilisables à des fins statistiques ou un programme de débogage .

Bien entendu, l'invention n'est pas limitée aux modes de réalisation décrits mais englobe toute variante entrant dans le champ de l'invention telle que définie par les revendications.

En particulier, le procédé de l'invention peut être mis en œuvre d'une manière différente de celle décrite ici, c'est-à-dire sans les options et variantes mentionnées dans la description.

Le nombre de jetons de calcul peut être indépendant du nombre de cœurs de calcul 2 du système informatique .