Estoy leyendo acerca de los controladores de dispositivos linux donde se menciona que kernel se ejecuta en modo privilegiado, lo que le da acceso irrestricto a todos los H/W. ¿Cómo se evita que un programa de usuario configure la CPU en este modo?¿quién o cómo cambia los modos de procesador, estados de CPU, niveles de privilegios de CPU?
Respuesta
Si quiere entender esto, una de las mejores maneras de abordarlo es seguir el proceso de arranque de Linux Kernel Boot Process a través del código. Por ejemplo, supongamos que llevas Linux ejecutándose en una arquitectura x86. Lo que sucede en el arranque es que el BIOS le da el control a un cargador de arranque. El gestor de arranque en finn da control al kernel.
El kernel pasa por un proceso para iniciarse. Inicialmente, la mayoría de las cosas están escritas en lenguaje ensamblador: consulte /arch/x86/boot/header.S
Luego, vaya a /arch/x86/boot/main.c. Justo al final de la función principal verá la llamada a go_to_protected_mode()
Se puede ver que en función de /arch/x86/boot/pm.c
Así, una vez que arranque en el núcleo, se se convierte en la puerta de enlace de la CPU, y su código se ejecuta en la máquina virtual proporcionada por el kernel. Los programas de usuario no pueden ejecutarse en otros modos por el hecho de que tienen que hacer todo a través de esta máquina virtual.
El modo de usuario puede cambiar su modo de privilegio solo mediante la generación de algún tipo de interrupción. Parece que el propósito de la interrupción es cambiar el modo de privilegio del programa. Tras la generación de cualquier interrupción normal, el modo de privilegio se eleva y parte del código kernel comienza a ejecutarse ... Conclusión: Al interrumpirse a sí mismo, el programa de modo de usuario no puede elevar el privilegio y seguir ejecutando código propio ... Así es como esta gran seguridad mecanismo opera.
Billmic
- 1. GPU lee desde CPU o CPU escribe en la GPU?
- 2. Emulación de CPU 6502
- 3. Android - uso de memoria/CPU
- 4. ¿Cómo acceder a los sensores de calor de la CPU?
- 5. Alineación de CPU y datos
- 6. cpu cores vs hilos
- 7. Afinidad de la CPU en entornos virtualizados
- 8. Afinidad de OpenMP y CPU
- 9. CPU de ensamblaje y multinúcleo
- 10. Ensamblaje Algoritmo de medición de frecuencia de la CPU
- 11. Identificación de CPU en la máquina virtual
- 12. ¿Cómo obtener la temperatura de la CPU?
- 13. ¿'Lock' tarda tiempo de CPU?
- 14. Cálculo del uso de CPU
- 15. ICC vs GCC - Optimización y arquitectura de la CPU
- 16. clr.sll! StrongNameSignatureVerification Consumo de CPU
- 17. Cómo calcular MySQL Query Memory/CPU Cost
- 18. ¿El 'temporizador' requiere más potencia de CPU?
- 19. java usando 100% cpu
- 20. Cómo reducir el uso de CPU de un programa?
- 21. Glassfish: alto uso de CPU
- 22. MySQL alto uso de CPU
- 23. Carga de CPU desde Java
- 24. Flash/Actionscript Analizador de CPU
- 25. Obtención de uso de CPU con golang
- 26. CPU Affinity
- 27. ¿Cómo se configura Tomcat para usar más de 1 CPU?
- 28. Código de C++ para la carga de la CPU y la temperatura de la CPU
- 29. CPU de acelerador Uso de la aplicación
- 30. cpu vs gpu - cuando la CPU es mejor