¿Qué algoritmo de programación se usa en Linux?

11

Recientemente, en una entrevista, me preguntaron sobre el algoritmo de programación utilizado por el sistema operativo Linux. ¿Cuál es el algoritmo utilizado por qué?

Además, ¿qué algoritmo se usa en los sistemas operativos en tiempo real y por qué?

rShetty
fuente
¿Para el proceso o la programación de IO? O incluso algo más?
maxschlepzig

Respuestas:

7

El programador de tareas de Linux actual se llama Programador completamente justo (CFS). Debería echar un vistazo a http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt para obtener más detalles. El diseño es bastante complejo y, en mi opinión, no es adecuado para RTOS.

Una técnica común en los sistemas en tiempo real es la programación monotónica de velocidad, porque tiene fuertes garantías si se cumplen ciertos supuestos (por ejemplo, prioridades de tareas estáticas y tiempo y velocidad de ejecución fijos). Hay muchos otros algoritmos y ha habido mucha investigación. Básicamente, se trata de las propiedades que necesita y de lo que sabe sobre su tarea y de lo que está arreglado.

stsydow
fuente
2

No estoy muy seguro, si está tomando sobre la programación de E / S del Kernel. En caso de que no lo sea: ignore esta respuesta.

Wikipedia dice que el CFG (completamente Fair Queuing) es el predeterminado desde Kernel 2.6.18.

En mi openSUSE (ejecutando Kernel 2.6.37) puedo cambiar entre CFG, NOOP y Deadline .

Torbjörn
fuente
Tengo curiosidad, ¿cómo podemos cambiar a un algoritmo diferente? ¿Puedes arrojar algo de luz sobre esto? gracias
rsjethani
@rsjethani Vaya a YaST -> Sistema -> Configuración del kernel -> 2da pestaña (Configuración del kernel) -> Global IO Scheduler. (nombrar las opciones puede ser diferente ya que he traducido de una GUI alemana)
Torbjörn
1

El algoritmo Round Robin generalmente se usa en entornos de tiempo compartido.

Namdev
fuente
0

El algoritmo utilizado por el planificador de Linux es un esquema complejo con una combinación de prioridad preventiva y división de tiempo sesgada. Asigna un tiempo más largo a tareas de mayor prioridad y un tiempo más corto a tareas de menor prioridad.

Identifica cada proceso como proceso en tiempo real o como un proceso normal (otro). Las tareas en tiempo real tienen asignadas prioridades estáticas en el rango [0,99], donde un número más bajo indica una prioridad más alta.

Todas las demás tareas tienen prioridades dinámicas en el rango [100,139], basadas en la interactividad de una tarea que se basa en sus buenos valores más o menos el valor 5. Las tareas que son más interactivas suelen tener tiempos de sueño más largos y, por lo tanto, es más probable que tener ajustes más cercanos a −5, ya que el planificador favorece las tareas interactivas. (La interactividad de una tarea se determina por cuánto tiempo ha estado durmiendo mientras espera E / S). La interactividad de una tarea determina si el valor 5 se agregará o restará del valor agradable. El resultado de tales ajustes serán prioridades más altas para estas tareas. Por el contrario, las tareas con tiempos de sueño más cortos a menudo están más vinculadas a la CPU y, por lo tanto, se reducirán sus prioridades.

El núcleo mantiene una lista de todas las tareas ejecutables en una estructura de datos de cola de ejecución. Una cola de ejecución contiene dos matrices prioritarias: activa y caducada. La matriz activa contiene todas las tareas con tiempo restante en sus segmentos de tiempo, y la matriz caducada contiene todas las tareas caducadas. Cada una de estas matrices de prioridad contiene una lista de tareas indexadas según la prioridad. El planificador elige la tarea con la máxima prioridad de la matriz activa para su ejecución en la CPU. Cuando todas las tareas han agotado sus segmentos de tiempo (es decir, el conjunto activo está vacío), se intercambian los dos conjuntos prioritarios: el conjunto caducado se convierte en el conjunto activo y viceversa.

La prioridad dinámica de una tarea se vuelve a calcular cuando la tarea ha agotado su cantidad de tiempo y se debe mover a la matriz expirada. Por lo tanto, cuando se intercambian las dos matrices, a todas las tareas en la nueva matriz activa se les han asignado nuevas prioridades y segmentos de tiempo correspondientes. (Nota: este es un extracto del libro sobre conceptos del sistema operativo (novena edición) de Abraham Silberschatz, et al. Para obtener más detalles, consulte la sección 5.6.3 de este libro)

Kishor Bhoyar
fuente
Bienvenido al sitio y gracias por su contribución. Utilice amablemente el formato de "cita" (es decir, líneas de inicio con >) para aquellas partes de su respuesta que asumió de una fuente externa, en particular al citar un libro.
AdminBee
0

Esta es una respuesta a su otra pregunta. Los sistemas de tiempo real (RTS) son de dos tipos, duros y blandos. El algoritmo de programación de CPU para RTS rígido es un algoritmo preventivo basado en prioridad y el de RTS flexible es una prioridad no preventiva.

Kishor Bhoyar
fuente