GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo retiene Linux el control de la CPU en una máquina de un solo núcleo?

El núcleo obtiene el control con bastante frecuencia en las operaciones normales:cada vez que un proceso realiza una llamada al sistema y cada vez que se produce una interrupción. Las interrupciones ocurren cuando el hardware quiere la atención de la CPU, o cuando la CPU quiere la atención del kernel, y una pieza particular de hardware puede programarse para solicitar atención periódicamente (el temporizador). Por lo tanto, el núcleo puede garantizar que, siempre que el sistema no se bloquee tanto que no se generen más interrupciones, se invocará periódicamente.

Como resultado,

si ese proceso está haciendo un cálculo de ejecución extremadamente largo sin producir

no es una preocupación:Linux es un sistema operativo multitarea preventivo, es decir, realiza múltiples tareas sin requerir la cooperación de los programas en ejecución.

Cuando se trata de matar procesos, el kernel está involucrado de todos modos. Si un proceso quiere matar a otro proceso, tiene que llamar al kernel para que lo haga, de modo que el kernel tenga el control. Si el kernel decide eliminar un proceso (por ejemplo, el asesino OOM, o porque el proceso intentó hacer algo que no está permitido hacer, como acceder a la memoria no asignada), también tiene el control.

Tenga en cuenta que el núcleo se puede configurar para no controlar un subconjunto de las CPU de un sistema (usando el obsoleto isolcpus parámetro del kernel), o para no programar tareas en ciertas CPU en sí (usando cpusets sin balanceo de carga, que están completamente integrados en cgroup v1 y cgroup v2); pero al menos una CPU en el sistema siempre debe estar completamente administrada por el kernel. También se puede configurar para reducir la cantidad de interrupciones de temporizador que se generan, según el uso que se le dé a una CPU determinada.

Tampoco hay mucha distinción entre los sistemas de una sola CPU (núcleo único, etc.) y los sistemas de múltiples CPU, las mismas preocupaciones se aplican a ambos en lo que respecta al control del kernel:cada CPU necesita llamar al kernel periódicamente si es para ser utilizado para realizar múltiples tareas bajo el control del kernel.


Linux y la mayoría de los sistemas operativos modernos utilizan la multitarea preventiva, lo que significa que el kernel tiene control total sobre el tiempo que se permite que se ejecute cada proceso y se adelantará a un proceso si se ejecuta durante demasiado tiempo, a diferencia de la multitarea cooperativa, donde un proceso pasará el control cuando quiera

Básicamente, en la multitarea preventiva, el kernel se activará periódicamente desde un temporizador, y cada vez que el kernel esté en control (cuando ocurra la interrupción del temporizador o se invoque una llamada al sistema), el kernel guardará el contexto del proceso actual y luego cambiará al siguiente proceso. ' contexto. Eso se llama un cambio de contexto donde todo el estado del proceso, incluida toda la información del subproceso, los valores de registro... se guardan y restauran para que el proceso continúe ejecutándose desde el punto exacto en el que se adelantó sin siquiera saber que no se ha ejecutado continuamente. Por lo tanto, muchos procesos aparecerán para ejecutarse simultáneamente en un solo núcleo de CPU, aunque en realidad solo se ejecuta 1 proceso en cualquier momento. El kernel también es solo un proceso especial que realiza todo el proceso y el manejo de recursos. No se ejecuta desde un núcleo separado solo para monitorear otros procesos

Consulte también ¿Qué significa decir "el kernel de Linux es preventivo"?


Linux
  1. Linux:¿cómo decide The Oom Killer qué proceso eliminar primero?

  2. Linux:¿cómo se inspecciona la información de la estructura del directorio de un archivo Unix/linux?

  3. ¿Cómo calcular el uso de CPU de un proceso por PID en Linux desde C?

  4. ¿Cuál es la fuente actual del kernel de Linux?

  5. ¿Cómo se compara el kernel de Linux con las arquitecturas de microkernel?

Cómo el kernel de Linux maneja las interrupciones

Cómo compilar un kernel de Linux en el siglo XXI

Cómo verificar la versión del kernel en Linux

Cómo cambiar la prioridad de un proceso en Linux

Cómo enviar procesos a segundo plano en Linux

¿Cómo carga Linux la imagen 'initrd'?