Resposta curta
PR é o nível de prioridade. Quanto menor o PR, maior a prioridade do processo.
O PR é calculado da seguinte forma:
- para processos normais: PR = 20 + NI (o 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)
Longa resposta
Existem 2 tipos de processos, os normais e os tempo real
Para os normais (e apenas para aqueles), nice é aplicado da seguinte forma:
Nice
A escala de "bondade" vai de -20 a 19, enquanto que -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 nível bom e PR é o nível de prioridade. Então, como podemos ver, o -20 realmente mapeia para 0, enquanto o 19 mapeia para 39.
Por padrão, um valor legal do programa é 0, mas é possível que o usuário raiz inicie programas com um valor legal 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, um valor interessante 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, o que corresponderá a um nível de 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
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 de 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 essa razão, o processo que terá maior prioridade sobre outros processos será o chamado com o número 99.
É importante notar que, para processos em tempo real, o bom valor não é usado.
Para ver a atual "niceness" e o valor PR de um processo, o seguinte comando pode ser executado:
top
Que mostra a seguinte saída:
Nafigura,osvaloresPReNIsãoexibidos.ÉbomobservaroprocessocomovalorPR-51quecorrespondeaumvaloremtemporeal.ExistemtambémalgunsprocessoscujovalorPRédeclaradocomo"rt". Este valor corresponde realmente a um valor de PR de -100.