Cuando el gestor de arranque carga el sistema operativo, presumiblemente solo hay UN flujo de programa activo, ¿no? Esto significa que un procesador tiene el puntero de instrucción y ejecuta los comandos que encuentra en la posición a la que apunta el registro EIP. ¿En qué punto y cómo el sistema comienza a explotar más procesos y/o subprocesos (sin hilos de usuario, pero hilos de CPU)?programación de bajo nivel: ¿cómo comienza el SO un nuevo proceso/subproceso?
Respuesta
El sistema operativo se iniciará (después de que el BIOS y el gestor de arranque hayan finalizado) con un rol especial, ya que el primer programa que ejecutará tendrá direct acceso a todos los comandos de la CPU.
Por lo tanto, configurará varias partes del sistema, como configurar Interrupt Handlers (o Rutinas de servicio de interrupción). Una vez hecho esto, tiene la capacidad de crear un "planificador".
El actual proceso de "proceso/hilo" se realizará mediante este planificador. Decide qué hilos se ejecutarán. También administra todos los hilos activos. La CPU no tiene conocimiento de todas estas cosas.
Una vez que el ejecutivo principal del planificador decide ejecutar el subproceso (o "proceso") A, copie los datos de proceso en los registros (y almacena los registros en el InfoBlock del subproceso que se ejecuta recientemente). Le indicará a la CPU/un temporizador que cause una interrupción en n microsegundos (u otra unidad de tiempo). Luego le indicará a la CPU que ejecute el "programa" (lo único que sabe la CPU) en el modo no OS (para que no modifique los datos críticos ni registre los propios manejadores de interrupciones sin permiso).
Mientras el hilo A se está ejecutando ahora, se ejecutará el temporizador de hardware. Una vez que alcanza el offset de tiempo deseado, provocará una Interrupción. El hardware detendrá la ejecución del programa actual e invocará el Interrupt Handler
registrado que en su lugar. Este controlador será un método del programador (el principal ejecutivo nuevamente, para ser precisos).
Este método volverá a evaluar qué subproceso se debe programar y la programación continúa.
Una de las primeras cosas que debe iniciar un sistema operativo (multiproceso) es el planificador que se encarga de gestionar múltiples procesos (y por lo tanto también gestiona múltiples subprocesos de CPU, por ejemplo, en máquinas multinúcleo).
El primer proceso iniciado por este programador suele ser algún tipo de proceso "init" que a su vez es responsable de cargar los otros programas/procesos posteriormente.
Correcto, durante el proceso de arranque solo hay un hilo de ejecución. Por lo general, este es el caso hasta que el sistema operativo se haya inicializado hasta el punto en que la gestión de memoria de bajo nivel, el programador, etc. sean funcionales.
Este es incluso el caso en sistemas con varias CPU: un núcleo es el "procesador maestro" que maneja el inicio temprano hasta que la infraestructura está allí para reiniciar los otros núcleos.
Al final es altamente específico para el sistema operativo; el Intel Architecture Software Developer's Manuals tiene los detalles de las especificaciones de hardware. (Suponiendo que está hablando de la arquitectura Intel, otras arquitecturas pueden diferir salvajemente)
- 1. Programación del zócalo en el nivel bajo
- 2. Programación Bluetooth de bajo nivel en C++
- 3. Aprendiendo acerca de la programación de gráficos de bajo nivel
- 4. ¿Cuándo comienza un nuevo __LINE__?
- 5. ¿Reemplazo para la programación de bajo nivel C?
- 6. ob_get_level() comienza en el nivel 1
- 7. nivel bajo Hooker
- 8. de bajo nivel Lua intérprete
- 9. primitiva conexión ssh (nivel bajo)
- 10. ¿Cómo puedo aprender _realmente_ la programación de redes de bajo nivel?
- 11. C# provocar un evento cuando un nuevo proceso comienza
- 12. Teclados múltiples y ganchos de bajo nivel
- 13. Grub y entrar en modo real (programación de lenguaje ensamblador de bajo nivel)
- 14. OpenGL preguntas de rendimiento de bajo nivel
- 15. Cómo cambiar el nivel de registro de raíz mediante programación
- 16. ¿Es el ensamblaje el único lenguaje de programación de bajo nivel y, de no ser así, es el más utilizado?
- 17. ¿Qué es Javascript de bajo nivel?
- 18. ¿Cómo manejar los errores WCF de bajo nivel?
- 19. Cómo agregar un nuevo submenú personalizado bajo otro menú de complementos
- 20. cómo iniciar la programación a nivel de chip
- 21. API de audio de bajo nivel para Android
- 22. .NET Framework desde el punto de vista de un programador de bajo nivel
- 23. cómo crear un proceso de nivel de integridad medio a partir del proceso de nivel de integridad bajo?
- 24. Cómo acoplar mediante programación un nuevo elemento a DockPanel
- 25. ¿Qué conjunto de habilidades debe tener un programador de bajo nivel?
- 26. ¿Dónde puedo aprender sobre el funcionamiento de bajo nivel de mi computadora?
- 27. ¿Cuál es la ventaja de escribir un SO completamente en ensamblaje?
- 28. Quiero saber la diferencia entre las funciones de nivel bajo y las funciones de nivel superior
- 29. Bases bsd comunes más bajas que las de bajo nivel
- 30. ¿Cambiar el nivel de registro mediante programación en log4net?
Gracias por su explicación. ¿Puede decirme cómo cambia esta imagen cuando están involucrados varios procesadores/núcleos independientes? – prinzdezibel
La mayoría de las multinúcleas tienen al menos algún procesador "maestro" (ver otras respuestas) - Las memorias caché L1 + no funcionarían sin una cierta administración central. El planificador solo tendrá que dirigirse al procesador deseado para cada operación de registro. Todo lo demás se mantiene igual (temporizadores de intervalo fijo). –
@prinzdezible: el programador de sistema operativo generalmente se ejecuta en cada núcleo de CPU cuando el hilo actual se detiene mediante interrupción o al hacer una llamada al sistema. Para poder escalar a muchos núcleos, no verá todos los hilos, sino solo los hilos asignados a esa CPU. Si está demasiado ocupado, enviará hilos a otras CPU. Si no está ocupado, extraerá hilos de otras CPU. De vez en cuando, por tiempo o por algún contador, el planificador cargará tareas de equilibrio en todas las CPU (esto es lento, por lo que no es frecuente) –