O nice
comando permite ajustar a prioridade de agendamento ("gentileza") de um programa. Em todos os sistemas do tipo Unix que usei, a gentileza é especificada por um número inteiro, onde -20 é a prioridade de agendamento mais favorável, 0 é o padrão e 19 é o menos favorável.
Ter 0 como a gentileza padrão é bastante intuitivo, mas por que -20 e 19 foram selecionados como pontos finais do intervalo? Por que não -128 e 127, que caberia exatamente em um byte de 8 bits assinado? Ou por que não -100 a 100, o que é mais intuitivo para humanos de mente decimal, ou similarmente, mas um pouco mais ergonomicamente, -99 a 99? O intervalo de -20 a 19 foi selecionado arbitrariamente ou tem algum relacionamento com os internos do agendador com os quais a nice
interface original era originalmente? (Entendo que hoje não existe esse relacionamento, pelo menos para o Linux, cujo planejador usa prioridades no intervalo de 0 a 139. No entanto, estou interessado nos motivos históricos do intervalo de -20 a 19).
fonte
min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20
), e as prioridades <25 foram reservadas para processos fazendo coisas ininterruptas. Então, a gentileza tinha que ser um tipo limitado.Respostas:
Os níveis de gentileza interna são de 0 a 39, mas os incrementos são positivos ou negativos. Fonte . Portanto, a resposta é que os números (positivos e negativos) aceitos pelo
nice
comando são o que leva você de 20, o nível padrão, para qualquer lugar no intervalo de 0 a 39.Então, por que 0-39? O intervalo específico foi o que funcionou na implementação original dos designers. A razão pela qual valores mais positivos são mais agradáveis é que o bom nível é adicionado ao uso recente da CPU de um processo na determinação da prioridade. Para fornecer uma programação aproximada de rodízio, o kernel monitora a quantidade de CPU que cada processo havia queimado recentemente e alterna para processos que não tiveram tanto. Quanto mais alto o nível agradável, mais tempo de CPU parece ter o processo e mais frequentemente o agendador colocará esse processo no modo de suspensão ou no sono. Consulte O design do sistema operacional UNIX de Maurice J. Bach, Prentice-Hall 1986, sec. 8.1 (8.1.4 para especificidade). ISBN 0-13-201799-7.
fonte
Você está enganado: Se você está em um UNIX em que a interface nice () ainda faz sentido,
NZERO
é o valor nice padrão eNZERO is 20
.Para tornar as coisas mais óbvias: você perguntou sobre o comando
nice
e, ao mesmo tempo, mencionou níveis absolutos, mas o comando nice não gerencia valores absolutos, mas sim incrementa relativamente ao nível atual. No caso do estado padrão, o nível legalNZERO
é 20.Valores agradáveis são 0..2 * NZERO-1 ou 0..39
Observe que, embora o planejador UNIX padrão ainda possa fazer algo útil com um bom valor, não há sentido no caso de você estar usando um planejador especializado, por exemplo, um planejador em tempo real.
fonte
nice
comando shell.