El nice
comando le permite ajustar la prioridad de programación ("amabilidad") de un programa. En todos los sistemas tipo Unix que he usado, la simplicidad se especifica mediante un rango de enteros, donde -20 es la prioridad de programación más favorable, 0 es el valor predeterminado y 19 es el menos favorable.
Tener 0 como valor predeterminado es lo suficientemente intuitivo, pero ¿por qué se seleccionaron -20 y 19 como puntos finales del rango? ¿Por qué no -128 y 127, que cabría exactamente en un byte de 8 bits con signo? ¿O por qué no -100 a 100, que es más intuitivo para los humanos con mentalidad decimal, o de manera similar pero ligeramente más ergonómica, -99 a 99? ¿Se seleccionó arbitrariamente el rango de -20 a 19, o tiene alguna relación con las partes internas del planificador que nice
originalmente interactuó? (Entiendo que hoy no existe tal relación, al menos para Linux, cuyo planificador utiliza prioridades en el rango de 0 a 139. Sin embargo, estoy interesado en las razones históricas del rango de -20 a 19).
fuente
min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20
), y las prioridades <25 estaban reservadas para procesos que hacen cosas ininterrumpidas. Así que la amabilidad tenía que ser un rango limitado.Respuestas:
Los niveles de bondad interna son 0-39, pero los incrementos son positivos o negativos. Fuente . Entonces, la respuesta es que los números (positivos y negativos) aceptados por el
nice
comando son los que lo llevan de 20, el nivel predeterminado, a cualquier lugar en el rango 0-39.Entonces, ¿por qué 0-39? El rango específico fue el que funcionó en la implementación original de los diseñadores. La razón por la que los valores más positivos son mejores es que el nivel agradable se agrega al uso reciente de CPU de un proceso para determinar la prioridad. Con el fin de proporcionar una programación aproximada de operación por turnos, el kernel realiza un seguimiento de la cantidad de CPU que cada proceso se había quemado recientemente y cambia a procesos que no han tenido tanto. Cuanto mayor sea el nivel agradable, más tiempo de CPU parece que ha tenido el proceso, y con mayor frecuencia el programador pondrá ese proceso en suspensión o lo dejará dormido. Ver El diseño del sistema operativo UNIX por Maurice J. Bach, Prentice-Hall 1986, sec. 8.1 (8.1.4 para la amabilidad específicamente). ISBN 0-13-201799-7.
fuente
Estás equivocado: si estás en UNIX donde la interfaz nice () todavía tiene sentido,
NZERO
es el valor agradable predeterminado yNZERO is 20
.Para hacer las cosas más obvias: usted preguntó sobre el comando
nice
y al mismo tiempo mencionó los niveles absolutos, pero el comando agradable no gestiona los valores absolutos, sino que se incrementa relativamente al nivel actual. En el caso del estado predeterminado, el nivel agradable esNZERO
el 20.Los valores agradables son 0..2 * NZERO-1 o 0..39
Tenga en cuenta que si bien el planificador predeterminado de UNIX aún puede hacer algo útil con un buen valor, no tiene sentido en caso de que esté utilizando un planificador especializado, por ejemplo, un planificador en tiempo real.
fuente
nice
comando de shell.