En informática , la planificación consiste en asignar recursos para realizar tareas . Estos recursos pueden ser procesadores , enlaces de red o tarjetas de expansión . Las tareas pueden ser hilos , procesos o flujos de datos .
La actividad de planificación la lleva a cabo un mecanismo llamado planificador . Los planificadores suelen diseñarse para mantener ocupados todos los recursos informáticos (como en el equilibrio de carga ), permitir que varios usuarios compartan los recursos del sistema de forma eficaz o lograr una calidad de servicio determinada .
La planificación es fundamental para la computación en sí misma y una parte intrínseca del modelo de ejecución de un sistema informático; el concepto de planificación permite que un ordenador realice múltiples tareas con una sola unidad central de procesamiento (CPU).
Objetivos
Un planificador puede tener como objetivo uno o más propósitos, por ejemplo:
- maximizar el rendimiento (la cantidad total de trabajo completado por unidad de tiempo);
- minimizar el tiempo de espera (tiempo desde que el trabajo está listo hasta el primer momento en que comienza su ejecución);
- minimizar la latencia o el tiempo de respuesta (tiempo desde que el trabajo está listo hasta que termina en el caso de actividad por lotes, [ 1 ] [ 2 ] [ 3 ] o hasta que el sistema responde y entrega la primera salida al usuario en el caso de actividad interactiva); [ 4 ]
- maximizar la equidad (igual tiempo de CPU para cada proceso, o, de forma más general, tiempos apropiados según la prioridad y la carga de trabajo de cada proceso).
En la práctica, estos objetivos suelen entrar en conflicto (por ejemplo, rendimiento frente a latencia), por lo que un planificador implementará una solución de compromiso adecuada. La preferencia se mide en función de cualquiera de las consideraciones mencionadas anteriormente, según las necesidades y los objetivos del usuario.
En entornos en tiempo real , como los sistemas embebidos para el control automático en la industria (por ejemplo, la robótica ), el planificador también debe garantizar que los procesos cumplan con los plazos establecidos ; esto es fundamental para mantener la estabilidad del sistema. Las tareas programadas también pueden distribuirse a dispositivos remotos a través de una red y gestionarse mediante un sistema administrativo.
Tipos de planificadores de sistemas operativos
El planificador es un módulo del sistema operativo que selecciona los siguientes trabajos que se admitirán en el sistema y el siguiente proceso que se ejecutará. Los sistemas operativos pueden incluir hasta tres tipos distintos de planificadores: un planificador a largo plazo (también conocido como planificador de admisión o planificador de alto nivel), un planificador a medio plazo y un planificador a corto plazo . Los nombres indican la frecuencia relativa con la que se realizan sus funciones.
Planificador de procesos
El planificador de procesos es una parte del sistema operativo que decide qué proceso se ejecuta en un momento dado. Generalmente, tiene la capacidad de pausar un proceso en ejecución, moverlo al final de la cola de ejecución e iniciar un nuevo proceso; este tipo de planificador se conoce como planificador preventivo . Si el planificador no puede pausar un proceso en ejecución e iniciar uno nuevo, se trata de un planificador cooperativo . [ 5 ]
Distinguimos entre planificación a largo plazo , planificación a medio plazo y planificación a corto plazo en función de la frecuencia con la que deben tomarse decisiones. [ 6 ]
Planificación a largo plazo
El planificador a largo plazo , o planificador de admisión , decide qué trabajos o procesos se admitirán en la cola de listos (en la memoria principal); es decir, cuando se intenta ejecutar un programa, el planificador a largo plazo autoriza o retrasa su admisión al conjunto de procesos en ejecución. De este modo, el planificador determina qué procesos se ejecutarán en un sistema, el grado de concurrencia que se admitirá en cada momento ( si se ejecutarán muchos o pocos procesos simultáneamente) y cómo se gestionará la división entre procesos con uso intensivo de E/S y procesos con uso intensivo de CPU. El planificador a largo plazo es responsable de controlar el grado de multiprogramación.
En general, la mayoría de los procesos se pueden describir como procesos limitados por E/S o por CPU . Un proceso limitado por E/S es aquel que dedica más tiempo a operaciones de E/S que a cálculos. Un proceso limitado por CPU, en cambio, genera solicitudes de E/S con poca frecuencia, dedicando la mayor parte de su tiempo a cálculos. Es importante que un planificador a largo plazo seleccione una buena combinación de procesos limitados por E/S y por CPU. Si todos los procesos están limitados por E/S, la cola de listos estará casi siempre vacía y el planificador a corto plazo tendrá poco trabajo. Por otro lado, si todos los procesos están limitados por CPU, la cola de espera de E/S estará casi siempre vacía, los dispositivos no se utilizarán y, de nuevo, el sistema estará desequilibrado. Por lo tanto, el sistema con el mejor rendimiento tendrá una combinación de procesos limitados por CPU y por E/S. En los sistemas operativos modernos, esto se utiliza para asegurar que los procesos en tiempo real obtengan suficiente tiempo de CPU para finalizar sus tareas. [ 7 ]
La planificación a largo plazo también es importante en sistemas a gran escala, como sistemas de procesamiento por lotes , clústeres de computadoras , supercomputadoras y granjas de renderizado . Por ejemplo, en sistemas concurrentes , a menudo se requiere la planificación conjunta de procesos que interactúan para evitar que se bloqueen debido a la espera entre sí. En estos casos, se suele utilizar software de planificación de tareas específico para facilitar estas funciones, además de cualquier soporte de planificación de admisión subyacente en el sistema operativo.
Algunos sistemas operativos solo permiten agregar nuevas tareas si tienen la certeza de que se pueden cumplir todos los plazos en tiempo real. El algoritmo heurístico específico que utiliza un sistema operativo para aceptar o rechazar nuevas tareas es el mecanismo de control de admisión . [ 8 ]
Planificación a medio plazo
El planificador a medio plazo retira temporalmente los procesos de la memoria principal y los coloca en la memoria secundaria (como un disco duro ) o viceversa, lo que se conoce comúnmente como intercambio de memoria (también incorrectamente como paginación ) . El planificador a medio plazo puede decidir intercambiar un proceso que no ha estado activo durante algún tiempo, un proceso que tiene una prioridad baja, un proceso que genera fallos de página con frecuencia o un proceso que está ocupando una gran cantidad de memoria para liberar memoria principal para otros procesos, volviendo a insertar el proceso más tarde cuando haya más memoria disponible o cuando el proceso se haya desbloqueado y ya no esté esperando un recurso.
En muchos sistemas actuales (aquellos que admiten la asignación de espacio de direcciones virtuales a almacenamiento secundario distinto del archivo de intercambio), el planificador a medio plazo puede desempeñar la función del planificador a largo plazo, al tratar los binarios como procesos intercambiados durante su ejecución. De esta forma, cuando se requiere un segmento del binario, se puede intercambiar bajo demanda, o carga diferida , también conocida como paginación bajo demanda .
Programación a corto plazo
El planificador a corto plazo (también conocido como planificador de CPU ) decide cuál de los procesos listos y en memoria se ejecutará (se le asignará una CPU) tras una interrupción de reloj , una interrupción de E/S, una llamada al sistema operativo u otro tipo de señal. Por lo tanto, el planificador a corto plazo toma decisiones de planificación con mucha más frecuencia que los planificadores a largo o medio plazo . Como mínimo, se deberá tomar una decisión de planificación después de cada intervalo de tiempo, que es muy corto. Este planificador puede ser preventivo , lo que implica que es capaz de eliminar procesos de una CPU cuando decide asignarla a otro proceso, o no preventivo (también conocido como voluntario o cooperativo ), en cuyo caso el planificador no puede forzar la salida de procesos de la CPU.
Transportista
Otro componente que interviene en la función de planificación de la CPU es el despachador, que es el módulo que cede el control de la CPU al proceso seleccionado por el planificador a corto plazo. Recibe el control en modo kernel como resultado de una interrupción o una llamada al sistema. Las funciones de un despachador incluyen las siguientes:
- Cambios de contexto , en los que el despachador guarda el estado (también conocido como contexto ) del proceso o hilo que se estaba ejecutando anteriormente; luego, el despachador carga el estado inicial o previamente guardado del nuevo proceso.
- Cambiando al modo de usuario.
- Saltar a la ubicación correcta en el programa de usuario para reiniciar ese programa, según lo indique su nuevo estado.
El despachador debe ser lo más rápido posible, ya que se invoca en cada cambio de proceso. Durante los cambios de contexto, el procesador permanece prácticamente inactivo durante una fracción de tiempo; por lo tanto, deben evitarse los cambios de contexto innecesarios. El tiempo que tarda el despachador en detener un proceso e iniciar otro se conoce como latencia de despacho . [ 7 ] : 155
Disciplinas de programación
Una disciplina de planificación (también llamada política de planificación o algoritmo de planificación ) es un algoritmo que se utiliza para distribuir recursos entre las partes que los solicitan de forma simultánea y asíncrona. Las disciplinas de planificación se utilizan en enrutadores (para gestionar el tráfico de paquetes), así como en sistemas operativos (para compartir el tiempo de CPU entre hilos y procesos ), unidades de disco ( planificación de E/S ), impresoras ( administrador de cola de impresión ), la mayoría de los sistemas embebidos, etc.
Los principales objetivos de los algoritmos de planificación son minimizar la escasez de recursos y garantizar la equidad entre las partes que los utilizan. La planificación aborda el problema de decidir a cuál de las solicitudes pendientes se le asignarán los recursos. Existen muchos algoritmos de planificación diferentes. En esta sección, presentamos algunos de ellos.
En las redes informáticas de conmutación de paquetes y otros sistemas de multiplexación estadística , el concepto de algoritmo de planificación se utiliza como alternativa al sistema de colas de paquetes de datos basado en el principio de primero en llegar, primero en ser atendido .
Los algoritmos de planificación de mejor esfuerzo más sencillos son round-robin , cola justa (un algoritmo de planificación justa max-min ), planificación proporcional justa y rendimiento máximo . Si se ofrece una calidad de servicio diferenciada o garantizada , en lugar de una comunicación de mejor esfuerzo, se puede utilizar la cola justa ponderada .
En redes inalámbricas de radio por paquetes avanzadas, como el sistema celular HSDPA (Acceso de Paquetes de Enlace Descendente de Alta Velocidad) 3.5G , se puede utilizar la programación dependiente del canal para aprovechar la información del estado del canal . Si las condiciones del canal son favorables, se puede aumentar el rendimiento y la eficiencia espectral del sistema . En sistemas aún más avanzados, como LTE , la programación se combina con la asignación dinámica de canales paquete por paquete dependiente del canal , o con la asignación de portadoras múltiples OFDMA u otros componentes de ecualización en el dominio de la frecuencia a los usuarios que mejor pueden utilizarlos. [ 9 ]
El primero en llegar es el primero en ser atendido.

Primero en entrar, primero en salir ( FIFO ), también conocido como primero en llegar, primero en ser atendido (FCFS), es el algoritmo de planificación más simple. FIFO simplemente pone en cola los procesos en el orden en que llegan a la cola de listos. Esto se usa comúnmente para uncola de tareas , por ejemplo, como se ilustra en esta sección.
- Dado que los cambios de contexto solo se producen al finalizar el proceso y no se requiere ninguna reorganización de la cola de procesos, la sobrecarga de planificación es mínima.
- El rendimiento puede ser bajo porque los procesos largos pueden estar acaparando la CPU, lo que provoca que los procesos cortos tengan que esperar mucho tiempo (lo que se conoce como efecto convoy).
- No hay inanición, porque cada proceso tiene la oportunidad de ejecutarse después de un tiempo determinado.
- El tiempo de procesamiento , el tiempo de espera y el tiempo de respuesta dependen del orden de llegada y pueden ser elevados por las mismas razones mencionadas anteriormente.
- No se establece ninguna priorización, por lo que este sistema tiene problemas para cumplir con los plazos de los procesos.
- La falta de priorización implica que, siempre y cuando todos los procesos se completen, no hay escasez de recursos. En un entorno donde algunos procesos podrían no completarse, sí puede haber escasez de recursos.
- Se basa en el sistema de colas.
Programación de prioridades
El algoritmo de planificación dinámica "Early deadline first" (EDF, por sus siglas en inglés) o " Least time to sgo" (menor tiempo restante ) se utiliza en sistemas operativos en tiempo real para colocar procesos en una cola de prioridad. Cada vez que ocurre un evento de planificación (una tarea finaliza, se libera una nueva tarea, etc.), se busca en la cola el proceso más próximo a su fecha límite, que será el siguiente en programarse para su ejecución.
Primero el que tenga el menor tiempo restante
Similar al algoritmo de procesamiento de trabajos más cortos (SJF). Con esta estrategia, el planificador ordena los procesos con el menor tiempo de procesamiento restante estimado para que sean los siguientes en la cola. Esto requiere conocimientos o estimaciones avanzadas sobre el tiempo necesario para que un proceso se complete.
- Si un proceso más corto llega durante la ejecución de otro, el proceso en ejecución se interrumpe (fenómeno conocido como preempción), dividiéndose en dos bloques de cálculo separados. Esto genera una sobrecarga adicional debido al cambio de contexto. El planificador también debe colocar cada proceso entrante en un lugar específico de la cola, lo que genera una sobrecarga adicional.
- Este algoritmo está diseñado para obtener el máximo rendimiento en la mayoría de los casos.
- El tiempo de espera y el tiempo de respuesta aumentan a medida que se incrementan los requisitos computacionales del proceso. Dado que el tiempo de respuesta se basa en la suma del tiempo de espera y el tiempo de procesamiento, los procesos más largos se ven significativamente afectados. En general, el tiempo de espera es menor que en el método FIFO, ya que ningún proceso tiene que esperar a que finalice el proceso más largo.
- No se presta especial atención a los plazos de entrega; el programador solo puede intentar que los procesos con plazos de entrega sean lo más breves posible.
- Es posible que se produzca inanición, especialmente en un sistema con mucha actividad y en el que se ejecutan numerosos procesos pequeños.
- Para utilizar esta política, deberíamos tener al menos dos procesos de prioridades diferentes.
Planificación preventiva de prioridad fija
El sistema operativo asigna un rango de prioridad fija a cada proceso, y el planificador organiza los procesos en la cola de listos según su prioridad. Los procesos de menor prioridad son interrumpidos por los procesos entrantes de mayor prioridad.
- Los gastos generales no son mínimos, ni tampoco significativos.
- FPPS no ofrece ninguna ventaja particular en términos de rendimiento con respecto a la planificación FIFO.
- Si el número de clasificaciones es limitado, se puede describir como una colección de colas FIFO, una para cada clasificación de prioridad. Los procesos en las colas de menor prioridad se seleccionan solo cuando todas las colas de mayor prioridad están vacías.
- El tiempo de espera y el tiempo de respuesta dependen de la prioridad del proceso. Los procesos de mayor prioridad tienen tiempos de espera y de respuesta más cortos.
- Se pueden cumplir los plazos dando mayor prioridad a los procesos que los tienen.
- Es posible que los procesos de menor prioridad se queden sin recursos cuando un gran número de procesos de alta prioridad hacen cola para obtener tiempo de CPU.
Programación por turnos rotativos
El planificador asigna una unidad de tiempo fija a cada proceso y los ejecuta de forma iterativa. Si el proceso finaliza dentro de ese intervalo de tiempo, se termina; de lo contrario, se reprograma después de dar tiempo a todos los demás procesos.
- La planificación de los trenes implica una gran cantidad de gastos generales, especialmente con una unidad de tiempo pequeña.
- Rendimiento equilibrado entre FCFS/FIFO y SJF/SRTF: los trabajos más cortos se completan más rápido que en FIFO y los procesos más largos se completan más rápido que en SJF.
- Buen tiempo de respuesta promedio; el tiempo de espera depende del número de procesos, y no de la duración promedio de los procesos.
- Debido a los elevados tiempos de espera, en un sistema RR puro rara vez se cumplen los plazos de entrega.
- La inanición nunca puede ocurrir, ya que no se otorga ninguna prioridad. El orden de asignación de unidades de tiempo se basa en el tiempo de llegada del proceso, de forma similar al método FIFO (primero en entrar, primero en salir).
- Si el intervalo de tiempo es grande, se convierte en FCFS/FIFO, o si es corto, se convierte en SJF/SRTF.
Planificación de colas multinivel
Esto se utiliza en situaciones donde los procesos se pueden dividir fácilmente en diferentes grupos. Por ejemplo, se suele establecer una división entre procesos en primer plano (interactivos) y procesos en segundo plano (por lotes). Estos dos tipos de procesos tienen diferentes requisitos de tiempo de respuesta y, por lo tanto, pueden tener diferentes necesidades de planificación. Resulta muy útil para problemas de memoria compartida .
Planificadores que optimizan el trabajo
Un planificador que conserva el trabajo es aquel que siempre intenta mantener ocupados los recursos programados si hay trabajos listos para ser programados. Por el contrario, un planificador que no conserva el trabajo es aquel que, en algunos casos, puede dejar inactivos los recursos programados a pesar de la presencia de trabajos listos para ser programados.
Problemas de optimización de la programación
Existen varios problemas de programación cuyo objetivo es decidir qué trabajo se asigna a qué estación y en qué momento, de manera que se minimice el tiempo total de finalización:
- Programación de talleres : hay n trabajos y m estaciones idénticas. Cada trabajo debe ejecutarse en una sola máquina. Esto se suele considerar un problema en línea.
- Programación de taller abierto : hay n trabajos y m estaciones diferentes. Cada trabajo debe pasar cierto tiempo en cada estación, en un orden libre.
- Programación de flujo de producción : hay n trabajos y m estaciones diferentes. Cada trabajo debe pasar un tiempo determinado en cada estación, en un orden predeterminado.
Programación manual
Un método muy común en sistemas embebidos es la planificación manual de tareas. Esto puede hacerse, por ejemplo, mediante multiplexación temporal. En ocasiones, el núcleo se divide en tres o más partes: planificación manual, planificación preventiva y planificación a nivel de interrupción. Los métodos exactos para la planificación de tareas suelen ser de propiedad exclusiva.
- No hay problemas de escasez de recursos.
- Muy alta predictibilidad; permite la implementación de sistemas de tiempo real estricto.
- Casi sin gastos generales
- Puede que no sea óptimo para todas las aplicaciones.
- La efectividad depende completamente de la implementación.
Selección de un algoritmo de planificación
Al diseñar un sistema operativo, un programador debe considerar qué algoritmo de planificación tendrá el mejor rendimiento según el uso previsto del sistema. No existe un algoritmo de planificación óptimo universal , y muchos sistemas operativos utilizan extensiones o combinaciones de los algoritmos de planificación mencionados anteriormente.
Por ejemplo, Windows NT /XP/Vista utiliza una cola de retroalimentación multinivel , una combinación de planificación preventiva de prioridad fija, round-robin y algoritmos FIFO (primero en entrar, primero en salir). En este sistema, los subprocesos pueden aumentar o disminuir dinámicamente su prioridad dependiendo de si ya han sido atendidos o si han estado esperando durante mucho tiempo. Cada nivel de prioridad está representado por su propia cola, con planificación round-robin para los subprocesos de alta prioridad y FIFO para los de menor prioridad. En este sentido, el tiempo de respuesta es corto para la mayoría de los subprocesos, y los subprocesos del sistema, cortos pero críticos, se completan muy rápidamente. Dado que los subprocesos solo pueden usar una unidad de tiempo del round-robin en la cola de mayor prioridad, la inanición puede ser un problema para los subprocesos de alta prioridad más largos.
Implementaciones del planificador de procesos del sistema operativo
El algoritmo utilizado puede ser tan simple como el de turno rotatorio, en el que a cada proceso se le asigna el mismo tiempo (por ejemplo, 1 ms, generalmente entre 1 ms y 100 ms) en una lista cíclica. Así, el proceso A se ejecuta durante 1 ms, luego el proceso B, luego el proceso C, y finalmente vuelve al proceso A.
Los algoritmos más avanzados tienen en cuenta la prioridad de los procesos, es decir, su importancia. Esto permite que algunos procesos utilicen más tiempo que otros. El núcleo siempre utiliza los recursos necesarios para garantizar el correcto funcionamiento del sistema, por lo que se puede decir que tiene prioridad infinita. En los sistemas SMP , se considera que la afinidad del procesador aumenta el rendimiento general del sistema, aunque esto pueda ralentizar la ejecución de un proceso en particular. Esto generalmente mejora el rendimiento al reducir la sobrecarga de la caché .
OS/360 y sus sucesores
IBM OS/360 estaba disponible con tres planificadores diferentes. Las diferencias eran tales que a menudo se consideraba que las variantes eran tres sistemas operativos distintos:
- La opción Planificador secuencial único , también conocida como Programa de control primario (PCP), proporcionaba la ejecución secuencial de un único flujo de trabajos.
- La opción de Planificador Secuencial Múltiple , conocida como Multiprogramación con Número Fijo de Tareas (MFT), permitía la ejecución de múltiples trabajos concurrentes. La ejecución se regía por una prioridad que tenía un valor predeterminado para cada flujo o que podía solicitarse por separado para cada trabajo. La versión II de MFT añadió subtareas (hilos), que se ejecutaban con una prioridad basada en la del trabajo principal. Cada flujo de trabajo definía la cantidad máxima de memoria que podía utilizar cualquier trabajo en ese flujo.
- La opción de Planificadores de Prioridad Múltiple , o Multiprogramación con un Número Variable de Tareas (MVT) , incluía subtareas desde el principio; cada trabajo solicitaba la prioridad y la memoria que requería antes de su ejecución.
Las versiones posteriores de almacenamiento virtual de MVS añadieron una función de Administrador de carga de trabajo al planificador, que programa los recursos del procesador según un esquema elaborado definido por la instalación.
Windows
Los primeros sistemas MS-DOS y Microsoft Windows no eran multitarea y, por lo tanto, no contaban con un planificador. Windows 3.1x utilizaba un planificador no preemptivo, lo que significa que no interrumpía los programas. Dependía de que el programa finalizara o le indicara al sistema operativo que no necesitaba el procesador para poder pasar a otro proceso. Esto se conoce generalmente como multitarea cooperativa. Windows 95 introdujo un planificador preemptivo rudimentario; sin embargo, para garantizar la compatibilidad con versiones anteriores, optó por permitir que las aplicaciones de 16 bits se ejecutaran sin interrupción. [ 10 ]
Los sistemas operativos basados en Windows NT utilizan una cola de retroalimentación multinivel. Se definen 32 niveles de prioridad, del 0 al 31, donde las prioridades del 0 al 15 son prioridades normales y las del 16 al 31 son prioridades de tiempo real flexible, que requieren privilegios para su asignación. El nivel 0 está reservado para el sistema operativo. Las interfaces de usuario y las API trabajan con clases de prioridad para el proceso y los subprocesos del proceso, que luego el sistema combina para obtener el nivel de prioridad absoluto.
El núcleo puede cambiar el nivel de prioridad de un hilo dependiendo de su uso de E/S y CPU y si es interactivo (es decir, acepta y responde a la entrada de los humanos), aumentando la prioridad de los procesos interactivos y limitados por E/S y disminuyendo la de los procesos limitados por CPU, para aumentar la capacidad de respuesta de las aplicaciones interactivas. [ 11 ] El planificador se modificó en Windows Vista para usar el registro del contador de ciclos de los procesadores modernos para llevar un registro exacto de cuántos ciclos de CPU ha ejecutado un hilo, en lugar de solo usar una rutina de interrupción de temporizador de intervalo. [ 12 ] Vista también usa un planificador de prioridad para la cola de E/S para que los desfragmentadores de disco y otros programas similares no interfieran con las operaciones en primer plano. [ 13 ]
Mac OS clásico y macOS
Mac OS 9 utiliza la planificación cooperativa para los subprocesos, donde un proceso controla varios subprocesos cooperativos, y también proporciona planificación preventiva para las tareas de multiprocesamiento. El núcleo planifica las tareas de multiprocesamiento mediante un algoritmo de planificación preventiva. Todos los procesos del Administrador de procesos se ejecutan dentro de una tarea de multiprocesamiento especial, denominada tarea azul . Estos procesos se planifican de forma cooperativa, utilizando un algoritmo de planificación round-robin ; un proceso cede el control del procesador a otro proceso llamando explícitamente a una función de bloqueo como WaitNextEvent. Cada proceso tiene su propia copia del Administrador de subprocesos que planifica los subprocesos de ese proceso de forma cooperativa; un subproceso cede el control del procesador a otro subproceso llamando a YieldToAnyThreado YieldToThread. [ 14 ]
macOS utiliza una cola de retroalimentación multinivel, con cuatro bandas de prioridad para los subprocesos : normal, prioridad alta del sistema, solo modo kernel y tiempo real. [ 15 ] Los subprocesos se programan de forma preventiva; macOS también admite subprocesos programados de forma cooperativa en su implementación del Administrador de subprocesos en Carbon . [ 14 ]
AIX
En AIX versión 4 existen tres valores posibles para la política de planificación de subprocesos:
- Primero en entrar, primero en salir: Una vez que se programa un hilo con esta política, se ejecuta hasta su finalización a menos que se bloquee, ceda voluntariamente el control de la CPU o un hilo de mayor prioridad se vuelva disponible. Solo los hilos de prioridad fija pueden tener una política de programación FIFO.
- Round Robin: Este método es similar al esquema round-robin del planificador de AIX versión 3, basado en intervalos de tiempo de 10 ms. Cuando un hilo RR toma el control al final del intervalo de tiempo, se mueve al final de la cola de hilos despachables de su prioridad. Solo los hilos de prioridad fija pueden tener una política de planificación Round Robin.
- OTRO: Esta política está definida por POSIX1003.4a como definida por la implementación. En AIX Versión 4, esta política se define como equivalente a RR, excepto que se aplica a subprocesos con prioridad no fija. El recálculo del valor de prioridad del subproceso en ejecución en cada interrupción de reloj implica que un subproceso puede perder el control porque su valor de prioridad ha superado el de otro subproceso despachable. Este es el comportamiento de AIX Versión 3.
Los hilos son de interés principalmente para aplicaciones que actualmente constan de varios procesos asíncronos. Estas aplicaciones podrían generar una carga menor en el sistema si se convierten a una estructura multihilo.
AIX 5 implementa las siguientes políticas de planificación: FIFO, round robin y round robin equitativo. La política FIFO tiene tres implementaciones diferentes: FIFO, FIFO2 y FIFO3. La política round robin se denomina SCHED_RR en AIX, y la round robin equitativa se denomina SCHED_OTHER. [ 16 ]
Linux
Linux 1.2
Linux 1.2 utilizaba una política de planificación round-robin . [ 17 ]
Linux 2.2
Linux 2.2 añadió clases de planificación y soporte para multiprocesamiento simétrico (SMP). [ 17 ]

Linux 2.4
En Linux 2.4, [ 17 ] se utilizó un planificador O(n) con una cola de retroalimentación multinivel con niveles de prioridad que van de 0 a 140; 0 – 99 están reservados para tareas en tiempo real y 100 – 140 se consideran niveles de tareas "agradables" . Para las tareas en tiempo real, el cuanto de tiempo para cambiar de proceso era de aproximadamente 200 ms, y para las tareas "agradables" de aproximadamente 10 ms. El planificador recorría la cola de ejecución de todos los procesos listos, dejando que los procesos de mayor prioridad fueran primero y ejecutaran sus segmentos de tiempo, después de lo cual se colocarían en una cola de expirados. Cuando la cola activa está vacía, la cola de expirados se convierte en la cola activa y viceversa.
Sin embargo, algunas distribuciones de Linux empresariales , como SUSE Linux Enterprise Server, reemplazaron este planificador con una adaptación del planificador O(1) (que fue mantenido por Alan Cox en su serie Linux 2.4-ac Kernel) al kernel Linux 2.4 utilizado por la distribución.
Linux 2.6.0 a Linux 2.6.22
En las versiones 2.6.0 a 2.6.22, el kernel utilizaba un planificador O(1) desarrollado por Ingo Molnar y muchos otros desarrolladores del kernel durante el desarrollo de Linux 2.5. Para muchos kernels de este período, Con Kolivas desarrolló conjuntos de parches que mejoraron la interacción con este planificador o incluso lo reemplazaron con sus propios planificadores.
De Linux 2.6.23 a Linux 6.5
El trabajo de Con Kolivas, en particular su implementación de la planificación justa denominada Rotating Staircase Deadline (RSDL), inspiró a Ingo Molnár a desarrollar el Completely Fair Scheduler (CFS) como reemplazo del planificador O(1) anterior , reconociendo a Kolivas en su anuncio. [ 18 ] CFS es la primera implementación de un planificador de procesos de cola justa ampliamente utilizado en un sistema operativo de propósito general. [ 19 ]
El CFS utiliza un algoritmo de planificación clásico y bien estudiado llamado cola justa , inventado originalmente para redes de paquetes . La cola justa se había aplicado previamente a la planificación de CPU bajo el nombre de planificación de paso . El planificador de cola justa del CFS tiene una complejidad de planificación dedonde N es el número de tareas en la cola de ejecución . Elegir una tarea se puede hacer en tiempo constante, pero reinsertar una tarea después de que se haya ejecutado requiereoperaciones, porque la cola de ejecución se implementa como un árbol rojo-negro .
El Brain Fuck Scheduler , también creado por Con Kolivas, es una alternativa al CFS.
Linux 6.6
En 2023, Peter Zijlstra propuso reemplazar CFS con un planificador de procesos de plazo virtual más temprano elegible primero (EEVDF). [ 20 ] [ 21 ] El objetivo era eliminar la necesidad de parches de latencia nice de CFS. [ 22 ]
Linux 6.12
Linux 6.12 añadió soporte para extensiones de planificador que se pueden agregar desde el espacio de usuario ; este mecanismo se conoce como sched_ext. Se puede cargar un programa eBPF en el kernel para implementar una política de planificación. [ 23 ] Estos planificadores pueden reemplazar al planificador predeterminado. [ 24 ]
FreeBSD
FreeBSD utiliza una cola de retroalimentación multinivel con prioridades que van de 0 a 255. De 0 a 63 están reservadas para interrupciones, de 64 a 127 para la mitad superior del kernel, de 128 a 159 para subprocesos de usuario en tiempo real, de 160 a 223 para subprocesos de usuario compartidos y de 224 a 255 para subprocesos de usuario inactivos. Además, al igual que Linux, utiliza la configuración de cola activa, pero también tiene una cola inactiva. [ 25 ]
NetBSD
NetBSD utiliza una cola de retroalimentación multinivel con prioridades que van de 0 a 223. De 0 a 63 están reservados para subprocesos compartidos en el tiempo (predeterminado, política SCHED_OTHER), de 64 a 95 para subprocesos de usuario que entraron en el espacio del kernel , de 96 a 128 para subprocesos del kernel, de 128 a 191 para subprocesos de usuario en tiempo real (políticas SCHED_FIFO y SCHED_RR) y de 192 a 223 para interrupciones de software .
Solaris
Solaris utiliza una cola de retroalimentación multinivel con prioridades que van de 0 a 169. Las prioridades 0 a 59 están reservadas para subprocesos de tiempo compartido, 60 a 99 para subprocesos del sistema, 100 a 159 para subprocesos en tiempo real y 160 a 169 para interrupciones de baja prioridad. A diferencia de Linux, [ 25 ] cuando un proceso termina de usar su cuanto de tiempo, se le asigna una nueva prioridad y se vuelve a colocar en la cola. Solaris 9 introdujo dos nuevas clases de planificación: la clase de prioridad fija y la clase de reparto equitativo. Los subprocesos con prioridad fija tienen el mismo rango de prioridad que la clase de tiempo compartido, pero sus prioridades no se ajustan dinámicamente. La clase de planificación equitativa utiliza las cuotas de CPU para priorizar los subprocesos en las decisiones de planificación. Las cuotas de CPU indican el derecho a los recursos de CPU. Se asignan a un conjunto de procesos, que se conocen colectivamente como un proyecto. [ 7 ]
Resumen
Véase también
- Problema de selección de actividades
- Envejecimiento (programación)
- Planificación y programación automatizadas
- Ejecutivo cíclico
- Planificación de prioridades dinámicas
- Primer plano-fondo
- Sistema operativo interrumpible
- Programación con el menor tiempo de holgura posible
- Programación de la lotería
- Inversión de prioridad
- Estados del proceso
- teoría de colas
- Programación de tasa monótona
- Planificación (procesos de producción)
- Programación estocástica
- Función de utilidad del tiempo
Notas
- ↑ CL, Liu; James W., Layland (enero de 1973). "Algoritmos de planificación para multiprogramación en un entorno de tiempo real estricto" . Journal of the ACM . 20 (1). ACM: 46– 61. doi : 10.1145/321738.321743 . S2CID 207669821.
Definimos el tiempo de respuesta de una solicitud para una tarea determinada como el intervalo de tiempo entre la solicitud y el final de la respuesta a esa solicitud.
- ↑ Kleinrock, Leonard (1976). Sistemas de colas, vol. 2: Aplicaciones informáticas (1.ª ed.). Wiley-Interscience. pág . 171. ISBN 047149111X
Para un cliente que requiere x segundos de servicio, su tiempo de respuesta será igual a su tiempo de servicio x más su tiempo de espera
. - ↑ Feitelson, Dror G. (2015). Modelado de carga de trabajo para la evaluación del rendimiento de sistemas informáticos . Cambridge University Press. Sección 8.4 (página 422) en la versión 1.03 del manuscrito disponible gratuitamente. ISBN 9781107078239. Recuperado el 17-10-2015 .
Si denotamos el tiempo que un trabajo espera en la cola por t w , y el tiempo que realmente se ejecuta por t r , entonces el tiempo de respuesta es r = t w + t r .
- ↑ Silberschatz, Abraham; Galvin, Peter Baer; Gagne, Greg (2012). Conceptos de sistemas operativos (9.ª ed.). Wiley Publishing. pág. 187. ISBN 978-0470128725En un sistema interactivo, el tiempo de respuesta puede no ser el mejor criterio. A menudo, un proceso puede generar resultados con bastante rapidez y continuar calculando nuevos resultados mientras se muestran los anteriores al usuario. Por lo tanto ,
otra medida es el tiempo transcurrido desde el envío de una solicitud hasta la obtención de la primera respuesta. Esta medida, denominada tiempo de respuesta, se refiere al tiempo que tarda en comenzar a responder, no al tiempo que tarda en generar la respuesta.
- ↑ Paul Krzyzanowski (19 de febrero de 2014). "Planificación de procesos: ¿Quién se ejecuta a continuación?" . cs.rutgers.edu . Archivado del original el 2 de agosto de 2023. Consultado el 19 de junio de 2023 .
- ↑ Raphael Finkel (1988). "Capítulo 2: Gestión del tiempo". Un vademécum de sistemas operativos . Prentice Hall. pág. 27.
- 1 2 3 Abraham Silberschatz ; Peter Baer Galvin; Greg Gagne (2013). Conceptos de sistemas operativos . Vol. 9. John Wiley & Sons, Inc. ISBN 978-1-118-06333-0.
- ↑ Robert Kroeger (2004). "Control de admisión para aplicaciones en tiempo real de autoría independiente" . UWSpace. http://hdl.handle.net/10012/1170 . Sección "2.6 Control de admisión". pág. 33.
- ↑ Guowang Miao ; Jens Zander; Ki Won Sung; Ben Slimane (2016). Fundamentos de redes de datos móviles . Cambridge University Press . ISBN 978-1107143210.
- ↑ Primeras versiones de Windows en Wayback Machine (índice de archivo)
- ↑ Sriram Krishnan. "Una historia de dos planificadores: Windows NT y Windows CE" . Archivado del original el 22 de julio de 2012.
- ↑ "Administración de Windows: Dentro del núcleo de Windows Vista: Parte 1" . Technet.microsoft.com . 14 de noviembre de 2016. Consultado el 9 de diciembre de 2016 .
- ↑ "Copia archivada" . blog.gabefrost.com . Archivado del original el 19 de febrero de 2008. Consultado el 15 de enero de 2022 .
{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace ) - 1 2 "Nota técnica TN2028: Arquitecturas de subprocesos" . developer.apple.com . Consultado el 15 de enero de 2019 .
- ↑ "Planificación de máquinas e interfaces de subprocesos" . developer.apple.com . Consultado el 15 de enero de 2019 .
- ↑Archivado el 11 de agosto de 2011 en Wayback Machine.
- 1 2 3 Jones, M. (18 de septiembre de 2018) [publicado por primera vez el 14 de diciembre de 2009]. "Dentro del planificador completamente justo de Linux 2.6" . developer.ibm.com . Recuperado el 7 de febrero de 2024 .
- ↑ Molnár, Ingo (2007-04-13). " [ parche ] Núcleo del planificador modular y planificador completamente justo [ CFS ] " . linux-kernel (Lista de correo).
- ↑ Tong Li; Dan Baumberger; Scott Hahn. "Planificación justa, eficiente y escalable para multiprocesadores mediante Round-Robin ponderado distribuido" (PDF) . Happyli.org . Consultado el 9 de diciembre de 2016 .
- ↑ "El planificador EEVDF podría estar listo para su lanzamiento con Linux 6.6" . Phoronix . Consultado el 31 de agosto de 2023 .
- ↑ "Se fusionó el planificador EEVDF para Linux 6.6 y se reintrodujo la planificación de clústeres híbridos de Intel" . www.phoronix.com . Consultado el 7 de febrero de 2024 .
- ↑ "Un planificador de CPU EEVDF para Linux [ LWN.net ] " . LWN.net . Consultado el 31-08-2023 .
- ↑ "Sched_ext fusionado para Linux 6.12: políticas de planificación como programas BPF" . www.phoronix.com . Consultado el 10 de febrero de 2025 .
- ↑ "Planificadores de CPU conectables - Wiki de openSUSE" . en.opensuse.org . Consultado el 10 de febrero de 2025 .
- 1 2 "Comparación de los núcleos de Solaris, Linux y FreeBSD" (PDF) . Archivado del original (PDF) el 7 de agosto de 2008.
Referencias
- Błażewicz, Jacek; Ecker, KH; Pesch, E.; Schmidt, G.; Weglarz, J. (2001). Programación de procesos informáticos y de fabricación (2 ed.). Berlín [ua]: Springer. ISBN 3-540-41931-4.
- Stallings, William (2004). Principios internos y de diseño de sistemas operativos (cuarta ed.). Prentice Hall. ISBN 0-13-031999-6.
- Información sobre el planificador O(1) de Linux 2.6
Lecturas adicionales
- Sistemas Operativos: Tres Piezas Fáciles por Remzi H. Arpaci-Dusseau y Andrea C. Arpaci-Dusseau. Arpaci-Dusseau Books, 2014. Capítulos relevantes: Planificación: Introducción Cola de Retroalimentación Multinivel Planificación de Reparto Proporcional Planificación Multiprocesador
- Breve análisis de los algoritmos de planificación de tareas.
- Comprensión del núcleo de Linux: Capítulo 10 Planificación de procesos
- Kerneltrap: Artículos sobre el planificador del kernel de Linux
- Supervisión y optimización de la CPU de AIX
- Introducción de Josh Aas a la implementación del planificador de CPU de Linux 2.6.8.1
- Peter Brucker, Sigrid Knust. Resultados de complejidad para problemas de planificación.
- TORSCHE Scheduling Toolbox para Matlab es un conjunto de herramientas que incluye algoritmos de planificación y de grafos.
- Un estudio sobre la programación de paquetes en redes celulares
- Gestión de clústeres a gran escala en Google con Borg
- Planificación (informática)
- Investigación operativa
- Planificación
- patrones de diseño de software