2009-05-03 26 views
47

Explicado en sus propias palabras, ¿qué es prioridad y qué significa para un núcleo (Linux)?¿Qué es prioridad/Qué es un kernel preemtible? ¿Para que sirve?

¿Cuáles son las ventajas y desventajas de tener un kernel preemptible?

+26

¿Por qué el downvote y por qué "deberes"? Esto no es una tarea. De hecho, hay personas como yo que están interesadas en esa pregunta y no entienden los artículos comunes de Wikipedia. –

+3

http://en.wikipedia.org/wiki/Preemption_(computing) – Oli

Respuesta

56

Multitarea anticipada: ejecuta varios procesos/subprocesos en un único procesador, creando la ilusión de que se ejecutan al mismo tiempo cuando se asignan porciones de tiempo multiplexadas pequeñas para ejecutar. Un proceso se "apropia" cuando está programado fuera de ejecución y espera la próxima vez para procesar.

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

La principal ventaja de un kernel preventivo es que las llamadas de sistema no bloquean todo el sistema. Si un sys-call tarda mucho tiempo en finalizar, no significa que el kernel 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 extremos, realizar un bloqueo más fino o utilizar estructuras y algoritmos sin bloqueo.

+8

Es por eso que cuando un sistema de archivos falla, particularmente un sistema de archivos de red, puede encontrarse con un proceso que no se puede matar. Está sentado esperando la llamada de un sistema para leer el sistema de archivos para regresar, pero nunca lo hará y no puede ser interrumpido. – Schwern

13

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

+1

Lo sé, su contribución fue hecha hace algún tiempo, pero de todos modos, déjeme hacerle una pregunta. ¿Por qué preferirías el término "preemtive" por "preemptible"? Especialmente para la configuración del kernel utiliza este último podría ser un poco más intuitivo usando este. –

4

Preemption significa que el SO admite múltiples tareas (una pieza de código separada e independiente) y cambiará entre las tareas en un horario. Cuando se interrumpe una tarea, se denomina "adelantar". El sistema operativo moderno admite esto, pero no es necesario para sistemas simples integrados, por ejemplo. La sobrecarga de la conmutación de tareas de apoyo no siempre vale la pena.

7

Otros han explicado adecuadamente qué es un kernel apropiable.

¿Para qué sirve?

Sobre todo los beneficios son:

  • Menor latencia en sistemas no-SMP - típicamente usados ​​en sistemas de tiempo real o para otras cosas donde la latencia es importante (audio, vídeo aplicaciones tal vez)
  • desarrolladores del kernel de la enseñanza que no tienen sistemas SMP cómo escribir código correcto para SMP

con un núcleo no con derecho preferente, en un sistema de procesador único es posible que los desarrolladores del kernel para ser perezoso y salir de allí sin ningún bloqueo mayoría de las veces - por supuesto esto es un gran error en SMP. Los granos preventivos les permiten obtener este dolor sin más núcleos.

4

Creo que esto explica post sus preguntas:

lo que es de preferencia?

La capacidad del sistema operativo para adelantarse o detener una tarea actualmente programada a favor de una tarea de mayor prioridad. La programación puede ser una de, pero no se limita a, proceso o programación de E/S, etc.

¿Qué es un kernel de preferencia?

En Linux, los programas de espacio de usuario siempre han sido prioritarios: el kernel interrumpe los programas de espacio de usuario para cambiar a otros hilos, usando el tic del reloj normal. Por lo tanto, el kernel 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 ingresado al kernel, no puede ser reemplazado para ejecutar otro hilo. El procesador se podría usar para ejecutar otro hilo cuando se canceló una llamada al sistema, o cuando el hilo actual pedía explícitamente al programador que ejecutara otro hilo usando la función schedule(). Esto significa que un bucle infinito en el código del núcleo bloqueó todo el sistema, pero esto no es realmente un problema: el código del núcleo está diseñado para que no haya bucles infinitos.

La preferencia de kernel se ha introducido en kernels 2.6, y uno puede habilitarla o deshabilitarla 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 ciclo infinito en el código ya no puede bloquear todo el sistema. Si CONFIG_PREEMPT está desactivado, 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 oportunamente.

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