Prioridade de operações de kernel geradas por thread

0

As operações no nível do kernel do Linux (como operações de E / S no sistema de arquivos ou comunicações em uma interface ethernet) herdam a prioridade do encadeamento que as acionou ou são executadas em uma prioridade separada enquanto o encadeamento de chamada produz?

Por exemplo, digamos que eu crie um thread que tenha uma diretiva de SCHED_FIFO e uma prioridade de 99 (a mais alta), que não faz nada além de sentar em um loop fechado e enviar um byte único para uma porta serial. Vamos chamar este tópico SERIAL_THREAD.

Digamos que eu crie um segundo thread que tenha uma política de SCHED_FIFO e uma prioridade de 98, que não faz nada além de sentar em um loop fechado e enviar o mesmo pacote IP de TCP. Vamos chamar esse segmento de IP_THREAD.

Vamos supor também que o sistema tenha um único núcleo, e que o afogamento do encadeamento tenha sido desabilitado para que um encadeamento consiga consumir 100% dos recursos da CPU do sistema, bloqueando qualquer outra coisa que aconteça.

Regularmente, dado que SERIAL_THREAD tem a maior prioridade no sistema, e nunca explicitamente rende ao thread de menor prioridade, eu esperaria que o IP_THREAD nunca seria capaz de enviar seus pacotes TCP-IP. No entanto, como o segmento interage com um dispositivo IO através do kernel, não tenho certeza se o IP_THREAD terá ou não alguma oportunidade de ser executado.

    
por Echo404 28.09.2017 / 17:48

1 resposta

1

O encadeamento em tempo real de alta prioridade pode bloquear totalmente todas as outras atividades nesse circuito fechado sem retorno (a menos que os bloqueios de E / S de alguma forma)

SCHED_FIFO implements a simple first-in, first-out scheduling algorithm without timeslices. A runnable SCHED_FIFO task is always scheduled over any SCHED_NORMAL tasks. When a SCHED_FIFO task becomes runnable, it continues to run until it blocks or explicitly yields the processor; it has no timeslice and can run indefinitely.

Robert Love. Desenvolvimento do Kernel Linux (Terceira Edição). p. 64.

E para uma possível próxima pergunta:

Two or more SCHED_FIFO tasks at the same priority run round-robin, but again only yielding the processor when they explicitly choose to

    
por 28.09.2017 / 18:34