Cela fait partie du langage tout comme l'addition de deux nombres, le compilateur doit savoir comment faire et appliquer cela à la cible (afin de prendre en charge pleinement ce langage). Il peut ou non appeler une fonction en fonction de ce que la cible prend en charge, s'il n'y a pas de matériel à virgule flottante dans la cible, alors il doit appeler une bibliothèque logicielle pour effectuer la conversion double en entier. Il y a parfois des raisons pour lesquelles un point flottant dur ne peut pas faire certaines choses et/ou des raisons d'implémentation et de conception de compilateur pour lesquelles ils peuvent toujours choisir d'appeler une fonction pour effectuer la conversion double en entier même s'il existe un FPU dur.
Ces bibliothèques, si elles sont utilisées, sont parfois appelées bibliothèques de compilateur, dans GCC dans la catégorie gcclib ou bibliothèques GCC. Généralement pas quelque chose que vous voyez (en arrière-plan)... Ce n'est pas limité aux nombres à virgule flottante, vous verrez des appels de bibliothèque similaires pour l'addition, la soustraction, la multiplication, la division, ainsi que pour les opérations à virgule flottante que le langage C prend en charge et que la cible ne prend pas nécessairement en charge directement. (ajout de deux entiers de 64 bits sur un processeur de 32 bits, division entière sur un processeur sans division matérielle, multiplication signée sur un processeur qui prend en charge uniquement la multiplication non signée, etc).
Il n'y a pas de réponse unique à cette question, cela varie en fonction du compilateur, de la version du compilateur et de la cible.
ÉDITER
En ce qui concerne l'écriture d'un système d'exploitation, cela est enfoui dans le compilateur vous ne devriez pas y être exposé au niveau du système d'exploitation. Le compilateur doit faire son travail de production de code fonctionnel pour la cible (dont votre OS fait partie de la cible, mais...) qui, à la fin de la journée, est beaucoup de code machine, dont une partie est du code machine direct qui effectue la conversion double en int ou une bibliothèque GCC qui est liée et qui a du code machine qui effectue cette opération. Ainsi, votre système d'exploitation ne devrait pas se soucier de cela. Cependant, il y a des moments où l'implémentation logicielle de quelque chose a, par exemple, une division par zéro et veut prendre une mesure à ce sujet qui pourrait être un appel de bibliothèque C qui pourrait ensuite devenir un appel système. Une implémentation matérielle de division directe flottante ou entière, pourrait avoir une interruption que le système d'exploitation pourrait devoir prendre en charge dans cette situation. Il y a donc une connexion possible ici. Le flottant IEEE-754 a, ou du moins la dernière fois que je l'ai lu il y a un moment, des accroches logicielles/système d'exploitation, ici encore une division par zéro qui est piégée par rapport à une division par zéro qui ne l'est pas peut donner des résultats différents. Pour le cas d'une opération de flottant à entier, il y a la situation d'un NaN converti en entier et je ne connais pas la réponse spécifique à cet égard pour une capture vs pas de capture, mais si votre compilateur génère des fonctions à virgule flottante logicielles pour cela, il peut entraîner l'appel d'autres fonctions qu'il suppose être prises en charge par d'autres bibliothèques GCC et/ou les bibliothèques standard C, ce qui pourrait alors se connecter à quelque chose dans votre système d'exploitation.