# Horloge

L'horloge est un périphérique spécial et essentiel. Il sert simplement à
déterminer la date et l'heure.

C'est une fonction essentielle, car c'est nécessaire pour maintenir des
statistiques, calculer le quantum de temps des processus, etc.

![](https://books.snowcode.ovh/uploads/images/gallery/2024-01/2024-01-05-18-21-48-screenshot.png)

> Fun fact : la Raspberry Pi n'a pas d'horloge, la date et l'heure est
> [synchronisés via le
> réseau](https://www.youtube.com/watch?v=WX5E8x3pYqg) au démarrage. Et
> s'il n'y a pas de connexion, l'horloge va commencer à compter à partir
> de l'heure à laquelle il s'est arrêté.
>
> Les systèmes MS-DOS n'avaient pas non plus d'horloge, il fallait donc
> indiquer la date et l'heure manuellement au démarrage.

L'horloge fonctionne avec un quartz, un compteur et un registre. Le
quartz, lorsqu'il est sous tension, génère un signal périodique très
précis, ce signal peut ensuite être utilisé pour la synchronisation des
composants. Le signal est ensuite fourni au compteur qui va décompter
jusqu'à arriver à zéro.

Une fois arrivé à zéro, une interruption est émise vers le CPU et le
gestionnaire d'horloge prend la main.

Ensuite, ici, il y a deux modes de fonctionnement. Il y a le mode
**one-shot**, le système envoie l'interruption et attends une réaction.
Sinon, il y a le mode **square wave** qui, une fois que le compteur
arrive à 0, il recommence. On parle ici de **ticks d'horloge**.

Le système d'exploitation va ensuite maintenir l'heure en comptant le
nombre de secondes depuis une date et heure de référence (par exemple,
sous Linux/UNIX, on compte le nombre de secondes depuis le 1ier janvier
1970 00:00 UTC).

Pour synchroniser l'heure, il suffit donc de savoir le nombre de
secondes depuis un point de référence.

Le logiciel d'horloge a ensuite pour but de maintenir l'heure, vérifier
qu'un processus ne dépasse pas son quantum, compter l'utilisation du
CPU, gérer l'appel système alarm, maintenir différentes statistiques,
etc.

Par exemple, pour vérifier qu'un processus ne dépasse pas son quantum,
le compteur d'horloge est initialisé par le scheduler en fonction du
quantum. À chaque interruption, il est diminué et une fois arrivé à zéro
le processus est remplacé.

Pour pouvoir gérer plusieurs évènements temporels en même temps, le
système met en place une **file d'évènements**, qui agit comme une sorte
d'agenda pour planifier des évènements.