¿Cuál es la diferencia entre Kernel no preventivo, preventivo y selectivo preventivo?

Respuestas:

14

En un kernel preventivo, un proceso que se ejecuta en modo kernel puede ser reemplazado por otro proceso mientras está en el medio de una función del kernel.

Esto solo se aplica a los procesos que se ejecutan en modo kernel, una CPU que ejecuta procesos en modo de usuario se considera "inactiva". Si un proceso en modo de usuario desea solicitar un servicio del kernel, debe emitir una excepción que el kernel pueda manejar.

Como ejemplo:

El proceso Aejecuta un controlador de excepciones, el proceso Bse despierta por una solicitud de IRQ, el núcleo reemplaza el proceso Acon B(un cambio de proceso forzado). El proceso Ase deja sin terminar. El planificador decide luego si el proceso Atiene tiempo de CPU o no.

En un kernel no preventivo, el proceso Asimplemente habría utilizado todo el tiempo del procesador hasta que haya terminado o voluntariamente decida permitir que otros procesos lo interrumpan (un cambio de proceso planificado).

Los sistemas operativos basados ​​en Linux de hoy en día generalmente no incluyen un núcleo totalmente preventivo, todavía hay funciones críticas que deben ejecutarse sin interrupción. Así que creo que se podría llamar a esto un "núcleo preventivo selectivo".

Aparte de eso, hay enfoques para hacer que el kernel de Linux (casi) sea totalmente preventivo.

meneo
fuente
El Sistema Macintosh 6 y el código relacionado (por ejemplo, Sistema 7, Sistema 8 y Sistema 9) no fueron preventivos. El cambio de Apple a MacOS X también vio la introducción de la multitarea preventiva también.
Mei
el núcleo reemplaza el proceso A con B (un cambio de proceso forzado). -> De una manera inglesa, ¿podemos decir la oración alternativamente ya que el proceso A está precedido (por el proceso B)?
snr
2

la preferencia es -> La capacidad del sistema operativo para evitar o detener una tarea programada actualmente en favor de una tarea de mayor prioridad. La programación puede ser uno de, entre otros, procesos o programación de E / S, etc.

En Linux, los programas de espacio de usuario siempre han sido preferentes: el kernel interrumpe los programas de espacio de usuario para cambiar a otros subprocesos, utilizando la marca de reloj normal. Entonces, el núcleo no espera a que los programas de espacio de usuario liberen explícitamente el procesador (que es el caso en la multitarea cooperativa). Esto significa que un bucle infinito en un programa de espacio de usuario no puede bloquear el sistema.

Sin embargo, hasta 2.6 kernels, el kernel en sí mismo no era preemtible: tan pronto como un hilo ha entrado en el kernel, no podía ser reemplazado para ejecutar otro hilo. Sin embargo, esta ausencia de preferencia en el núcleo causó varios problemas con respecto a la latencia y la escalabilidad. Entonces, la preferencia de kernel se ha introducido en 2.6 kernels, y uno puede habilitarla o deshabilitarla usando la opción CONFIG_PREEMPT. Si CONFIG_PREEMPT está habilitado, entonces el código del núcleo 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, se restaura el comportamiento 2.4.

Requerido y formateado desde: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/

Madhur Ahuja
fuente
¿Por qué el kernel 2.4 no era preventivo?
Sen
Mejor pregunte a Linus Torvalds :)
Madhur Ahuja
1

Un kernel preventivo permite que un proceso sea anticipado mientras se ejecuta en modo kernel. Un kernel no preventivo no permite que un proceso que se ejecuta en modo kernel sea reemplazado; se ejecutará un proceso en modo kernel hasta que salga del modo kernel, bloquee o ceda voluntariamente el control de la CPU. Obviamente, un núcleo no preventivo está esencialmente libre de condiciones de carrera en las estructuras de datos del núcleo, ya que solo un proceso está activo en el núcleo a la vez. No podemos decir lo mismo sobre los núcleos preventivos, por lo que deben diseñarse cuidadosamente para garantizar que los datos compartidos del núcleo estén libres de condiciones de carrera. Los núcleos preventivos son especialmente difíciles de diseñar para arquitecturas SMP, ya que en estos entornos es posible que dos procesos en modo kernel se ejecuten simultáneamente en diferentes procesadores. Un kernel preventivo es más adecuado para la programación en tiempo real, ya que permitirá que un proceso en tiempo real se adelante a un proceso que se ejecuta actualmente en el kernel. Además, un kernel preventivo puede responder mejor, ya que hay menos riesgo de que un proceso en modo kernel se ejecute durante un período arbitrariamente largo antes de ceder el procesador a los procesos en espera. Por supuesto, este efecto puede minimizarse diseñando código de kernel que no se comporte de esta manera. Más adelante en este capítulo, exploramos cómo varios sistemas operativos manejan la preferencia dentro del núcleo. Este efecto puede minimizarse diseñando código de kernel que no se comporte de esta manera. Más adelante en este capítulo, exploramos cómo varios sistemas operativos manejan la preferencia dentro del núcleo. Este efecto puede minimizarse diseñando código de kernel que no se comporte de esta manera. Más adelante en este capítulo, exploramos cómo varios sistemas operativos manejan la preferencia dentro del núcleo.

nimesh thakur
fuente