Mi pregunta es ¿por qué hoy en día el manejo de eventos del sistema operativo todavía está escrito en lenguaje ensamblador en lugar de un lenguaje de nivel superior como C, cuando el núcleo en sí está escrito principalmente en C?
17
foobar()
, se definirá, usando el ensamblaje en línea, de una manera en una plataforma y de otra en otra. Esto mantiene el uso de asm al mínimo, pero no se puede evitar por completo.Respuestas:
El lenguaje abstrae el acceso a los registros de la CPU, y un sistema operativo cuando maneja eventos tiene que guardar el contexto, por lo que necesita acceso a los registros en el punto del evento, rompiendo así la especificación C.
fuente
C es una abstracción del código de máquina que se ejecuta en la máquina (aunque mucho más cerca que la mayoría de los otros lenguajes).
Para esas cosas, se utilizan declaraciones de código de máquina que no se pueden expresar en C, y tal vez para la optimización adicional no proporcionada por el ensamblador del compilador de C, principalmente en forma de ensamblador en línea .
En el árbol de código fuente del núcleo, esto se almacena en
arch/<arch>
yinclude/asm-<arch>
donde<arch>
hay un nombre de arquitectura específico. En realidad, es sólo una pequeña parte del código fuente del núcleo completo.fuente
No puedes hacer esto en C :)
Estoy tratando de entrar en modo protegido x86. Obviamente todavía puedo hacer esto en C "emitiendo" códigos de máquina sin procesar, pero aún en caso de que necesite acceder a ofensas precisas, la mayoría de las veces no tengo suerte.
El segundo ejemplo es BootLoader. En los sistemas x86, se requiere que el código de arranque tradicional tenga exactamente 512 bytes de longitud y los dos últimos bytes sean 0xAA y 0x55 (o 55 AA exactamente) respectivamente ... Asegurarse de que los compiladores C sean una pesadilla y el ensamblador trabajo de una manera fantástica.
Hay muchos más casos en los que la Asamblea no solo es preferible, sino que es el único medio.
fuente
asm es más delgado y generalmente mucho más rápido que C desechado con bibliotecas, etc., y el sistema operativo maneja MUCHOS eventos TODO el tiempo. Desea delgado y rápido para esta función.
fuente