tasklets linux - ordem de execução
-
26-12-2019 - |
Pergunta
Na minha universidade estou trabalhando em um projeto que envolve alguma programação de kernel.Uma parte disso é o módulo carregável do kernel que registra o manipulador de interrupção para uma determinada interrupção.
Agora compartilhei a estrutura de dados usada pelo manipulador de interrupções e pelos tasklets e estou me perguntando se posso ter certeza de que os tasklets são executados na mesma ordem em que foram agendados ou é indefinido?
Por exemplo, meu manipulador de interrupção é chamado às vezes t1
e tempo t2
, cada invocação é executada tasklet_schedule(&customTasklet);
.Agora, posso ter certeza de que o tasklet que foi agendado na hora t1
será executado primeiro?
Solução
Agendado tasklet
são armazenados em uma lista;o sistema leu esta lista em FIFO ordem, então:sim t1
é executado antes t2
.
Aqui algum código para entender o mecanismo.
editar
Como lembrado por CL, existe uma lista de tasklets para cada CPU;portanto, quando você agenda um tasklet, você o agenda na CPU ativa.Portanto, os tasklets são serializados na mesma CPU.Se você agendar t1
uma CPU1 e t2
na CPU2 pode acontecer que t2
é executado antes t1
.