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"?