Ma question est pourquoi de nos jours une certaine gestion des événements du système d'exploitation est toujours écrite en langage assembleur au lieu d'un langage de niveau supérieur tel que C, alors que le noyau lui-même est écrit principalement en C?
17
foobar()
sera défini, en utilisant l'assemblage en ligne, d'une manière sur une plate-forme et d'une autre manière sur une autre. Cela réduit l'utilisation de asm au minimum, mais il ne peut pas être complètement évité.Réponses:
Le langage supprime l'accès aux registres du processeur, et un système d'exploitation lors de la gestion des événements doit enregistrer le contexte, il a donc besoin d'accéder aux registres au moment de l'événement, cassant ainsi la spécification C.
la source
C est une abstraction du code machine qui s'exécute sur la machine (bien que beaucoup plus proche que la plupart des autres langues).
Pour ces choses, des instructions de code machine qui ne peuvent pas être exprimées en C, et peut-être pour l'optimisation supplémentaire non fournie par l'assembly du compilateur C, sont principalement utilisées sous la forme d'un assembleur en ligne .
Dans l'arborescence du code source du noyau, il est stocké sous
arch/<arch>
etinclude/asm-<arch>
où se<arch>
trouve un nom d'architecture spécifique. Ce n'est en fait qu'une petite partie de la source complète du noyau.la source
Vous ne pouvez pas faire cela en C :)
J'essaie d'entrer en mode protégé x86. Évidemment, je peux toujours le faire en C en «émettant» des codes machine bruts, mais toujours au cas où j'aurais besoin d'accéder à des décalages précis - je n'ai surtout pas de chance.
Le deuxième exemple est BootLoader. Sur les systèmes x86, il est nécessaire que le code de démarrage traditionnel soit exactement de 512 octets de long et que les deux derniers octets soient respectivement 0xAA et 0x55 (ou 55 AA exactement) ... travail d'une manière fantastique.
Il existe de nombreux autres cas de ce type où l'Assemblée n'est pas seulement préférable - mais est le seul moyen.
la source
asm est plus mince et généralement beaucoup plus rapide que C junked avec des bibliothèques, etc., et le système d'exploitation gère beaucoup d'événements tout le temps. Vous voulez mince et rapide pour cette fonction.
la source