L'API d'instrumentalisation de Windows, ou WMI, permet de connaître dans les moindres détails ce qui se passe au sein d'une machine. Nous voyons aujourd'hui comment observer la charge de chaque coeur d'un microprocesseur, avec C++ et C#.
En guise de visite guidée dans les entrailles de Windows, nous vous proposons aujourd'hui de découvrir comment observer la charge de chaque coeur d'un processeur multi-coeur, et, pourquoi pas, comment être notifié de manière asynchrone du fait qu'un coeur atteint un certain seuil de charge. Pour l'occasion nous n'allons pas sortir un assembleur du placard, mais travailler avec une API Windows extrêmement puissante, la WMI. La Windows Management Instrumentation, ou WMI pour les intimes, est l'implémentation de spécifications définies par un groupe d'industriels: La Distributed Management Task Force. L'idée est de pouvoir administrer n'importe quel système, localement ou à distance, au moyen d'une interface normalisée. Grosso modo, ces spécifications consistent en deux couches. La première couche est la CIM. Dans cette couche sont définies des classes qui présentent une très forte analogie avec les classes de la programmation objet. Ainsi une classe encapsule des données relatives au système, éventuellement accompagnées de méthodes. Une classe peut dériver d'une autre. En revanche, à la différence de la programmation objet, le langage utilisé ne peut pas instancier directement une classe, comme on le fait, par exemple en C++ C# ou Java, en invoquant l'opérateur new. A la place, on doit appeler des méthodes de classes qui présentent une analogie avec les méthodes statiques de la programmation objet. La deuxième couche de spécifications est la WBEM. Elle constitue une voie d'accès standard aux classes CIM et dérivées. L'implémentation sous Windows de ces spécifications est la WMI. Si nous nous penchons aujourd'hui sur Windows uniquement, le lecteur pourra être intéressé par une implémentation Open Source de WBEM pour Linux. Celle-ci se trouve à http://openwbem.org/
Frédéric Mazué