# High Precision Event Timer

Le HPET (High Precision Event Timer, qu'on pourrait traduire littéralement en « Timer événementiel de haute précision », et traduit, dans windows, en « Compteur d'évènement de haute précision »), anciennement Multimedia Timer, est un timer (minuterie, métronome, chronomètre, horloge, ...) sous forme de composant électronique. Ses spécifications ont été écrites conjointement par Intel et Microsoft.
Les anciens systèmes d'exploitation ne savent pas utiliser le HPET et peuvent uniquement tourner sur des machines qui ont les anciens systèmes de timer. Certaines machines ont les deux, par exemple HPET + RTC.

## Fonctionnalités

Un bloc HPET est constitué d'un compteur et de 3 à 32 timers indépendants. Chaque timer est constitué d'un comparateur et d'un registre pour stocker la valeur à laquelle le timer doit se déclencher. Il peut y avoir au plus 8 blocs HPET. Chaque comparateur peut générer une interruption quand le compteur atteint la valeur préprogrammée, et c'est de cette façon que le timer informera le processeur que le temps donné est écoulé.
Tous les timers peuvent être placés en mode one-shot (littéralement un tir) et certains peuvent être placés en mode périodique. En mode one-shot le timer déclenche une interruption une seule fois lorsque le compteur principal atteint la valeur stockée dans le registre du comparateur. En mode périodique les interruptions sont générées à l'intervalle de temps spécifié.

## Applications

Le HPET peut produire des interruptions périodiques à une résolution beaucoup plus haute que le RTC. Le HPET est souvent utilisé pour synchroniser les flux multimédia, ce qui fournit un rendu fluide et réduit la nécessité d'utiliser les autres méthodes de calcul de temps telles que l'instruction RDTSC des processeurs x86.

## Comparaison avec les prédécesseurs

Le HPET fut conçu pour remplacer le PIT 8254 et la fonction d'interruption périodique des RTC. Comparé à ces anciens circuits, le HPET fonctionne à une plus haute fréquence (au moins 10 MHz) et possède un compteur sur 64 bits (bien qu'ils puissent être manipulés en 32 bits).
Le 8254 et le RTC peuvent, tout comme le HPET, être utilisés en mode one-shot, mais le processus de mise en place est tellement lent que leur mode one-shot n'est dans la pratique, jamais utilisé pour les tâches qui requièrent une certaine précision. À la place du mode one-shot les puces 8254 et RTC sont typiquement utilisées en mode périodique avec un très petit intervalle. Par exemple, si une application a besoin d'effectuer plusieurs attentes courtes, il sera plus économique en temps d'utiliser le mode périodique qui tourne constamment avec un intervalle d'1 ms plutôt que de placer un one-shot chaque fois qu'il est nécessaire. Ceci à cause du coût élevé de la mise en place d'un one-shot sur les puces 8254 et RTC. Ceci va faire qu'une interruption sera déclenchée toutes les millisecondes même si l'application a besoin de travailler moins fréquemment. Il y aura donc des interruptions déclenchés pour rien. Avec le HPET les interruptions supplémentaires peuvent être évitées grâce au coût de la mise en place des one-shot considérablement réduit.

## Compatibilité

Les systèmes d'exploitation conçus avant le HPET ne peuvent pas l'utiliser, ils peuvent donc tourner uniquement sur les machines disposant d'un ancien système de timer. Les nouveaux systèmes d'exploitation essayent d'utiliser les deux. Quelques machines possèdent les deux systèmes de timer.
Les systèmes d'exploitation suivants sont connus pour ne pas être compatible avec le HPET : Windows XP, Windows Server 2003, et les précédentes versions de Windows. Les anciens Linux contiennent un driver pour le HPET, mais celui-ci n'est pas fonctionnel.
Les systèmes d'exploitation suivants sont connus pour être capables d'utiliser le HPET : Windows Vista, Windows 2008, Windows 7, les versions de Mac OS X basées sur les processeurs x86, Linux 2.6 et FreeBSD.
Avec un noyau Linux, le pilote d'horloge matérielle "rtc-cmos" doit être utilisé à la place du driver "rtc" d'origine.

## Failles de sécurité

Un groupe de chercheurs en sécurité de l'Université de Columbia découvre en 2015 une nouvelle faille de sécurité, "The Spy in the Sandbox" (L'espion dans le bac à sable), en exploitant les faiblesses du High Resolution Timer en permettant à un hacker d'espionner un ordinateur, il est estimé que 83.03% des navigateurs à la date de la publication, serait touchés.
Le principe de ce type d'attaque est d'attirer une victime sur une page web non fiable. C'est là que l'un des composants électroniques intégrés aux processeurs Intel, le High Resolution Timer, entre en jeu et participe malgré lui au piratage. En étudiant le temps que le PC de la victime met pour accéder à la mémoire, le hacker peut disposer d'une vue d'ensemble de l'historique du navigateur, des touches tapées, et des mouvements de souris.
À noter que la méthode n'est pas nouvelle, elle est utilisée par les hackers depuis plusieurs années.
En effet, le fait d'interpréter ce qui se passe dans un ordinateur en mesurant d'autres données de réaction date d'avant les années 1980, on notera que cette faille est notamment connue depuis plusieurs années par certains fabricants de matériels et autres éditeurs de logiciels.