Por que a noção de 'legal'?

1

Eu sei o que é 'bom' e como ele mapeia para prioridade, essa não é a questão.

As prioridades do Linux variam de 0 a 139. 0-99 é tempo real, 100-139 é o espaço do usuário. Nice mapeia para a prioridade:

  • -20 → 100
  • 0 → 120
  • +19 → 139

Eu entendo legal é o espaço do usuário, a prioridade é o espaço do kernel.

Mas por que se preocupar com a noção de "bom"? parece ser uma medida redundante. Em que situação seria melhor ser melhor do que simplesmente influenciar diretamente a prioridade?

Está lá simplesmente por conveniência ou há uma razão técnica para tê-lo?

    
por Leo Ufimtsev 24.06.2015 / 16:07

1 resposta

2

O belo (2) syscall está mudando o parente priority (do que era antes daquele syscall). Mas a prioridade definida (2) está mudando a prioridade absoluta .

Então, meu entendimento é que nice(x) (com x sendo um número muito pequeno, por exemplo, entre 0 e 9) é o equivalente a atomicamente fazer:

// asssume both getpriority & setpriority syscalls are successful
int n = getpriority(PRIO_PROCESS, 0);
n += x;
setpriority(PRIO_PROCESS, 0, n);

Como vários processos podem fazer o mesmo no mesmo processo (por exemplo, chamando setpriority(PRIO_PROCESS, somepid, n); ....), você terá uma operação atômica combinando-os, e isso é nice(2)

Mas o principal motivo é legado e histórico (e compatibilidade com versões anteriores). IIRC, nos anos 80 o Unix (como o SunOS3.2) tinha nice mas não setpriority (mas eu posso estar errado).

    
por 24.06.2015 / 16:15