¿Por qué la amabilidad varía de -20 a 19?

22

El nicecomando 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 niceoriginalmente 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).

Psiconauta
fuente
44
No puedo encontrar una referencia que explique por qué se eligió ese rango específico, pero tenga en cuenta que en V7 la prioridad encaja en un byte firmado (ver proc.h ) y la función setpri establece la prioridad en 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.
Mark Plotnick

Respuestas:

7

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 nicecomando 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.

cxw
fuente
1
Se equivoca al suponer que el programador pondrá un proceso en suspensión si tiene un valor negativo bueno. En cambio, el planificador no activará un proceso de suspensión si hay otros procesos listos para ejecutarse y estos procesos tienen un mejor nivel agradable. Tenga en cuenta que un proceso se pone en suspensión cuando llama a una llamada al sistema que impone una suspensión de los recursos o cuando un proceso agota su cantidad de CPU y hay otros procesos más privilegiados que esperan a la CPU.
schily
-4

Estás equivocado: si estás en UNIX donde la interfaz nice () todavía tiene sentido, NZEROes el valor agradable predeterminado y NZERO is 20.

Para hacer las cosas más obvias: usted preguntó sobre el comando nicey 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 es NZEROel 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.

astuto
fuente
2
Parece confundir la interfaz de shell y la interfaz C. Esta pregunta es sobre el nicecomando de shell.
Gilles 'SO- deja de ser malvado'
Bueno, eres tú quien confunde las cosas. El buen comando solo conoce los deltas, pero la pregunta menciona buenos valores. La pregunta era sobre buenos valores y respondí esto.
schily