versiones sistema operativo nucleo fuente estructura descargar cual codigo arquitectura linux operating-system kernel preemption

linux - sistema - ¿Qué es la preferencia/¿Qué es un núcleo preferible? ¿Para que sirve?



kernel de windows (5)

Explicado en sus propias palabras, ¿qué es la preferencia y qué significa para un kernel (de Linux)?

¿Cuáles son las ventajas y desventajas de tener un núcleo preventivo?


Creo que este post explica tus preguntas:

¿Qué es la prevención?

La capacidad del sistema operativo para anticiparse o detener una tarea actualmente programada en favor de una tarea de mayor prioridad. La programación puede ser uno de, pero no limitado a, la programación de procesos o de E / S, etc.

¿Qué es un kernel de preferencia?

Bajo Linux, los programas de espacio de usuario siempre han sido preferibles: el kernel interrumpe los programas de espacio de usuario para cambiar a otros subprocesos, usando el tic de reloj regular. Por lo tanto, el kernel no espera a que los programas de espacio de usuario liberen explícitamente el procesador (que es el caso de la multitarea cooperativa). Esto significa que un bucle infinito en un programa de espacio de usuario no puede bloquear el sistema.

Sin embargo, hasta los 2.6 kernels, el kernel en sí no era preemtible: tan pronto como uno de ellos ingresó al kernel, no se pudo anticipar la ejecución de otro thread. El procesador podría usarse para ejecutar otro subproceso cuando se terminó un syscall, o cuando el subproceso actual le pidió explícitamente al programador que ejecutara otro subproceso utilizando la función schedule (). Esto significa que un bucle infinito en el código del kernel bloqueó todo el sistema, pero esto no es realmente un problema: el código del kernel está diseñado para que no haya bucles infinitos.

La preferencia de kernel se introdujo en 2.6 kernels, y uno puede habilitarlo o deshabilitarlo usando la opción CONFIG_PREEMPT. Si CONFIG_PREEMPT está habilitado, entonces el código del kernel puede ser reemplazado en todas partes, excepto cuando el código ha deshabilitado las interrupciones locales. Un bucle infinito en el código ya no puede bloquear todo el sistema. Si CONFIG_PREEMPT está deshabilitado, entonces se restaura el comportamiento 2.4.

¿Pros y contras?

Pros: El kernel de preferencia puede mejorar la latencia y la escalabilidad, y puede hacer que la tarea de alta prioridad se ejecute y responda a tiempo.

Contras: hace que escribir código sea difícil en el kernel de preferencia, especialmente en SMP, y debe tener en cuenta muchos factores.


La preferencia significa que el sistema operativo admite múltiples tareas (un código de código independiente y separado) y cambiará entre las tareas según un programa. Cuando se interrumpe una tarea, se llama "prioridad". El sistema operativo moderno es compatible con esto, pero no es necesario para sistemas integrados simples, por ejemplo. La sobrecarga de soportar el cambio de tareas no siempre vale la pena.


Multitarea preventiva: ejecuta varios procesos / subprocesos en un solo procesador, creando la ilusión de que se ejecutan simultáneamente cuando en realidad se asignan pequeños segmentos de tiempo multiplexados para ejecutarse. Un proceso se "anticipa" cuando se programa fuera de ejecución y espera siguiente segmento de tiempo para ejecutar.

Un kernel preventivo es uno que se puede interrumpir en medio de la ejecución del código, por ejemplo, en respuesta a una llamada del sistema, para hacer otras cosas y ejecutar otros subprocesos, posiblemente aquellos que no están en el kernel.

La principal ventaja de un kernel preventivo es que sys-calls no bloquea todo el sistema. Si una llamada a sys tarda mucho tiempo en finalizar, no significa que el núcleo no pueda hacer nada más en este momento. La principal desventaja es que esto introduce una mayor complejidad en el código del kernel, al tener que manejar más casos finales, realizar bloqueos más precisos o utilizar estructuras y algoritmos sin bloqueo.


Otros han explicado adecuadamente qué es un kernel preventivo.

¿Para que sirve?

Principalmente los beneficios son:

  • Baja latencia en sistemas que no son SMP: generalmente se usa en sistemas en tiempo real o para otras cosas donde la latencia es importante (quizás audio, aplicaciones de video)
  • Enseñar a los desarrolladores de kernel que no tienen sistemas SMP cómo escribir el código correcto para SMP

Con un kernel no preferible, en un sistema de procesador único es posible que los desarrolladores del kernel sean perezosos y se salgan sin ningún bloqueo la mayor parte del tiempo; por supuesto, esto es un gran error en SMP. Los núcleos preferibles les permiten obtener este dolor sin más núcleos.


Realmente deberías usar el término "preventivo". Hay diferentes tipos de prevención. Esencialmente, es muy simple y probablemente lo entiendas por otro nombre. Un sistema operativo preventivo puede cambiar los contextos entre los hilos del modo de usuario sin ninguna programación especial en la aplicación anticipada. Esto permite la multitarea. Un sistema operativo puede cambiar y volver a un proceso, y este cambio es esencialmente transparente. También existe el kernel preventivo, que permite que los subprocesos en modo kernel sean sustituidos (la mayoría de los sistemas operativos no lo permiten, pero es necesario para ciertas aplicaciones, como en sistemas de tiempo real). Tenga en cuenta, esta es una explicación muy simplificada.