Por que o niceness varia de -20 a 19?

21

O comando nice permite ajustar a prioridade de agendamento ("niceness") de um programa. Em todos os sistemas semelhantes ao Unix que usei, o niceness é especificado por um intervalo de inteiros, onde -20 é a prioridade de agendamento mais favorável, 0 é o padrão e 19 é o menos favorável.

Ter 0 como niceness padrão é intuitivo o suficiente, mas por que -20 e 19 foram selecionados como pontos de extremidade do intervalo? Por que não -128 e 127, que caberia exatamente em um byte de 8 bits? Ou por que não -100 a 100, o que é mais intuitivo para humanos com mente decimal, ou similarmente, mas um pouco mais ergonomicamente, -99 a 99? O intervalo de -20 a 19 foi selecionado arbitrariamente, ou ele tem alguma relação com os internos do planejador com o qual nice originalmente fez interface? (Eu entendo que não existe tal relação hoje, pelo menos para o Linux, cujo escalonador usa prioridades no intervalo de 0 a 139. No entanto, estou interessado nas razões históricas para o intervalo de -20 a 19.)

    
por Psychonaut 27.09.2015 / 11:04

2 respostas

7

Níveis internos de nicenesa são 0-39, mas incrementos são positivos ou negativos. Fonte . Portanto, a resposta é que os números (positivo e negativo) aceitos pelo comando nice 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 melhores é que o nível legal é adicionado ao uso recente da CPU de um processo para determinar a prioridade. A fim de fornecer um agendamento aproximado de round robin, o kernel controla a quantidade de CPU que cada processo havia gravado recentemente e alterna para processos que não tiveram tanto. Quanto mais alto o nível bom, mais tempo de CPU ele se parece com o processo, e mais frequentemente o agendador irá colocar esse processo em suspensão ou deixá-lo adormecido. Veja O Design do Sistema Operacional UNIX por Maurice J. Bach, Prentice-Hall 1986, sec. 8.1 (8.1.4 para gentileza especificamente). ISBN 0-13-201799-7.

    
por 27.09.2015 / 13:40
-4

Você está enganado: Se você está em um UNIX onde a interface nice () ainda faz sentido, NZERO é o valor padrão e NZERO is 20 .

Para tornar a coisa mais óbvia: você perguntou sobre o comando nice e, ao mesmo tempo, mencionou os níveis absolutos, mas o comando nice não gerencia valores absolutos, mas incrementa relativamente ao nível atual. No caso do estado padrão, o nível legal é NZERO , que é 20.

Valores agradáveis são 0..2 * NZERO-1 ou 0..39

Observe que, embora o agendador padrão do UNIX ainda possa fazer algo útil com um bom valor, não há sentido no caso de você estar usando um agendador especializado, por exemplo, um agendador em tempo real.

    
por 27.09.2015 / 13:09