Quel est l’algorithme derrière sleep ()?

Maintenant, il y a quelque chose que je me suis toujours demandé: comment est-ce que sleep () est implémenté?

S’il s’agit d’utiliser une API à partir du système d’exploitation, comment l’API est-elle créée?

Est-ce que tout se résume à utiliser un code machine spécial sur le processeur? Est-ce que ce processeur a besoin d’un co-processeur spécial ou d’un autre gadget sans lequel vous ne pouvez pas dormir ()?

L’incarnation la plus connue de sleep () est en C (pour être plus précis, dans les bibliothèques fournies avec les compilateurs C, comme la libc de GNU), même si presque tous les langages ont leur équivalent, mais l’implémentation de certaines langues ( pense que Bash) n’est pas ce que nous examinons dans cette question …

EDIT: Après avoir lu certaines des réponses, je constate que le processus est placé dans une queue. De là, je peux deviner deux alternatives, soit

  1. une timer est définie pour que le kernel réveille le processus à l’heure indiquée, ou
  2. Chaque fois que le kernel reçoit une tranche de temps, il interroge l’horloge pour vérifier s’il est temps de réveiller un processus.

Les réponses ne mentionnent que la variante 1. Par conséquent, je demande: comment se comporte cette timer? Si c’est une simple interruption pour que le kernel réveille le processus, comment le kernel peut-il demander au temporisateur de “me réveiller en 140 millisecondes pour que je puisse mettre le processus en marche”?