Respuesta corta
PR es el nivel de prioridad. Cuanto menor sea el PR, mayor será la prioridad del proceso.
PR se calcula de la siguiente manera:
- para procesos normales: PR = 20 + NI (NI es agradable y varía de -20 a 19)
- para procesos en tiempo real: PR = - 1 - real_time_priority
(real_time_priority varía de 1 a 99)
Respuesta larga
Hay 2 tipos de procesos, los normales y el tiempo real.
Para los normales (y solo para esos), nice se aplica de la siguiente manera:
agradable
La escala de "amabilidad" va de -20 a 19, mientras que -20 es la prioridad más alta y 19 la prioridad más baja. El nivel de prioridad se calcula de la siguiente manera:
PR = 20 + NI
Donde NI es el nivel agradable y PR es el nivel de prioridad. Como podemos ver, el -20 en realidad se asigna a 0, mientras que el 19 se asigna a 39.
De forma predeterminada, el valor agradable de un programa es 0, pero es posible que el usuario root inicie programas con un valor agradable especificado utilizando el siguiente comando:
nice -n <nice_value> ./myProgram
Tiempo real
Podríamos ir aún más lejos. La buena prioridad se usa realmente para los programas de usuario. Mientras que la prioridad general de UNIX / LINUX tiene un rango de 140 valores, el valor agradable permite que el proceso se asigne a la última parte del rango (de 100 a 139). Esta ecuación deja inalcanzables los valores de 0 a 99, lo que corresponderá a un nivel PR negativo (de -100 a -1). Para poder acceder a esos valores, el proceso debe establecerse como "en tiempo real".
Hay 5 políticas de programación en un entorno LINUX que se pueden mostrar con el siguiente comando:
chrt -m
Que mostrará la siguiente lista:
1. SCHED_OTHER the standard round-robin time-sharing policy
2. SCHED_BATCH for "batch" style execution of processes
3. SCHED_IDLE for running very low priority background jobs.
4. SCHED_FIFO a first-in, first-out policy
5. SCHED_RR a round-robin policy
Los procesos de programación podrían dividirse en 2 grupos, las políticas de programación normales (1 a 3) y las políticas de programación en tiempo real (4 y 5). Los procesos en tiempo real siempre tendrán prioridad sobre los procesos normales. Se puede llamar a un proceso en tiempo real utilizando el siguiente comando (el ejemplo es cómo declarar una política SCHED_RR):
chrt --rr <priority between 1-99> ./myProgram
Para obtener el valor PR para un proceso en tiempo real, se aplica la siguiente ecuación:
PR = -1 - rt_prior
Donde rt_prior corresponde a la prioridad entre 1 y 99. Por esa razón, el proceso que tendrá mayor prioridad sobre otros procesos será el llamado con el número 99.
Es importante tener en cuenta que para los procesos en tiempo real, no se utiliza el valor agradable.
Para ver la "simpatía" actual y el valor de PR de un proceso, se puede ejecutar el siguiente comando:
top
Que muestra el siguiente resultado:
En la figura se muestran los valores PR y NI. Es bueno observar el proceso con el valor PR -51 que corresponde a un valor en tiempo real. También hay algunos procesos cuyo valor PR se indica como "rt". Este valor en realidad corresponde a un valor PR de -100.
niceness
se pueden usar para dar una prioridad negativa para que la tareaniceness
se salga del camino de las tareas de alta prioridad? (es decir, ¿esnice
y permite que otros recursos de acceso? ¿O esto me confundió?