Voir le flux RSS

Blog d'un Développeur et Architecte LabVIEW par Luc Desruelle, coauteur du livre Français "LabVIEW programmation et application"

Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution

Noter ce billet
par , 23/10/2015 à 18h10 (1199 Affichages)
I] Généralités du monde de l'informatique, threads, interruptions
En informatique, des threads ou tâches sont des actions qui s’exécutent en parallèle et qui partagent un espace mémoire commun, comme par exemple deux boucles While en parallèle qui partagent les données d’une variable globale.

Dans les langages bas niveau, il est nécessaire de gérer les interruptions de manière manuelle pour autoriser le contrôleur à exécuter plusieurs tâches en simultanées (pseudo-simultanées).

L’introduction des systèmes d’exploitation, comme Microsoft Windows, proposent une surcouche logicielle qui s’occupe de gérer les interruptions entre les tâches logicielles. Cette action est réalisée à partir du composant nommé « Scheduler » (ou ordonnanceur en français).

Le Scheduler a pour fonction de donner l’illusion que les tâches logicielles concurrentes s'exécutent en simultanées en gérant les interruptions entre ces différentes tâches.
L'algorithme d'ordonnancement « Preemptive Scheduling » permet d’allouer des niveaux de priorité. Les tâches de haute priorité interrompent les tâches de basses priorités pour que celles-ci puissent s'exécuter. Il peut aussi interrompre les tâches de haute priorité qui prennent trop de temps afin de garantir une exécution minimale aux autres tâches. La plupart des niveaux de priorité ne sont utilisables que par le Système d’exploitation.


II] LabVIEW, le compilateur et le multicoeur, les niveaux de priorités

Le compilateur LabVIEW gère l’exécution multicœur qui supporte plusieurs threads.

Sous LabVIEW pour changer le niveau de priorité, il y a 3 méthodes :
1. Définir le processus LabVIEW.exe comme processus de haute priorité dans le gestionnaire des tâches de Windows.

2. Utiliser une « Timed Loop ». Ce faisant, vous réduirez l’algorithme dans la boucle à un thread et ce thread sera d’une plus haute priorité que les autres threads du processus en cours. Cette priorité n’est que relative au programme car les autres programmes et processus (dont ceux de Windows) peuvent interrompre ce thread à tout moment.

3. Dans les propriétés d’un VI, il est possible de configurer la priorité de ce VI. Elle est relative aux autres VIs. Cela signifie qu’un programme LabVIEW peut avoir différent niveaux de priorité, mais jamais les plus haut et qu’une tâche exécutée sous LabVIEW peut être à tout moment interrompue par Windows.

III] LabVIEW et les systèmes d'exécution

LabVIEW alloue automatiquement un nombre de threads proportionnellement aux nombres de cœurs de l’ordinateur.


Ils sont classés en système d’exécution, et chacun en a un nombre limité.

Les tâches resteront en attente si tous les threads d’un système d’exécution sont occupés. Par défaut, les VIs s'exécutent dans le système d'exécution standard.

Même s’ils s'exécutent correctement, LabVIEW dispose de six systèmes d'exécution multiples que vous pouvez assigner en sélectionnant Fichier, Propriétés du VI, puis Exécution dans la boîte de dialogue Propriétés du VI. Ces systèmes fournissent un environnement pour les VIs qui doivent s'exécuter indépendamment des autres VIs.
Vous pouvez sélectionner les systèmes d'exécution suivants : 
Interface utilisateur – Gère l'interface utilisateur. 
Standard – S'exécute dans d'autres threads que l'interface utilisateur. 
E/S d'instruments – Empêche les instruments d'interférer avec les autres VIs. La création d’un VI de pilotage d’instrument est évidemment possible dans les autres systèmes, mais il est intéressant d’utiliser ces noms pour partitionner les fonctionnalités de l’application. 
Acquisition de données – Empêche l'acquisition de données d'interférer avec les autres VIs. Idem la création d’un VI d’acquisition de données est possible dans les autres systèmes. 
Autre 1 et autre 2 – Disponibles si certaines tâches de l'application requièrent leur propre thread. 
Identique à l'appelant – S'exécute dans le même système d'exécution que le VI qui a appelé le sous-VI.


Il y a un utilitaire qui permet de connaître le nombre des threads et de les configurer : vi.lib\Utility\sysinfo.llb\threadconfig.vi

Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog Viadeo Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog Twitter Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog Google Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog Facebook Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog Digg Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog Delicious Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog MySpace Envoyer le billet « Programmation avancée sous LabVIEW : La gestion des interruptions - niveaux de priorité - systèmes d'exécution » dans le blog Yahoo

Commentaires