Resposta curta
PR é o nível de prioridade. Quanto menor o PR, maior será a prioridade do processo.
O PR é calculado da seguinte forma:
- para processos normais: PR = 20 + NI (NI é bom e varia de -20 a 19)
- para processos em tempo real: PR = - 1 - real_time_priority
(real_time_priority varia de 1 a 99)
Resposta longa
Existem 2 tipos de processos, os normais e o tempo real.
Para os normais (e apenas para aqueles), nice é aplicado da seguinte forma:
agradável
A escala de "gentileza" vai de -20 a 19, enquanto -20 é a prioridade mais alta e 19 a prioridade mais baixa. O nível de prioridade é calculado da seguinte forma:
PR = 20 + NI
Onde NI é o bom nível e PR é o nível de prioridade. Então, como podemos ver, o -20 é mapeado para 0, enquanto o 19 é mapeado para 39.
Por padrão, um valor agradável do programa é 0, mas é possível que o usuário root inicie programas com um valor agradável especificado usando o seguinte comando:
nice -n <nice_value> ./myProgram
Tempo real
Poderíamos ir ainda mais longe. A boa prioridade é realmente usada para programas do usuário. Enquanto a prioridade geral do UNIX / LINUX possui um intervalo de 140 valores, o valor agradável permite que o processo seja mapeado para a última parte do intervalo (de 100 a 139). Essa equação deixa os valores de 0 a 99 inacessíveis, que corresponderão a um nível PR negativo (de -100 a -1). Para poder acessar esses valores, o processo deve ser declarado como "tempo real".
Existem 5 políticas de agendamento em um ambiente LINUX que podem ser exibidas com o seguinte comando:
chrt -m
O que mostrará a seguinte lista:
1. SCHED_OTHER the standard round-robin time-sharing policy
2. SCHED_BATCH for "batch" style execution of processes
3. SCHED_IDLE for running very low priority background jobs.
4. SCHED_FIFO a first-in, first-out policy
5. SCHED_RR a round-robin policy
Os processos de agendamento podem ser divididos em 2 grupos, as políticas normais de agendamento (1 a 3) e as políticas de agendamento em tempo real (4 e 5). Os processos em tempo real sempre terão prioridade sobre os processos normais. Um processo em tempo real pode ser chamado usando o seguinte comando (O exemplo é como declarar uma política SCHED_RR):
chrt --rr <priority between 1-99> ./myProgram
Para obter o valor PR para um processo em tempo real, a seguinte equação é aplicada:
PR = -1 - rt_prior
Onde rt_prior corresponde à prioridade entre 1 e 99. Por esse motivo, o processo que terá maior prioridade sobre outros processos será aquele chamado com o número 99.
É importante observar que, para processos em tempo real, o bom valor não é usado.
Para ver a atual "gentileza" e o valor PR de um processo, o seguinte comando pode ser executado:
top
O que mostra a seguinte saída:
Na figura, os valores PR e NI são exibidos. É bom observar o processo com o valor PR -51 que corresponde a um valor em tempo real. Existem também alguns processos cujo valor PR é declarado como "rt". Na verdade, esse valor corresponde a um valor PR de -100.
niceness
podem ser usados para dar uma prioridade negativa, de modo que a tarefa com aniceness
saída de tarefas de alta prioridade fique fora do caminho. (ou seja, ele está sendonice
e deixando outros recursos de acesso ou se isso só me confundir?