¿Cuál es la diferencia entre la prioridad de proceso de Linux NI y PR?

  

¿Por qué debería haber prioridad de proceso?

Esto no parece requerir demasiada explicación. Después de todo, desde que nació el sistema operativo multitarea
, la capacidad del proceso para asumir la CPU es una cuestión que debe ser controlada artificialmente. Debido a que algunos procesos son relativamente importantes, y algunos procesos son menos importantes.

La forma en que funciona la prioridad del proceso ha cambiado básicamente desde la invención. Ya sea que se trate de una sola CPU o de la CPU de múltiples núcleos, se logra controlando la duración del tiempo de CPU que ocupa el proceso.

Esto significa que en el mismo ciclo de programación, el proceso de mayor prioridad lleva más tiempo, mientras que el proceso de menor prioridad toma más tiempo.

Por favor, no confunda estos dos conceptos en el sistema: nice (NI) y priority (PR), están inextricablemente vinculados, pero para el sistema Linux actual, No es el mismo concepto.

Miramos este comando:


¿Comprendes realmente la diferencia entre el significado específico de la columna PRI y la columna NI?

Lo mismo, si es el comando superior:


¿Entiendes la diferencia entre PR y NI? Si no es así, primero podemos averiguar cuál es el valor razonable.

¿Cuál es el valor NICE?

El valor NICE debe ser un concepto familiar para aquellos familiarizados con Linux /UNIX. Es un valor que refleja el estado de un proceso "prioritario", que varía de -20 a 19, un total de 40 Nivel

Cuanto menor sea el valor, mayor será el proceso " prioridad >, y cuanto mayor sea el valor " prioridad "

Por ejemplo, podemos usar el comando NICE para establecer el valor NICE de un comando bash para que se ejecute:
[root @ zorrozou-pc0 zorro] # nice -n 10 bash

De esta manera, vuelvo a abrir un bash y su buen valor se establece en 10 y, de forma predeterminada, la prioridad del proceso debe heredarse del proceso principal, este valor generalmente es 0.

Podemos ver directamente el buen valor del shell actual con el comando nice:
[root @ zorrozou-pc0 zorro] # nice 10

Compare la situación normal:
[root @ zorrozou-pc0 zorro] # exit

Salga del bash actual con un valor de 10 y abra un bash normal. Veamos su valor Nice:
[root @ zorrozou-pc0 zorro] # bash < Br> [root @ zorrozou-pc0 zorro] # nice 0

Además, el comando renice se puede usar para ajustar el valor de un proceso en ejecución. También podemos usar los comandos top, ps, etc. para ver el proceso. Buen valor, no diré más sobre el método específico, puede consultar la página de manual correspondiente.

A lo que todos debemos prestar atención es a que estoy usando el nombre de buen valor aquí, no la prioridad.

El valor de nice no es una prioridad, pero sí afecta la prioridad del proceso.

En inglés, si describimos a una persona agradable, generalmente significa que la popularidad de esta persona es mejor. ¿Qué clase de personas son buenas? A menudo humildemente y educado.

Por ejemplo, si vas a almorzar con una buena persona, pides dos comidas idénticas. Después de que obtengas una, la amable dirá: "Comes primero, comes primero". ! ", esta es una buena relación, esta persona es agradable! Pero si el otro llega tarde, entonces la buena persona tendrá hambre.

¿Qué significa esto?

Cuanto mayor es la capacidad de Nicole para aprovechar los recursos, peor y menos agradable, más fuerte es la capacidad para aprovechar. Este es el significado del tamaño del valor agradable, cuanto más bajo es el valor agradable, menos es el proceso, menor es la capacidad de aprovechar la CPU, mayor es la prioridad (la explicación del autor es demasiado vívida, ¡Xiao Bian no pudo evitar elogiar manualmente!) !).

En la programación original de Linux que usa O1, también llamaremos la prioridad estática de buen valor, que es básicamente consistente con las características del valor de nice, es decir, cuando se establece el valor de nice, a menos que usemos renice Cámbiala, de lo contrario no se modificará.

El valor de la prioridad se cambia en el programador O1 anterior del kernel, por lo que también se denomina prioridad dinámica.

¿Cuáles son las prioridades y los procesos en tiempo real?

Veamos cuál es el valor de prioridad, que es el valor PRI visto en el comando ps o el valor PR visto en el comando superior.

Para distinguir estos conceptos, lo siguiente:

Unificado para usar el valor de nie para representar el valor de NI, o prioridad estática, es decir, la prioridad ajustada con los comandos nice y renice;

El valor de prioridad práctica indica los valores PRI y PR, o prioridad dinámica.

También unificamos el concepto de la palabra "prioridad" como el significado del valor de prioridad.

En el kernel, el valor de la prioridad del proceso está definido por una macro cuyo nombre es MAX_PRIO y cuyo valor es 140.

Este valor se compone además de dos valores adicionales, uno es la macro NICE_WIDTH que representa el rango de valores del valor correcto, y el otro es la macro MAX_RT_PRIO que representa el rango de prioridad en tiempo real del proceso en tiempo real.

Para decirlo claramente, Linux implementa 140 rangos de prioridad, que van de 0 a 139. Cuanto menor sea el valor, mayor será la prioridad. El buen valor de -20 a 19, asignado al rango de prioridad real es 100-139.

La prioridad predeterminada del proceso recién generado se define como:
#define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH /2)

El valor correspondiente real es 0 para el valor nice.

En circunstancias normales, la prioridad de cualquier proceso es este valor, incluso si ajustamos la prioridad del proceso a través de los comandos nice y renice, su rango de valores no excederá el rango de 100-139, A menos que el proceso sea un proceso en tiempo real, su valor de prioridad se convertirá en uno de los rangos 0-99.

Aquí hay un mensaje de que el Linux actual es un sistema operativo que ya admite procesos en tiempo real.

¿Qué es un sistema operativo en tiempo real?

No explicaremos el significado de esto en detalle y su aplicación en el campo industrial. Si está interesado, puede consultar la Wikipedia del sistema operativo en tiempo real.

En pocas palabras, el sistema operativo en tiempo real debe garantizar que los procesos relevantes en tiempo real respondan en un corto período de tiempo sin grandes demoras y requieran una latencia de interrupción mínima y una latencia de cambio de proceso.

Para tal demanda, el algoritmo general de programación de procesos, ya sea O1 o CFS, no se puede cumplir, por lo que el núcleo asignará 100 prioridades prioritarias al proceso en tiempo real en el momento del diseño. Para ser más alto que la prioridad del proceso normal (buen valor), y el algoritmo de programación del proceso en tiempo real es diferente, usan un algoritmo de programación más simple para reducir la sobrecarga de programación.

En general, los procesos que se ejecutan en sistemas Linux pueden dividirse en dos categorías:

  • Procesos en tiempo real
  • Procesos no en tiempo real

    Sus La principal diferencia es la distinción por prioridad.

    Todos los valores de prioridad en el rango de 0-99 son procesos en tiempo real, por lo que este rango de prioridad también se puede llamar prioridad de proceso en tiempo real, mientras que los procesos en tiempo no real están en el rango de 100-139.

    El comando chrt se puede usar en el sistema para ver y establecer el estado de prioridad en tiempo real de un proceso. Primero podemos ver el uso del comando chrt:


    En primer lugar, prestaremos atención a la sección de Opciones de Política que se muestra y encontraremos que el sistema proporciona cinco estrategias de programación para varios procesos.

    Pero no se indica aquí que las cinco estrategias de programación se utilizan para los dos procesos respectivamente. Las estrategias de programación que se pueden usar para los procesos en tiempo real son: SCHED_FIFO, SCHED_RR, y para los procesos en tiempo no real: SCHED_OTHER, SCHED_OTHER, SCHED_IDLE.

    La política de prioridad general del sistema es:

  • Si hay un proceso en tiempo real en el sistema que debe ejecutarse, el proceso en tiempo real se ejecutará primero;
  • hasta que el proceso en tiempo real finalice o se dé por vencido. El proceso en tiempo no real está programado para ejecutarse cuando la CPU se está ejecutando.

    El proceso en tiempo real puede especificar un rango de prioridad de 1 a 99. El método para ejecutar un programa que se ejecutará en tiempo real es:
    [root @ zorrozou-pc0 zorro] # chrt 10 Bash
    [root @ zorrozou-pc0 zorro] # chrt -p $$
    pid La política de programación actual de 14840: SCHED_RR
    pid 14840 La prioridad de programación actual: 10

  • Copyright © Conocimiento de Windows All Rights Reserved